aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fs/nfs/filelayout/filelayout.c28
-rw-r--r--fs/nfs/flexfilelayout/flexfilelayout.c33
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 }
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 */
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 }
1140out:
1141 task->tk_status = 0; 1116 task->tk_status = 0;
1142 return -EAGAIN; 1117 return -EAGAIN;
1143out_bad_stateid:
1144 task->tk_status = -EIO;
1145 return 0;
1146wait_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 */