The test for state->state == 0 does not tell you that the stateid is in the
process of being freed. It really tells you that the stateid is not yet
initialised...
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
        struct nfs4_state *state;
 
        list_for_each_entry(state, &nfsi->open_states, inode_states) {
-               /* Is this in the process of being freed? */
-               if (state->state == 0)
+               if (state->owner != owner)
                        continue;
-               if (state->owner == owner) {
-                       atomic_inc(&state->count);
+               if (atomic_inc_not_zero(&state->count))
                        return state;
-               }
        }
        return NULL;
 }