]> www.infradead.org Git - users/jedix/linux-maple.git/commit
btrfs: get used bytes while holding lock at btrfs_reclaim_bgs_work()
authorFilipe Manana <fdmanana@suse.com>
Mon, 24 Feb 2025 15:40:26 +0000 (15:40 +0000)
committerDavid Sterba <dsterba@suse.com>
Tue, 18 Mar 2025 19:35:47 +0000 (20:35 +0100)
commitba5d06440cae63edc4f49465baf78f1f43e55c77
tree87fef0d0d6327d1e21267dbfdc9d88aa9083165c
parent1283b8c125a83bf7a7dbe90c33d3472b6d7bf612
btrfs: get used bytes while holding lock at btrfs_reclaim_bgs_work()

At btrfs_reclaim_bgs_work(), we are grabbing twice the used bytes counter
of the block group while not holding the block group's spinlock. This can
result in races, reported by KCSAN and similar tools, since a concurrent
task can be updating that counter while at btrfs_update_block_group().

So avoid these races by grabbing the counter in a critical section
delimited by the block group's spinlock after setting the block group to
RO mode. This also avoids using two different values of the counter in
case it changes in between each read. This silences KCSAN and is required
for the next patch in the series too.

Fixes: 243192b67649 ("btrfs: report reclaim stats in sysfs")
Signed-off-by: Filipe Manana <fdmanana@suse.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/block-group.c