diff options
Diffstat (limited to 'fs/nfs/filelayout/filelayout.c')
-rw-r--r-- | fs/nfs/filelayout/filelayout.c | 28 |
1 files changed, 0 insertions, 28 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 */ |