OSDN Git Service

nfsd4: Fix forced-expiry locking
authorJ. Bruce Fields <bfields@redhat.com>
Thu, 12 Aug 2021 20:41:43 +0000 (16:41 -0400)
committerChuck Lever <chuck.lever@oracle.com>
Tue, 17 Aug 2021 15:47:54 +0000 (11:47 -0400)
This should use the network-namespace-wide client_lock, not the
per-client cl_lock.

You shouldn't see any bugs unless you're actually using the
forced-expiry interface introduced by 89c905beccbb.

Fixes: 89c905beccbb "nfsd: allow forced expiration of NFSv4 clients"
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
fs/nfsd/nfs4state.c

index fa67ecd..2bedc78 100644 (file)
@@ -2687,9 +2687,9 @@ static void force_expire_client(struct nfs4_client *clp)
 
        trace_nfsd_clid_admin_expired(&clp->cl_clientid);
 
-       spin_lock(&clp->cl_lock);
+       spin_lock(&nn->client_lock);
        clp->cl_time = 0;
-       spin_unlock(&clp->cl_lock);
+       spin_unlock(&nn->client_lock);
 
        wait_event(expiry_wq, atomic_read(&clp->cl_rpc_users) == 0);
        spin_lock(&nn->client_lock);