[RFC 1/3] SQUASHME: Generalize the device cache so it can be used by all layouts

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Current code thinks that there can be a single device_id per
layout segment. Change that to assume no relations between segments
and device_ids. It's now up to the layout-driver to make any relations.

Files layout driver is fixed in next patch.

Signed-off-by: Boaz Harrosh <bharrosh@xxxxxxxxxxx>
---
 fs/nfs/pnfs.c             |   20 +++++---------------
 include/linux/nfs4_pnfs.h |    6 +-----
 2 files changed, 6 insertions(+), 20 deletions(-)

diff --git a/fs/nfs/pnfs.c b/fs/nfs/pnfs.c
index eb4e092..f26abc0 100644
--- a/fs/nfs/pnfs.c
+++ b/fs/nfs/pnfs.c
@@ -1892,26 +1892,16 @@ nfs4_init_deviceid_node(struct nfs4_deviceid *d)
 }
 EXPORT_SYMBOL(nfs4_init_deviceid_node);
 
-/* Called from layoutdriver_io_operations->alloc_lseg */
-void
-nfs4_set_layout_deviceid(struct pnfs_layout_segment *l, struct nfs4_deviceid *d)
-{
-	dprintk("%s [%d]\n", __func__, atomic_read(&d->de_kref.refcount));
-	l->deviceid = d;
-}
-EXPORT_SYMBOL(nfs4_set_layout_deviceid);
-
 /* Called from layoutdriver_io_operations->free_lseg */
 void
-nfs4_put_unset_layout_deviceid(struct pnfs_layout_segment *l,
-			   struct nfs4_deviceid *d,
-			   void (*free_callback)(struct kref *))
+nfs4_put_deviceid(struct nfs4_deviceid_cache *c,
+			   struct nfs4_deviceid *d)
 {
 	dprintk("%s [%d]\n", __func__, atomic_read(&d->de_kref.refcount));
-	l->deviceid = NULL;
-	kref_put(&d->de_kref, free_callback);
+	kref_put(&d->de_kref, c->dc_free_callback);
+	/* Do we need to return the deviceid_cache ref */
 }
-EXPORT_SYMBOL(nfs4_put_unset_layout_deviceid);
+EXPORT_SYMBOL(nfs4_put_deviceid);
 
 /* Find and reference a deviceid */
 struct nfs4_deviceid *
diff --git a/include/linux/nfs4_pnfs.h b/include/linux/nfs4_pnfs.h
index 577cd2b..dc3410e 100644
--- a/include/linux/nfs4_pnfs.h
+++ b/include/linux/nfs4_pnfs.h
@@ -111,7 +111,6 @@ struct pnfs_layout_segment {
 	struct kref kref;
 	bool valid;
 	struct pnfs_layout_hdr *layout;
-	struct nfs4_deviceid *deviceid;
 	u8 ld_data[];			/* layout driver private data */
 };
 
@@ -287,11 +286,8 @@ extern struct nfs4_deviceid *nfs4_find_get_deviceid(
 				struct pnfs_deviceid *);
 extern struct nfs4_deviceid *nfs4_add_get_deviceid(struct nfs4_deviceid_cache *,
 				struct nfs4_deviceid *);
-extern void nfs4_set_layout_deviceid(struct pnfs_layout_segment *,
+extern void nfs4_put_deviceid(struct nfs4_deviceid_cache *,
 				struct nfs4_deviceid *);
-extern void nfs4_put_unset_layout_deviceid(struct pnfs_layout_segment *,
-				struct nfs4_deviceid *,
-				void (*free_callback)(struct kref *));
 extern void nfs4_delete_device(struct nfs4_deviceid_cache *,
 				struct pnfs_deviceid *);
 
-- 
1.7.2.2


--
To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Filesystem Development]     [Linux USB Development]     [Linux Media Development]     [Video for Linux]     [Linux NILFS]     [Linux Audio Users]     [Yosemite Info]     [Linux SCSI]

  Powered by Linux