NFS: Fix a few more clear_bit() instances that need release semantics
authorTrond Myklebust <trond.myklebust@hammerspace.com>
Tue, 13 Jul 2021 16:28:22 +0000 (12:28 -0400)
committerTrond Myklebust <trond.myklebust@hammerspace.com>
Mon, 4 Oct 2021 00:49:06 +0000 (20:49 -0400)
All these bits are being used as bit locks.

Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
fs/nfs/nfs4state.c
fs/nfs/pagelist.c

index f22818a80c2c718551cc1bf7814ca497d612db0c..ecc4594299d6fef16bdb4140fa7ef99acecab7f3 100644 (file)
@@ -1194,10 +1194,7 @@ static int nfs4_run_state_manager(void *);
 
 static void nfs4_clear_state_manager_bit(struct nfs_client *clp)
 {
-       smp_mb__before_atomic();
-       clear_bit(NFS4CLNT_MANAGER_RUNNING, &clp->cl_state);
-       smp_mb__after_atomic();
-       wake_up_bit(&clp->cl_state, NFS4CLNT_MANAGER_RUNNING);
+       clear_and_wake_up_bit(NFS4CLNT_MANAGER_RUNNING, &clp->cl_state);
        rpc_wake_up(&clp->cl_rpcwaitq);
 }
 
index cc232d1f16f2f9016620a70b642ff80bbdda5080..72333bcaa4c432712dfc2bdb5af20d486fe42908 100644 (file)
@@ -271,8 +271,7 @@ nfs_page_set_headlock(struct nfs_page *req)
 void
 nfs_page_clear_headlock(struct nfs_page *req)
 {
-       smp_mb__before_atomic();
-       clear_bit(PG_HEADLOCK, &req->wb_flags);
+       clear_bit_unlock(PG_HEADLOCK, &req->wb_flags);
        smp_mb__after_atomic();
        if (!test_bit(PG_CONTENDED1, &req->wb_flags))
                return;
@@ -525,12 +524,7 @@ nfs_create_subreq(struct nfs_page *req,
  */
 void nfs_unlock_request(struct nfs_page *req)
 {
-       if (!NFS_WBACK_BUSY(req)) {
-               printk(KERN_ERR "NFS: Invalid unlock attempted\n");
-               BUG();
-       }
-       smp_mb__before_atomic();
-       clear_bit(PG_BUSY, &req->wb_flags);
+       clear_bit_unlock(PG_BUSY, &req->wb_flags);
        smp_mb__after_atomic();
        if (!test_bit(PG_CONTENDED2, &req->wb_flags))
                return;