diff options
Diffstat (limited to 'fs/btrfs/disk-io.c')
-rw-r--r-- | fs/btrfs/disk-io.c | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c index 9601b13c7d7a..1bf210dadef6 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c | |||
@@ -492,11 +492,11 @@ static int __btree_submit_bio_hook(struct inode *inode, int rw, struct bio *bio, | |||
492 | 492 | ||
493 | /* | 493 | /* |
494 | * when we're called for a write, we're already in the async | 494 | * when we're called for a write, we're already in the async |
495 | * submission context. Just jump ingo btrfs_map_bio | 495 | * submission context. Just jump into btrfs_map_bio |
496 | */ | 496 | */ |
497 | if (rw & (1 << BIO_RW)) { | 497 | if (rw & (1 << BIO_RW)) { |
498 | return btrfs_map_bio(BTRFS_I(inode)->root, rw, bio, | 498 | return btrfs_map_bio(BTRFS_I(inode)->root, rw, bio, |
499 | mirror_num, 0); | 499 | mirror_num, 1); |
500 | } | 500 | } |
501 | 501 | ||
502 | /* | 502 | /* |
@@ -528,6 +528,12 @@ static int btree_writepage(struct page *page, struct writeback_control *wbc) | |||
528 | { | 528 | { |
529 | struct extent_io_tree *tree; | 529 | struct extent_io_tree *tree; |
530 | tree = &BTRFS_I(page->mapping->host)->io_tree; | 530 | tree = &BTRFS_I(page->mapping->host)->io_tree; |
531 | |||
532 | if (current->flags & PF_MEMALLOC) { | ||
533 | redirty_page_for_writepage(wbc, page); | ||
534 | unlock_page(page); | ||
535 | return 0; | ||
536 | } | ||
531 | return extent_write_full_page(tree, page, btree_get_extent, wbc); | 537 | return extent_write_full_page(tree, page, btree_get_extent, wbc); |
532 | } | 538 | } |
533 | 539 | ||
@@ -1363,8 +1369,9 @@ struct btrfs_root *open_ctree(struct super_block *sb, | |||
1363 | * queue work function gets called at interrupt time, and so it | 1369 | * queue work function gets called at interrupt time, and so it |
1364 | * cannot dynamically grow. | 1370 | * cannot dynamically grow. |
1365 | */ | 1371 | */ |
1366 | btrfs_init_workers(&fs_info->workers, fs_info->thread_pool_size); | 1372 | btrfs_init_workers(&fs_info->workers, "worker", |
1367 | btrfs_init_workers(&fs_info->submit_workers, | 1373 | fs_info->thread_pool_size); |
1374 | btrfs_init_workers(&fs_info->submit_workers, "submit", | ||
1368 | min_t(u64, fs_devices->num_devices, | 1375 | min_t(u64, fs_devices->num_devices, |
1369 | fs_info->thread_pool_size)); | 1376 | fs_info->thread_pool_size)); |
1370 | 1377 | ||
@@ -1374,9 +1381,10 @@ struct btrfs_root *open_ctree(struct super_block *sb, | |||
1374 | */ | 1381 | */ |
1375 | fs_info->submit_workers.idle_thresh = 64; | 1382 | fs_info->submit_workers.idle_thresh = 64; |
1376 | 1383 | ||
1377 | btrfs_init_workers(&fs_info->fixup_workers, 1); | 1384 | btrfs_init_workers(&fs_info->fixup_workers, "fixup", 1); |
1378 | btrfs_init_workers(&fs_info->endio_workers, fs_info->thread_pool_size); | 1385 | btrfs_init_workers(&fs_info->endio_workers, "endio", |
1379 | btrfs_init_workers(&fs_info->endio_write_workers, | 1386 | fs_info->thread_pool_size); |
1387 | btrfs_init_workers(&fs_info->endio_write_workers, "endio-write", | ||
1380 | fs_info->thread_pool_size); | 1388 | fs_info->thread_pool_size); |
1381 | 1389 | ||
1382 | /* | 1390 | /* |