@@ -3571,7 +3571,6 @@ static noinline_for_stack int scrub_supers(struct scrub_ctx *sctx,
3571
3571
static noinline_for_stack int scrub_workers_get (struct btrfs_fs_info * fs_info ,
3572
3572
int is_dev_replace )
3573
3573
{
3574
- int ret = 0 ;
3575
3574
unsigned int flags = WQ_FREEZABLE | WQ_UNBOUND ;
3576
3575
int max_active = fs_info -> thread_pool_size ;
3577
3576
@@ -3584,34 +3583,36 @@ static noinline_for_stack int scrub_workers_get(struct btrfs_fs_info *fs_info,
3584
3583
fs_info -> scrub_workers =
3585
3584
btrfs_alloc_workqueue ("btrfs-scrub" , flags ,
3586
3585
max_active , 4 );
3587
- if (!fs_info -> scrub_workers ) {
3588
- ret = - ENOMEM ;
3589
- goto out ;
3590
- }
3586
+ if (!fs_info -> scrub_workers )
3587
+ goto fail_scrub_workers ;
3588
+
3591
3589
fs_info -> scrub_wr_completion_workers =
3592
3590
btrfs_alloc_workqueue ("btrfs-scrubwrc" , flags ,
3593
3591
max_active , 2 );
3594
- if (!fs_info -> scrub_wr_completion_workers ) {
3595
- ret = - ENOMEM ;
3596
- goto out ;
3597
- }
3592
+ if (!fs_info -> scrub_wr_completion_workers )
3593
+ goto fail_scrub_wr_completion_workers ;
3594
+
3598
3595
fs_info -> scrub_nocow_workers =
3599
3596
btrfs_alloc_workqueue ("btrfs-scrubnc" , flags , 1 , 0 );
3600
- if (!fs_info -> scrub_nocow_workers ) {
3601
- ret = - ENOMEM ;
3602
- goto out ;
3603
- }
3597
+ if (!fs_info -> scrub_nocow_workers )
3598
+ goto fail_scrub_nocow_workers ;
3604
3599
fs_info -> scrub_parity_workers =
3605
3600
btrfs_alloc_workqueue ("btrfs-scrubparity" , flags ,
3606
3601
max_active , 2 );
3607
- if (!fs_info -> scrub_parity_workers ) {
3608
- ret = - ENOMEM ;
3609
- goto out ;
3610
- }
3602
+ if (!fs_info -> scrub_parity_workers )
3603
+ goto fail_scrub_parity_workers ;
3611
3604
}
3612
3605
++ fs_info -> scrub_workers_refcnt ;
3613
- out :
3614
- return ret ;
3606
+ return 0 ;
3607
+
3608
+ fail_scrub_parity_workers :
3609
+ btrfs_destroy_workqueue (fs_info -> scrub_nocow_workers );
3610
+ fail_scrub_nocow_workers :
3611
+ btrfs_destroy_workqueue (fs_info -> scrub_wr_completion_workers );
3612
+ fail_scrub_wr_completion_workers :
3613
+ btrfs_destroy_workqueue (fs_info -> scrub_workers );
3614
+ fail_scrub_workers :
3615
+ return - ENOMEM ;
3615
3616
}
3616
3617
3617
3618
static noinline_for_stack void scrub_workers_put (struct btrfs_fs_info * fs_info )
0 commit comments