diff options
author | Qu Wenruo <quwenruo@cn.fujitsu.com> | 2014-02-27 21:46:08 -0500 |
---|---|---|
committer | Josef Bacik <jbacik@fb.com> | 2014-03-10 15:17:07 -0400 |
commit | a8c93d4ef6f6727764a61a2ee1c1878a755637c5 (patch) | |
tree | 01979e4ce865b8a3bb0c498054800d7b73ab1e9e | |
parent | afe3d24267926eb78ba863016bdd65cfe718aef5 (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.h | 2 | ||||
-rw-r--r-- | fs/btrfs/disk-io.c | 17 | ||||
-rw-r--r-- | fs/btrfs/super.c | 2 | ||||
-rw-r--r-- | fs/btrfs/volumes.c | 11 | ||||
-rw-r--r-- | fs/btrfs/volumes.h | 2 |
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 | ||
442 | static void pending_bios_fn(struct btrfs_work *work) | 443 | static 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 | ||
5386 | static int bio_size_ok(struct block_device *bdev, struct bio *bio, | 5387 | static 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 | ||