btrfs: add support for reclaiming from sub-space space_info
authorNaohiro Aota <naohiro.aota@wdc.com>
Wed, 23 Apr 2025 02:43:53 +0000 (11:43 +0900)
committerDavid Sterba <dsterba@suse.com>
Thu, 15 May 2025 12:30:54 +0000 (14:30 +0200)
Modify btrfs_async_{data,metadata}_reclaim() to run the reclaim process
on the sub-spaces as well.

Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
Signed-off-by: Naohiro Aota <naohiro.aota@wdc.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/space-info.c

index 5b477960ee1f5d430405a702ef7f69520615fdfb..d9087aa81b2130188fedc553d9c5afc4fe6c982c 100644 (file)
@@ -1224,6 +1224,10 @@ static void btrfs_async_reclaim_metadata_space(struct work_struct *work)
        fs_info = container_of(work, struct btrfs_fs_info, async_reclaim_work);
        space_info = btrfs_find_space_info(fs_info, BTRFS_BLOCK_GROUP_METADATA);
        do_async_reclaim_metadata_space(space_info);
+       for (int i = 0; i < BTRFS_SPACE_INFO_SUB_GROUP_MAX; i++) {
+               if (space_info->sub_group[i])
+                       do_async_reclaim_metadata_space(space_info->sub_group[i]);
+       }
 }
 
 /*
@@ -1452,6 +1456,9 @@ static void btrfs_async_reclaim_data_space(struct work_struct *work)
        fs_info = container_of(work, struct btrfs_fs_info, async_data_reclaim_work);
        space_info = fs_info->data_sinfo;
        do_async_reclaim_data_space(space_info);
+       for (int i = 0; i < BTRFS_SPACE_INFO_SUB_GROUP_MAX; i++)
+               if (space_info->sub_group[i])
+                       do_async_reclaim_data_space(space_info->sub_group[i]);
 }
 
 void btrfs_init_async_reclaim_work(struct btrfs_fs_info *fs_info)