Patch "netfs/fscache: Add a memory barrier for FSCACHE_VOLUME_CREATING" has been added to the 6.12-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    netfs/fscache: Add a memory barrier for FSCACHE_VOLUME_CREATING

to the 6.12-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     netfs-fscache-add-a-memory-barrier-for-fscache_volum.patch
and it can be found in the queue-6.12 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 60753bc926a5140b23f4aa42ae3a4e0bbb29ddd4
Author: Zizhi Wo <wozizhi@xxxxxxxxxx>
Date:   Thu Nov 7 19:06:49 2024 +0800

    netfs/fscache: Add a memory barrier for FSCACHE_VOLUME_CREATING
    
    [ Upstream commit 22f9400a6f3560629478e0a64247b8fcc811a24d ]
    
    In fscache_create_volume(), there is a missing memory barrier between the
    bit-clearing operation and the wake-up operation. This may cause a
    situation where, after a wake-up, the bit-clearing operation hasn't been
    detected yet, leading to an indefinite wait. The triggering process is as
    follows:
    
      [cookie1]                [cookie2]                  [volume_work]
    fscache_perform_lookup
      fscache_create_volume
                            fscache_perform_lookup
                              fscache_create_volume
                                                    fscache_create_volume_work
                                                      cachefiles_acquire_volume
                                                      clear_and_wake_up_bit
        test_and_set_bit
                                test_and_set_bit
                                  goto maybe_wait
          goto no_wait
    
    In the above process, cookie1 and cookie2 has the same volume. When cookie1
    enters the -no_wait- process, it will clear the bit and wake up the waiting
    process. If a barrier is missing, it may cause cookie2 to remain in the
    -wait- process indefinitely.
    
    In commit 3288666c7256 ("fscache: Use clear_and_wake_up_bit() in
    fscache_create_volume_work()"), barriers were added to similar operations
    in fscache_create_volume_work(), but fscache_create_volume() was missed.
    
    By combining the clear and wake operations into clear_and_wake_up_bit() to
    fix this issue.
    
    Fixes: bfa22da3ed65 ("fscache: Provide and use cache methods to lookup/create/free a volume")
    Signed-off-by: Zizhi Wo <wozizhi@xxxxxxxxxx>
    Link: https://lore.kernel.org/r/20241107110649.3980193-6-wozizhi@xxxxxxxxxx
    Acked-by: David Howells <dhowells@xxxxxxxxxx>
    Signed-off-by: Christian Brauner <brauner@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/fs/netfs/fscache_volume.c b/fs/netfs/fscache_volume.c
index cb75c07b5281a..ced14ac78cc1c 100644
--- a/fs/netfs/fscache_volume.c
+++ b/fs/netfs/fscache_volume.c
@@ -322,8 +322,7 @@ void fscache_create_volume(struct fscache_volume *volume, bool wait)
 	}
 	return;
 no_wait:
-	clear_bit_unlock(FSCACHE_VOLUME_CREATING, &volume->flags);
-	wake_up_bit(&volume->flags, FSCACHE_VOLUME_CREATING);
+	clear_and_wake_up_bit(FSCACHE_VOLUME_CREATING, &volume->flags);
 }
 
 /*




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux