diff options
Diffstat (limited to 'fs/btrfs/ctree.h')
-rw-r--r-- | fs/btrfs/ctree.h | 184 |
1 files changed, 165 insertions, 19 deletions
diff --git a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h index c72ead869507..547b7b05727f 100644 --- a/fs/btrfs/ctree.h +++ b/fs/btrfs/ctree.h | |||
@@ -48,7 +48,7 @@ struct btrfs_ordered_sum; | |||
48 | 48 | ||
49 | #define BTRFS_MAGIC "_BHRfS_M" | 49 | #define BTRFS_MAGIC "_BHRfS_M" |
50 | 50 | ||
51 | #define BTRFS_MAX_MIRRORS 2 | 51 | #define BTRFS_MAX_MIRRORS 3 |
52 | 52 | ||
53 | #define BTRFS_MAX_LEVEL 8 | 53 | #define BTRFS_MAX_LEVEL 8 |
54 | 54 | ||
@@ -142,6 +142,8 @@ struct btrfs_ordered_sum; | |||
142 | 142 | ||
143 | #define BTRFS_EMPTY_SUBVOL_DIR_OBJECTID 2 | 143 | #define BTRFS_EMPTY_SUBVOL_DIR_OBJECTID 2 |
144 | 144 | ||
145 | #define BTRFS_DEV_REPLACE_DEVID 0 | ||
146 | |||
145 | /* | 147 | /* |
146 | * the max metadata block size. This limit is somewhat artificial, | 148 | * the max metadata block size. This limit is somewhat artificial, |
147 | * but the memmove costs go through the roof for larger blocks. | 149 | * but the memmove costs go through the roof for larger blocks. |
@@ -172,6 +174,9 @@ static int btrfs_csum_sizes[] = { 4, 0 }; | |||
172 | /* four bytes for CRC32 */ | 174 | /* four bytes for CRC32 */ |
173 | #define BTRFS_EMPTY_DIR_SIZE 0 | 175 | #define BTRFS_EMPTY_DIR_SIZE 0 |
174 | 176 | ||
177 | /* spefic to btrfs_map_block(), therefore not in include/linux/blk_types.h */ | ||
178 | #define REQ_GET_READ_MIRRORS (1 << 30) | ||
179 | |||
175 | #define BTRFS_FT_UNKNOWN 0 | 180 | #define BTRFS_FT_UNKNOWN 0 |
176 | #define BTRFS_FT_REG_FILE 1 | 181 | #define BTRFS_FT_REG_FILE 1 |
177 | #define BTRFS_FT_DIR 2 | 182 | #define BTRFS_FT_DIR 2 |
@@ -413,7 +418,7 @@ struct btrfs_root_backup { | |||
413 | __le64 bytes_used; | 418 | __le64 bytes_used; |
414 | __le64 num_devices; | 419 | __le64 num_devices; |
415 | /* future */ | 420 | /* future */ |
416 | __le64 unsed_64[4]; | 421 | __le64 unused_64[4]; |
417 | 422 | ||
418 | u8 tree_root_level; | 423 | u8 tree_root_level; |
419 | u8 chunk_root_level; | 424 | u8 chunk_root_level; |
@@ -571,6 +576,7 @@ struct btrfs_path { | |||
571 | unsigned int skip_locking:1; | 576 | unsigned int skip_locking:1; |
572 | unsigned int leave_spinning:1; | 577 | unsigned int leave_spinning:1; |
573 | unsigned int search_commit_root:1; | 578 | unsigned int search_commit_root:1; |
579 | unsigned int really_keep_locks:1; | ||
574 | }; | 580 | }; |
575 | 581 | ||
576 | /* | 582 | /* |
@@ -885,6 +891,59 @@ struct btrfs_dev_stats_item { | |||
885 | __le64 values[BTRFS_DEV_STAT_VALUES_MAX]; | 891 | __le64 values[BTRFS_DEV_STAT_VALUES_MAX]; |
886 | } __attribute__ ((__packed__)); | 892 | } __attribute__ ((__packed__)); |
887 | 893 | ||
894 | #define BTRFS_DEV_REPLACE_ITEM_CONT_READING_FROM_SRCDEV_MODE_ALWAYS 0 | ||
895 | #define BTRFS_DEV_REPLACE_ITEM_CONT_READING_FROM_SRCDEV_MODE_AVOID 1 | ||
896 | #define BTRFS_DEV_REPLACE_ITEM_STATE_NEVER_STARTED 0 | ||
897 | #define BTRFS_DEV_REPLACE_ITEM_STATE_STARTED 1 | ||
898 | #define BTRFS_DEV_REPLACE_ITEM_STATE_SUSPENDED 2 | ||
899 | #define BTRFS_DEV_REPLACE_ITEM_STATE_FINISHED 3 | ||
900 | #define BTRFS_DEV_REPLACE_ITEM_STATE_CANCELED 4 | ||
901 | |||
902 | struct btrfs_dev_replace { | ||
903 | u64 replace_state; /* see #define above */ | ||
904 | u64 time_started; /* seconds since 1-Jan-1970 */ | ||
905 | u64 time_stopped; /* seconds since 1-Jan-1970 */ | ||
906 | atomic64_t num_write_errors; | ||
907 | atomic64_t num_uncorrectable_read_errors; | ||
908 | |||
909 | u64 cursor_left; | ||
910 | u64 committed_cursor_left; | ||
911 | u64 cursor_left_last_write_of_item; | ||
912 | u64 cursor_right; | ||
913 | |||
914 | u64 cont_reading_from_srcdev_mode; /* see #define above */ | ||
915 | |||
916 | int is_valid; | ||
917 | int item_needs_writeback; | ||
918 | struct btrfs_device *srcdev; | ||
919 | struct btrfs_device *tgtdev; | ||
920 | |||
921 | pid_t lock_owner; | ||
922 | atomic_t nesting_level; | ||
923 | struct mutex lock_finishing_cancel_unmount; | ||
924 | struct mutex lock_management_lock; | ||
925 | struct mutex lock; | ||
926 | |||
927 | struct btrfs_scrub_progress scrub_progress; | ||
928 | }; | ||
929 | |||
930 | struct btrfs_dev_replace_item { | ||
931 | /* | ||
932 | * grow this item struct at the end for future enhancements and keep | ||
933 | * the existing values unchanged | ||
934 | */ | ||
935 | __le64 src_devid; | ||
936 | __le64 cursor_left; | ||
937 | __le64 cursor_right; | ||
938 | __le64 cont_reading_from_srcdev_mode; | ||
939 | |||
940 | __le64 replace_state; | ||
941 | __le64 time_started; | ||
942 | __le64 time_stopped; | ||
943 | __le64 num_write_errors; | ||
944 | __le64 num_uncorrectable_read_errors; | ||
945 | } __attribute__ ((__packed__)); | ||
946 | |||
888 | /* different types of block groups (and chunks) */ | 947 | /* different types of block groups (and chunks) */ |
889 | #define BTRFS_BLOCK_GROUP_DATA (1ULL << 0) | 948 | #define BTRFS_BLOCK_GROUP_DATA (1ULL << 0) |
890 | #define BTRFS_BLOCK_GROUP_SYSTEM (1ULL << 1) | 949 | #define BTRFS_BLOCK_GROUP_SYSTEM (1ULL << 1) |
@@ -1333,6 +1392,7 @@ struct btrfs_fs_info { | |||
1333 | struct btrfs_workers generic_worker; | 1392 | struct btrfs_workers generic_worker; |
1334 | struct btrfs_workers workers; | 1393 | struct btrfs_workers workers; |
1335 | struct btrfs_workers delalloc_workers; | 1394 | struct btrfs_workers delalloc_workers; |
1395 | struct btrfs_workers flush_workers; | ||
1336 | struct btrfs_workers endio_workers; | 1396 | struct btrfs_workers endio_workers; |
1337 | struct btrfs_workers endio_meta_workers; | 1397 | struct btrfs_workers endio_meta_workers; |
1338 | struct btrfs_workers endio_meta_write_workers; | 1398 | struct btrfs_workers endio_meta_write_workers; |
@@ -1429,6 +1489,8 @@ struct btrfs_fs_info { | |||
1429 | struct rw_semaphore scrub_super_lock; | 1489 | struct rw_semaphore scrub_super_lock; |
1430 | int scrub_workers_refcnt; | 1490 | int scrub_workers_refcnt; |
1431 | struct btrfs_workers scrub_workers; | 1491 | struct btrfs_workers scrub_workers; |
1492 | struct btrfs_workers scrub_wr_completion_workers; | ||
1493 | struct btrfs_workers scrub_nocow_workers; | ||
1432 | 1494 | ||
1433 | #ifdef CONFIG_BTRFS_FS_CHECK_INTEGRITY | 1495 | #ifdef CONFIG_BTRFS_FS_CHECK_INTEGRITY |
1434 | u32 check_integrity_print_mask; | 1496 | u32 check_integrity_print_mask; |
@@ -1470,6 +1532,11 @@ struct btrfs_fs_info { | |||
1470 | int backup_root_index; | 1532 | int backup_root_index; |
1471 | 1533 | ||
1472 | int num_tolerated_disk_barrier_failures; | 1534 | int num_tolerated_disk_barrier_failures; |
1535 | |||
1536 | /* device replace state */ | ||
1537 | struct btrfs_dev_replace dev_replace; | ||
1538 | |||
1539 | atomic_t mutually_exclusive_operation_running; | ||
1473 | }; | 1540 | }; |
1474 | 1541 | ||
1475 | /* | 1542 | /* |
@@ -1579,7 +1646,7 @@ struct btrfs_root { | |||
1579 | 1646 | ||
1580 | int force_cow; | 1647 | int force_cow; |
1581 | 1648 | ||
1582 | spinlock_t root_times_lock; | 1649 | spinlock_t root_item_lock; |
1583 | }; | 1650 | }; |
1584 | 1651 | ||
1585 | struct btrfs_ioctl_defrag_range_args { | 1652 | struct btrfs_ioctl_defrag_range_args { |
@@ -1723,6 +1790,12 @@ struct btrfs_ioctl_defrag_range_args { | |||
1723 | #define BTRFS_DEV_STATS_KEY 249 | 1790 | #define BTRFS_DEV_STATS_KEY 249 |
1724 | 1791 | ||
1725 | /* | 1792 | /* |
1793 | * Persistantly stores the device replace state in the device tree. | ||
1794 | * The key is built like this: (0, BTRFS_DEV_REPLACE_KEY, 0). | ||
1795 | */ | ||
1796 | #define BTRFS_DEV_REPLACE_KEY 250 | ||
1797 | |||
1798 | /* | ||
1726 | * string items are for debugging. They just store a short string of | 1799 | * string items are for debugging. They just store a short string of |
1727 | * data in the FS | 1800 | * data in the FS |
1728 | */ | 1801 | */ |
@@ -1787,7 +1860,7 @@ struct btrfs_map_token { | |||
1787 | 1860 | ||
1788 | static inline void btrfs_init_map_token (struct btrfs_map_token *token) | 1861 | static inline void btrfs_init_map_token (struct btrfs_map_token *token) |
1789 | { | 1862 | { |
1790 | memset(token, 0, sizeof(*token)); | 1863 | token->kaddr = NULL; |
1791 | } | 1864 | } |
1792 | 1865 | ||
1793 | /* some macros to generate set/get funcs for the struct fields. This | 1866 | /* some macros to generate set/get funcs for the struct fields. This |
@@ -2755,6 +2828,49 @@ BTRFS_SETGET_FUNCS(qgroup_limit_rsv_rfer, struct btrfs_qgroup_limit_item, | |||
2755 | BTRFS_SETGET_FUNCS(qgroup_limit_rsv_excl, struct btrfs_qgroup_limit_item, | 2828 | BTRFS_SETGET_FUNCS(qgroup_limit_rsv_excl, struct btrfs_qgroup_limit_item, |
2756 | rsv_excl, 64); | 2829 | rsv_excl, 64); |
2757 | 2830 | ||
2831 | /* btrfs_dev_replace_item */ | ||
2832 | BTRFS_SETGET_FUNCS(dev_replace_src_devid, | ||
2833 | struct btrfs_dev_replace_item, src_devid, 64); | ||
2834 | BTRFS_SETGET_FUNCS(dev_replace_cont_reading_from_srcdev_mode, | ||
2835 | struct btrfs_dev_replace_item, cont_reading_from_srcdev_mode, | ||
2836 | 64); | ||
2837 | BTRFS_SETGET_FUNCS(dev_replace_replace_state, struct btrfs_dev_replace_item, | ||
2838 | replace_state, 64); | ||
2839 | BTRFS_SETGET_FUNCS(dev_replace_time_started, struct btrfs_dev_replace_item, | ||
2840 | time_started, 64); | ||
2841 | BTRFS_SETGET_FUNCS(dev_replace_time_stopped, struct btrfs_dev_replace_item, | ||
2842 | time_stopped, 64); | ||
2843 | BTRFS_SETGET_FUNCS(dev_replace_num_write_errors, struct btrfs_dev_replace_item, | ||
2844 | num_write_errors, 64); | ||
2845 | BTRFS_SETGET_FUNCS(dev_replace_num_uncorrectable_read_errors, | ||
2846 | struct btrfs_dev_replace_item, num_uncorrectable_read_errors, | ||
2847 | 64); | ||
2848 | BTRFS_SETGET_FUNCS(dev_replace_cursor_left, struct btrfs_dev_replace_item, | ||
2849 | cursor_left, 64); | ||
2850 | BTRFS_SETGET_FUNCS(dev_replace_cursor_right, struct btrfs_dev_replace_item, | ||
2851 | cursor_right, 64); | ||
2852 | |||
2853 | BTRFS_SETGET_STACK_FUNCS(stack_dev_replace_src_devid, | ||
2854 | struct btrfs_dev_replace_item, src_devid, 64); | ||
2855 | BTRFS_SETGET_STACK_FUNCS(stack_dev_replace_cont_reading_from_srcdev_mode, | ||
2856 | struct btrfs_dev_replace_item, | ||
2857 | cont_reading_from_srcdev_mode, 64); | ||
2858 | BTRFS_SETGET_STACK_FUNCS(stack_dev_replace_replace_state, | ||
2859 | struct btrfs_dev_replace_item, replace_state, 64); | ||
2860 | BTRFS_SETGET_STACK_FUNCS(stack_dev_replace_time_started, | ||
2861 | struct btrfs_dev_replace_item, time_started, 64); | ||
2862 | BTRFS_SETGET_STACK_FUNCS(stack_dev_replace_time_stopped, | ||
2863 | struct btrfs_dev_replace_item, time_stopped, 64); | ||
2864 | BTRFS_SETGET_STACK_FUNCS(stack_dev_replace_num_write_errors, | ||
2865 | struct btrfs_dev_replace_item, num_write_errors, 64); | ||
2866 | BTRFS_SETGET_STACK_FUNCS(stack_dev_replace_num_uncorrectable_read_errors, | ||
2867 | struct btrfs_dev_replace_item, | ||
2868 | num_uncorrectable_read_errors, 64); | ||
2869 | BTRFS_SETGET_STACK_FUNCS(stack_dev_replace_cursor_left, | ||
2870 | struct btrfs_dev_replace_item, cursor_left, 64); | ||
2871 | BTRFS_SETGET_STACK_FUNCS(stack_dev_replace_cursor_right, | ||
2872 | struct btrfs_dev_replace_item, cursor_right, 64); | ||
2873 | |||
2758 | static inline struct btrfs_fs_info *btrfs_sb(struct super_block *sb) | 2874 | static inline struct btrfs_fs_info *btrfs_sb(struct super_block *sb) |
2759 | { | 2875 | { |
2760 | return sb->s_fs_info; | 2876 | return sb->s_fs_info; |
@@ -2900,6 +3016,18 @@ void btrfs_create_pending_block_groups(struct btrfs_trans_handle *trans, | |||
2900 | u64 btrfs_reduce_alloc_profile(struct btrfs_root *root, u64 flags); | 3016 | u64 btrfs_reduce_alloc_profile(struct btrfs_root *root, u64 flags); |
2901 | u64 btrfs_get_alloc_profile(struct btrfs_root *root, int data); | 3017 | u64 btrfs_get_alloc_profile(struct btrfs_root *root, int data); |
2902 | void btrfs_clear_space_info_full(struct btrfs_fs_info *info); | 3018 | void btrfs_clear_space_info_full(struct btrfs_fs_info *info); |
3019 | |||
3020 | enum btrfs_reserve_flush_enum { | ||
3021 | /* If we are in the transaction, we can't flush anything.*/ | ||
3022 | BTRFS_RESERVE_NO_FLUSH, | ||
3023 | /* | ||
3024 | * Flushing delalloc may cause deadlock somewhere, in this | ||
3025 | * case, use FLUSH LIMIT | ||
3026 | */ | ||
3027 | BTRFS_RESERVE_FLUSH_LIMIT, | ||
3028 | BTRFS_RESERVE_FLUSH_ALL, | ||
3029 | }; | ||
3030 | |||
2903 | int btrfs_check_data_free_space(struct inode *inode, u64 bytes); | 3031 | int btrfs_check_data_free_space(struct inode *inode, u64 bytes); |
2904 | void btrfs_free_reserved_data_space(struct inode *inode, u64 bytes); | 3032 | void btrfs_free_reserved_data_space(struct inode *inode, u64 bytes); |
2905 | void btrfs_trans_release_metadata(struct btrfs_trans_handle *trans, | 3033 | void btrfs_trans_release_metadata(struct btrfs_trans_handle *trans, |
@@ -2919,19 +3047,13 @@ struct btrfs_block_rsv *btrfs_alloc_block_rsv(struct btrfs_root *root, | |||
2919 | void btrfs_free_block_rsv(struct btrfs_root *root, | 3047 | void btrfs_free_block_rsv(struct btrfs_root *root, |
2920 | struct btrfs_block_rsv *rsv); | 3048 | struct btrfs_block_rsv *rsv); |
2921 | int btrfs_block_rsv_add(struct btrfs_root *root, | 3049 | int btrfs_block_rsv_add(struct btrfs_root *root, |
2922 | struct btrfs_block_rsv *block_rsv, | 3050 | struct btrfs_block_rsv *block_rsv, u64 num_bytes, |
2923 | u64 num_bytes); | 3051 | enum btrfs_reserve_flush_enum flush); |
2924 | int btrfs_block_rsv_add_noflush(struct btrfs_root *root, | ||
2925 | struct btrfs_block_rsv *block_rsv, | ||
2926 | u64 num_bytes); | ||
2927 | int btrfs_block_rsv_check(struct btrfs_root *root, | 3052 | int btrfs_block_rsv_check(struct btrfs_root *root, |
2928 | struct btrfs_block_rsv *block_rsv, int min_factor); | 3053 | struct btrfs_block_rsv *block_rsv, int min_factor); |
2929 | int btrfs_block_rsv_refill(struct btrfs_root *root, | 3054 | int btrfs_block_rsv_refill(struct btrfs_root *root, |
2930 | struct btrfs_block_rsv *block_rsv, | 3055 | struct btrfs_block_rsv *block_rsv, u64 min_reserved, |
2931 | u64 min_reserved); | 3056 | enum btrfs_reserve_flush_enum flush); |
2932 | int btrfs_block_rsv_refill_noflush(struct btrfs_root *root, | ||
2933 | struct btrfs_block_rsv *block_rsv, | ||
2934 | u64 min_reserved); | ||
2935 | int btrfs_block_rsv_migrate(struct btrfs_block_rsv *src_rsv, | 3057 | int btrfs_block_rsv_migrate(struct btrfs_block_rsv *src_rsv, |
2936 | struct btrfs_block_rsv *dst_rsv, | 3058 | struct btrfs_block_rsv *dst_rsv, |
2937 | u64 num_bytes); | 3059 | u64 num_bytes); |
@@ -2955,6 +3077,7 @@ int btrfs_trim_fs(struct btrfs_root *root, struct fstrim_range *range); | |||
2955 | int btrfs_init_space_info(struct btrfs_fs_info *fs_info); | 3077 | int btrfs_init_space_info(struct btrfs_fs_info *fs_info); |
2956 | int btrfs_delayed_refs_qgroup_accounting(struct btrfs_trans_handle *trans, | 3078 | int btrfs_delayed_refs_qgroup_accounting(struct btrfs_trans_handle *trans, |
2957 | struct btrfs_fs_info *fs_info); | 3079 | struct btrfs_fs_info *fs_info); |
3080 | int __get_raid_index(u64 flags); | ||
2958 | /* ctree.c */ | 3081 | /* ctree.c */ |
2959 | int btrfs_bin_search(struct extent_buffer *eb, struct btrfs_key *key, | 3082 | int btrfs_bin_search(struct extent_buffer *eb, struct btrfs_key *key, |
2960 | int level, int *slot); | 3083 | int level, int *slot); |
@@ -3065,6 +3188,9 @@ static inline int btrfs_insert_empty_item(struct btrfs_trans_handle *trans, | |||
3065 | } | 3188 | } |
3066 | 3189 | ||
3067 | int btrfs_next_leaf(struct btrfs_root *root, struct btrfs_path *path); | 3190 | int btrfs_next_leaf(struct btrfs_root *root, struct btrfs_path *path); |
3191 | int btrfs_next_leaf_write(struct btrfs_trans_handle *trans, | ||
3192 | struct btrfs_root *root, struct btrfs_path *path, | ||
3193 | int del); | ||
3068 | int btrfs_next_old_leaf(struct btrfs_root *root, struct btrfs_path *path, | 3194 | int btrfs_next_old_leaf(struct btrfs_root *root, struct btrfs_path *path, |
3069 | u64 time_seq); | 3195 | u64 time_seq); |
3070 | static inline int btrfs_next_old_item(struct btrfs_root *root, | 3196 | static inline int btrfs_next_old_item(struct btrfs_root *root, |
@@ -3157,6 +3283,8 @@ void btrfs_update_root_times(struct btrfs_trans_handle *trans, | |||
3157 | struct btrfs_root *root); | 3283 | struct btrfs_root *root); |
3158 | 3284 | ||
3159 | /* dir-item.c */ | 3285 | /* dir-item.c */ |
3286 | int btrfs_check_dir_item_collision(struct btrfs_root *root, u64 dir, | ||
3287 | const char *name, int name_len); | ||
3160 | int btrfs_insert_dir_item(struct btrfs_trans_handle *trans, | 3288 | int btrfs_insert_dir_item(struct btrfs_trans_handle *trans, |
3161 | struct btrfs_root *root, const char *name, | 3289 | struct btrfs_root *root, const char *name, |
3162 | int name_len, struct inode *dir, | 3290 | int name_len, struct inode *dir, |
@@ -3256,6 +3384,7 @@ int btrfs_lookup_file_extent(struct btrfs_trans_handle *trans, | |||
3256 | struct btrfs_root *root, | 3384 | struct btrfs_root *root, |
3257 | struct btrfs_path *path, u64 objectid, | 3385 | struct btrfs_path *path, u64 objectid, |
3258 | u64 bytenr, int mod); | 3386 | u64 bytenr, int mod); |
3387 | u64 btrfs_file_extent_length(struct btrfs_path *path); | ||
3259 | int btrfs_csum_file_blocks(struct btrfs_trans_handle *trans, | 3388 | int btrfs_csum_file_blocks(struct btrfs_trans_handle *trans, |
3260 | struct btrfs_root *root, | 3389 | struct btrfs_root *root, |
3261 | struct btrfs_ordered_sum *sums); | 3390 | struct btrfs_ordered_sum *sums); |
@@ -3271,6 +3400,19 @@ int btrfs_csum_truncate(struct btrfs_trans_handle *trans, | |||
3271 | int btrfs_lookup_csums_range(struct btrfs_root *root, u64 start, u64 end, | 3400 | int btrfs_lookup_csums_range(struct btrfs_root *root, u64 start, u64 end, |
3272 | struct list_head *list, int search_commit); | 3401 | struct list_head *list, int search_commit); |
3273 | /* inode.c */ | 3402 | /* inode.c */ |
3403 | struct btrfs_delalloc_work { | ||
3404 | struct inode *inode; | ||
3405 | int wait; | ||
3406 | int delay_iput; | ||
3407 | struct completion completion; | ||
3408 | struct list_head list; | ||
3409 | struct btrfs_work work; | ||
3410 | }; | ||
3411 | |||
3412 | struct btrfs_delalloc_work *btrfs_alloc_delalloc_work(struct inode *inode, | ||
3413 | int wait, int delay_iput); | ||
3414 | void btrfs_wait_and_free_delalloc_work(struct btrfs_delalloc_work *work); | ||
3415 | |||
3274 | struct extent_map *btrfs_get_extent_fiemap(struct inode *inode, struct page *page, | 3416 | struct extent_map *btrfs_get_extent_fiemap(struct inode *inode, struct page *page, |
3275 | size_t pg_offset, u64 start, u64 len, | 3417 | size_t pg_offset, u64 start, u64 len, |
3276 | int create); | 3418 | int create); |
@@ -3370,9 +3512,12 @@ void btrfs_get_block_group_info(struct list_head *groups_list, | |||
3370 | struct btrfs_ioctl_space_info *space); | 3512 | struct btrfs_ioctl_space_info *space); |
3371 | 3513 | ||
3372 | /* file.c */ | 3514 | /* file.c */ |
3515 | int btrfs_auto_defrag_init(void); | ||
3516 | void btrfs_auto_defrag_exit(void); | ||
3373 | int btrfs_add_inode_defrag(struct btrfs_trans_handle *trans, | 3517 | int btrfs_add_inode_defrag(struct btrfs_trans_handle *trans, |
3374 | struct inode *inode); | 3518 | struct inode *inode); |
3375 | int btrfs_run_defrag_inodes(struct btrfs_fs_info *fs_info); | 3519 | int btrfs_run_defrag_inodes(struct btrfs_fs_info *fs_info); |
3520 | void btrfs_cleanup_defrag_inodes(struct btrfs_fs_info *fs_info); | ||
3376 | int btrfs_sync_file(struct file *file, loff_t start, loff_t end, int datasync); | 3521 | int btrfs_sync_file(struct file *file, loff_t start, loff_t end, int datasync); |
3377 | void btrfs_drop_extent_cache(struct inode *inode, u64 start, u64 end, | 3522 | void btrfs_drop_extent_cache(struct inode *inode, u64 start, u64 end, |
3378 | int skip_pinned); | 3523 | int skip_pinned); |
@@ -3519,15 +3664,16 @@ int btrfs_reloc_post_snapshot(struct btrfs_trans_handle *trans, | |||
3519 | struct btrfs_pending_snapshot *pending); | 3664 | struct btrfs_pending_snapshot *pending); |
3520 | 3665 | ||
3521 | /* scrub.c */ | 3666 | /* scrub.c */ |
3522 | int btrfs_scrub_dev(struct btrfs_root *root, u64 devid, u64 start, u64 end, | 3667 | int btrfs_scrub_dev(struct btrfs_fs_info *fs_info, u64 devid, u64 start, |
3523 | struct btrfs_scrub_progress *progress, int readonly); | 3668 | u64 end, struct btrfs_scrub_progress *progress, |
3669 | int readonly, int is_dev_replace); | ||
3524 | void btrfs_scrub_pause(struct btrfs_root *root); | 3670 | void btrfs_scrub_pause(struct btrfs_root *root); |
3525 | void btrfs_scrub_pause_super(struct btrfs_root *root); | 3671 | void btrfs_scrub_pause_super(struct btrfs_root *root); |
3526 | void btrfs_scrub_continue(struct btrfs_root *root); | 3672 | void btrfs_scrub_continue(struct btrfs_root *root); |
3527 | void btrfs_scrub_continue_super(struct btrfs_root *root); | 3673 | void btrfs_scrub_continue_super(struct btrfs_root *root); |
3528 | int __btrfs_scrub_cancel(struct btrfs_fs_info *info); | 3674 | int btrfs_scrub_cancel(struct btrfs_fs_info *info); |
3529 | int btrfs_scrub_cancel(struct btrfs_root *root); | 3675 | int btrfs_scrub_cancel_dev(struct btrfs_fs_info *info, |
3530 | int btrfs_scrub_cancel_dev(struct btrfs_root *root, struct btrfs_device *dev); | 3676 | struct btrfs_device *dev); |
3531 | int btrfs_scrub_cancel_devid(struct btrfs_root *root, u64 devid); | 3677 | int btrfs_scrub_cancel_devid(struct btrfs_root *root, u64 devid); |
3532 | int btrfs_scrub_progress(struct btrfs_root *root, u64 devid, | 3678 | int btrfs_scrub_progress(struct btrfs_root *root, u64 devid, |
3533 | struct btrfs_scrub_progress *progress); | 3679 | struct btrfs_scrub_progress *progress); |