diff options
Diffstat (limited to 'fs/nfs/nfs3proc.c')
-rw-r--r-- | fs/nfs/nfs3proc.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/fs/nfs/nfs3proc.c b/fs/nfs/nfs3proc.c index 3f8881d1a050..24992f0a29f2 100644 --- a/fs/nfs/nfs3proc.c +++ b/fs/nfs/nfs3proc.c | |||
@@ -22,14 +22,14 @@ | |||
22 | 22 | ||
23 | #define NFSDBG_FACILITY NFSDBG_PROC | 23 | #define NFSDBG_FACILITY NFSDBG_PROC |
24 | 24 | ||
25 | /* A wrapper to handle the EJUKEBOX error message */ | 25 | /* A wrapper to handle the EJUKEBOX and EKEYEXPIRED error messages */ |
26 | static int | 26 | static int |
27 | nfs3_rpc_wrapper(struct rpc_clnt *clnt, struct rpc_message *msg, int flags) | 27 | nfs3_rpc_wrapper(struct rpc_clnt *clnt, struct rpc_message *msg, int flags) |
28 | { | 28 | { |
29 | int res; | 29 | int res; |
30 | do { | 30 | do { |
31 | res = rpc_call_sync(clnt, msg, flags); | 31 | res = rpc_call_sync(clnt, msg, flags); |
32 | if (res != -EJUKEBOX) | 32 | if (res != -EJUKEBOX && res != -EKEYEXPIRED) |
33 | break; | 33 | break; |
34 | schedule_timeout_killable(NFS_JUKEBOX_RETRY_TIME); | 34 | schedule_timeout_killable(NFS_JUKEBOX_RETRY_TIME); |
35 | res = -ERESTARTSYS; | 35 | res = -ERESTARTSYS; |
@@ -42,9 +42,10 @@ nfs3_rpc_wrapper(struct rpc_clnt *clnt, struct rpc_message *msg, int flags) | |||
42 | static int | 42 | static int |
43 | nfs3_async_handle_jukebox(struct rpc_task *task, struct inode *inode) | 43 | nfs3_async_handle_jukebox(struct rpc_task *task, struct inode *inode) |
44 | { | 44 | { |
45 | if (task->tk_status != -EJUKEBOX) | 45 | if (task->tk_status != -EJUKEBOX && task->tk_status != -EKEYEXPIRED) |
46 | return 0; | 46 | return 0; |
47 | nfs_inc_stats(inode, NFSIOS_DELAY); | 47 | if (task->tk_status == -EJUKEBOX) |
48 | nfs_inc_stats(inode, NFSIOS_DELAY); | ||
48 | task->tk_status = 0; | 49 | task->tk_status = 0; |
49 | rpc_restart_call(task); | 50 | rpc_restart_call(task); |
50 | rpc_delay(task, NFS_JUKEBOX_RETRY_TIME); | 51 | rpc_delay(task, NFS_JUKEBOX_RETRY_TIME); |