[pnfs] [PATCH 04/10] pnfsd: LAYOUTGET layout stateid processing

Dean Hildebrand seattleplus at gmail.com
Thu May 15 19:37:29 EDT 2008



andros at netapp.com wrote:
> From: Andy Adamson <andros at netapp.com>
>
> Signed-off-by: Andy Adamson<andros at netapp.com>
> ---
>  fs/nfsd/nfs4state.c        |    8 +++++++-
>  fs/nfsd/nfs4xdr.c          |    4 ++--
>  include/linux/nfsd/pnfsd.h |    3 ++-
>  3 files changed, 11 insertions(+), 4 deletions(-)
>
> diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
> index 68e1332..e04b8c0 100644
> --- a/fs/nfsd/nfs4state.c
> +++ b/fs/nfsd/nfs4state.c
> @@ -4576,7 +4576,8 @@ merge_layout(struct nfs4_file *fp,
>  
>  int
>  nfs4_pnfs_get_layout(struct svc_fh *current_fh,
> -		     struct pnfs_layoutget_arg *args)
> +		     struct pnfs_layoutget_arg *args,
> +		     stateid_t *stateid)
>  {
>  	int status = nfserr_layouttrylater;
>  	struct inode *ino = current_fh->fh_dentry->d_inode;
> @@ -4596,6 +4597,11 @@ nfs4_pnfs_get_layout(struct svc_fh *current_fh,
>  	if (!fp || !clp)
>  		goto out;
>  
> +	/* Check decoded layout stateid */
> +	status = nfs4_process_layout_stateid(clp, fp, stateid, &ls);
> +	if (status)
> +		goto out;
> +
>  	if (is_layout_recalled(clp, current_fh, &args->seg)) {
>  		status = nfserr_recallconflict;
>  		goto out;
> diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c
> index b6b8ac8..0e8c343 100644
> --- a/fs/nfsd/nfs4xdr.c
> +++ b/fs/nfsd/nfs4xdr.c
> @@ -3514,8 +3514,8 @@ nfsd4_encode_layoutget(struct nfsd4_compoundres *resp,
>  	args.xdr.end = resp->end;
>  	args.xdr.maxcount = maxcount;
>  
> -	/* Retrieve, encode, and merge layout */
> -	nfserr = nfs4_pnfs_get_layout(lgp->lg_fhp, &args);
> +	/* Retrieve, encode, and merge layout; process stateid */
> +	nfserr = nfs4_pnfs_get_layout(lgp->lg_fhp, &args, &lgp->lg_sid);
>  	if (nfserr) {
>  		printk(KERN_ERR "%s: export ERROR %d\n", __func__, nfserr);
>  		return nfserrno(nfserr);
> diff --git a/include/linux/nfsd/pnfsd.h b/include/linux/nfsd/pnfsd.h
> index 079bf57..657a440 100644
> --- a/include/linux/nfsd/pnfsd.h
> +++ b/include/linux/nfsd/pnfsd.h
> @@ -87,7 +87,8 @@ struct pnfs_mds_id {
>  int nfsd_layout_recall_cb(struct super_block *, struct inode *, struct nfsd4_pnfs_cb_layout *);
>  int nfs4_pnfs_cb_get_state(struct super_block *, struct pnfs_get_state *);
>  void nfs4_pnfs_state_init(void);
> -int nfs4_pnfs_get_layout(struct svc_fh *, struct pnfs_layoutget_arg *);
> +int nfs4_pnfs_get_layout(struct svc_fh *, struct pnfs_layoutget_arg *,
> +					stateid_t *);
>   
Same thing here regarding 2nd line alignment. 
Dean
>  int nfs4_pnfs_return_layout(struct super_block *, struct svc_fh *,
>  					struct nfsd4_pnfs_layoutreturn *);
>  int nfs4_pnfs_propagate_open(struct super_block *, struct svc_fh *, void *);
>   


More information about the pNFS mailing list