aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorQu Wenruo <quwenruo@cn.fujitsu.com>2014-02-27 21:46:08 -0500
committerJosef Bacik <jbacik@fb.com>2014-03-10 15:17:07 -0400
commita8c93d4ef6f6727764a61a2ee1c1878a755637c5 (patch)
tree01979e4ce865b8a3bb0c498054800d7b73ab1e9e
parentafe3d24267926eb78ba863016bdd65cfe718aef5 (diff)
btrfs: Replace fs_info->submit_workers with btrfs_workqueue.
Much like the fs_info->workers, replace the fs_info->submit_workers use the same btrfs_workqueue. Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com> Tested-by: David Sterba <dsterba@suse.cz> Signed-off-by: Josef Bacik <jbacik@fb.com>
-rw-r--r--fs/btrfs/ctree.h2
-rw-r--r--fs/btrfs/disk-io.c17
-rw-r--r--fs/btrfs/super.c2
-rw-r--r--fs/btrfs/volumes.c11
-rw-r--r--fs/btrfs/volumes.h2
5 files changed, 18 insertions, 16 deletions
diff --git a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h
index 3b2c30d870e1..abed94213e6a 100644
--- a/fs/btrfs/ctree.h
+++ b/fs/btrfs/ctree.h
@@ -1515,7 +1515,7 @@ struct btrfs_fs_info {
1515 struct btrfs_workers endio_meta_write_workers; 1515 struct btrfs_workers endio_meta_write_workers;
1516 struct btrfs_workers endio_write_workers; 1516 struct btrfs_workers endio_write_workers;
1517 struct btrfs_workers endio_freespace_worker; 1517 struct btrfs_workers endio_freespace_worker;
1518 struct btrfs_workers submit_workers; 1518 struct btrfs_workqueue_struct *submit_workers;
1519 struct btrfs_workers caching_workers; 1519 struct btrfs_workers caching_workers;
1520 struct btrfs_workers readahead_workers; 1520 struct btrfs_workers readahead_workers;
1521 1521
diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c
index 7eeb45f649bf..420328bacf49 100644
--- a/fs/btrfs/disk-io.c
+++ b/fs/btrfs/disk-io.c
@@ -2006,7 +2006,7 @@ static void btrfs_stop_all_workers(struct btrfs_fs_info *fs_info)
2006 btrfs_stop_workers(&fs_info->endio_meta_write_workers); 2006 btrfs_stop_workers(&fs_info->endio_meta_write_workers);
2007 btrfs_stop_workers(&fs_info->endio_write_workers); 2007 btrfs_stop_workers(&fs_info->endio_write_workers);
2008 btrfs_stop_workers(&fs_info->endio_freespace_worker); 2008 btrfs_stop_workers(&fs_info->endio_freespace_worker);
2009 btrfs_stop_workers(&fs_info->submit_workers); 2009 btrfs_destroy_workqueue(fs_info->submit_workers);
2010 btrfs_stop_workers(&fs_info->delayed_workers); 2010 btrfs_stop_workers(&fs_info->delayed_workers);
2011 btrfs_stop_workers(&fs_info->caching_workers); 2011 btrfs_stop_workers(&fs_info->caching_workers);
2012 btrfs_stop_workers(&fs_info->readahead_workers); 2012 btrfs_stop_workers(&fs_info->readahead_workers);
@@ -2486,18 +2486,19 @@ int open_ctree(struct super_block *sb,
2486 btrfs_init_workers(&fs_info->flush_workers, "flush_delalloc", 2486 btrfs_init_workers(&fs_info->flush_workers, "flush_delalloc",
2487 fs_info->thread_pool_size, NULL); 2487 fs_info->thread_pool_size, NULL);
2488 2488
2489 btrfs_init_workers(&fs_info->submit_workers, "submit",
2490 min_t(u64, fs_devices->num_devices,
2491 fs_info->thread_pool_size), NULL);
2492 2489
2493 btrfs_init_workers(&fs_info->caching_workers, "cache", 2490 btrfs_init_workers(&fs_info->caching_workers, "cache",
2494 fs_info->thread_pool_size, NULL); 2491 fs_info->thread_pool_size, NULL);
2495 2492
2496 /* a higher idle thresh on the submit workers makes it much more 2493 /*
2494 * a higher idle thresh on the submit workers makes it much more
2497 * likely that bios will be send down in a sane order to the 2495 * likely that bios will be send down in a sane order to the
2498 * devices 2496 * devices
2499 */ 2497 */
2500 fs_info->submit_workers.idle_thresh = 64; 2498 fs_info->submit_workers =
2499 btrfs_alloc_workqueue("submit", flags,
2500 min_t(u64, fs_devices->num_devices,
2501 max_active), 64);
2501 2502
2502 btrfs_init_workers(&fs_info->fixup_workers, "fixup", 1, 2503 btrfs_init_workers(&fs_info->fixup_workers, "fixup", 1,
2503 &fs_info->generic_worker); 2504 &fs_info->generic_worker);
@@ -2548,7 +2549,6 @@ int open_ctree(struct super_block *sb,
2548 * return -ENOMEM if any of these fail. 2549 * return -ENOMEM if any of these fail.
2549 */ 2550 */
2550 ret = btrfs_start_workers(&fs_info->generic_worker); 2551 ret = btrfs_start_workers(&fs_info->generic_worker);
2551 ret |= btrfs_start_workers(&fs_info->submit_workers);
2552 ret |= btrfs_start_workers(&fs_info->fixup_workers); 2552 ret |= btrfs_start_workers(&fs_info->fixup_workers);
2553 ret |= btrfs_start_workers(&fs_info->endio_workers); 2553 ret |= btrfs_start_workers(&fs_info->endio_workers);
2554 ret |= btrfs_start_workers(&fs_info->endio_meta_workers); 2554 ret |= btrfs_start_workers(&fs_info->endio_meta_workers);
@@ -2566,7 +2566,8 @@ int open_ctree(struct super_block *sb,
2566 err = -ENOMEM; 2566 err = -ENOMEM;
2567 goto fail_sb_buffer; 2567 goto fail_sb_buffer;
2568 } 2568 }
2569 if (!(fs_info->workers && fs_info->delalloc_workers)) { 2569 if (!(fs_info->workers && fs_info->delalloc_workers &&
2570 fs_info->submit_workers)) {
2570 err = -ENOMEM; 2571 err = -ENOMEM;
2571 goto fail_sb_buffer; 2572 goto fail_sb_buffer;
2572 } 2573 }
diff --git a/fs/btrfs/super.c b/fs/btrfs/super.c
index be0019903264..9ed559ebe914 100644
--- a/fs/btrfs/super.c
+++ b/fs/btrfs/super.c
@@ -1326,7 +1326,7 @@ static void btrfs_resize_thread_pool(struct btrfs_fs_info *fs_info,
1326 btrfs_set_max_workers(&fs_info->generic_worker, new_pool_size); 1326 btrfs_set_max_workers(&fs_info->generic_worker, new_pool_size);
1327 btrfs_workqueue_set_max(fs_info->workers, new_pool_size); 1327 btrfs_workqueue_set_max(fs_info->workers, new_pool_size);
1328 btrfs_workqueue_set_max(fs_info->delalloc_workers, new_pool_size); 1328 btrfs_workqueue_set_max(fs_info->delalloc_workers, new_pool_size);
1329 btrfs_set_max_workers(&fs_info->submit_workers, new_pool_size); 1329 btrfs_workqueue_set_max(fs_info->submit_workers, new_pool_size);
1330 btrfs_set_max_workers(&fs_info->caching_workers, new_pool_size); 1330 btrfs_set_max_workers(&fs_info->caching_workers, new_pool_size);
1331 btrfs_set_max_workers(&fs_info->fixup_workers, new_pool_size); 1331 btrfs_set_max_workers(&fs_info->fixup_workers, new_pool_size);
1332 btrfs_set_max_workers(&fs_info->endio_workers, new_pool_size); 1332 btrfs_set_max_workers(&fs_info->endio_workers, new_pool_size);
diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c
index 82a63b1a36ef..0066cff077ce 100644
--- a/fs/btrfs/volumes.c
+++ b/fs/btrfs/volumes.c
@@ -415,7 +415,8 @@ loop_lock:
415 device->running_pending = 1; 415 device->running_pending = 1;
416 416
417 spin_unlock(&device->io_lock); 417 spin_unlock(&device->io_lock);
418 btrfs_requeue_work(&device->work); 418 btrfs_queue_work(fs_info->submit_workers,
419 &device->work);
419 goto done; 420 goto done;
420 } 421 }
421 /* unplug every 64 requests just for good measure */ 422 /* unplug every 64 requests just for good measure */
@@ -439,7 +440,7 @@ done:
439 blk_finish_plug(&plug); 440 blk_finish_plug(&plug);
440} 441}
441 442
442static void pending_bios_fn(struct btrfs_work *work) 443static void pending_bios_fn(struct btrfs_work_struct *work)
443{ 444{
444 struct btrfs_device *device; 445 struct btrfs_device *device;
445 446
@@ -5379,8 +5380,8 @@ static noinline void btrfs_schedule_bio(struct btrfs_root *root,
5379 spin_unlock(&device->io_lock); 5380 spin_unlock(&device->io_lock);
5380 5381
5381 if (should_queue) 5382 if (should_queue)
5382 btrfs_queue_worker(&root->fs_info->submit_workers, 5383 btrfs_queue_work(root->fs_info->submit_workers,
5383 &device->work); 5384 &device->work);
5384} 5385}
5385 5386
5386static int bio_size_ok(struct block_device *bdev, struct bio *bio, 5387static int bio_size_ok(struct block_device *bdev, struct bio *bio,
@@ -5668,7 +5669,7 @@ struct btrfs_device *btrfs_alloc_device(struct btrfs_fs_info *fs_info,
5668 else 5669 else
5669 generate_random_uuid(dev->uuid); 5670 generate_random_uuid(dev->uuid);
5670 5671
5671 dev->work.func = pending_bios_fn; 5672 btrfs_init_work(&dev->work, pending_bios_fn, NULL, NULL);
5672 5673
5673 return dev; 5674 return dev;
5674} 5675}
diff --git a/fs/btrfs/volumes.h b/fs/btrfs/volumes.h
index 80754f9dd3df..5d9a03773ca6 100644
--- a/fs/btrfs/volumes.h
+++ b/fs/btrfs/volumes.h
@@ -95,7 +95,7 @@ struct btrfs_device {
95 /* per-device scrub information */ 95 /* per-device scrub information */
96 struct scrub_ctx *scrub_device; 96 struct scrub_ctx *scrub_device;
97 97
98 struct btrfs_work work; 98 struct btrfs_work_struct work;
99 struct rcu_head rcu; 99 struct rcu_head rcu;
100 struct work_struct rcu_work; 100 struct work_struct rcu_work;
101 101