From 9d3af972f516b6ba38d2736ce2016e34a452d569 Mon Sep 17 00:00:00 2001 From: Amar Tumballi Date: Tue, 20 Mar 2012 17:22:24 +0530 Subject: core: adding extra data for fops with this change, the xlator APIs will have a dictionary as extra argument, which is passed between all the layers. This can be utilized for overloading in some of the operations. Change-Id: I58a8186b3ef647650280e63f3e5e9b9de7827b40 Signed-off-by: Amar Tumballi BUG: 782265 Reviewed-on: http://review.gluster.com/2960 Tested-by: Gluster Build System Reviewed-by: Anand Avati --- rpc/xdr/src/glusterfs3-xdr.c | 73 +++++++++++++++++++++++++++++++++++--------- rpc/xdr/src/glusterfs3-xdr.h | 32 ++++--------------- rpc/xdr/src/glusterfs3-xdr.x | 18 +++++------ 3 files changed, 72 insertions(+), 51 deletions(-) (limited to 'rpc') diff --git a/rpc/xdr/src/glusterfs3-xdr.c b/rpc/xdr/src/glusterfs3-xdr.c index 47d7328db28..5dffda3e070 100644 --- a/rpc/xdr/src/glusterfs3-xdr.c +++ b/rpc/xdr/src/glusterfs3-xdr.c @@ -317,9 +317,9 @@ xdr_gfs3_mknod_req (XDR *xdrs, gfs3_mknod_req *objp) return FALSE; if (!xdr_u_int (xdrs, &objp->mode)) return FALSE; - if (!xdr_string (xdrs, &objp->bname, ~0)) + if (!xdr_u_int (xdrs, &objp->umask)) return FALSE; - if (!xdr_bytes (xdrs, (char **)&objp->dict.dict_val, (u_int *) &objp->dict.dict_len, ~0)) + if (!xdr_string (xdrs, &objp->bname, ~0)) return FALSE; if (!xdr_bytes (xdrs, (char **)&objp->xdata.xdata_val, (u_int *) &objp->xdata.xdata_len, ~0)) return FALSE; @@ -357,9 +357,9 @@ xdr_gfs3_mkdir_req (XDR *xdrs, gfs3_mkdir_req *objp) return FALSE; if (!xdr_u_int (xdrs, &objp->mode)) return FALSE; - if (!xdr_string (xdrs, &objp->bname, ~0)) + if (!xdr_u_int (xdrs, &objp->umask)) return FALSE; - if (!xdr_bytes (xdrs, (char **)&objp->dict.dict_val, (u_int *) &objp->dict.dict_len, ~0)) + if (!xdr_string (xdrs, &objp->bname, ~0)) return FALSE; if (!xdr_bytes (xdrs, (char **)&objp->xdata.xdata_val, (u_int *) &objp->xdata.xdata_len, ~0)) return FALSE; @@ -397,6 +397,8 @@ xdr_gfs3_unlink_req (XDR *xdrs, gfs3_unlink_req *objp) return FALSE; if (!xdr_string (xdrs, &objp->bname, ~0)) return FALSE; + if (!xdr_u_int (xdrs, &objp->xflags)) + return FALSE; if (!xdr_bytes (xdrs, (char **)&objp->xdata.xdata_val, (u_int *) &objp->xdata.xdata_len, ~0)) return FALSE; return TRUE; @@ -429,7 +431,7 @@ xdr_gfs3_rmdir_req (XDR *xdrs, gfs3_rmdir_req *objp) if (!xdr_opaque (xdrs, objp->pargfid, 16)) return FALSE; - if (!xdr_int (xdrs, &objp->flags)) + if (!xdr_int (xdrs, &objp->xflags)) return FALSE; if (!xdr_string (xdrs, &objp->bname, ~0)) return FALSE; @@ -467,9 +469,9 @@ xdr_gfs3_symlink_req (XDR *xdrs, gfs3_symlink_req *objp) return FALSE; if (!xdr_string (xdrs, &objp->bname, ~0)) return FALSE; - if (!xdr_string (xdrs, &objp->linkname, ~0)) + if (!xdr_u_int (xdrs, &objp->umask)) return FALSE; - if (!xdr_bytes (xdrs, (char **)&objp->dict.dict_val, (u_int *) &objp->dict.dict_len, ~0)) + if (!xdr_string (xdrs, &objp->linkname, ~0)) return FALSE; if (!xdr_bytes (xdrs, (char **)&objp->xdata.xdata_val, (u_int *) &objp->xdata.xdata_len, ~0)) return FALSE; @@ -623,8 +625,6 @@ xdr_gfs3_open_req (XDR *xdrs, gfs3_open_req *objp) return FALSE; if (!xdr_u_int (xdrs, &objp->flags)) return FALSE; - if (!xdr_u_int (xdrs, &objp->wbflags)) - return FALSE; if (!xdr_bytes (xdrs, (char **)&objp->xdata.xdata_val, (u_int *) &objp->xdata.xdata_len, ~0)) return FALSE; return TRUE; @@ -701,8 +701,6 @@ xdr_gfs3_lookup_req (XDR *xdrs, gfs3_lookup_req *objp) return FALSE; if (!xdr_string (xdrs, &objp->bname, ~0)) return FALSE; - if (!xdr_bytes (xdrs, (char **)&objp->dict.dict_val, (u_int *) &objp->dict.dict_len, ~0)) - return FALSE; if (!xdr_bytes (xdrs, (char **)&objp->xdata.xdata_val, (u_int *) &objp->xdata.xdata_len, ~0)) return FALSE; return TRUE; @@ -722,8 +720,6 @@ xdr_gfs3_lookup_rsp (XDR *xdrs, gfs3_lookup_rsp *objp) return FALSE; if (!xdr_gf_iatt (xdrs, &objp->postparent)) return FALSE; - if (!xdr_bytes (xdrs, (char **)&objp->dict.dict_val, (u_int *) &objp->dict.dict_len, ~0)) - return FALSE; if (!xdr_bytes (xdrs, (char **)&objp->xdata.xdata_val, (u_int *) &objp->xdata.xdata_len, ~0)) return FALSE; return TRUE; @@ -1272,15 +1268,62 @@ xdr_gfs3_create_req (XDR *xdrs, gfs3_create_req *objp) register int32_t *buf; buf = NULL; + + if (xdrs->x_op == XDR_ENCODE) { + if (!xdr_opaque (xdrs, objp->pargfid, 16)) + return FALSE; + buf = XDR_INLINE (xdrs, 3 * BYTES_PER_XDR_UNIT); + if (buf == NULL) { + if (!xdr_u_int (xdrs, &objp->flags)) + return FALSE; + if (!xdr_u_int (xdrs, &objp->mode)) + return FALSE; + if (!xdr_u_int (xdrs, &objp->umask)) + return FALSE; + + } else { + IXDR_PUT_U_LONG(buf, objp->flags); + IXDR_PUT_U_LONG(buf, objp->mode); + IXDR_PUT_U_LONG(buf, objp->umask); + } + if (!xdr_string (xdrs, &objp->bname, ~0)) + return FALSE; + if (!xdr_bytes (xdrs, (char **)&objp->xdata.xdata_val, (u_int *) &objp->xdata.xdata_len, ~0)) + return FALSE; + return TRUE; + } else if (xdrs->x_op == XDR_DECODE) { + if (!xdr_opaque (xdrs, objp->pargfid, 16)) + return FALSE; + buf = XDR_INLINE (xdrs, 3 * BYTES_PER_XDR_UNIT); + if (buf == NULL) { + if (!xdr_u_int (xdrs, &objp->flags)) + return FALSE; + if (!xdr_u_int (xdrs, &objp->mode)) + return FALSE; + if (!xdr_u_int (xdrs, &objp->umask)) + return FALSE; + + } else { + objp->flags = IXDR_GET_U_LONG(buf); + objp->mode = IXDR_GET_U_LONG(buf); + objp->umask = IXDR_GET_U_LONG(buf); + } + if (!xdr_string (xdrs, &objp->bname, ~0)) + return FALSE; + if (!xdr_bytes (xdrs, (char **)&objp->xdata.xdata_val, (u_int *) &objp->xdata.xdata_len, ~0)) + return FALSE; + return TRUE; + } + if (!xdr_opaque (xdrs, objp->pargfid, 16)) return FALSE; if (!xdr_u_int (xdrs, &objp->flags)) return FALSE; if (!xdr_u_int (xdrs, &objp->mode)) return FALSE; - if (!xdr_string (xdrs, &objp->bname, ~0)) + if (!xdr_u_int (xdrs, &objp->umask)) return FALSE; - if (!xdr_bytes (xdrs, (char **)&objp->dict.dict_val, (u_int *) &objp->dict.dict_len, ~0)) + if (!xdr_string (xdrs, &objp->bname, ~0)) return FALSE; if (!xdr_bytes (xdrs, (char **)&objp->xdata.xdata_val, (u_int *) &objp->xdata.xdata_len, ~0)) return FALSE; diff --git a/rpc/xdr/src/glusterfs3-xdr.h b/rpc/xdr/src/glusterfs3-xdr.h index 49e9d6cc0b4..124b21e2266 100644 --- a/rpc/xdr/src/glusterfs3-xdr.h +++ b/rpc/xdr/src/glusterfs3-xdr.h @@ -137,11 +137,8 @@ struct gfs3_mknod_req { char pargfid[16]; u_quad_t dev; u_int mode; + u_int umask; char *bname; - struct { - u_int dict_len; - char *dict_val; - } dict; struct { u_int xdata_len; char *xdata_val; @@ -165,11 +162,8 @@ typedef struct gfs3_mknod_rsp gfs3_mknod_rsp; struct gfs3_mkdir_req { char pargfid[16]; u_int mode; + u_int umask; char *bname; - struct { - u_int dict_len; - char *dict_val; - } dict; struct { u_int xdata_len; char *xdata_val; @@ -193,6 +187,7 @@ typedef struct gfs3_mkdir_rsp gfs3_mkdir_rsp; struct gfs3_unlink_req { char pargfid[16]; char *bname; + u_int xflags; struct { u_int xdata_len; char *xdata_val; @@ -214,7 +209,7 @@ typedef struct gfs3_unlink_rsp gfs3_unlink_rsp; struct gfs3_rmdir_req { char pargfid[16]; - int flags; + int xflags; char *bname; struct { u_int xdata_len; @@ -238,11 +233,8 @@ typedef struct gfs3_rmdir_rsp gfs3_rmdir_rsp; struct gfs3_symlink_req { char pargfid[16]; char *bname; + u_int umask; char *linkname; - struct { - u_int dict_len; - char *dict_val; - } dict; struct { u_int xdata_len; char *xdata_val; @@ -339,7 +331,6 @@ typedef struct gfs3_truncate_rsp gfs3_truncate_rsp; struct gfs3_open_req { char gfid[16]; u_int flags; - u_int wbflags; struct { u_int xdata_len; char *xdata_val; @@ -388,10 +379,6 @@ struct gfs3_lookup_req { char pargfid[16]; u_int flags; char *bname; - struct { - u_int dict_len; - char *dict_val; - } dict; struct { u_int xdata_len; char *xdata_val; @@ -404,10 +391,6 @@ struct gfs3_lookup_rsp { int op_errno; struct gf_iatt stat; struct gf_iatt postparent; - struct { - u_int dict_len; - char *dict_val; - } dict; struct { u_int xdata_len; char *xdata_val; @@ -789,11 +772,8 @@ struct gfs3_create_req { char pargfid[16]; u_int flags; u_int mode; + u_int umask; char *bname; - struct { - u_int dict_len; - char *dict_val; - } dict; struct { u_int xdata_len; char *xdata_val; diff --git a/rpc/xdr/src/glusterfs3-xdr.x b/rpc/xdr/src/glusterfs3-xdr.x index f35820b57cb..64c2d206113 100644 --- a/rpc/xdr/src/glusterfs3-xdr.x +++ b/rpc/xdr/src/glusterfs3-xdr.x @@ -73,8 +73,8 @@ struct gfs3_readlink_req { opaque pargfid[16]; unsigned hyper dev; unsigned int mode; + unsigned int umask; string bname<>; /* NULL terminated */ - opaque dict<>; opaque xdata<>; /* Extra data */ } ; struct gfs3_mknod_rsp { @@ -90,9 +90,9 @@ struct gfs3_readlink_req { struct gfs3_mkdir_req { opaque pargfid[16]; unsigned int mode; + unsigned int umask; string bname<>; /* NULL terminated */ - opaque dict<>; - opaque xdata<>; /* Extra data */ + opaque xdata<>; /* Extra data */ } ; struct gfs3_mkdir_rsp { int op_ret; @@ -107,6 +107,7 @@ struct gfs3_readlink_req { struct gfs3_unlink_req { opaque pargfid[16]; string bname<>; /* NULL terminated */ + unsigned int xflags; opaque xdata<>; /* Extra data */ }; struct gfs3_unlink_rsp { @@ -120,9 +121,9 @@ struct gfs3_readlink_req { struct gfs3_rmdir_req { opaque pargfid[16]; - int flags; + int xflags; string bname<>; /* NULL terminated */ - opaque xdata<>; /* Extra data */ + opaque xdata<>; /* Extra data */ }; struct gfs3_rmdir_rsp { int op_ret; @@ -136,8 +137,8 @@ struct gfs3_readlink_req { struct gfs3_symlink_req { opaque pargfid[16]; string bname<>; + unsigned int umask; string linkname<>; - opaque dict<>; opaque xdata<>; /* Extra data */ }; struct gfs3_symlink_rsp { @@ -201,7 +202,6 @@ struct gfs3_readlink_req { struct gfs3_open_req { opaque gfid[16]; unsigned int flags; - unsigned int wbflags; opaque xdata<>; /* Extra data */ }; struct gfs3_open_rsp { @@ -233,7 +233,6 @@ struct gfs3_lookup_req { opaque pargfid[16]; unsigned int flags; string bname<>; - opaque dict<>; opaque xdata<>; /* Extra data */ }; struct gfs3_lookup_rsp { @@ -241,7 +240,6 @@ struct gfs3_lookup_req { int op_errno; struct gf_iatt stat; struct gf_iatt postparent; - opaque dict<>; opaque xdata<>; /* Extra data */ } ; @@ -482,8 +480,8 @@ struct gfs3_create_req { opaque pargfid[16]; unsigned int flags; unsigned int mode; + unsigned int umask; string bname<>; - opaque dict<>; opaque xdata<>; /* Extra data */ } ; struct gfs3_create_rsp { -- cgit