diff options
Diffstat (limited to 'fs/nfs/nfs4proc.c')
-rw-r--r-- | fs/nfs/nfs4proc.c | 28 |
1 files changed, 20 insertions, 8 deletions
diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c index 40da0d5bc5fc..0f9b7541e049 100644 --- a/fs/nfs/nfs4proc.c +++ b/fs/nfs/nfs4proc.c | |||
@@ -1495,7 +1495,7 @@ static int _nfs4_open_expired(struct nfs_open_context *ctx, struct nfs4_state *s | |||
1495 | return ret; | 1495 | return ret; |
1496 | } | 1496 | } |
1497 | 1497 | ||
1498 | static inline int nfs4_do_open_expired(struct nfs_open_context *ctx, struct nfs4_state *state) | 1498 | static int nfs4_do_open_expired(struct nfs_open_context *ctx, struct nfs4_state *state) |
1499 | { | 1499 | { |
1500 | struct nfs_server *server = NFS_SERVER(state->inode); | 1500 | struct nfs_server *server = NFS_SERVER(state->inode); |
1501 | struct nfs4_exception exception = { }; | 1501 | struct nfs4_exception exception = { }; |
@@ -1503,10 +1503,16 @@ static inline int nfs4_do_open_expired(struct nfs_open_context *ctx, struct nfs4 | |||
1503 | 1503 | ||
1504 | do { | 1504 | do { |
1505 | err = _nfs4_open_expired(ctx, state); | 1505 | err = _nfs4_open_expired(ctx, state); |
1506 | if (err != -NFS4ERR_DELAY) | 1506 | switch (err) { |
1507 | break; | 1507 | default: |
1508 | nfs4_handle_exception(server, err, &exception); | 1508 | goto out; |
1509 | case -NFS4ERR_GRACE: | ||
1510 | case -NFS4ERR_DELAY: | ||
1511 | nfs4_handle_exception(server, err, &exception); | ||
1512 | err = 0; | ||
1513 | } | ||
1509 | } while (exception.retry); | 1514 | } while (exception.retry); |
1515 | out: | ||
1510 | return err; | 1516 | return err; |
1511 | } | 1517 | } |
1512 | 1518 | ||
@@ -1988,7 +1994,7 @@ out_drop: | |||
1988 | return 0; | 1994 | return 0; |
1989 | } | 1995 | } |
1990 | 1996 | ||
1991 | void nfs4_close_context(struct nfs_open_context *ctx, int is_sync) | 1997 | static void nfs4_close_context(struct nfs_open_context *ctx, int is_sync) |
1992 | { | 1998 | { |
1993 | if (ctx->state == NULL) | 1999 | if (ctx->state == NULL) |
1994 | return; | 2000 | return; |
@@ -4056,10 +4062,16 @@ static int nfs4_lock_expired(struct nfs4_state *state, struct file_lock *request | |||
4056 | if (test_bit(NFS_DELEGATED_STATE, &state->flags) != 0) | 4062 | if (test_bit(NFS_DELEGATED_STATE, &state->flags) != 0) |
4057 | return 0; | 4063 | return 0; |
4058 | err = _nfs4_do_setlk(state, F_SETLK, request, 0); | 4064 | err = _nfs4_do_setlk(state, F_SETLK, request, 0); |
4059 | if (err != -NFS4ERR_DELAY) | 4065 | switch (err) { |
4060 | break; | 4066 | default: |
4061 | nfs4_handle_exception(server, err, &exception); | 4067 | goto out; |
4068 | case -NFS4ERR_GRACE: | ||
4069 | case -NFS4ERR_DELAY: | ||
4070 | nfs4_handle_exception(server, err, &exception); | ||
4071 | err = 0; | ||
4072 | } | ||
4062 | } while (exception.retry); | 4073 | } while (exception.retry); |
4074 | out: | ||
4063 | return err; | 4075 | return err; |
4064 | } | 4076 | } |
4065 | 4077 | ||