[pnfs] [PATCH 5/8] pnfs: pnfs_layout_release

Benny Halevy bhalevy at panasas.com
Wed Mar 12 10:33:41 EDT 2008


On Mar. 10, 2008, 20:39 +0200, andros at umich.edu wrote:
> From: Andy Adamson <andros at umich.edu>
> 
> Call put_unlock_current_layout() from the async layout rpc release.
> 
> Signed-off-by: Andy Adamson<andros at umich.edu>
> ---
>  fs/nfs/nfs4proc.c |    9 ++++++++-
>  fs/nfs/pnfs.c     |    9 +++++++++
>  fs/nfs/pnfs.h     |    2 +-
>  3 files changed, 18 insertions(+), 2 deletions(-)
> 
> diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
> index ef77a89..2ffebe5 100644
> --- a/fs/nfs/nfs4proc.c
> +++ b/fs/nfs/nfs4proc.c
> @@ -5271,8 +5271,15 @@ static void nfs4_pnfs_layoutget_done(struct rpc_task *task, void *calldata)
>  
>  static void nfs4_pnfs_layoutget_release(void *calldata)
>  {
> +	struct nfs4_pnfs_layoutget *lgp = calldata;
> +	struct nfs_inode *nfsi = NFS_I(lgp->args->inode);
> +	struct pnfs_layout_type *lo;
> +
> +	lo = nfsi->current_layout;
> +	BUG_ON(!lo);
> +
>  	dprintk("--> %s\n", __func__);
> -	/* pnfs_layout_release here */
> +	pnfs_layout_release(lo);
>  	dprintk("<-- %s\n", __func__);
>  }
>  
> diff --git a/fs/nfs/pnfs.c b/fs/nfs/pnfs.c
> index 7665188..d33fcc7 100644
> --- a/fs/nfs/pnfs.c
> +++ b/fs/nfs/pnfs.c
> @@ -373,6 +373,15 @@ put_unlock_current_layout(struct nfs_inode *nfsi,
>  	spin_unlock(&nfsi->lo_lock);
>  }
>  
> +void
> +pnfs_layout_release(struct pnfs_layout_type *lo)
> +{
> +	struct nfs_inode *nfsi = NFS_I(lo->inode);
> +
> +	spin_lock(&nfsi->lo_lock);
> +	put_unlock_current_layout(nfsi, lo);

That looks funny.
can't we just do the put_unlock_current_layout(nfsi, lo);
in the _done method?

Benny

> +}
> +
>  static inline void
>  init_lseg(struct pnfs_layout_type *lo, struct pnfs_layout_segment *lseg)
>  {
> diff --git a/fs/nfs/pnfs.h b/fs/nfs/pnfs.h
> index c458b18..db25489 100644
> --- a/fs/nfs/pnfs.h
> +++ b/fs/nfs/pnfs.h
> @@ -49,7 +49,7 @@ void pnfs_free_request_data(struct nfs_page *req);
>  ssize_t pnfs_file_write(struct file *, const char __user *, size_t, loff_t *);
>  void pnfs_get_layout_done(struct pnfs_layout_type *,
>  			  struct nfs4_pnfs_layoutget *, int);
> -
> +void pnfs_layout_release(struct pnfs_layout_type *);
>  
>  #endif /* CONFIG_PNFS */
>  



More information about the pNFS mailing list