[pnfs] [PATCH 07/11] pnfs: Cleanup layout driver device callbacks.

Benny Halevy bhalevy at panasas.com
Mon Feb 11 08:00:49 EST 2008


From: Dean Hildebrand <dhildeb at us.ibm.com>

Remove wrappers around LD device callbacks
Modify getdevinfo callback interface to
use file handle and superblock instead of inode.
This is in preparation of draft-19.

Signed-off-by: Dean Hildebrand <dhildeb at us.ibm.com>
---
 fs/nfs/nfs4filelayout.h    |    4 ----
 fs/nfs/nfs4filelayoutdev.c |   17 ++++++++++-------
 fs/nfs/nfs4proc.c          |   19 ++++++++++---------
 fs/nfs/pnfs.c              |   33 +++++----------------------------
 include/linux/nfs4_pnfs.h  |    4 ++--
 5 files changed, 27 insertions(+), 50 deletions(-)

diff --git a/fs/nfs/nfs4filelayout.h b/fs/nfs/nfs4filelayout.h
index 8278068..f92f76a 100644
--- a/fs/nfs/nfs4filelayout.h
+++ b/fs/nfs/nfs4filelayout.h
@@ -117,10 +117,6 @@ int nfs4_pnfs_dserver_get(struct inode *inode,
 			  struct nfs4_pnfs_dserver *dserver);
 int decode_and_add_devicelist(struct filelayout_mount_type *mt, struct pnfs_devicelist *devlist);
 
-struct nfs4_pnfs_dev_item *
-nfs4_pnfs_device_item_get(struct inode *inode, pnfs_deviceid *dev_id);
-
-
 #define READ32(x)         (x) = ntohl(*p++)
 #define READ64(x)         do {			\
 	(x) = (u64)ntohl(*p++) << 32;		\
