diff options
-rw-r--r-- | fs/nfs/filelayout/filelayout.c | 28 | ||||
-rw-r--r-- | fs/nfs/flexfilelayout/flexfilelayout.c | 33 |
2 files changed, 0 insertions, 61 deletions
diff --git a/fs/nfs/filelayout/filelayout.c b/fs/nfs/filelayout/filelayout.c index 3e486cd01caf..080fc6b278bd 100644 --- a/fs/nfs/filelayout/filelayout.c +++ b/fs/nfs/filelayout/filelayout.c | |||
@@ -126,32 +126,13 @@ static int filelayout_async_handle_error(struct rpc_task *task, | |||
126 | { | 126 | { |
127 | struct pnfs_layout_hdr *lo = lseg->pls_layout; | 127 | struct pnfs_layout_hdr *lo = lseg->pls_layout; |
128 | struct inode *inode = lo->plh_inode; | 128 | struct inode *inode = lo->plh_inode; |
129 | struct nfs_server *mds_server = NFS_SERVER(inode); | ||
130 | struct nfs4_deviceid_node *devid = FILELAYOUT_DEVID_NODE(lseg); | 129 | struct nfs4_deviceid_node *devid = FILELAYOUT_DEVID_NODE(lseg); |
131 | struct nfs_client *mds_client = mds_server->nfs_client; | ||
132 | struct nfs4_slot_table *tbl = &clp->cl_session->fc_slot_table; | 130 | struct nfs4_slot_table *tbl = &clp->cl_session->fc_slot_table; |
133 | 131 | ||
134 | if (task->tk_status >= 0) | 132 | if (task->tk_status >= 0) |
135 | return 0; | 133 | return 0; |
136 | 134 | ||
137 | switch (task->tk_status) { | 135 | switch (task->tk_status) { |
138 | /* MDS state errors */ | ||
139 | case -NFS4ERR_DELEG_REVOKED: | ||
140 | case -NFS4ERR_ADMIN_REVOKED: | ||
141 | case -NFS4ERR_BAD_STATEID: | ||
142 | case -NFS4ERR_OPENMODE: | ||
143 | if (state == NULL) | ||
144 | break; | ||
145 | if (nfs4_schedule_stateid_recovery(mds_server, state) < 0) | ||
146 | goto out_bad_stateid; | ||
147 | goto wait_on_recovery; | ||
148 | case -NFS4ERR_EXPIRED: | ||
149 | if (state != NULL) { | ||
150 | if (nfs4_schedule_stateid_recovery(mds_server, state) < 0) | ||
151 | goto out_bad_stateid; | ||
152 | } | ||
153 | nfs4_schedule_lease_recovery(mds_client); | ||
154 | goto wait_on_recovery; | ||
155 | /* DS session errors */ | 136 | /* DS session errors */ |
156 | case -NFS4ERR_BADSESSION: | 137 | case -NFS4ERR_BADSESSION: |
157 | case -NFS4ERR_BADSLOT: | 138 | case -NFS4ERR_BADSLOT: |
@@ -212,17 +193,8 @@ reset: | |||
212 | task->tk_status); | 193 | task->tk_status); |
213 | return -NFS4ERR_RESET_TO_MDS; | 194 | return -NFS4ERR_RESET_TO_MDS; |
214 | } | 195 | } |
215 | out: | ||
216 | task->tk_status = 0; | 196 | task->tk_status = 0; |
217 | return -EAGAIN; | 197 | return -EAGAIN; |
218 | out_bad_stateid: | ||
219 | task->tk_status = -EIO; | ||
220 | return 0; | ||
221 | wait_on_recovery: | ||
222 | rpc_sleep_on(&mds_client->cl_rpcwaitq, task, NULL); | ||
223 | if (test_bit(NFS4CLNT_MANAGER_RUNNING, &mds_client->cl_state) == 0) | ||
224 | rpc_wake_up_queued_task(&mds_client->cl_rpcwaitq, task); | ||
225 | goto out; | ||
226 | } | 198 | } |
227 | 199 | ||
228 | /* NFS_PROTO call done callback routines */ | 200 | /* NFS_PROTO call done callback routines */ |
diff --git a/fs/nfs/flexfilelayout/flexfilelayout.c b/fs/nfs/flexfilelayout/flexfilelayout.c index 23542dc44a25..1f2ac3dd0fe5 100644 --- a/fs/nfs/flexfilelayout/flexfilelayout.c +++ b/fs/nfs/flexfilelayout/flexfilelayout.c | |||
@@ -1050,34 +1050,10 @@ static int ff_layout_async_handle_error_v4(struct rpc_task *task, | |||
1050 | { | 1050 | { |
1051 | struct pnfs_layout_hdr *lo = lseg->pls_layout; | 1051 | struct pnfs_layout_hdr *lo = lseg->pls_layout; |
1052 | struct inode *inode = lo->plh_inode; | 1052 | struct inode *inode = lo->plh_inode; |
1053 | struct nfs_server *mds_server = NFS_SERVER(inode); | ||
1054 | |||
1055 | struct nfs4_deviceid_node *devid = FF_LAYOUT_DEVID_NODE(lseg, idx); | 1053 | struct nfs4_deviceid_node *devid = FF_LAYOUT_DEVID_NODE(lseg, idx); |
1056 | struct nfs_client *mds_client = mds_server->nfs_client; | ||
1057 | struct nfs4_slot_table *tbl = &clp->cl_session->fc_slot_table; | 1054 | struct nfs4_slot_table *tbl = &clp->cl_session->fc_slot_table; |
1058 | 1055 | ||
1059 | switch (task->tk_status) { | 1056 | switch (task->tk_status) { |
1060 | /* MDS state errors */ | ||
1061 | case -NFS4ERR_DELEG_REVOKED: | ||
1062 | case -NFS4ERR_ADMIN_REVOKED: | ||
1063 | case -NFS4ERR_BAD_STATEID: | ||
1064 | if (state == NULL) | ||
1065 | break; | ||
1066 | nfs_remove_bad_delegation(state->inode, NULL); | ||
1067 | case -NFS4ERR_OPENMODE: | ||
1068 | if (state == NULL) | ||
1069 | break; | ||
1070 | if (nfs4_schedule_stateid_recovery(mds_server, state) < 0) | ||
1071 | goto out_bad_stateid; | ||
1072 | goto wait_on_recovery; | ||
1073 | case -NFS4ERR_EXPIRED: | ||
1074 | if (state != NULL) { | ||
1075 | if (nfs4_schedule_stateid_recovery(mds_server, state) < 0) | ||
1076 | goto out_bad_stateid; | ||
1077 | } | ||
1078 | nfs4_schedule_lease_recovery(mds_client); | ||
1079 | goto wait_on_recovery; | ||
1080 | /* DS session errors */ | ||
1081 | case -NFS4ERR_BADSESSION: | 1057 | case -NFS4ERR_BADSESSION: |
1082 | case -NFS4ERR_BADSLOT: | 1058 | case -NFS4ERR_BADSLOT: |
1083 | case -NFS4ERR_BAD_HIGH_SLOT: | 1059 | case -NFS4ERR_BAD_HIGH_SLOT: |
@@ -1137,17 +1113,8 @@ reset: | |||
1137 | task->tk_status); | 1113 | task->tk_status); |
1138 | return -NFS4ERR_RESET_TO_MDS; | 1114 | return -NFS4ERR_RESET_TO_MDS; |
1139 | } | 1115 | } |
1140 | out: | ||
1141 | task->tk_status = 0; | 1116 | task->tk_status = 0; |
1142 | return -EAGAIN; | 1117 | return -EAGAIN; |
1143 | out_bad_stateid: | ||
1144 | task->tk_status = -EIO; | ||
1145 | return 0; | ||
1146 | wait_on_recovery: | ||
1147 | rpc_sleep_on(&mds_client->cl_rpcwaitq, task, NULL); | ||
1148 | if (test_bit(NFS4CLNT_MANAGER_RUNNING, &mds_client->cl_state) == 0) | ||
1149 | rpc_wake_up_queued_task(&mds_client->cl_rpcwaitq, task); | ||
1150 | goto out; | ||
1151 | } | 1118 | } |
1152 | 1119 | ||
1153 | /* Retry all errors through either pNFS or MDS except for -EJUKEBOX */ | 1120 | /* Retry all errors through either pNFS or MDS except for -EJUKEBOX */ |