Re: [PATCH v2 02/17] NFS: Create a common results structure for reads and writes

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, 25 Apr 2014 16:55:45 -0400
Anna Schumaker <Anna.Schumaker@xxxxxxxxxx> wrote:

> From: Anna Schumaker <Anna.Schumaker@xxxxxxxxxx>
> 
> Reads and writes have very similar results.  This patch combines the two
> structs together with comments to show where the differing fields are
> used.
> 
> Signed-off-by: Anna Schumaker <Anna.Schumaker@xxxxxxxxxx>
> 
> v2:
> - Move the write-only variables to the end of the struct
> 
> TODO:
> - Consider making a union for read and write variables

ACK. That would reduce the size a little, but that cleanup could be done later.

> ---
>  fs/nfs/nfs2xdr.c        |  6 +++---
>  fs/nfs/nfs3xdr.c        |  8 ++++----
>  fs/nfs/nfs4xdr.c        |  9 +++++----
>  fs/nfs/read.c           |  2 +-
>  fs/nfs/write.c          |  2 +-
>  include/linux/nfs_xdr.h | 32 ++++++++++++--------------------
>  6 files changed, 26 insertions(+), 33 deletions(-)
> 
> diff --git a/fs/nfs/nfs2xdr.c b/fs/nfs/nfs2xdr.c
> index 461cd8b..5f61b83 100644
> --- a/fs/nfs/nfs2xdr.c
> +++ b/fs/nfs/nfs2xdr.c
> @@ -103,7 +103,7 @@ static void print_overflow_msg(const char *func, const struct xdr_stream *xdr)
>  /*
>   *	typedef opaque	nfsdata<>;
>   */
> -static int decode_nfsdata(struct xdr_stream *xdr, struct nfs_readres *result)
> +static int decode_nfsdata(struct xdr_stream *xdr, struct nfs_pgio_res *result)
>  {
>  	u32 recvd, count;
>  	__be32 *p;
> @@ -857,7 +857,7 @@ out_default:
>   *	};
>   */
>  static int nfs2_xdr_dec_readres(struct rpc_rqst *req, struct xdr_stream *xdr,
> -				struct nfs_readres *result)
> +				struct nfs_pgio_res *result)
>  {
>  	enum nfs_stat status;
>  	int error;
> @@ -878,7 +878,7 @@ out_default:
>  }
>  
>  static int nfs2_xdr_dec_writeres(struct rpc_rqst *req, struct xdr_stream *xdr,
> -				 struct nfs_writeres *result)
> +				 struct nfs_pgio_res *result)
>  {
>  	/* All NFSv2 writes are "file sync" writes */
>  	result->verf->committed = NFS_FILE_SYNC;
> diff --git a/fs/nfs/nfs3xdr.c b/fs/nfs/nfs3xdr.c
> index 02f16c2..8f4cbe7 100644
> --- a/fs/nfs/nfs3xdr.c
> +++ b/fs/nfs/nfs3xdr.c
> @@ -1589,7 +1589,7 @@ out_default:
>   *	};
>   */
>  static int decode_read3resok(struct xdr_stream *xdr,
> -			     struct nfs_readres *result)
> +			     struct nfs_pgio_res *result)
>  {
>  	u32 eof, count, ocount, recvd;
>  	__be32 *p;
> @@ -1625,7 +1625,7 @@ out_overflow:
>  }
>  
>  static int nfs3_xdr_dec_read3res(struct rpc_rqst *req, struct xdr_stream *xdr,
> -				 struct nfs_readres *result)
> +				 struct nfs_pgio_res *result)
>  {
>  	enum nfs_stat status;
>  	int error;
> @@ -1673,7 +1673,7 @@ out_status:
>   *	};
>   */
>  static int decode_write3resok(struct xdr_stream *xdr,
> -			      struct nfs_writeres *result)
> +			      struct nfs_pgio_res *result)
>  {
>  	__be32 *p;
>  
> @@ -1697,7 +1697,7 @@ out_eio:
>  }
>  
>  static int nfs3_xdr_dec_write3res(struct rpc_rqst *req, struct xdr_stream *xdr,
> -				  struct nfs_writeres *result)
> +				  struct nfs_pgio_res *result)
>  {
>  	enum nfs_stat status;
>  	int error;
> diff --git a/fs/nfs/nfs4xdr.c b/fs/nfs/nfs4xdr.c
> index 032159c..939ae60 100644
> --- a/fs/nfs/nfs4xdr.c
> +++ b/fs/nfs/nfs4xdr.c
> @@ -5087,7 +5087,8 @@ static int decode_putrootfh(struct xdr_stream *xdr)
>  	return decode_op_hdr(xdr, OP_PUTROOTFH);
>  }
>  
> -static int decode_read(struct xdr_stream *xdr, struct rpc_rqst *req, struct nfs_readres *res)
> +static int decode_read(struct xdr_stream *xdr, struct rpc_rqst *req,
> +		       struct nfs_pgio_res *res)
>  {
>  	__be32 *p;
>  	uint32_t count, eof, recvd;
> @@ -5341,7 +5342,7 @@ static int decode_setclientid_confirm(struct xdr_stream *xdr)
>  	return decode_op_hdr(xdr, OP_SETCLIENTID_CONFIRM);
>  }
>  
> -static int decode_write(struct xdr_stream *xdr, struct nfs_writeres *res)
> +static int decode_write(struct xdr_stream *xdr, struct nfs_pgio_res *res)
>  {
>  	__be32 *p;
>  	int status;
> @@ -6638,7 +6639,7 @@ out:
>   * Decode Read response
>   */
>  static int nfs4_xdr_dec_read(struct rpc_rqst *rqstp, struct xdr_stream *xdr,
> -			     struct nfs_readres *res)
> +			     struct nfs_pgio_res *res)
>  {
>  	struct compound_hdr hdr;
>  	int status;
> @@ -6663,7 +6664,7 @@ out:
>   * Decode WRITE response
>   */
>  static int nfs4_xdr_dec_write(struct rpc_rqst *rqstp, struct xdr_stream *xdr,
> -			      struct nfs_writeres *res)
> +			      struct nfs_pgio_res *res)
>  {
>  	struct compound_hdr hdr;
>  	int status;
> diff --git a/fs/nfs/read.c b/fs/nfs/read.c
> index 46d5552..473bba3 100644
> --- a/fs/nfs/read.c
> +++ b/fs/nfs/read.c
> @@ -471,7 +471,7 @@ int nfs_readpage_result(struct rpc_task *task, struct nfs_read_data *data)
>  static void nfs_readpage_retry(struct rpc_task *task, struct nfs_read_data *data)
>  {
>  	struct nfs_pgio_args *argp = &data->args;
> -	struct nfs_readres *resp = &data->res;
> +	struct nfs_pgio_res  *resp = &data->res;
>  
>  	/* This is a short read! */
>  	nfs_inc_stats(data->header->inode, NFSIOS_SHORTREAD);
> diff --git a/fs/nfs/write.c b/fs/nfs/write.c
> index 25ba383..d392a70 100644
> --- a/fs/nfs/write.c
> +++ b/fs/nfs/write.c
> @@ -1389,7 +1389,7 @@ static int nfs_should_remove_suid(const struct inode *inode)
>  void nfs_writeback_done(struct rpc_task *task, struct nfs_write_data *data)
>  {
>  	struct nfs_pgio_args	*argp = &data->args;
> -	struct nfs_writeres	*resp = &data->res;
> +	struct nfs_pgio_res	*resp = &data->res;
>  	struct inode		*inode = data->header->inode;
>  	int status;
>  
> diff --git a/include/linux/nfs_xdr.h b/include/linux/nfs_xdr.h
> index 5875001..381f832 100644
> --- a/include/linux/nfs_xdr.h
> +++ b/include/linux/nfs_xdr.h
> @@ -489,16 +489,6 @@ struct nfs4_delegreturnres {
>  };
>  
>  /*
> - * Arguments to the read call.
> - */
> -struct nfs_readres {
> -	struct nfs4_sequence_res	seq_res;
> -	struct nfs_fattr *	fattr;
> -	__u32			count;
> -	int                     eof;
> -};
> -
> -/*
>   * Arguments to the write call.
>   */
>  struct nfs_write_verifier {
> @@ -510,14 +500,6 @@ struct nfs_writeverf {
>  	enum nfs3_stable_how	committed;
>  };
>  
> -struct nfs_writeres {
> -	struct nfs4_sequence_res	seq_res;
> -	struct nfs_fattr *	fattr;
> -	struct nfs_writeverf *	verf;
> -	__u32			count;
> -	const struct nfs_server *server;
> -};
> -
>  /*
>   * Arguments shared by the read and write call.
>   */
> @@ -535,6 +517,16 @@ struct nfs_pgio_args {
>  	enum nfs3_stable_how	stable;		/* used by write */
>  };
>  
> +struct nfs_pgio_res {
> +	struct nfs4_sequence_res	seq_res;
> +	struct nfs_fattr *	fattr;
> +	__u32			count;
> +	int			eof;		/* used by read */
> +	struct nfs_writeverf *	verf;		/* used by write */
> +	const struct nfs_server *server;	/* used by write */
> +
> +};
> +
>  /*
>   * Arguments to the commit call.
>   */
> @@ -1261,7 +1253,7 @@ struct nfs_read_data {
>  	struct rpc_task		task;
>  	struct nfs_fattr	fattr;	/* fattr storage */
>  	struct nfs_pgio_args	args;
> -	struct nfs_readres  res;
> +	struct nfs_pgio_res	res;
>  	unsigned long		timestamp;	/* For lease renewal */
>  	int (*read_done_cb) (struct rpc_task *task, struct nfs_read_data *data);
>  	__u64			mds_offset;
> @@ -1313,7 +1305,7 @@ struct nfs_write_data {
>  	struct nfs_fattr	fattr;
>  	struct nfs_writeverf	verf;
>  	struct nfs_pgio_args	args;		/* argument struct */
> -	struct nfs_writeres	res;		/* result struct */
> +	struct nfs_pgio_res	res;		/* result struct */
>  	unsigned long		timestamp;	/* For lease renewal */
>  	int (*write_done_cb) (struct rpc_task *task, struct nfs_write_data *data);
>  	__u64			mds_offset;	/* Filelayout dense stripe */


Reviewed-by: Jeff Layton <jlayton@xxxxxxxxxxxxxxx>
--
To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Filesystem Development]     [Linux USB Development]     [Linux Media Development]     [Video for Linux]     [Linux NILFS]     [Linux Audio Users]     [Yosemite Info]     [Linux SCSI]

  Powered by Linux