diff --git a/fs/nfs/nfs4filelayoutdev.c b/fs/nfs/nfs4filelayoutdev.c
index 61e62b6..e407459 100644
--- a/fs/nfs/nfs4filelayoutdev.c
+++ b/fs/nfs/nfs4filelayoutdev.c
@@ -643,9 +643,10 @@ decode_and_add_devicelist(struct filelayout_mount_type *mt, struct pnfs_deviceli
  * of available devices, and return it.
  */
 static struct nfs4_pnfs_dev_item *
-get_device_info(struct inode *inode, pnfs_deviceid *dev_id)
+get_device_info(struct filelayout_mount_type *mt,
+		struct nfs_fh *fh,
+		pnfs_deviceid *dev_id)
 {
-	struct filelayout_mount_type *mt = FILE_MT(inode);
 	struct pnfs_device *pdev = NULL;
 	int rc;
 
@@ -656,7 +657,7 @@ get_device_info(struct inode *inode, pnfs_deviceid *dev_id)
 
 	memcpy(&pdev->dev_id, dev_id, NFS4_PNFS_DEVICEID4_SIZE);
 
-	rc = pnfs_callback_ops->nfs_getdeviceinfo(inode, dev_id, pdev);
+	rc = pnfs_callback_ops->nfs_getdeviceinfo(mt->fl_sb, fh, pdev);
 	dprintk("%s getdevice info returns %d\n", __func__, rc);
 	if (rc) {
 		kfree(pdev);
@@ -670,9 +671,10 @@ get_device_info(struct inode *inode, pnfs_deviceid *dev_id)
 }
 
 struct nfs4_pnfs_dev_item *
-nfs4_pnfs_device_item_get(struct inode *inode, pnfs_deviceid *dev_id)
+nfs4_pnfs_device_item_get(struct filelayout_mount_type *mt,
+			  struct nfs_fh *fh,
+			  pnfs_deviceid *dev_id)
 {
-	struct filelayout_mount_type *mt = FILE_MT(inode);
 	struct nfs4_pnfs_dev_item *dev;
 
 	read_lock(&mt->hlist->dev_lock);
@@ -680,7 +682,7 @@ nfs4_pnfs_device_item_get(struct inode *inode, pnfs_deviceid *dev_id)
 	read_unlock(&mt->hlist->dev_lock);
 
 	if (dev == NULL)
-		dev = get_device_info(inode, dev_id);
+		dev = get_device_info(mt, fh, dev_id);
 	return dev;
 }
 
@@ -704,7 +706,8 @@ nfs4_pnfs_dserver_get(struct inode *inode,
 
 	layout = LSEG_LD_DATA(&flo->pnfs_lseg);
 
-	di = nfs4_pnfs_device_item_get(inode, &layout->dev_id);
+	di = nfs4_pnfs_device_item_get(FILE_MT(inode), NFS_FH(inode),
+				       &layout->dev_id);
 	if (di == NULL)
 		return 1;
 
diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
index a5ca2df..4e11c33 100644
--- a/fs/nfs/nfs4proc.c
+++ b/fs/nfs/nfs4proc.c
@@ -5337,12 +5337,13 @@ static int _nfs4_pnfs_getdevicelist(struct nfs_fh *fh,
 	return status;
 }
 
-int nfs4_pnfs_getdevicelist(struct nfs_fh *fh,
-			    struct nfs_server *server,
+int nfs4_pnfs_getdevicelist(struct super_block *sb,
+			    struct nfs_fh *fh,
 			    struct pnfs_devicelist *devlist)
 {
 	struct nfs4_exception exception = { };
 	int err;
+	struct nfs_server *server = NFS_SB(sb);
 	do {
 		err = nfs4_handle_exception(server,
 				_nfs4_pnfs_getdevicelist(fh, server, devlist),
@@ -5355,14 +5356,14 @@ int nfs4_pnfs_getdevicelist(struct nfs_fh *fh,
 	return err;
 }
 
-int nfs4_pnfs_getdeviceinfo(struct inode *inode,
-			    pnfs_deviceid *dev_id,
+int nfs4_pnfs_getdeviceinfo(struct super_block *sb,
+			    struct nfs_fh *fh,
 			    struct pnfs_device *dev)
 {
-	struct nfs_server *server = NFS_SERVER(inode);
+	struct nfs_server *server = NFS_SB(sb);
 	struct nfs4_pnfs_getdeviceinfo_arg args = {
-		.fh = NFS_FH(inode),
-		.dev_id = dev_id,
+		.fh = fh,
+		.dev_id = &dev->dev_id,
 		.layoutclass = server->pnfs_curr_ld->id,
 	};
 	struct nfs4_pnfs_getdeviceinfo_res res = {
@@ -5377,8 +5378,8 @@ int nfs4_pnfs_getdeviceinfo(struct inode *inode,
 	int status = -ENOMEM;
 
 	NFS4_VALIDATE_STATE(server);
-	status = NFS4_RPC_CALL_SYNC(server, server->client, &msg, &args,
-								&res, 0);
+	status = NFS4_RPC_CALL_SYNC(server, server->client,
+				    &msg, &args, &res, 0);
 
 	return status;
 }
diff --git a/fs/nfs/pnfs.c b/fs/nfs/pnfs.c
index 4259b19..820835c 100644
--- a/fs/nfs/pnfs.c
+++ b/fs/nfs/pnfs.c
@@ -57,10 +57,10 @@
 #define MIN_POOL_LC		(4)
 
 extern int nfs_fsync(struct file *file, struct dentry *dentry, int datasync);
-extern int nfs4_pnfs_getdevicelist(struct nfs_fh *fh, struct nfs_server *server,
+extern int nfs4_pnfs_getdevicelist(struct super_block *sb, struct nfs_fh *fh,
 				   struct pnfs_devicelist *devlist);
-extern int nfs4_pnfs_getdeviceinfo(struct inode *inode, pnfs_deviceid *dev_id,
-				   struct pnfs_device *res);
+extern int nfs4_pnfs_getdeviceinfo(struct super_block *sb, struct nfs_fh *fh,
+				   struct pnfs_device *dev);
 extern void nfs_initiate_commit(struct nfs_write_data *data,
 				struct rpc_clnt *clnt, int how);
 extern int nfs_flush_one(struct inode *inode, struct list_head *head,
@@ -1584,29 +1584,6 @@ pnfs_commit(struct nfs_write_data *data, int sync)
 	return result;
 }
 
-int
-pnfs_getdevicelist(struct super_block *sb, struct nfs_fh *fh,
-		   struct pnfs_devicelist *devlist)
-{
-	struct nfs_server *server = NFS_SB(sb);
-
-	return nfs4_pnfs_getdevicelist(fh, server, devlist);
-}
-
-/* Retrieve the device information for a device.
- */
-int
-pnfs_getdeviceinfo(struct inode *inode,
-		   pnfs_deviceid *dev_id,
-		   struct pnfs_device *dev)
-{
-	int rc;
-
-	rc = nfs4_pnfs_getdeviceinfo(inode, dev_id, dev);
-
-	return rc;
-}
-
 /* Called on completion of layoutcommit */
 void
 pnfs_layoutcommit_done(
@@ -1810,8 +1787,8 @@ void pnfs_free_request_data(struct nfs_page *req)
 /* Callback operations for layout drivers.
  */
 struct pnfs_client_operations pnfs_ops = {
-	.nfs_getdevicelist = pnfs_getdevicelist,
-	.nfs_getdeviceinfo = pnfs_getdeviceinfo,
+	.nfs_getdevicelist = nfs4_pnfs_getdevicelist,
+	.nfs_getdeviceinfo = nfs4_pnfs_getdeviceinfo,
 	.nfs_readlist_complete = pnfs_read_done,
 	.nfs_writelist_complete = pnfs_writeback_done,
 	.nfs_commit_complete = pnfs_commit_done,
diff --git a/include/linux/nfs4_pnfs.h b/include/linux/nfs4_pnfs.h
index ff1eff7..fea7a05 100644
--- a/include/linux/nfs4_pnfs.h
+++ b/include/linux/nfs4_pnfs.h
@@ -203,8 +203,8 @@ struct pnfs_devicelist {
  */
 struct pnfs_client_operations {
 	int (*nfs_getdevicelist) (struct super_block *sb, struct nfs_fh *fh, struct pnfs_devicelist *devlist);
-	int (*nfs_getdeviceinfo) (struct inode *inode,
-				  pnfs_deviceid *dev_id,
+	int (*nfs_getdeviceinfo) (struct super_block *sb,
+				  struct nfs_fh *fh,
 				  struct pnfs_device *dev);
 
 	/* Post read callback. */
-- 
1.5.3.3



More information about the pNFS mailing list