@@ -282,7 +282,7 @@ __be32 nfs4_callback_devicenotify(struct cb_devicenotifyargs *args,
if (dev->cbd_notify_type == NOTIFY_DEVICEID4_CHANGE)
dprintk("%s: NOTIFY_DEVICEID4_CHANGE not supported, "
"deleting instead\n", __func__);
- server->pnfs_curr_ld->delete_deviceid(&dev->cbd_dev_id);
+ server->pnfs_curr_ld->delete_deviceid(clp, &dev->cbd_dev_id);
}
out:
@@ -101,6 +101,6 @@ extern void nfs4_fl_put_deviceid(struct nfs4_file_layout_dsaddr *dsaddr);
extern void nfs4_fl_free_deviceid(struct nfs4_file_layout_dsaddr *dsaddr);
struct nfs4_file_layout_dsaddr *
get_device_info(struct inode *inode, struct nfs4_deviceid *dev_id, gfp_t gfp_flags);
-void filelayout_delete_deviceid(struct nfs4_deviceid *);
+void filelayout_delete_deviceid(const struct nfs_client *, const struct nfs4_deviceid *);
#endif /* FS_NFS_NFS4FILELAYOUT_H */
@@ -554,7 +554,7 @@ nfs4_fl_put_deviceid(struct nfs4_file_layout_dsaddr *dsaddr)
}
static struct nfs4_file_layout_dsaddr *
-nfs4_fl_unhash_deviceid(struct nfs4_deviceid *id)
+nfs4_fl_unhash_deviceid(const struct nfs_client *clp, const struct nfs4_deviceid *id)
{
struct nfs4_file_layout_dsaddr *d;
struct hlist_node *n;
@@ -563,7 +563,7 @@ nfs4_fl_unhash_deviceid(struct nfs4_deviceid *id)
dprintk("%s: hash %ld\n", __func__, hash);
rcu_read_lock();
hlist_for_each_entry_rcu(d, n, &filelayout_deviceid_cache[hash], node)
- if (!memcmp(&d->deviceid, id, sizeof(*id)))
+ if (d->nfs_client == clp && !memcmp(&d->deviceid, id, sizeof(*id)))
goto found;
rcu_read_unlock();
return NULL;
@@ -579,11 +579,11 @@ found:
}
void
-filelayout_delete_deviceid(struct nfs4_deviceid *id)
+filelayout_delete_deviceid(const struct nfs_client *clp, const struct nfs4_deviceid *id)
{
struct nfs4_file_layout_dsaddr *d;
- d = nfs4_fl_unhash_deviceid(id);
+ d = nfs4_fl_unhash_deviceid(clp, id);
/* balance the initial ref taken in decode_and_add_device */
if (d && atomic_dec_and_test(&d->ref))
nfs4_fl_free_deviceid(d);
@@ -94,7 +94,7 @@ struct pnfs_layoutdriver_type {
enum pnfs_try_status (*write_pagelist) (struct nfs_write_data *nfs_data, int how);
void (*free_deviceid_node) (struct nfs4_deviceid_node *);
- void (*delete_deviceid)(struct nfs4_deviceid *);
+ void (*delete_deviceid)(const struct nfs_client *, const struct nfs4_deviceid *);
};
struct pnfs_layout_hdr {
Signed-off-by: Benny Halevy <bhalevy@panasas.com> --- fs/nfs/callback_proc.c | 2 +- fs/nfs/nfs4filelayout.h | 2 +- fs/nfs/nfs4filelayoutdev.c | 8 ++++---- fs/nfs/pnfs.h | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-)