btrfs: reinitialize scrub workers
Scrub starts the workers each time a scrub starts and stops them after it finished. This patch adds an initialization for the workers before each start, otherwise the workers behave strangely. Signed-off-by: Arne Jansen <sensille@gmx.net>
This commit is contained in:
parent
8c51032f97
commit
632dd772fc
|
@ -1668,8 +1668,6 @@ struct btrfs_root *open_ctree(struct super_block *sb,
|
||||||
init_waitqueue_head(&fs_info->scrub_pause_wait);
|
init_waitqueue_head(&fs_info->scrub_pause_wait);
|
||||||
init_rwsem(&fs_info->scrub_super_lock);
|
init_rwsem(&fs_info->scrub_super_lock);
|
||||||
fs_info->scrub_workers_refcnt = 0;
|
fs_info->scrub_workers_refcnt = 0;
|
||||||
btrfs_init_workers(&fs_info->scrub_workers, "scrub",
|
|
||||||
fs_info->thread_pool_size, &fs_info->generic_worker);
|
|
||||||
|
|
||||||
sb->s_blocksize = 4096;
|
sb->s_blocksize = 4096;
|
||||||
sb->s_blocksize_bits = blksize_bits(4096);
|
sb->s_blocksize_bits = blksize_bits(4096);
|
||||||
|
|
|
@ -1166,8 +1166,12 @@ static noinline_for_stack int scrub_workers_get(struct btrfs_root *root)
|
||||||
struct btrfs_fs_info *fs_info = root->fs_info;
|
struct btrfs_fs_info *fs_info = root->fs_info;
|
||||||
|
|
||||||
mutex_lock(&fs_info->scrub_lock);
|
mutex_lock(&fs_info->scrub_lock);
|
||||||
if (fs_info->scrub_workers_refcnt == 0)
|
if (fs_info->scrub_workers_refcnt == 0) {
|
||||||
|
btrfs_init_workers(&fs_info->scrub_workers, "scrub",
|
||||||
|
fs_info->thread_pool_size, &fs_info->generic_worker);
|
||||||
|
fs_info->scrub_workers.idle_thresh = 4;
|
||||||
btrfs_start_workers(&fs_info->scrub_workers, 1);
|
btrfs_start_workers(&fs_info->scrub_workers, 1);
|
||||||
|
}
|
||||||
++fs_info->scrub_workers_refcnt;
|
++fs_info->scrub_workers_refcnt;
|
||||||
mutex_unlock(&fs_info->scrub_lock);
|
mutex_unlock(&fs_info->scrub_lock);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue