aboutsummaryrefslogtreecommitdiffstats
path: root/fs
diff options
context:
space:
mode:
authorArne Jansen <sensille@gmx.net>2011-06-10 06:07:07 -0400
committerArne Jansen <sensille@gmx.net>2011-06-10 06:14:13 -0400
commit632dd772fcbde2ba37c0e8983bd38ef4a1eac906 (patch)
tree6181590ab930fb20c3efb3f44f88901089b9618b /fs
parent8c51032f978bac5bec5dae0c5de4f85db97c1cc9 (diff)
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>
Diffstat (limited to 'fs')
-rw-r--r--fs/btrfs/disk-io.c2
-rw-r--r--fs/btrfs/scrub.c6
2 files changed, 5 insertions, 3 deletions
diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c
index a203d363184d..7bbbfebe47e4 100644
--- a/fs/btrfs/disk-io.c
+++ b/fs/btrfs/disk-io.c
@@ -1668,8 +1668,6 @@ struct btrfs_root *open_ctree(struct super_block *sb,
1668 init_waitqueue_head(&fs_info->scrub_pause_wait); 1668 init_waitqueue_head(&fs_info->scrub_pause_wait);
1669 init_rwsem(&fs_info->scrub_super_lock); 1669 init_rwsem(&fs_info->scrub_super_lock);
1670 fs_info->scrub_workers_refcnt = 0; 1670 fs_info->scrub_workers_refcnt = 0;
1671 btrfs_init_workers(&fs_info->scrub_workers, "scrub",
1672 fs_info->thread_pool_size, &fs_info->generic_worker);
1673 1671
1674 sb->s_blocksize = 4096; 1672 sb->s_blocksize = 4096;
1675 sb->s_blocksize_bits = blksize_bits(4096); 1673 sb->s_blocksize_bits = blksize_bits(4096);
diff --git a/fs/btrfs/scrub.c b/fs/btrfs/scrub.c
index d5a4108cedaf..92cac19388ed 100644
--- a/fs/btrfs/scrub.c
+++ b/fs/btrfs/scrub.c
@@ -1166,8 +1166,12 @@ static noinline_for_stack int scrub_workers_get(struct btrfs_root *root)
1166 struct btrfs_fs_info *fs_info = root->fs_info; 1166 struct btrfs_fs_info *fs_info = root->fs_info;
1167 1167
1168 mutex_lock(&fs_info->scrub_lock); 1168 mutex_lock(&fs_info->scrub_lock);
1169 if (fs_info->scrub_workers_refcnt == 0) 1169 if (fs_info->scrub_workers_refcnt == 0) {
1170 btrfs_init_workers(&fs_info->scrub_workers, "scrub",
1171 fs_info->thread_pool_size, &fs_info->generic_worker);
1172 fs_info->scrub_workers.idle_thresh = 4;
1170 btrfs_start_workers(&fs_info->scrub_workers, 1); 1173 btrfs_start_workers(&fs_info->scrub_workers, 1);
1174 }
1171 ++fs_info->scrub_workers_refcnt; 1175 ++fs_info->scrub_workers_refcnt;
1172 mutex_unlock(&fs_info->scrub_lock); 1176 mutex_unlock(&fs_info->scrub_lock);
1173 1177