Commit b8883b61 authored by Sun YangKai's avatar Sun YangKai Committed by David Sterba
Browse files

btrfs: hold space_info->lock when clearing periodic reclaim ready



btrfs_set_periodic_reclaim_ready() requires space_info->lock to be held,
as enforced by lockdep_assert_held(). However, btrfs_reclaim_sweep() was
calling it after do_reclaim_sweep() returns, at which point
space_info->lock is no longer held.

Fix this by explicitly acquiring space_info->lock before clearing the
periodic reclaim ready flag in btrfs_reclaim_sweep().

Reported-by: default avatarChris Mason <clm@meta.com>
Link: https://lore.kernel.org/linux-btrfs/20260208182556.891815-1-clm@meta.com/


Fixes: 19eff93d ("btrfs: fix periodic reclaim condition")
Reviewed-by: default avatarBoris Burkov <boris@bur.io>
Signed-off-by: default avatarSun YangKai <sunk67188@gmail.com>
Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
parent b85cfdf4
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -2194,8 +2194,11 @@ void btrfs_reclaim_sweep(const struct btrfs_fs_info *fs_info)
		if (!btrfs_should_periodic_reclaim(space_info))
			continue;
		for (raid = 0; raid < BTRFS_NR_RAID_TYPES; raid++) {
			if (do_reclaim_sweep(space_info, raid))
			if (do_reclaim_sweep(space_info, raid)) {
				spin_lock(&space_info->lock);
				btrfs_set_periodic_reclaim_ready(space_info, false);
				spin_unlock(&space_info->lock);
			}
		}
	}
}