]> git.hungrycats.org Git - linux/commitdiff
btrfs: remove the free space cache endio workqueue
authorTal Zussman <tz2294@columbia.edu>
Thu, 17 Sep 2026 03:59:59 +0000 (23:59 -0400)
committerDavid Sterba <dsterba@suse.com>
Thu, 17 Sep 2026 17:49:47 +0000 (19:49 +0200)
Free space inodes are no longer written to, so nothing queues ordered
extent completion on endio_freespace_worker. Remove it and always use
endio_write_workers in btrfs_queue_ordered_fn().

Assisted-by: Claude:claude-fable-5-1
Signed-off-by: Tal Zussman <tz2294@columbia.edu>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/disk-io.c
fs/btrfs/fs.h
fs/btrfs/ordered-data.c
fs/btrfs/super.c

index 2acd62b325ea0f505aa0c68b8a8f138cfb24f8be..2cf9638cd864e4f2bbb6e7fcf95525b503fda05b 100644 (file)
@@ -1780,7 +1780,6 @@ static void btrfs_stop_all_workers(struct btrfs_fs_info *fs_info)
        if (fs_info->rmw_workers)
                destroy_workqueue(fs_info->rmw_workers);
        btrfs_destroy_workqueue(fs_info->endio_write_workers);
-       btrfs_destroy_workqueue(fs_info->endio_freespace_worker);
        btrfs_destroy_workqueue(fs_info->delayed_workers);
        btrfs_destroy_workqueue(fs_info->caching_workers);
        btrfs_destroy_workqueue(fs_info->flush_workers);
@@ -1991,9 +1990,6 @@ static int btrfs_init_workqueues(struct btrfs_fs_info *fs_info)
        fs_info->endio_write_workers =
                btrfs_alloc_workqueue(fs_info, "endio-write", flags,
                                      max_active, 2);
-       fs_info->endio_freespace_worker =
-               btrfs_alloc_workqueue(fs_info, "freespace-write", flags,
-                                     max_active, 0);
        fs_info->delayed_workers =
                btrfs_alloc_workqueue(fs_info, "delayed-meta", flags,
                                      max_active, 0);
@@ -2006,8 +2002,7 @@ static int btrfs_init_workqueues(struct btrfs_fs_info *fs_info)
        if (!(fs_info->workers &&
              fs_info->delalloc_workers && fs_info->flush_workers &&
              fs_info->endio_workers && fs_info->endio_meta_workers &&
-             fs_info->endio_write_workers &&
-             fs_info->endio_freespace_worker && fs_info->rmw_workers &&
+             fs_info->endio_write_workers && fs_info->rmw_workers &&
              fs_info->caching_workers && fs_info->fixup_workers &&
              fs_info->delayed_workers && fs_info->qgroup_rescan_workers &&
              fs_info->discard_ctl.discard_workers)) {
@@ -4455,9 +4450,8 @@ void __cold close_ctree(struct btrfs_fs_info *fs_info)
         * to finish an ordered extent - end_bbio_compressed_write()
         * calls btrfs_finish_ordered_extent() which in turns does a call to
         * btrfs_queue_ordered_fn(), and that queues the ordered extent
-        * completion either in the endio_write_workers work queue or in the
-        * fs_info->endio_freespace_worker work queue. We flush those queues
-        * below, so before we flush them we must flush this queue for the
+        * completion in the endio_write_workers work queue. We flush that
+        * queue below, so before we flush it we must flush this queue for the
         * workers of compressed writes.
         */
        flush_workqueue(fs_info->endio_workers);
@@ -4483,8 +4477,6 @@ void __cold close_ctree(struct btrfs_fs_info *fs_info)
         * btrfs_finish_ordered_io() when we are unmounting).
         */
        btrfs_flush_workqueue(fs_info->endio_write_workers);
-       /* Ordered extents for free space inodes. */
-       btrfs_flush_workqueue(fs_info->endio_freespace_worker);
        /*
         * Run delayed iputs in case an async reclaim worker is waiting for them
         * to be run as mentioned above.
index 3eba8438593cdede18b1cddfe7bc693200b307f3..441b315e8a989325da568a83a2b6cae765e5921d 100644 (file)
@@ -712,7 +712,6 @@ struct btrfs_fs_info {
        struct workqueue_struct *endio_meta_workers;
        struct workqueue_struct *rmw_workers;
        struct btrfs_workqueue *endio_write_workers;
-       struct btrfs_workqueue *endio_freespace_worker;
        struct btrfs_workqueue *caching_workers;
 
        struct workqueue_struct *fixup_workers;
index b32d4eabe0abe448a9012421e5dee0d2fa9c1007..e9f1cbeb555a4c97e924cc9ad4dea2b88a26ae49 100644 (file)
@@ -417,13 +417,10 @@ static bool can_finish_ordered_extent(struct btrfs_ordered_extent *ordered,
 
 static void btrfs_queue_ordered_fn(struct btrfs_ordered_extent *ordered)
 {
-       struct btrfs_inode *inode = ordered->inode;
-       struct btrfs_fs_info *fs_info = inode->root->fs_info;
-       struct btrfs_workqueue *wq = btrfs_is_free_space_inode(inode) ?
-               fs_info->endio_freespace_worker : fs_info->endio_write_workers;
+       struct btrfs_fs_info *fs_info = ordered->inode->root->fs_info;
 
        btrfs_init_work(&ordered->work, finish_ordered_fn, NULL);
-       btrfs_queue_work(wq, &ordered->work);
+       btrfs_queue_work(fs_info->endio_write_workers, &ordered->work);
 }
 
 void btrfs_finish_ordered_extent(struct btrfs_ordered_extent *ordered,
index 77443ded6db39306a6ba300e49e6c5cefd10812e..b44b16970a6233cba406f20845cd93ed1afbef4a 100644 (file)
@@ -1243,7 +1243,6 @@ static void btrfs_resize_thread_pool(struct btrfs_fs_info *fs_info,
        workqueue_set_max_active(fs_info->endio_workers, new_pool_size);
        workqueue_set_max_active(fs_info->endio_meta_workers, new_pool_size);
        btrfs_workqueue_set_max(fs_info->endio_write_workers, new_pool_size);
-       btrfs_workqueue_set_max(fs_info->endio_freespace_worker, new_pool_size);
        btrfs_workqueue_set_max(fs_info->delayed_workers, new_pool_size);
 }