[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