[pnfs] [PATCH 07/10] pnfs: pnfs_layout_release

andros at umihc.edu andros at umihc.edu
Fri Mar 14 12:23:43 EDT 2008


From: Andy Adamson <andros at umich.edu>

Call put_unlock_current_layout() from the async layout rpc release.
Free the calldata alloc'ed in get_layout.

Signed-off-by: Andy Adamson<andros at umich.edu>
---
 fs/nfs/nfs4proc.c |   10 +++++++++-
 fs/nfs/pnfs.c     |    9 +++++++++
 fs/nfs/pnfs.h     |    2 +-
 3 files changed, 19 insertions(+), 2 deletions(-)

diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
index 9be0f80..acb6368 100644
--- a/fs/nfs/nfs4proc.c
+++ b/fs/nfs/nfs4proc.c
@@ -5261,8 +5261,16 @@ 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);
+	kfree(calldata);
 	dprintk("<-- %s\n", __func__);
 }
 
diff --git a/fs/nfs/pnfs.c b/fs/nfs/pnfs.c
index 9b889df..83502f1 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);
+}
+
 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 */
 
-- 
1.5.0.2



More information about the pNFS mailing list