[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