[pnfs] [PATCH 25/37] pnfs: client layout cache: lseg allocation functions

Benny Halevy bhalevy at panasas.com
Tue Jan 1 05:51:20 EST 2008


Signed-off-by: Benny Halevy <bhalevy at panasas.com>
---
 fs/nfs/pnfs.c |   26 ++++++++++++++++++++++++++
 1 files changed, 26 insertions(+), 0 deletions(-)

diff --git a/fs/nfs/pnfs.c b/fs/nfs/pnfs.c
index dc272cf..9642269 100644
--- a/fs/nfs/pnfs.c
+++ b/fs/nfs/pnfs.c
@@ -339,6 +339,32 @@ put_unlock_current_layout(struct nfs_inode *nfsi,
 	spin_unlock(&nfsi->lo_lock);
 }
 
+static inline void
+init_lseg(struct pnfs_layout_type *lo, struct pnfs_layout_segment *lseg)
+{
+	INIT_LIST_HEAD(&lseg->fi_list);
+	kref_init(&lseg->kref);
+	lseg->layout = lo;
+}
+
+static void
+destroy_lseg(struct kref *kref)
+{
+	struct pnfs_layout_segment *lseg =
+		container_of(kref, struct pnfs_layout_segment, kref);
+	struct pnfs_layout_type *lo = lseg->layout;
+
+	PNFS_LD_IO_OPS(lo)->free_lseg(lo, lseg);
+}
+
+static inline void
+put_lseg(struct pnfs_layout_segment *lseg)
+{
+	if (!lseg)
+		return;
+	kref_put(&lseg->kref, destroy_lseg);
+}
+
 /*
 * Get layout from server.
 *    for now, assume that whole file layouts are requested.
-- 
1.5.3.3



More information about the pNFS mailing list