diff options
Diffstat (limited to 'fs/btrfs/disk-io.c')
-rw-r--r-- | fs/btrfs/disk-io.c | 26 |
1 files changed, 24 insertions, 2 deletions
diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c index 9be97716c5e0..da4457f84d78 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c | |||
@@ -43,6 +43,7 @@ | |||
43 | #include "tree-log.h" | 43 | #include "tree-log.h" |
44 | #include "free-space-cache.h" | 44 | #include "free-space-cache.h" |
45 | #include "inode-map.h" | 45 | #include "inode-map.h" |
46 | #include "check-integrity.h" | ||
46 | 47 | ||
47 | static struct extent_io_ops btree_extent_io_ops; | 48 | static struct extent_io_ops btree_extent_io_ops; |
48 | static void end_workqueue_fn(struct btrfs_work *work); | 49 | static void end_workqueue_fn(struct btrfs_work *work); |
@@ -2002,6 +2003,9 @@ struct btrfs_root *open_ctree(struct super_block *sb, | |||
2002 | init_waitqueue_head(&fs_info->scrub_pause_wait); | 2003 | init_waitqueue_head(&fs_info->scrub_pause_wait); |
2003 | init_rwsem(&fs_info->scrub_super_lock); | 2004 | init_rwsem(&fs_info->scrub_super_lock); |
2004 | fs_info->scrub_workers_refcnt = 0; | 2005 | fs_info->scrub_workers_refcnt = 0; |
2006 | #ifdef CONFIG_BTRFS_FS_CHECK_INTEGRITY | ||
2007 | fs_info->check_integrity_print_mask = 0; | ||
2008 | #endif | ||
2005 | 2009 | ||
2006 | spin_lock_init(&fs_info->balance_lock); | 2010 | spin_lock_init(&fs_info->balance_lock); |
2007 | mutex_init(&fs_info->balance_mutex); | 2011 | mutex_init(&fs_info->balance_mutex); |
@@ -2360,6 +2364,19 @@ retry_root_backup: | |||
2360 | btrfs_set_opt(fs_info->mount_opt, SSD); | 2364 | btrfs_set_opt(fs_info->mount_opt, SSD); |
2361 | } | 2365 | } |
2362 | 2366 | ||
2367 | #ifdef CONFIG_BTRFS_FS_CHECK_INTEGRITY | ||
2368 | if (btrfs_test_opt(tree_root, CHECK_INTEGRITY)) { | ||
2369 | ret = btrfsic_mount(tree_root, fs_devices, | ||
2370 | btrfs_test_opt(tree_root, | ||
2371 | CHECK_INTEGRITY_INCLUDING_EXTENT_DATA) ? | ||
2372 | 1 : 0, | ||
2373 | fs_info->check_integrity_print_mask); | ||
2374 | if (ret) | ||
2375 | printk(KERN_WARNING "btrfs: failed to initialize" | ||
2376 | " integrity check module %s\n", sb->s_id); | ||
2377 | } | ||
2378 | #endif | ||
2379 | |||
2363 | /* do not make disk changes in broken FS */ | 2380 | /* do not make disk changes in broken FS */ |
2364 | if (btrfs_super_log_root(disk_super) != 0 && | 2381 | if (btrfs_super_log_root(disk_super) != 0 && |
2365 | !(fs_info->fs_state & BTRFS_SUPER_FLAG_ERROR)) { | 2382 | !(fs_info->fs_state & BTRFS_SUPER_FLAG_ERROR)) { |
@@ -2642,7 +2659,7 @@ static int write_dev_supers(struct btrfs_device *device, | |||
2642 | * we fua the first super. The others we allow | 2659 | * we fua the first super. The others we allow |
2643 | * to go down lazy. | 2660 | * to go down lazy. |
2644 | */ | 2661 | */ |
2645 | ret = submit_bh(WRITE_FUA, bh); | 2662 | ret = btrfsic_submit_bh(WRITE_FUA, bh); |
2646 | if (ret) | 2663 | if (ret) |
2647 | errors++; | 2664 | errors++; |
2648 | } | 2665 | } |
@@ -2719,7 +2736,7 @@ static int write_dev_flush(struct btrfs_device *device, int wait) | |||
2719 | device->flush_bio = bio; | 2736 | device->flush_bio = bio; |
2720 | 2737 | ||
2721 | bio_get(bio); | 2738 | bio_get(bio); |
2722 | submit_bio(WRITE_FLUSH, bio); | 2739 | btrfsic_submit_bio(WRITE_FLUSH, bio); |
2723 | 2740 | ||
2724 | return 0; | 2741 | return 0; |
2725 | } | 2742 | } |
@@ -3068,6 +3085,11 @@ int close_ctree(struct btrfs_root *root) | |||
3068 | btrfs_stop_workers(&fs_info->caching_workers); | 3085 | btrfs_stop_workers(&fs_info->caching_workers); |
3069 | btrfs_stop_workers(&fs_info->readahead_workers); | 3086 | btrfs_stop_workers(&fs_info->readahead_workers); |
3070 | 3087 | ||
3088 | #ifdef CONFIG_BTRFS_FS_CHECK_INTEGRITY | ||
3089 | if (btrfs_test_opt(root, CHECK_INTEGRITY)) | ||
3090 | btrfsic_unmount(root, fs_info->fs_devices); | ||
3091 | #endif | ||
3092 | |||
3071 | btrfs_close_devices(fs_info->fs_devices); | 3093 | btrfs_close_devices(fs_info->fs_devices); |
3072 | btrfs_mapping_tree_free(&fs_info->mapping_tree); | 3094 | btrfs_mapping_tree_free(&fs_info->mapping_tree); |
3073 | 3095 | ||