NFS: nfs_inode_find_state_and_recover() fix stateid matching
In nfs_inode_find_state_and_recover() we want to mark for recovery only those stateids that match or are older than the supplied stateid parameter. Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
This commit is contained in:
@@ -1407,7 +1407,7 @@ nfs_state_find_lock_state_by_stateid(struct nfs4_state *state,
|
||||
list_for_each_entry(pos, &state->lock_states, ls_locks) {
|
||||
if (!test_bit(NFS_LOCK_INITIALIZED, &pos->ls_flags))
|
||||
continue;
|
||||
if (nfs4_stateid_match_other(&pos->ls_stateid, stateid))
|
||||
if (nfs4_stateid_match_or_older(&pos->ls_stateid, stateid))
|
||||
return pos;
|
||||
}
|
||||
return NULL;
|
||||
@@ -1441,12 +1441,13 @@ void nfs_inode_find_state_and_recover(struct inode *inode,
|
||||
state = ctx->state;
|
||||
if (state == NULL)
|
||||
continue;
|
||||
if (nfs4_stateid_match_other(&state->stateid, stateid) &&
|
||||
if (nfs4_stateid_match_or_older(&state->stateid, stateid) &&
|
||||
nfs4_state_mark_reclaim_nograce(clp, state)) {
|
||||
found = true;
|
||||
continue;
|
||||
}
|
||||
if (nfs4_stateid_match_other(&state->open_stateid, stateid) &&
|
||||
if (test_bit(NFS_OPEN_STATE, &state->flags) &&
|
||||
nfs4_stateid_match_or_older(&state->open_stateid, stateid) &&
|
||||
nfs4_state_mark_reclaim_nograce(clp, state)) {
|
||||
found = true;
|
||||
continue;
|
||||
|
Reference in New Issue
Block a user