[PATCH 1/2] btrfs: zoned: use rcu list for iterating devices to collect stats

From: Johannes Thumshirn
Date: Mon Jan 22 2024 - 05:51:45 EST


As btrfs_zoned_should_reclaim only has to iterate the device list in order
to collect stats on the device's total and used bytes, we don't need to
take the full blown mutex, but can iterate the device list in a rcu_read
context.

Signed-off-by: Johannes Thumshirn <johannes.thumshirn@xxxxxxx>
---
fs/btrfs/zoned.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/fs/btrfs/zoned.c b/fs/btrfs/zoned.c
index 168af9d000d1..b7e7b5a5a6fa 100644
--- a/fs/btrfs/zoned.c
+++ b/fs/btrfs/zoned.c
@@ -2423,15 +2423,15 @@ bool btrfs_zoned_should_reclaim(struct btrfs_fs_info *fs_info)
if (fs_info->bg_reclaim_threshold == 0)
return false;

- mutex_lock(&fs_devices->device_list_mutex);
- list_for_each_entry(device, &fs_devices->devices, dev_list) {
+ rcu_read_lock();
+ list_for_each_entry_rcu(device, &fs_devices->devices, dev_list) {
if (!device->bdev)
continue;

total += device->disk_total_bytes;
used += device->bytes_used;
}
- mutex_unlock(&fs_devices->device_list_mutex);
+ rcu_read_unlock();

factor = div64_u64(used * 100, total);
return factor >= fs_info->bg_reclaim_threshold;

--
2.43.0