diff options
| author | Brian Foster <bfoster@redhat.com> | 2013-05-08 08:54:11 -0400 | 
|---|---|---|
| committer | Anand Avati <avati@redhat.com> | 2013-06-13 14:37:21 -0700 | 
| commit | d1ccc4e400728d90f2ef7904661f53deb7199123 (patch) | |
| tree | 1c491d1932795d85941861fa683431ee22608668 /rpc/xdr/src | |
| parent | 328ea4b16a276b0e65ca719f60b82ce851dda848 (diff) | |
gluster: add fallocate fop support
Implement support for the fallocate file operation. fallocate
allocates blocks for a particular inode such that future writes
to the associated region of the file are guaranteed not to fail
with ENOSPC.
This patch adds fallocate support to the following areas:
	- libglusterfs
	- mount/fuse
	- io-stats
	- performance/md-cache,open-behind
	- quota
	- cluster/afr,dht,stripe
	- rpc/xdr
	- protocol/client,server
	- io-threads
	- marker
	- storage/posix
	- libgfapi
BUG: 949242
Change-Id: Ice8e61351f9d6115c5df68768bc844abbf0ce8bd
Signed-off-by: Brian Foster <bfoster@redhat.com>
Reviewed-on: http://review.gluster.org/4969
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Anand Avati <avati@redhat.com>
Diffstat (limited to 'rpc/xdr/src')
| -rw-r--r-- | rpc/xdr/src/glusterfs3-xdr.c | 40 | ||||
| -rw-r--r-- | rpc/xdr/src/glusterfs3-xdr.h | 29 | ||||
| -rw-r--r-- | rpc/xdr/src/glusterfs3-xdr.x | 17 | 
3 files changed, 86 insertions, 0 deletions
diff --git a/rpc/xdr/src/glusterfs3-xdr.c b/rpc/xdr/src/glusterfs3-xdr.c index a502b2ea16c..2ce0b84ede9 100644 --- a/rpc/xdr/src/glusterfs3-xdr.c +++ b/rpc/xdr/src/glusterfs3-xdr.c @@ -1507,6 +1507,46 @@ xdr_gfs3_fsetattr_rsp (XDR *xdrs, gfs3_fsetattr_rsp *objp)  }  bool_t +xdr_gfs3_fallocate_req (XDR *xdrs, gfs3_fallocate_req *objp) +{ +	register int32_t *buf; +        buf = NULL; + +	 if (!xdr_opaque (xdrs, objp->gfid, 16)) +		 return FALSE; +	 if (!xdr_quad_t (xdrs, &objp->fd)) +		 return FALSE; +	 if (!xdr_u_int (xdrs, &objp->flags)) +		 return FALSE; +	 if (!xdr_u_quad_t (xdrs, &objp->offset)) +		 return FALSE; +	 if (!xdr_u_quad_t (xdrs, &objp->size)) +		 return FALSE; +	 if (!xdr_bytes (xdrs, (char **)&objp->xdata.xdata_val, (u_int *) &objp->xdata.xdata_len, ~0)) +		 return FALSE; +	return TRUE; +} + +bool_t +xdr_gfs3_fallocate_rsp (XDR *xdrs, gfs3_fallocate_rsp *objp) +{ +	register int32_t *buf; +        buf = NULL; + +	 if (!xdr_int (xdrs, &objp->op_ret)) +		 return FALSE; +	 if (!xdr_int (xdrs, &objp->op_errno)) +		 return FALSE; +	 if (!xdr_gf_iatt (xdrs, &objp->statpre)) +		 return FALSE; +	 if (!xdr_gf_iatt (xdrs, &objp->statpost)) +		 return FALSE; +	 if (!xdr_bytes (xdrs, (char **)&objp->xdata.xdata_val, (u_int *) &objp->xdata.xdata_len, ~0)) +		 return FALSE; +	return TRUE; +} + +bool_t  xdr_gfs3_rchecksum_req (XDR *xdrs, gfs3_rchecksum_req *objp)  {  	register int32_t *buf; diff --git a/rpc/xdr/src/glusterfs3-xdr.h b/rpc/xdr/src/glusterfs3-xdr.h index 0268d1a144a..2f9ba4b4552 100644 --- a/rpc/xdr/src/glusterfs3-xdr.h +++ b/rpc/xdr/src/glusterfs3-xdr.h @@ -887,6 +887,31 @@ struct gfs3_fsetattr_rsp {  };  typedef struct gfs3_fsetattr_rsp gfs3_fsetattr_rsp; +struct gfs3_fallocate_req { +	char gfid[16]; +	quad_t fd; +	u_int flags; +	u_quad_t offset; +	u_quad_t size; +	struct { +		u_int xdata_len; +		char *xdata_val; +	} xdata; +}; +typedef struct gfs3_fallocate_req gfs3_fallocate_req; + +struct gfs3_fallocate_rsp { +	int op_ret; +	int op_errno; +	struct gf_iatt statpre; +	struct gf_iatt statpost; +	struct { +		u_int xdata_len; +		char *xdata_val; +	} xdata; +}; +typedef struct gfs3_fallocate_rsp gfs3_fallocate_rsp; +  struct gfs3_rchecksum_req {  	quad_t fd;  	u_quad_t offset; @@ -1182,6 +1207,8 @@ extern  bool_t xdr_gfs3_setattr_req (XDR *, gfs3_setattr_req*);  extern  bool_t xdr_gfs3_setattr_rsp (XDR *, gfs3_setattr_rsp*);  extern  bool_t xdr_gfs3_fsetattr_req (XDR *, gfs3_fsetattr_req*);  extern  bool_t xdr_gfs3_fsetattr_rsp (XDR *, gfs3_fsetattr_rsp*); +extern  bool_t xdr_gfs3_fallocate_req (XDR *, gfs3_fallocate_req*); +extern  bool_t xdr_gfs3_fallocate_rsp (XDR *, gfs3_fallocate_rsp*);  extern  bool_t xdr_gfs3_rchecksum_req (XDR *, gfs3_rchecksum_req*);  extern  bool_t xdr_gfs3_rchecksum_rsp (XDR *, gfs3_rchecksum_rsp*);  extern  bool_t xdr_gf_setvolume_req (XDR *, gf_setvolume_req*); @@ -1276,6 +1303,8 @@ extern bool_t xdr_gfs3_setattr_req ();  extern bool_t xdr_gfs3_setattr_rsp ();  extern bool_t xdr_gfs3_fsetattr_req ();  extern bool_t xdr_gfs3_fsetattr_rsp (); +extern bool_t xdr_gfs3_fallocate_req (); +extern bool_t xdr_gfs3_fallocate_rsp ();  extern bool_t xdr_gfs3_rchecksum_req ();  extern bool_t xdr_gfs3_rchecksum_rsp ();  extern bool_t xdr_gf_setvolume_req (); diff --git a/rpc/xdr/src/glusterfs3-xdr.x b/rpc/xdr/src/glusterfs3-xdr.x index 063f302d933..7fad58336a6 100644 --- a/rpc/xdr/src/glusterfs3-xdr.x +++ b/rpc/xdr/src/glusterfs3-xdr.x @@ -566,6 +566,23 @@ struct gfs3_fstat_req {          opaque   xdata<>; /* Extra data */  }  ; + struct gfs3_fallocate_req { +	opaque		gfid[16]; +        hyper		fd; +	unsigned int	flags; +	unsigned hyper	offset; +	unsigned hyper	size; +        opaque   xdata<>; /* Extra data */ +}  ; + + struct gfs3_fallocate_rsp { +        int    op_ret; +        int    op_errno; +        struct gf_iatt statpre; +        struct gf_iatt statpost; +        opaque   xdata<>; /* Extra data */ +}  ; +   struct gfs3_rchecksum_req {          hyper   fd;          unsigned hyper  offset;  | 
