diff options
Diffstat (limited to 'fs/nfs/nfs4filelayoutdev.c')
-rw-r--r-- | fs/nfs/nfs4filelayoutdev.c | 17 |
1 files changed, 8 insertions, 9 deletions
diff --git a/fs/nfs/nfs4filelayoutdev.c b/fs/nfs/nfs4filelayoutdev.c index f81231f30d94..3336d5eaf879 100644 --- a/fs/nfs/nfs4filelayoutdev.c +++ b/fs/nfs/nfs4filelayoutdev.c | |||
@@ -690,7 +690,7 @@ decode_and_add_device(struct inode *inode, struct pnfs_device *dev, gfp_t gfp_fl | |||
690 | * of available devices, and return it. | 690 | * of available devices, and return it. |
691 | */ | 691 | */ |
692 | struct nfs4_file_layout_dsaddr * | 692 | struct nfs4_file_layout_dsaddr * |
693 | get_device_info(struct inode *inode, struct nfs4_deviceid *dev_id, gfp_t gfp_flags) | 693 | filelayout_get_device_info(struct inode *inode, struct nfs4_deviceid *dev_id, gfp_t gfp_flags) |
694 | { | 694 | { |
695 | struct pnfs_device *pdev = NULL; | 695 | struct pnfs_device *pdev = NULL; |
696 | u32 max_resp_sz; | 696 | u32 max_resp_sz; |
@@ -804,13 +804,14 @@ nfs4_fl_prepare_ds(struct pnfs_layout_segment *lseg, u32 ds_idx) | |||
804 | struct nfs4_pnfs_ds *ds = dsaddr->ds_list[ds_idx]; | 804 | struct nfs4_pnfs_ds *ds = dsaddr->ds_list[ds_idx]; |
805 | struct nfs4_deviceid_node *devid = FILELAYOUT_DEVID_NODE(lseg); | 805 | struct nfs4_deviceid_node *devid = FILELAYOUT_DEVID_NODE(lseg); |
806 | 806 | ||
807 | if (filelayout_test_devid_invalid(devid)) | 807 | if (filelayout_test_devid_unavailable(devid)) |
808 | return NULL; | 808 | return NULL; |
809 | 809 | ||
810 | if (ds == NULL) { | 810 | if (ds == NULL) { |
811 | printk(KERN_ERR "NFS: %s: No data server for offset index %d\n", | 811 | printk(KERN_ERR "NFS: %s: No data server for offset index %d\n", |
812 | __func__, ds_idx); | 812 | __func__, ds_idx); |
813 | goto mark_dev_invalid; | 813 | filelayout_mark_devid_invalid(devid); |
814 | return NULL; | ||
814 | } | 815 | } |
815 | 816 | ||
816 | if (!ds->ds_clp) { | 817 | if (!ds->ds_clp) { |
@@ -818,14 +819,12 @@ nfs4_fl_prepare_ds(struct pnfs_layout_segment *lseg, u32 ds_idx) | |||
818 | int err; | 819 | int err; |
819 | 820 | ||
820 | err = nfs4_ds_connect(s, ds); | 821 | err = nfs4_ds_connect(s, ds); |
821 | if (err) | 822 | if (err) { |
822 | goto mark_dev_invalid; | 823 | nfs4_mark_deviceid_unavailable(devid); |
824 | return NULL; | ||
825 | } | ||
823 | } | 826 | } |
824 | return ds; | 827 | return ds; |
825 | |||
826 | mark_dev_invalid: | ||
827 | filelayout_mark_devid_invalid(devid); | ||
828 | return NULL; | ||
829 | } | 828 | } |
830 | 829 | ||
831 | module_param(dataserver_retrans, uint, 0644); | 830 | module_param(dataserver_retrans, uint, 0644); |