[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