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: Anna Schumaker <Anna.Schumaker@Netapp.com> Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
This commit is contained in:
		
							parent
							
								
									0f7a622ca6
								
							
						
					
					
						commit
						61beef75cc
					
				| @ -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)) { | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user