mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 12:28:41 +08:00
NFSv4: Fix hangs when recovering open state after a server reboot
When we're using a cached open stateid or a delegation in order to avoid
sending a CLAIM_PREVIOUS open RPC call to the server, we don't have a
new open stateid to present to update_open_stateid().
Instead rely on nfs4_try_open_cached(), just as if we were doing a
normal open.
Fixes: d2bfda2e7a
("NFSv4: don't reprocess cached open CLAIM_PREVIOUS")
Cc: stable@vger.kernel.org
Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
This commit is contained in:
parent
21fd9e8700
commit
6165a16a5a
@ -1980,8 +1980,7 @@ _nfs4_opendata_reclaim_to_nfs4_state(struct nfs4_opendata *data)
|
||||
if (!data->rpc_done) {
|
||||
if (data->rpc_status)
|
||||
return ERR_PTR(data->rpc_status);
|
||||
/* cached opens have already been processed */
|
||||
goto update;
|
||||
return nfs4_try_open_cached(data);
|
||||
}
|
||||
|
||||
ret = nfs_refresh_inode(inode, &data->f_attr);
|
||||
@ -1990,7 +1989,7 @@ _nfs4_opendata_reclaim_to_nfs4_state(struct nfs4_opendata *data)
|
||||
|
||||
if (data->o_res.delegation_type != 0)
|
||||
nfs4_opendata_check_deleg(data, state);
|
||||
update:
|
||||
|
||||
if (!update_open_stateid(state, &data->o_res.stateid,
|
||||
NULL, data->o_arg.fmode))
|
||||
return ERR_PTR(-EAGAIN);
|
||||
|
Loading…
Reference in New Issue
Block a user