aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fs/nfs/nfs4proc.c25
1 files changed, 11 insertions, 14 deletions
diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
index a1e89e270ad8..f7e05ade5572 100644
--- a/fs/nfs/nfs4proc.c
+++ b/fs/nfs/nfs4proc.c
@@ -1355,19 +1355,18 @@ int nfs4_open_delegation_recall(struct nfs_open_context *ctx, struct nfs4_state
1355 case -NFS4ERR_BAD_HIGH_SLOT: 1355 case -NFS4ERR_BAD_HIGH_SLOT:
1356 case -NFS4ERR_CONN_NOT_BOUND_TO_SESSION: 1356 case -NFS4ERR_CONN_NOT_BOUND_TO_SESSION:
1357 case -NFS4ERR_DEADSESSION: 1357 case -NFS4ERR_DEADSESSION:
1358 set_bit(NFS_DELEGATED_STATE, &state->flags);
1358 nfs4_schedule_session_recovery(server->nfs_client->cl_session, err); 1359 nfs4_schedule_session_recovery(server->nfs_client->cl_session, err);
1360 err = -EAGAIN;
1359 goto out; 1361 goto out;
1360 case -NFS4ERR_STALE_CLIENTID: 1362 case -NFS4ERR_STALE_CLIENTID:
1361 case -NFS4ERR_STALE_STATEID: 1363 case -NFS4ERR_STALE_STATEID:
1364 set_bit(NFS_DELEGATED_STATE, &state->flags);
1362 case -NFS4ERR_EXPIRED: 1365 case -NFS4ERR_EXPIRED:
1363 /* Don't recall a delegation if it was lost */ 1366 /* Don't recall a delegation if it was lost */
1364 nfs4_schedule_lease_recovery(server->nfs_client); 1367 nfs4_schedule_lease_recovery(server->nfs_client);
1368 err = -EAGAIN;
1365 goto out; 1369 goto out;
1366 case -ERESTARTSYS:
1367 /*
1368 * The show must go on: exit, but mark the
1369 * stateid as needing recovery.
1370 */
1371 case -NFS4ERR_DELEG_REVOKED: 1370 case -NFS4ERR_DELEG_REVOKED:
1372 case -NFS4ERR_ADMIN_REVOKED: 1371 case -NFS4ERR_ADMIN_REVOKED:
1373 case -NFS4ERR_BAD_STATEID: 1372 case -NFS4ERR_BAD_STATEID:
@@ -1378,6 +1377,7 @@ int nfs4_open_delegation_recall(struct nfs_open_context *ctx, struct nfs4_state
1378 err = 0; 1377 err = 0;
1379 goto out; 1378 goto out;
1380 } 1379 }
1380 set_bit(NFS_DELEGATED_STATE, &state->flags);
1381 err = nfs4_handle_exception(server, err, &exception); 1381 err = nfs4_handle_exception(server, err, &exception);
1382 } while (exception.retry); 1382 } while (exception.retry);
1383out: 1383out:
@@ -4957,24 +4957,22 @@ int nfs4_lock_delegation_recall(struct nfs4_state *state, struct file_lock *fl)
4957 case 0: 4957 case 0:
4958 case -ESTALE: 4958 case -ESTALE:
4959 goto out; 4959 goto out;
4960 case -NFS4ERR_EXPIRED:
4961 nfs4_schedule_stateid_recovery(server, state);
4962 case -NFS4ERR_STALE_CLIENTID: 4960 case -NFS4ERR_STALE_CLIENTID:
4963 case -NFS4ERR_STALE_STATEID: 4961 case -NFS4ERR_STALE_STATEID:
4962 set_bit(NFS_DELEGATED_STATE, &state->flags);
4963 case -NFS4ERR_EXPIRED:
4964 nfs4_schedule_lease_recovery(server->nfs_client); 4964 nfs4_schedule_lease_recovery(server->nfs_client);
4965 err = -EAGAIN;
4965 goto out; 4966 goto out;
4966 case -NFS4ERR_BADSESSION: 4967 case -NFS4ERR_BADSESSION:
4967 case -NFS4ERR_BADSLOT: 4968 case -NFS4ERR_BADSLOT:
4968 case -NFS4ERR_BAD_HIGH_SLOT: 4969 case -NFS4ERR_BAD_HIGH_SLOT:
4969 case -NFS4ERR_CONN_NOT_BOUND_TO_SESSION: 4970 case -NFS4ERR_CONN_NOT_BOUND_TO_SESSION:
4970 case -NFS4ERR_DEADSESSION: 4971 case -NFS4ERR_DEADSESSION:
4972 set_bit(NFS_DELEGATED_STATE, &state->flags);
4971 nfs4_schedule_session_recovery(server->nfs_client->cl_session, err); 4973 nfs4_schedule_session_recovery(server->nfs_client->cl_session, err);
4974 err = -EAGAIN;
4972 goto out; 4975 goto out;
4973 case -ERESTARTSYS:
4974 /*
4975 * The show must go on: exit, but mark the
4976 * stateid as needing recovery.
4977 */
4978 case -NFS4ERR_DELEG_REVOKED: 4976 case -NFS4ERR_DELEG_REVOKED:
4979 case -NFS4ERR_ADMIN_REVOKED: 4977 case -NFS4ERR_ADMIN_REVOKED:
4980 case -NFS4ERR_BAD_STATEID: 4978 case -NFS4ERR_BAD_STATEID:
@@ -4987,9 +4985,8 @@ int nfs4_lock_delegation_recall(struct nfs4_state *state, struct file_lock *fl)
4987 /* kill_proc(fl->fl_pid, SIGLOST, 1); */ 4985 /* kill_proc(fl->fl_pid, SIGLOST, 1); */
4988 err = 0; 4986 err = 0;
4989 goto out; 4987 goto out;
4990 case -NFS4ERR_DELAY:
4991 break;
4992 } 4988 }
4989 set_bit(NFS_DELEGATED_STATE, &state->flags);
4993 err = nfs4_handle_exception(server, err, &exception); 4990 err = nfs4_handle_exception(server, err, &exception);
4994 } while (exception.retry); 4991 } while (exception.retry);
4995out: 4992out: