diff options
author | Trond Myklebust <Trond.Myklebust@netapp.com> | 2013-03-28 22:01:33 +0400 |
---|---|---|
committer | Trond Myklebust <Trond.Myklebust@netapp.com> | 2013-03-29 00:22:16 +0400 |
commit | 91876b13b8b3cbff5cca8476d4b4eebe5f6038cc (patch) | |
tree | 3a1493eff67c3403392ce7264f5c91f186d41184 /fs/nfs/nfs4state.c | |
parent | 6e3cf2415269894895074f139ef2e95ef14ddd5d (diff) | |
download | linux-91876b13b8b3cbff5cca8476d4b4eebe5f6038cc.tar.xz |
NFSv4: Fix another reboot recovery race
If the open_context for the file is not yet fully initialised,
then open recovery cannot succeed, and since nfs4_state_find_open_context
returns an ENOENT, we end up treating the file as being irrecoverable.
What we really want to do, is just defer the recovery until later.
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Diffstat (limited to 'fs/nfs/nfs4state.c')
-rw-r--r-- | fs/nfs/nfs4state.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/fs/nfs/nfs4state.c b/fs/nfs/nfs4state.c index 685b1e953ed8..b924bdd69494 100644 --- a/fs/nfs/nfs4state.c +++ b/fs/nfs/nfs4state.c @@ -1476,6 +1476,8 @@ restart: */ nfs4_state_mark_recovery_failed(state, status); break; + case -EAGAIN: + ssleep(1); case -NFS4ERR_ADMIN_REVOKED: case -NFS4ERR_STALE_STATEID: case -NFS4ERR_BAD_STATEID: |