Patch "btrfs: don't set lock_owner when locking extent buffer for reading" has been added to the 5.10-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

    btrfs: don't set lock_owner when locking extent buffer for reading

to the 5.10-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:
     btrfs-don-t-set-lock_owner-when-locking-extent-buffe.patch
and it can be found in the queue-5.10 subdirectory.

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



commit 1f53bb843e31eb52701d2c6de4afef7a261c499b
Author: Zygo Blaxell <ce3g8jdj@xxxxxxxxxxxxxxxxxxxxx>
Date:   Wed Jun 8 22:39:36 2022 -0400

    btrfs: don't set lock_owner when locking extent buffer for reading
    
    [ Upstream commit 97e86631bccddfbbe0c13f9a9605cdef11d31296 ]
    
    In 196d59ab9ccc "btrfs: switch extent buffer tree lock to rw_semaphore"
    the functions for tree read locking were rewritten, and in the process
    the read lock functions started setting eb->lock_owner = current->pid.
    Previously lock_owner was only set in tree write lock functions.
    
    Read locks are shared, so they don't have exclusive ownership of the
    underlying object, so setting lock_owner to any single value for a
    read lock makes no sense.  It's mostly harmless because write locks
    and read locks are mutually exclusive, and none of the existing code
    in btrfs (btrfs_init_new_buffer and print_eb_refs_lock) cares what
    nonsense is written in lock_owner when no writer is holding the lock.
    
    KCSAN does care, and will complain about the data race incessantly.
    Remove the assignments in the read lock functions because they're
    useless noise.
    
    Fixes: 196d59ab9ccc ("btrfs: switch extent buffer tree lock to rw_semaphore")
    CC: stable@xxxxxxxxxxxxxxx # 5.15+
    Reviewed-by: Nikolay Borisov <nborisov@xxxxxxxx>
    Reviewed-by: Filipe Manana <fdmanana@xxxxxxxx>
    Signed-off-by: Zygo Blaxell <ce3g8jdj@xxxxxxxxxxxxxxxxxxxxx>
    Signed-off-by: David Sterba <dsterba@xxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/fs/btrfs/locking.c b/fs/btrfs/locking.c
index 1e36a66fcefa..3d177ef92ab6 100644
--- a/fs/btrfs/locking.c
+++ b/fs/btrfs/locking.c
@@ -47,7 +47,6 @@ void __btrfs_tree_read_lock(struct extent_buffer *eb, enum btrfs_lock_nesting ne
 		start_ns = ktime_get_ns();
 
 	down_read_nested(&eb->lock, nest);
-	eb->lock_owner = current->pid;
 	trace_btrfs_tree_read_lock(eb, start_ns);
 }
 
@@ -64,7 +63,6 @@ void btrfs_tree_read_lock(struct extent_buffer *eb)
 int btrfs_try_tree_read_lock(struct extent_buffer *eb)
 {
 	if (down_read_trylock(&eb->lock)) {
-		eb->lock_owner = current->pid;
 		trace_btrfs_try_tree_read_lock(eb);
 		return 1;
 	}
@@ -92,7 +90,6 @@ int btrfs_try_tree_write_lock(struct extent_buffer *eb)
 void btrfs_tree_read_unlock(struct extent_buffer *eb)
 {
 	trace_btrfs_tree_read_unlock(eb);
-	eb->lock_owner = 0;
 	up_read(&eb->lock);
 }
 




[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