diff options
Diffstat (limited to 'fs')
-rw-r--r-- | fs/btrfs/ctree.h | 1 | ||||
-rw-r--r-- | fs/btrfs/disk-io.c | 4 | ||||
-rw-r--r-- | fs/btrfs/super.c | 10 | ||||
-rw-r--r-- | fs/btrfs/transaction.c | 9 |
4 files changed, 22 insertions, 2 deletions
diff --git a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h index 3708fd7ee83a..52c96db0ec0a 100644 --- a/fs/btrfs/ctree.h +++ b/fs/btrfs/ctree.h | |||
@@ -2023,6 +2023,7 @@ struct btrfs_ioctl_defrag_range_args { | |||
2023 | #define BTRFS_MOUNT_CHECK_INTEGRITY_INCLUDING_EXTENT_DATA (1 << 21) | 2023 | #define BTRFS_MOUNT_CHECK_INTEGRITY_INCLUDING_EXTENT_DATA (1 << 21) |
2024 | #define BTRFS_MOUNT_PANIC_ON_FATAL_ERROR (1 << 22) | 2024 | #define BTRFS_MOUNT_PANIC_ON_FATAL_ERROR (1 << 22) |
2025 | #define BTRFS_MOUNT_RESCAN_UUID_TREE (1 << 23) | 2025 | #define BTRFS_MOUNT_RESCAN_UUID_TREE (1 << 23) |
2026 | #define BTRFS_MOUNT_CHANGE_INODE_CACHE (1 << 24) | ||
2026 | 2027 | ||
2027 | #define BTRFS_DEFAULT_COMMIT_INTERVAL (30) | 2028 | #define BTRFS_DEFAULT_COMMIT_INTERVAL (30) |
2028 | 2029 | ||
diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c index f0e7bbe14823..4f142c986544 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c | |||
@@ -2776,6 +2776,10 @@ retry_root_backup: | |||
2776 | btrfs_set_opt(fs_info->mount_opt, SSD); | 2776 | btrfs_set_opt(fs_info->mount_opt, SSD); |
2777 | } | 2777 | } |
2778 | 2778 | ||
2779 | /* Set the real inode map cache flag */ | ||
2780 | if (btrfs_test_opt(tree_root, CHANGE_INODE_CACHE)) | ||
2781 | btrfs_set_opt(tree_root->fs_info->mount_opt, INODE_MAP_CACHE); | ||
2782 | |||
2779 | #ifdef CONFIG_BTRFS_FS_CHECK_INTEGRITY | 2783 | #ifdef CONFIG_BTRFS_FS_CHECK_INTEGRITY |
2780 | if (btrfs_test_opt(tree_root, CHECK_INTEGRITY)) { | 2784 | if (btrfs_test_opt(tree_root, CHECK_INTEGRITY)) { |
2781 | ret = btrfsic_mount(tree_root, fs_devices, | 2785 | ret = btrfsic_mount(tree_root, fs_devices, |
diff --git a/fs/btrfs/super.c b/fs/btrfs/super.c index f44cc6a0eb27..362aef44a17b 100644 --- a/fs/btrfs/super.c +++ b/fs/btrfs/super.c | |||
@@ -327,7 +327,7 @@ enum { | |||
327 | Opt_check_integrity_print_mask, Opt_fatal_errors, Opt_rescan_uuid_tree, | 327 | Opt_check_integrity_print_mask, Opt_fatal_errors, Opt_rescan_uuid_tree, |
328 | Opt_commit_interval, Opt_barrier, Opt_nodefrag, Opt_nodiscard, | 328 | Opt_commit_interval, Opt_barrier, Opt_nodefrag, Opt_nodiscard, |
329 | Opt_noenospc_debug, Opt_noflushoncommit, Opt_acl, Opt_datacow, | 329 | Opt_noenospc_debug, Opt_noflushoncommit, Opt_acl, Opt_datacow, |
330 | Opt_datasum, Opt_treelog, | 330 | Opt_datasum, Opt_treelog, Opt_noinode_cache, |
331 | Opt_err, | 331 | Opt_err, |
332 | }; | 332 | }; |
333 | 333 | ||
@@ -370,6 +370,7 @@ static match_table_t tokens = { | |||
370 | {Opt_defrag, "autodefrag"}, | 370 | {Opt_defrag, "autodefrag"}, |
371 | {Opt_nodefrag, "noautodefrag"}, | 371 | {Opt_nodefrag, "noautodefrag"}, |
372 | {Opt_inode_cache, "inode_cache"}, | 372 | {Opt_inode_cache, "inode_cache"}, |
373 | {Opt_noinode_cache, "noinode_cache"}, | ||
373 | {Opt_no_space_cache, "nospace_cache"}, | 374 | {Opt_no_space_cache, "nospace_cache"}, |
374 | {Opt_recovery, "recovery"}, | 375 | {Opt_recovery, "recovery"}, |
375 | {Opt_skip_balance, "skip_balance"}, | 376 | {Opt_skip_balance, "skip_balance"}, |
@@ -627,7 +628,12 @@ int btrfs_parse_options(struct btrfs_root *root, char *options) | |||
627 | break; | 628 | break; |
628 | case Opt_inode_cache: | 629 | case Opt_inode_cache: |
629 | btrfs_info(root->fs_info, "enabling inode map caching"); | 630 | btrfs_info(root->fs_info, "enabling inode map caching"); |
630 | btrfs_set_opt(info->mount_opt, INODE_MAP_CACHE); | 631 | btrfs_set_opt(info->mount_opt, CHANGE_INODE_CACHE); |
632 | break; | ||
633 | case Opt_noinode_cache: | ||
634 | if (btrfs_test_opt(root, CHANGE_INODE_CACHE)) | ||
635 | btrfs_info(root->fs_info, "disabling inode map caching"); | ||
636 | btrfs_clear_opt(info->mount_opt, CHANGE_INODE_CACHE); | ||
631 | break; | 637 | break; |
632 | case Opt_clear_cache: | 638 | case Opt_clear_cache: |
633 | btrfs_info(root->fs_info, "force clearing of disk cache"); | 639 | btrfs_info(root->fs_info, "force clearing of disk cache"); |
diff --git a/fs/btrfs/transaction.c b/fs/btrfs/transaction.c index 5e2bfdaf8d14..34cd83184c4a 100644 --- a/fs/btrfs/transaction.c +++ b/fs/btrfs/transaction.c | |||
@@ -1826,6 +1826,15 @@ int btrfs_commit_transaction(struct btrfs_trans_handle *trans, | |||
1826 | goto cleanup_transaction; | 1826 | goto cleanup_transaction; |
1827 | } | 1827 | } |
1828 | 1828 | ||
1829 | /* | ||
1830 | * Since the transaction is done, we should set the inode map cache flag | ||
1831 | * before any other comming transaction. | ||
1832 | */ | ||
1833 | if (btrfs_test_opt(root, CHANGE_INODE_CACHE)) | ||
1834 | btrfs_set_opt(root->fs_info->mount_opt, INODE_MAP_CACHE); | ||
1835 | else | ||
1836 | btrfs_clear_opt(root->fs_info->mount_opt, INODE_MAP_CACHE); | ||
1837 | |||
1829 | /* commit_fs_roots gets rid of all the tree log roots, it is now | 1838 | /* commit_fs_roots gets rid of all the tree log roots, it is now |
1830 | * safe to free the root of tree log roots | 1839 | * safe to free the root of tree log roots |
1831 | */ | 1840 | */ |