diff options
Diffstat (limited to 'fs/btrfs/disk-io.c')
-rw-r--r-- | fs/btrfs/disk-io.c | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c index 45cf64fc1e3..77e5dabfd45 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c | |||
@@ -481,9 +481,12 @@ static void end_workqueue_bio(struct bio *bio, int err) | |||
481 | end_io_wq->work.flags = 0; | 481 | end_io_wq->work.flags = 0; |
482 | 482 | ||
483 | if (bio->bi_rw & REQ_WRITE) { | 483 | if (bio->bi_rw & REQ_WRITE) { |
484 | if (end_io_wq->metadata) | 484 | if (end_io_wq->metadata == 1) |
485 | btrfs_queue_worker(&fs_info->endio_meta_write_workers, | 485 | btrfs_queue_worker(&fs_info->endio_meta_write_workers, |
486 | &end_io_wq->work); | 486 | &end_io_wq->work); |
487 | else if (end_io_wq->metadata == 2) | ||
488 | btrfs_queue_worker(&fs_info->endio_freespace_worker, | ||
489 | &end_io_wq->work); | ||
487 | else | 490 | else |
488 | btrfs_queue_worker(&fs_info->endio_write_workers, | 491 | btrfs_queue_worker(&fs_info->endio_write_workers, |
489 | &end_io_wq->work); | 492 | &end_io_wq->work); |
@@ -497,6 +500,13 @@ static void end_workqueue_bio(struct bio *bio, int err) | |||
497 | } | 500 | } |
498 | } | 501 | } |
499 | 502 | ||
503 | /* | ||
504 | * For the metadata arg you want | ||
505 | * | ||
506 | * 0 - if data | ||
507 | * 1 - if normal metadta | ||
508 | * 2 - if writing to the free space cache area | ||
509 | */ | ||
500 | int btrfs_bio_wq_end_io(struct btrfs_fs_info *info, struct bio *bio, | 510 | int btrfs_bio_wq_end_io(struct btrfs_fs_info *info, struct bio *bio, |
501 | int metadata) | 511 | int metadata) |
502 | { | 512 | { |
@@ -1774,6 +1784,8 @@ struct btrfs_root *open_ctree(struct super_block *sb, | |||
1774 | btrfs_init_workers(&fs_info->endio_write_workers, "endio-write", | 1784 | btrfs_init_workers(&fs_info->endio_write_workers, "endio-write", |
1775 | fs_info->thread_pool_size, | 1785 | fs_info->thread_pool_size, |
1776 | &fs_info->generic_worker); | 1786 | &fs_info->generic_worker); |
1787 | btrfs_init_workers(&fs_info->endio_freespace_worker, "freespace-write", | ||
1788 | 1, &fs_info->generic_worker); | ||
1777 | 1789 | ||
1778 | /* | 1790 | /* |
1779 | * endios are largely parallel and should have a very | 1791 | * endios are largely parallel and should have a very |
@@ -1794,6 +1806,7 @@ struct btrfs_root *open_ctree(struct super_block *sb, | |||
1794 | btrfs_start_workers(&fs_info->endio_meta_workers, 1); | 1806 | btrfs_start_workers(&fs_info->endio_meta_workers, 1); |
1795 | btrfs_start_workers(&fs_info->endio_meta_write_workers, 1); | 1807 | btrfs_start_workers(&fs_info->endio_meta_write_workers, 1); |
1796 | btrfs_start_workers(&fs_info->endio_write_workers, 1); | 1808 | btrfs_start_workers(&fs_info->endio_write_workers, 1); |
1809 | btrfs_start_workers(&fs_info->endio_freespace_worker, 1); | ||
1797 | 1810 | ||
1798 | fs_info->bdi.ra_pages *= btrfs_super_num_devices(disk_super); | 1811 | fs_info->bdi.ra_pages *= btrfs_super_num_devices(disk_super); |
1799 | fs_info->bdi.ra_pages = max(fs_info->bdi.ra_pages, | 1812 | fs_info->bdi.ra_pages = max(fs_info->bdi.ra_pages, |
@@ -2035,6 +2048,7 @@ fail_sb_buffer: | |||
2035 | btrfs_stop_workers(&fs_info->endio_meta_workers); | 2048 | btrfs_stop_workers(&fs_info->endio_meta_workers); |
2036 | btrfs_stop_workers(&fs_info->endio_meta_write_workers); | 2049 | btrfs_stop_workers(&fs_info->endio_meta_write_workers); |
2037 | btrfs_stop_workers(&fs_info->endio_write_workers); | 2050 | btrfs_stop_workers(&fs_info->endio_write_workers); |
2051 | btrfs_stop_workers(&fs_info->endio_freespace_worker); | ||
2038 | btrfs_stop_workers(&fs_info->submit_workers); | 2052 | btrfs_stop_workers(&fs_info->submit_workers); |
2039 | fail_iput: | 2053 | fail_iput: |
2040 | invalidate_inode_pages2(fs_info->btree_inode->i_mapping); | 2054 | invalidate_inode_pages2(fs_info->btree_inode->i_mapping); |
@@ -2468,6 +2482,7 @@ int close_ctree(struct btrfs_root *root) | |||
2468 | btrfs_stop_workers(&fs_info->endio_meta_workers); | 2482 | btrfs_stop_workers(&fs_info->endio_meta_workers); |
2469 | btrfs_stop_workers(&fs_info->endio_meta_write_workers); | 2483 | btrfs_stop_workers(&fs_info->endio_meta_write_workers); |
2470 | btrfs_stop_workers(&fs_info->endio_write_workers); | 2484 | btrfs_stop_workers(&fs_info->endio_write_workers); |
2485 | btrfs_stop_workers(&fs_info->endio_freespace_worker); | ||
2471 | btrfs_stop_workers(&fs_info->submit_workers); | 2486 | btrfs_stop_workers(&fs_info->submit_workers); |
2472 | 2487 | ||
2473 | btrfs_close_devices(fs_info->fs_devices); | 2488 | btrfs_close_devices(fs_info->fs_devices); |