Skip to content

Commit 39dc7bd

Browse files
adam900710kdave
authored andcommitted
btrfs: scrub: don't go ordered workqueue for dev-replace
The workqueue fs_info->scrub_worker would go ordered workqueue if it's a device replace operation. However the scrub is relying on multiple workers to do data csum verification, and we always submit several read requests in a row. Thus there is no need to use ordered workqueue just for dev-replace. We have extra synchronization (the main thread will always submit-and-wait for dev-replace writes) to handle it for zoned devices. Signed-off-by: Qu Wenruo <[email protected]> Signed-off-by: David Sterba <[email protected]>
1 parent ae76d8e commit 39dc7bd

File tree

1 file changed

+3
-7
lines changed

1 file changed

+3
-7
lines changed

fs/btrfs/scrub.c

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2777,8 +2777,7 @@ static void scrub_workers_put(struct btrfs_fs_info *fs_info)
27772777
/*
27782778
* get a reference count on fs_info->scrub_workers. start worker if necessary
27792779
*/
2780-
static noinline_for_stack int scrub_workers_get(struct btrfs_fs_info *fs_info,
2781-
int is_dev_replace)
2780+
static noinline_for_stack int scrub_workers_get(struct btrfs_fs_info *fs_info)
27822781
{
27832782
struct workqueue_struct *scrub_workers = NULL;
27842783
unsigned int flags = WQ_FREEZABLE | WQ_UNBOUND;
@@ -2788,10 +2787,7 @@ static noinline_for_stack int scrub_workers_get(struct btrfs_fs_info *fs_info,
27882787
if (refcount_inc_not_zero(&fs_info->scrub_workers_refcnt))
27892788
return 0;
27902789

2791-
if (is_dev_replace)
2792-
scrub_workers = alloc_ordered_workqueue("btrfs-scrub", flags);
2793-
else
2794-
scrub_workers = alloc_workqueue("btrfs-scrub", flags, max_active);
2790+
scrub_workers = alloc_workqueue("btrfs-scrub", flags, max_active);
27952791
if (!scrub_workers)
27962792
return -ENOMEM;
27972793

@@ -2843,7 +2839,7 @@ int btrfs_scrub_dev(struct btrfs_fs_info *fs_info, u64 devid, u64 start,
28432839
if (IS_ERR(sctx))
28442840
return PTR_ERR(sctx);
28452841

2846-
ret = scrub_workers_get(fs_info, is_dev_replace);
2842+
ret = scrub_workers_get(fs_info);
28472843
if (ret)
28482844
goto out_free_ctx;
28492845

0 commit comments

Comments
 (0)