diff options
Diffstat (limited to 'fs/nfs/nfs4filelayoutdev.c')
-rw-r--r-- | fs/nfs/nfs4filelayoutdev.c | 9 |
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 | ||
612 | struct nfs4_file_layout_dsaddr * | 612 | struct nfs4_file_layout_dsaddr * |
613 | nfs4_fl_find_get_deviceid(struct nfs4_deviceid *id) | 613 | nfs4_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(); |