Commit 61beef75 authored by Anna Schumaker's avatar Anna Schumaker Committed by Trond Myklebust

NFS: Clear up state owner lock usage

can_open_cached() reads values out of the state structure, meaning that
we need the so_lock to have a correct return value.  As a bonus, this
helps clear up some potentially confusing code.
Signed-off-by: default avatarAnna Schumaker <Anna.Schumaker@Netapp.com>
Signed-off-by: default avatarTrond Myklebust <trond.myklebust@primarydata.com>
parent 0f7a622c
...@@ -1307,15 +1307,13 @@ static struct nfs4_state *nfs4_try_open_cached(struct nfs4_opendata *opendata) ...@@ -1307,15 +1307,13 @@ static struct nfs4_state *nfs4_try_open_cached(struct nfs4_opendata *opendata)
int ret = -EAGAIN; int ret = -EAGAIN;
for (;;) { for (;;) {
spin_lock(&state->owner->so_lock);
if (can_open_cached(state, fmode, open_mode)) { if (can_open_cached(state, fmode, open_mode)) {
spin_lock(&state->owner->so_lock); update_open_stateflags(state, fmode);
if (can_open_cached(state, fmode, open_mode)) {
update_open_stateflags(state, fmode);
spin_unlock(&state->owner->so_lock);
goto out_return_state;
}
spin_unlock(&state->owner->so_lock); spin_unlock(&state->owner->so_lock);
goto out_return_state;
} }
spin_unlock(&state->owner->so_lock);
rcu_read_lock(); rcu_read_lock();
delegation = rcu_dereference(nfsi->delegation); delegation = rcu_dereference(nfsi->delegation);
if (!can_open_delegated(delegation, fmode)) { if (!can_open_delegated(delegation, fmode)) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment