aboutsummaryrefslogtreecommitdiffstats
path: root/fs/nfs/nfs4filelayoutdev.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/nfs/nfs4filelayoutdev.c')
-rw-r--r--fs/nfs/nfs4filelayoutdev.c9
1 files changed, 4 insertions, 5 deletions
diff --git a/fs/nfs/nfs4filelayoutdev.c b/fs/nfs/nfs4filelayoutdev.c
index db07c7af1395..42e326637271 100644
--- a/fs/nfs/nfs4filelayoutdev.c
+++ b/fs/nfs/nfs4filelayoutdev.c
@@ -431,7 +431,7 @@ decode_device(struct inode *ino, struct pnfs_device *pdev, gfp_t gfp_flags)
431 dsaddr->stripe_indices = stripe_indices; 431 dsaddr->stripe_indices = stripe_indices;
432 stripe_indices = NULL; 432 stripe_indices = NULL;
433 dsaddr->ds_num = num; 433 dsaddr->ds_num = num;
434 434 dsaddr->nfs_client = NFS_SERVER(ino)->nfs_client;
435 memcpy(&dsaddr->deviceid, &pdev->dev_id, sizeof(pdev->dev_id)); 435 memcpy(&dsaddr->deviceid, &pdev->dev_id, sizeof(pdev->dev_id));
436 436
437 for (i = 0; i < dsaddr->ds_num; i++) { 437 for (i = 0; i < dsaddr->ds_num; i++) {
@@ -516,7 +516,7 @@ decode_and_add_device(struct inode *inode, struct pnfs_device *dev, gfp_t gfp_fl
516 } 516 }
517 517
518 spin_lock(&filelayout_deviceid_lock); 518 spin_lock(&filelayout_deviceid_lock);
519 d = nfs4_fl_find_get_deviceid(&new->deviceid); 519 d = nfs4_fl_find_get_deviceid(new->nfs_client, &new->deviceid);
520 if (d) { 520 if (d) {
521 spin_unlock(&filelayout_deviceid_lock); 521 spin_unlock(&filelayout_deviceid_lock);
522 nfs4_fl_free_deviceid(new); 522 nfs4_fl_free_deviceid(new);
@@ -610,16 +610,15 @@ nfs4_fl_put_deviceid(struct nfs4_file_layout_dsaddr *dsaddr)
610} 610}
611 611
612struct nfs4_file_layout_dsaddr * 612struct nfs4_file_layout_dsaddr *
613nfs4_fl_find_get_deviceid(struct nfs4_deviceid *id) 613nfs4_fl_find_get_deviceid(struct nfs_client *clp, struct nfs4_deviceid *id)
614{ 614{
615 struct nfs4_file_layout_dsaddr *d; 615 struct nfs4_file_layout_dsaddr *d;
616 struct hlist_node *n; 616 struct hlist_node *n;
617 long hash = nfs4_fl_deviceid_hash(id); 617 long hash = nfs4_fl_deviceid_hash(id);
618 618
619
620 rcu_read_lock(); 619 rcu_read_lock();
621 hlist_for_each_entry_rcu(d, n, &filelayout_deviceid_cache[hash], node) { 620 hlist_for_each_entry_rcu(d, n, &filelayout_deviceid_cache[hash], node) {
622 if (!memcmp(&d->deviceid, id, sizeof(*id))) { 621 if (d->nfs_client == clp && !memcmp(&d->deviceid, id, sizeof(*id))) {
623 if (!atomic_inc_not_zero(&d->ref)) 622 if (!atomic_inc_not_zero(&d->ref))
624 goto fail; 623 goto fail;
625 rcu_read_unlock(); 624 rcu_read_unlock();