[pnfs] [PATCH 2/4] deviceid64: filelayout client

Benny Halevy bhalevy at panasas.com
Sun Aug 5 04:51:05 EDT 2007


change deviceid from u32 to u64

Signed-off-by: Benny Halevy <bhalevy at panasas.com>
---
 fs/nfs/nfs4filelayout.c    |   16 ++++++++--------
 fs/nfs/nfs4filelayout.h    |    8 ++++----
 fs/nfs/nfs4filelayoutdev.c |   35 +++++++++++++++++++++++------------
 3 files changed, 35 insertions(+), 24 deletions(-)

diff --git a/fs/nfs/nfs4filelayout.c b/fs/nfs/nfs4filelayout.c
index 043583f..bba2dbe 100644
--- a/fs/nfs/nfs4filelayout.c
+++ b/fs/nfs/nfs4filelayout.c
@@ -359,8 +359,8 @@ ssize_t filelayout_write_pagelist(
 		data->session = dserver.dev_item->clp->cl_session;
 		data->args.fh = dserver.fh;
 	}
-	dprintk("%s set wb_devid %d\n", __FUNCTION__,
-					dserver.dev_item[0].dev_id);
+	dprintk("%s set wb_devid 0x%llx\n", __FUNCTION__,
+				(unsigned long long)dserver.dev_item[0].dev_id);
 	list_for_each(h, &data->pages) {
 		req = list_entry(h, struct nfs_page, wb_list);
 		req->wb_devid = dserver.dev_item[0].dev_id;
@@ -469,15 +469,15 @@ filelayout_set_layout(struct pnfs_layout_type* layoutid, struct inode* inode, vo
 				fl->file_size, fl->num_devs);
 
 	for (i = 0; i < fl->num_devs; i++) {
-		READ32(fl->devs[i].dev_id);
+		READ64(fl->devs[i].dev_id);
 		READ32(fl->devs[i].dev_index);
 
 		/* fh */
 		memset(&fl->devs[i].fh, 0, sizeof(struct nfs_fh));
 		READ32(fl->devs[i].fh.size);
 		COPYMEM(fl->devs[i].fh.data, fl->devs[i].fh.size);
-		dprintk("DEBUG: %s: dev %d len %d\n", __func__,
-		fl->devs[i].dev_id,fl->devs[i].fh.size);
+		dprintk("DEBUG: %s: dev 0x%llx len %d\n", __func__,
+			fl->devs[i].dev_id, fl->devs[i].fh.size);
 	}
 
 	return layoutid;
@@ -511,7 +511,7 @@ filelayout_commit(struct pnfs_layout_type * layoutid, struct inode* ino, struct
 	struct nfs_page* first;
 	struct nfs_page* req;
 	struct list_head *pos, *tmp;
-	u32 dev_id;
+	pnfs_deviceid_t dev_id;
 	int i;
 
 	laytype = NFS_I(ino)->current_layout;
@@ -553,7 +553,7 @@ filelayout_commit(struct pnfs_layout_type * layoutid, struct inode* ino, struct
 		}
 		if (list_empty(&dsdata->pages)) {
 			if (list_empty(&data->pages)) {
-				dprintk("%s exit i %d devid %d\n",
+				dprintk("%s exit i %d devid 0x%llx\n",
 						__FUNCTION__, i,dev_id);
 				nfs4_commit_free(dsdata);
 				return 0;
@@ -562,7 +562,7 @@ filelayout_commit(struct pnfs_layout_type * layoutid, struct inode* ino, struct
 		}
 		first = nfs_list_entry(dsdata->pages.next);
 
-		dprintk("%s call nfs_commit_rpcsetup i %d devid %d\n",
+		dprintk("%s call nfs_commit_rpcsetup i %d devid 0x%llx\n",
 						__FUNCTION__, i, dev_id);
 
 		dsdata->pnfs_client = dserver.dev_item->clp->cl_rpcclient;
diff --git a/fs/nfs/nfs4filelayout.h b/fs/nfs/nfs4filelayout.h
index 357a915..b3cfb6c 100644
--- a/fs/nfs/nfs4filelayout.h
+++ b/fs/nfs/nfs4filelayout.h
@@ -32,7 +32,7 @@ enum stripetype4 {
 
 struct nfs4_pnfs_dev_item {
 	struct hlist_node hash_node;
-	u32 dev_id;
+	u64 dev_id;
 	u32 ip_addr;
 	u32 port;
 	atomic_t count;
@@ -45,7 +45,7 @@ struct nfs4_pnfs_dev_hlist {
 };
 
 struct nfs4_pnfs_devaddr {
-	u32 dev_id;
+	u64 dev_id;
 	u32 ip;
 	u16 port;
 };
@@ -61,7 +61,7 @@ struct nfs4_pnfs_dserver {
 };
 
 struct nfs4_filelayout_devs {
-	u32 dev_id;
+	u64 dev_id;
 	u32 dev_index;
 	struct nfs_fh fh;
 };
@@ -98,7 +98,7 @@ int nfs4_pnfs_dserver_get(struct inode *inode,
 int decode_and_add_devicelist(struct filelayout_mount_type *mt, struct pnfs_devicelist* devlist);
 
 struct nfs4_pnfs_dev_item *
-nfs4_pnfs_device_get(struct inode *inode, u32 dev_id);
+nfs4_pnfs_device_get(struct inode *inode, pnfs_deviceid_t dev_id);
 
 #define READ32(x)         (x) = ntohl(*p++)
 #define READ64(x)         do {			\
diff --git a/fs/nfs/nfs4filelayoutdev.c b/fs/nfs/nfs4filelayoutdev.c
index 15a33ed..8b21ab0 100644
--- a/fs/nfs/nfs4filelayoutdev.c
+++ b/fs/nfs/nfs4filelayoutdev.c
@@ -63,16 +63,27 @@ create_nfs_rpcclient(struct rpc_xprt *xprt,
 				rpc_authflavor_t authflavor,
 				int *err);
 
+static inline unsigned long
+hash_dev_id(pnfs_deviceid_t dev_id)
+{
+	unsigned long      hash;
+
+	hash = (unsigned long)dev_id;
+	if (sizeof(hash) < sizeof(dev_id))
+		hash ^= (unsigned long)(dev_id >> 32);
+	return hash_long(hash, NFS4_PNFS_DEV_HASH_BITS);
+}
+
 /* Assumes lock is held */
 static inline struct nfs4_pnfs_dev_item *
-_device_lookup(struct nfs4_pnfs_dev_hlist *hlist, u32 dev_id)
+_device_lookup(struct nfs4_pnfs_dev_hlist *hlist, u64 dev_id)
 {
 	unsigned long      hash;
 	struct hlist_node *np;
 
-	dprintk("_device_lookup: dev_id=%u\n", dev_id);
+	dprintk("_device_lookup: dev_id=0x%llx\n", dev_id);
 
-	hash = hash_long(dev_id, NFS4_PNFS_DEV_HASH_BITS);
+	hash = hash_dev_id(dev_id);
 
 	hlist_for_each(np, &hlist->dev_list[hash]) {
 		struct nfs4_pnfs_dev_item *dev;
@@ -90,10 +101,10 @@ _device_add(struct nfs4_pnfs_dev_hlist *hlist, struct nfs4_pnfs_dev_item *dev)
 {
 	unsigned long      hash;
 
-	dprintk("_device_add: dev_id=%u, ip=%x, port=%hu\n", dev->dev_id,
+	dprintk("_device_add: dev_id=0x%llx, ip=%x, port=%hu\n", dev->dev_id,
 		ntohl(dev->ip_addr), ntohs(dev->port));
 
-	hash = hash_long(dev->dev_id, NFS4_PNFS_DEV_HASH_BITS);
+	hash = hash_dev_id(dev->dev_id);
 	hlist_add_head(&dev->hash_node, &hlist->dev_list[hash]);
 }
 
@@ -119,7 +130,7 @@ device_create(struct nfs_server *server, struct nfs4_pnfs_dev_item *dev)
 		goto out;
 	}
 
-	dprintk("device_create: dev_id=%u, ip=%x, port=%hu, rpcclient %p\n",
+	dprintk("device_create: dev_id=0x%llx, ip=%x, port=%hu, rpcclient %p\n",
 		dev->dev_id, ntohl(dev->ip_addr), ntohs(dev->port), clp->cl_rpcclient);
 
 	if (PTR_ERR(clp->cl_rpcclient) == -EINVAL || clp->cl_rpcclient == NULL)
@@ -153,7 +164,7 @@ device_destroy(struct nfs4_pnfs_dev_item *dev)
 	if (!dev)
 		return;
 
-	dprintk("device_destroy: did=%u, ip=%x, port=%hu, rpcclient %p flags %x\n",
+	dprintk("device_destroy: dev_id=0x%llx, ip=%x, port=%hu, rpcclient %p flags %x\n",
 		dev->dev_id, ntohl(dev->ip_addr), ntohs(dev->port),
 		dev->clp->cl_rpcclient, dev->clp->cl_exchange_flags);
 
@@ -372,7 +383,7 @@ 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 filelayout_mount_type *mt, u32 dev_id)
+get_device_info(struct filelayout_mount_type *mt, pnfs_deviceid_t dev_id)
 {
 	int rc;
 	struct pnfs_device *pdev = NULL;
@@ -398,7 +409,7 @@ get_device_info(struct filelayout_mount_type *mt, u32 dev_id)
 /* Lookup and return the device dev_id
  */
 struct nfs4_pnfs_dev_item *
-nfs4_pnfs_device_get(struct inode *inode, u32 dev_id)
+nfs4_pnfs_device_get(struct inode *inode, pnfs_deviceid_t dev_id)
 {
 	struct nfs4_pnfs_dev_item *dev;
 	struct nfs_server* server = NFS_SERVER(inode);
@@ -429,7 +440,7 @@ nfs4_pnfs_dserver_get(struct inode *inode,
 		      u32 count,
 		      struct nfs4_pnfs_dserver *dserver)
 {
-	u32 dev_id;
+	pnfs_deviceid_t dev_id;
 	u64 tmp;
 	u32 stripe_idx, dbg_stripe_idx;
 
@@ -461,7 +472,7 @@ nfs4_pnfs_dserver_get(struct inode *inode,
 		return 1;
 	dserver->fh = &layout->devs[stripe_idx].fh;
 
-	dprintk("%s: dev_id=%u, idx=%u, offset=%Lu, count=%u\n",
+	dprintk("%s: dev_id=0x%llx, idx=%u, offset=%Lu, count=%u\n",
                     __FUNCTION__, dev_id, stripe_idx, offset, count);
 
 	return 0;
@@ -478,7 +489,7 @@ nfs4_pnfs_dserver_get(struct inode *inode,
 static void
 nfs4_pnfs_device_put(struct nfs_server *server, struct nfs4_pnfs_dev_hlist *hlist, struct nfs4_pnfs_dev_item *dev)
 {
-	dprintk("nfs4_pnfs_device_put: dev_id=%u\n", dev->dev_id);
+	dprintk("nfs4_pnfs_device_put: dev_id=0x%llx\n", dev->dev_id);
 	server->rpc_ops->put_client(dev->clp);
 	atomic_dec(&dev->count);
 }
-- 
1.5.2.86.g99b5




More information about the pNFS mailing list