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