diff options
| author | Amar Tumballi <amarts@redhat.com> | 2012-03-20 17:22:24 +0530 | 
|---|---|---|
| committer | Anand Avati <avati@redhat.com> | 2012-03-22 16:40:27 -0700 | 
| commit | 9d3af972f516b6ba38d2736ce2016e34a452d569 (patch) | |
| tree | 1dcdc620748a42cdfb5464c3adaae5a4a3a6f869 /rpc | |
| parent | afe542eca18888463798747d2a95e5a9d239a4a0 (diff) | |
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 <amarts@redhat.com>
BUG: 782265
Reviewed-on: http://review.gluster.com/2960
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Anand Avati <avati@redhat.com>
Diffstat (limited to 'rpc')
| -rw-r--r-- | rpc/xdr/src/glusterfs3-xdr.c | 73 | ||||
| -rw-r--r-- | rpc/xdr/src/glusterfs3-xdr.h | 32 | ||||
| -rw-r--r-- | rpc/xdr/src/glusterfs3-xdr.x | 18 | 
3 files changed, 72 insertions, 51 deletions
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,12 +137,9 @@ 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;  	} xdata; @@ -165,12 +162,9 @@ 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;  	} xdata; @@ -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,12 +233,9 @@ 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;  	} xdata; @@ -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; @@ -389,10 +380,6 @@ struct gfs3_lookup_req {  	u_int flags;  	char *bname;  	struct { -		u_int dict_len; -		char *dict_val; -	} dict; -	struct {  		u_int xdata_len;  		char *xdata_val;  	} xdata; @@ -405,10 +392,6 @@ struct gfs3_lookup_rsp {  	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;  	} xdata; @@ -789,12 +772,9 @@ 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;  	} xdata; 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 {  | 
