NFS: Clear up state owner lock usage
[linux-2.6-block.git] / fs / nfs / nfs4proc.c
index 7dd8aca31c29b9c0079dce94136e70d716072f78..18eb31c1ea0b73747e3f801d02d6ae7a39651e92 100644 (file)
@@ -1307,15 +1307,13 @@ static struct nfs4_state *nfs4_try_open_cached(struct nfs4_opendata *opendata)
        int ret = -EAGAIN;
 
        for (;;) {
+               spin_lock(&state->owner->so_lock);
                if (can_open_cached(state, fmode, open_mode)) {
-                       spin_lock(&state->owner->so_lock);
-                       if (can_open_cached(state, fmode, open_mode)) {
-                               update_open_stateflags(state, fmode);
-                               spin_unlock(&state->owner->so_lock);
-                               goto out_return_state;
-                       }
+                       update_open_stateflags(state, fmode);
                        spin_unlock(&state->owner->so_lock);
+                       goto out_return_state;
                }
+               spin_unlock(&state->owner->so_lock);
                rcu_read_lock();
                delegation = rcu_dereference(nfsi->delegation);
                if (!can_open_delegated(delegation, fmode)) {