aboutsummaryrefslogtreecommitdiffstats
path: root/fs/nfs/filelayout/filelayout.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/nfs/filelayout/filelayout.c')
-rw-r--r--fs/nfs/filelayout/filelayout.c28
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 }
215out:
216 task->tk_status = 0; 196 task->tk_status = 0;
217 return -EAGAIN; 197 return -EAGAIN;
218out_bad_stateid:
219 task->tk_status = -EIO;
220 return 0;
221wait_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 */