From: Zygo Blaxell Date: Wed, 27 Mar 2019 01:12:20 +0000 (-0400) Subject: Revert "btrfs: scrub: fix circular locking dependency warning" X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c86d277e0cafcef3b68de3565fa689f3670a2bb2;p=linux Revert "btrfs: scrub: fix circular locking dependency warning" This reverts commit b0c5526d59c4ccaa2ddc06e6e74148bde936d3e3. --- diff --git a/fs/btrfs/scrub.c b/fs/btrfs/scrub.c index b6bda9761525..bbd1b36f4918 100644 --- a/fs/btrfs/scrub.c +++ b/fs/btrfs/scrub.c @@ -3776,6 +3776,16 @@ fail_scrub_workers: return -ENOMEM; } +static noinline_for_stack void scrub_workers_put(struct btrfs_fs_info *fs_info) +{ + if (--fs_info->scrub_workers_refcnt == 0) { + btrfs_destroy_workqueue(fs_info->scrub_workers); + btrfs_destroy_workqueue(fs_info->scrub_wr_completion_workers); + btrfs_destroy_workqueue(fs_info->scrub_parity_workers); + } + WARN_ON(fs_info->scrub_workers_refcnt < 0); +} + int btrfs_scrub_dev(struct btrfs_fs_info *fs_info, u64 devid, u64 start, u64 end, struct btrfs_scrub_progress *progress, int readonly, int is_dev_replace) @@ -3784,9 +3794,6 @@ int btrfs_scrub_dev(struct btrfs_fs_info *fs_info, u64 devid, u64 start, int ret; struct btrfs_device *dev; unsigned int nofs_flag; - struct btrfs_workqueue *scrub_workers = NULL; - struct btrfs_workqueue *scrub_wr_comp = NULL; - struct btrfs_workqueue *scrub_parity = NULL; if (btrfs_fs_closing(fs_info)) return -EINVAL; @@ -3925,16 +3932,9 @@ int btrfs_scrub_dev(struct btrfs_fs_info *fs_info, u64 devid, u64 start, mutex_lock(&fs_info->scrub_lock); dev->scrub_ctx = NULL; - if (--fs_info->scrub_workers_refcnt == 0) { - scrub_workers = fs_info->scrub_workers; - scrub_wr_comp = fs_info->scrub_wr_completion_workers; - scrub_parity = fs_info->scrub_parity_workers; - } + scrub_workers_put(fs_info); mutex_unlock(&fs_info->scrub_lock); - btrfs_destroy_workqueue(scrub_workers); - btrfs_destroy_workqueue(scrub_wr_comp); - btrfs_destroy_workqueue(scrub_parity); scrub_put_ctx(sctx); return ret;