NFSv4.2 fix async copy reboot recovery
authorOlga Kornievskaia <kolga@netapp.com>
Thu, 6 Dec 2018 16:10:36 +0000 (11:10 -0500)
committerAnna Schumaker <Anna.Schumaker@Netapp.com>
Wed, 2 Jan 2019 17:05:19 +0000 (12:05 -0500)
Original commit (e4648aa4f98a "NFS recover from destination server
reboot for copies") used memcmp() and then it was changed to use
nfs4_stateid_match_other() but that function returns opposite of
memcmp. As the result, recovery can't find the copy leading
to copy hanging.

Fixes: 80f42368868e ("NFSv4: Split out NFS v4.2 copy completion functions")
Fixes: cb7a8384dc02 ("NFS: Split out the body of nfs4_reclaim_open_state")
Signed-of-by: Olga Kornievskaia <kolga@netapp.com>
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
fs/nfs/nfs4state.c

index 9555a8a9200a940bc98162db9b43f8246039fffa..02488b50534ac0f18a59590a0213f8954b447127 100644 (file)
@@ -1555,7 +1555,7 @@ static void nfs42_complete_copies(struct nfs4_state_owner *sp, struct nfs4_state
 
        spin_lock(&sp->so_server->nfs_client->cl_lock);
        list_for_each_entry(copy, &sp->so_server->ss_copies, copies) {
-               if (nfs4_stateid_match_other(&state->stateid, &copy->parent_state->stateid))
+               if (!nfs4_stateid_match_other(&state->stateid, &copy->parent_state->stateid))
                        continue;
                copy->flags = 1;
                complete(&copy->completion);