diff options
Diffstat (limited to 'fs/btrfs/ctree.h')
-rw-r--r-- | fs/btrfs/ctree.h | 163 |
1 files changed, 122 insertions, 41 deletions
diff --git a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h index 746a7248678e..e9bf86415e86 100644 --- a/fs/btrfs/ctree.h +++ b/fs/btrfs/ctree.h | |||
@@ -34,6 +34,7 @@ | |||
34 | 34 | ||
35 | struct btrfs_trans_handle; | 35 | struct btrfs_trans_handle; |
36 | struct btrfs_transaction; | 36 | struct btrfs_transaction; |
37 | struct btrfs_pending_snapshot; | ||
37 | extern struct kmem_cache *btrfs_trans_handle_cachep; | 38 | extern struct kmem_cache *btrfs_trans_handle_cachep; |
38 | extern struct kmem_cache *btrfs_transaction_cachep; | 39 | extern struct kmem_cache *btrfs_transaction_cachep; |
39 | extern struct kmem_cache *btrfs_bit_radix_cachep; | 40 | extern struct kmem_cache *btrfs_bit_radix_cachep; |
@@ -663,6 +664,7 @@ struct btrfs_csum_item { | |||
663 | #define BTRFS_BLOCK_GROUP_RAID1 (1 << 4) | 664 | #define BTRFS_BLOCK_GROUP_RAID1 (1 << 4) |
664 | #define BTRFS_BLOCK_GROUP_DUP (1 << 5) | 665 | #define BTRFS_BLOCK_GROUP_DUP (1 << 5) |
665 | #define BTRFS_BLOCK_GROUP_RAID10 (1 << 6) | 666 | #define BTRFS_BLOCK_GROUP_RAID10 (1 << 6) |
667 | #define BTRFS_NR_RAID_TYPES 5 | ||
666 | 668 | ||
667 | struct btrfs_block_group_item { | 669 | struct btrfs_block_group_item { |
668 | __le64 used; | 670 | __le64 used; |
@@ -674,42 +676,46 @@ struct btrfs_space_info { | |||
674 | u64 flags; | 676 | u64 flags; |
675 | 677 | ||
676 | u64 total_bytes; /* total bytes in the space */ | 678 | u64 total_bytes; /* total bytes in the space */ |
677 | u64 bytes_used; /* total bytes used on disk */ | 679 | u64 bytes_used; /* total bytes used, |
680 | this does't take mirrors into account */ | ||
678 | u64 bytes_pinned; /* total bytes pinned, will be freed when the | 681 | u64 bytes_pinned; /* total bytes pinned, will be freed when the |
679 | transaction finishes */ | 682 | transaction finishes */ |
680 | u64 bytes_reserved; /* total bytes the allocator has reserved for | 683 | u64 bytes_reserved; /* total bytes the allocator has reserved for |
681 | current allocations */ | 684 | current allocations */ |
682 | u64 bytes_readonly; /* total bytes that are read only */ | 685 | u64 bytes_readonly; /* total bytes that are read only */ |
683 | u64 bytes_super; /* total bytes reserved for the super blocks */ | 686 | |
684 | u64 bytes_root; /* the number of bytes needed to commit a | ||
685 | transaction */ | ||
686 | u64 bytes_may_use; /* number of bytes that may be used for | 687 | u64 bytes_may_use; /* number of bytes that may be used for |
687 | delalloc/allocations */ | 688 | delalloc/allocations */ |
688 | u64 bytes_delalloc; /* number of bytes currently reserved for | 689 | u64 disk_used; /* total bytes used on disk */ |
689 | delayed allocation */ | ||
690 | 690 | ||
691 | int full; /* indicates that we cannot allocate any more | 691 | int full; /* indicates that we cannot allocate any more |
692 | chunks for this space */ | 692 | chunks for this space */ |
693 | int force_alloc; /* set if we need to force a chunk alloc for | 693 | int force_alloc; /* set if we need to force a chunk alloc for |
694 | this space */ | 694 | this space */ |
695 | int force_delalloc; /* make people start doing filemap_flush until | ||
696 | we're under a threshold */ | ||
697 | 695 | ||
698 | struct list_head list; | 696 | struct list_head list; |
699 | 697 | ||
700 | /* for controlling how we free up space for allocations */ | ||
701 | wait_queue_head_t allocate_wait; | ||
702 | wait_queue_head_t flush_wait; | ||
703 | int allocating_chunk; | ||
704 | int flushing; | ||
705 | |||
706 | /* for block groups in our same type */ | 698 | /* for block groups in our same type */ |
707 | struct list_head block_groups; | 699 | struct list_head block_groups[BTRFS_NR_RAID_TYPES]; |
708 | spinlock_t lock; | 700 | spinlock_t lock; |
709 | struct rw_semaphore groups_sem; | 701 | struct rw_semaphore groups_sem; |
710 | atomic_t caching_threads; | 702 | atomic_t caching_threads; |
711 | }; | 703 | }; |
712 | 704 | ||
705 | struct btrfs_block_rsv { | ||
706 | u64 size; | ||
707 | u64 reserved; | ||
708 | u64 freed[2]; | ||
709 | struct btrfs_space_info *space_info; | ||
710 | struct list_head list; | ||
711 | spinlock_t lock; | ||
712 | atomic_t usage; | ||
713 | unsigned int priority:8; | ||
714 | unsigned int durable:1; | ||
715 | unsigned int refill_used:1; | ||
716 | unsigned int full:1; | ||
717 | }; | ||
718 | |||
713 | /* | 719 | /* |
714 | * free clusters are used to claim free space in relatively large chunks, | 720 | * free clusters are used to claim free space in relatively large chunks, |
715 | * allowing us to do less seeky writes. They are used for all metadata | 721 | * allowing us to do less seeky writes. They are used for all metadata |
@@ -760,6 +766,7 @@ struct btrfs_block_group_cache { | |||
760 | spinlock_t lock; | 766 | spinlock_t lock; |
761 | u64 pinned; | 767 | u64 pinned; |
762 | u64 reserved; | 768 | u64 reserved; |
769 | u64 reserved_pinned; | ||
763 | u64 bytes_super; | 770 | u64 bytes_super; |
764 | u64 flags; | 771 | u64 flags; |
765 | u64 sectorsize; | 772 | u64 sectorsize; |
@@ -825,6 +832,22 @@ struct btrfs_fs_info { | |||
825 | /* logical->physical extent mapping */ | 832 | /* logical->physical extent mapping */ |
826 | struct btrfs_mapping_tree mapping_tree; | 833 | struct btrfs_mapping_tree mapping_tree; |
827 | 834 | ||
835 | /* block reservation for extent, checksum and root tree */ | ||
836 | struct btrfs_block_rsv global_block_rsv; | ||
837 | /* block reservation for delay allocation */ | ||
838 | struct btrfs_block_rsv delalloc_block_rsv; | ||
839 | /* block reservation for metadata operations */ | ||
840 | struct btrfs_block_rsv trans_block_rsv; | ||
841 | /* block reservation for chunk tree */ | ||
842 | struct btrfs_block_rsv chunk_block_rsv; | ||
843 | |||
844 | struct btrfs_block_rsv empty_block_rsv; | ||
845 | |||
846 | /* list of block reservations that cross multiple transactions */ | ||
847 | struct list_head durable_block_rsv_list; | ||
848 | |||
849 | struct mutex durable_block_rsv_mutex; | ||
850 | |||
828 | u64 generation; | 851 | u64 generation; |
829 | u64 last_trans_committed; | 852 | u64 last_trans_committed; |
830 | 853 | ||
@@ -927,7 +950,6 @@ struct btrfs_fs_info { | |||
927 | struct btrfs_workers endio_meta_write_workers; | 950 | struct btrfs_workers endio_meta_write_workers; |
928 | struct btrfs_workers endio_write_workers; | 951 | struct btrfs_workers endio_write_workers; |
929 | struct btrfs_workers submit_workers; | 952 | struct btrfs_workers submit_workers; |
930 | struct btrfs_workers enospc_workers; | ||
931 | /* | 953 | /* |
932 | * fixup workers take dirty pages that didn't properly go through | 954 | * fixup workers take dirty pages that didn't properly go through |
933 | * the cow mechanism and make them safe to write. It happens | 955 | * the cow mechanism and make them safe to write. It happens |
@@ -943,6 +965,7 @@ struct btrfs_fs_info { | |||
943 | int do_barriers; | 965 | int do_barriers; |
944 | int closing; | 966 | int closing; |
945 | int log_root_recovering; | 967 | int log_root_recovering; |
968 | int enospc_unlink; | ||
946 | 969 | ||
947 | u64 total_pinned; | 970 | u64 total_pinned; |
948 | 971 | ||
@@ -1012,6 +1035,9 @@ struct btrfs_root { | |||
1012 | struct completion kobj_unregister; | 1035 | struct completion kobj_unregister; |
1013 | struct mutex objectid_mutex; | 1036 | struct mutex objectid_mutex; |
1014 | 1037 | ||
1038 | spinlock_t accounting_lock; | ||
1039 | struct btrfs_block_rsv *block_rsv; | ||
1040 | |||
1015 | struct mutex log_mutex; | 1041 | struct mutex log_mutex; |
1016 | wait_queue_head_t log_writer_wait; | 1042 | wait_queue_head_t log_writer_wait; |
1017 | wait_queue_head_t log_commit_wait[2]; | 1043 | wait_queue_head_t log_commit_wait[2]; |
@@ -1043,7 +1069,6 @@ struct btrfs_root { | |||
1043 | int ref_cows; | 1069 | int ref_cows; |
1044 | int track_dirty; | 1070 | int track_dirty; |
1045 | int in_radix; | 1071 | int in_radix; |
1046 | int clean_orphans; | ||
1047 | 1072 | ||
1048 | u64 defrag_trans_start; | 1073 | u64 defrag_trans_start; |
1049 | struct btrfs_key defrag_progress; | 1074 | struct btrfs_key defrag_progress; |
@@ -1057,8 +1082,11 @@ struct btrfs_root { | |||
1057 | 1082 | ||
1058 | struct list_head root_list; | 1083 | struct list_head root_list; |
1059 | 1084 | ||
1060 | spinlock_t list_lock; | 1085 | spinlock_t orphan_lock; |
1061 | struct list_head orphan_list; | 1086 | struct list_head orphan_list; |
1087 | struct btrfs_block_rsv *orphan_block_rsv; | ||
1088 | int orphan_item_inserted; | ||
1089 | int orphan_cleanup_state; | ||
1062 | 1090 | ||
1063 | spinlock_t inode_lock; | 1091 | spinlock_t inode_lock; |
1064 | /* red-black tree that keeps track of in-memory inodes */ | 1092 | /* red-black tree that keeps track of in-memory inodes */ |
@@ -1965,6 +1993,9 @@ void btrfs_put_block_group(struct btrfs_block_group_cache *cache); | |||
1965 | int btrfs_run_delayed_refs(struct btrfs_trans_handle *trans, | 1993 | int btrfs_run_delayed_refs(struct btrfs_trans_handle *trans, |
1966 | struct btrfs_root *root, unsigned long count); | 1994 | struct btrfs_root *root, unsigned long count); |
1967 | int btrfs_lookup_extent(struct btrfs_root *root, u64 start, u64 len); | 1995 | int btrfs_lookup_extent(struct btrfs_root *root, u64 start, u64 len); |
1996 | int btrfs_lookup_extent_info(struct btrfs_trans_handle *trans, | ||
1997 | struct btrfs_root *root, u64 bytenr, | ||
1998 | u64 num_bytes, u64 *refs, u64 *flags); | ||
1968 | int btrfs_pin_extent(struct btrfs_root *root, | 1999 | int btrfs_pin_extent(struct btrfs_root *root, |
1969 | u64 bytenr, u64 num, int reserved); | 2000 | u64 bytenr, u64 num, int reserved); |
1970 | int btrfs_drop_leaf_ref(struct btrfs_trans_handle *trans, | 2001 | int btrfs_drop_leaf_ref(struct btrfs_trans_handle *trans, |
@@ -1984,10 +2015,10 @@ struct extent_buffer *btrfs_alloc_free_block(struct btrfs_trans_handle *trans, | |||
1984 | u64 parent, u64 root_objectid, | 2015 | u64 parent, u64 root_objectid, |
1985 | struct btrfs_disk_key *key, int level, | 2016 | struct btrfs_disk_key *key, int level, |
1986 | u64 hint, u64 empty_size); | 2017 | u64 hint, u64 empty_size); |
1987 | int btrfs_free_tree_block(struct btrfs_trans_handle *trans, | 2018 | void btrfs_free_tree_block(struct btrfs_trans_handle *trans, |
1988 | struct btrfs_root *root, | 2019 | struct btrfs_root *root, |
1989 | u64 bytenr, u32 blocksize, | 2020 | struct extent_buffer *buf, |
1990 | u64 parent, u64 root_objectid, int level); | 2021 | u64 parent, int last_ref); |
1991 | struct extent_buffer *btrfs_init_new_buffer(struct btrfs_trans_handle *trans, | 2022 | struct extent_buffer *btrfs_init_new_buffer(struct btrfs_trans_handle *trans, |
1992 | struct btrfs_root *root, | 2023 | struct btrfs_root *root, |
1993 | u64 bytenr, u32 blocksize, | 2024 | u64 bytenr, u32 blocksize, |
@@ -2041,27 +2072,49 @@ int btrfs_make_block_group(struct btrfs_trans_handle *trans, | |||
2041 | u64 size); | 2072 | u64 size); |
2042 | int btrfs_remove_block_group(struct btrfs_trans_handle *trans, | 2073 | int btrfs_remove_block_group(struct btrfs_trans_handle *trans, |
2043 | struct btrfs_root *root, u64 group_start); | 2074 | struct btrfs_root *root, u64 group_start); |
2044 | int btrfs_prepare_block_group_relocation(struct btrfs_root *root, | ||
2045 | struct btrfs_block_group_cache *group); | ||
2046 | |||
2047 | u64 btrfs_reduce_alloc_profile(struct btrfs_root *root, u64 flags); | 2075 | u64 btrfs_reduce_alloc_profile(struct btrfs_root *root, u64 flags); |
2048 | void btrfs_set_inode_space_info(struct btrfs_root *root, struct inode *ionde); | 2076 | void btrfs_set_inode_space_info(struct btrfs_root *root, struct inode *ionde); |
2049 | void btrfs_clear_space_info_full(struct btrfs_fs_info *info); | 2077 | void btrfs_clear_space_info_full(struct btrfs_fs_info *info); |
2050 | 2078 | int btrfs_check_data_free_space(struct inode *inode, u64 bytes); | |
2051 | int btrfs_reserve_metadata_space(struct btrfs_root *root, int num_items); | 2079 | void btrfs_free_reserved_data_space(struct inode *inode, u64 bytes); |
2052 | int btrfs_unreserve_metadata_space(struct btrfs_root *root, int num_items); | 2080 | int btrfs_trans_reserve_metadata(struct btrfs_trans_handle *trans, |
2053 | int btrfs_unreserve_metadata_for_delalloc(struct btrfs_root *root, | 2081 | struct btrfs_root *root, |
2054 | struct inode *inode, int num_items); | 2082 | int num_items, int *retries); |
2055 | int btrfs_reserve_metadata_for_delalloc(struct btrfs_root *root, | 2083 | void btrfs_trans_release_metadata(struct btrfs_trans_handle *trans, |
2056 | struct inode *inode, int num_items); | 2084 | struct btrfs_root *root); |
2057 | int btrfs_check_data_free_space(struct btrfs_root *root, struct inode *inode, | 2085 | int btrfs_orphan_reserve_metadata(struct btrfs_trans_handle *trans, |
2058 | u64 bytes); | 2086 | struct inode *inode); |
2059 | void btrfs_free_reserved_data_space(struct btrfs_root *root, | 2087 | void btrfs_orphan_release_metadata(struct inode *inode); |
2060 | struct inode *inode, u64 bytes); | 2088 | int btrfs_snap_reserve_metadata(struct btrfs_trans_handle *trans, |
2061 | void btrfs_delalloc_reserve_space(struct btrfs_root *root, struct inode *inode, | 2089 | struct btrfs_pending_snapshot *pending); |
2062 | u64 bytes); | 2090 | int btrfs_delalloc_reserve_metadata(struct inode *inode, u64 num_bytes); |
2063 | void btrfs_delalloc_free_space(struct btrfs_root *root, struct inode *inode, | 2091 | void btrfs_delalloc_release_metadata(struct inode *inode, u64 num_bytes); |
2064 | u64 bytes); | 2092 | int btrfs_delalloc_reserve_space(struct inode *inode, u64 num_bytes); |
2093 | void btrfs_delalloc_release_space(struct inode *inode, u64 num_bytes); | ||
2094 | void btrfs_init_block_rsv(struct btrfs_block_rsv *rsv); | ||
2095 | struct btrfs_block_rsv *btrfs_alloc_block_rsv(struct btrfs_root *root); | ||
2096 | void btrfs_free_block_rsv(struct btrfs_root *root, | ||
2097 | struct btrfs_block_rsv *rsv); | ||
2098 | void btrfs_add_durable_block_rsv(struct btrfs_fs_info *fs_info, | ||
2099 | struct btrfs_block_rsv *rsv); | ||
2100 | int btrfs_block_rsv_add(struct btrfs_trans_handle *trans, | ||
2101 | struct btrfs_root *root, | ||
2102 | struct btrfs_block_rsv *block_rsv, | ||
2103 | u64 num_bytes, int *retries); | ||
2104 | int btrfs_block_rsv_check(struct btrfs_trans_handle *trans, | ||
2105 | struct btrfs_root *root, | ||
2106 | struct btrfs_block_rsv *block_rsv, | ||
2107 | u64 min_reserved, int min_factor); | ||
2108 | int btrfs_block_rsv_migrate(struct btrfs_block_rsv *src_rsv, | ||
2109 | struct btrfs_block_rsv *dst_rsv, | ||
2110 | u64 num_bytes); | ||
2111 | void btrfs_block_rsv_release(struct btrfs_root *root, | ||
2112 | struct btrfs_block_rsv *block_rsv, | ||
2113 | u64 num_bytes); | ||
2114 | int btrfs_set_block_group_ro(struct btrfs_root *root, | ||
2115 | struct btrfs_block_group_cache *cache); | ||
2116 | int btrfs_set_block_group_rw(struct btrfs_root *root, | ||
2117 | struct btrfs_block_group_cache *cache); | ||
2065 | /* ctree.c */ | 2118 | /* ctree.c */ |
2066 | int btrfs_bin_search(struct extent_buffer *eb, struct btrfs_key *key, | 2119 | int btrfs_bin_search(struct extent_buffer *eb, struct btrfs_key *key, |
2067 | int level, int *slot); | 2120 | int level, int *slot); |
@@ -2152,7 +2205,8 @@ static inline int btrfs_insert_empty_item(struct btrfs_trans_handle *trans, | |||
2152 | int btrfs_next_leaf(struct btrfs_root *root, struct btrfs_path *path); | 2205 | int btrfs_next_leaf(struct btrfs_root *root, struct btrfs_path *path); |
2153 | int btrfs_prev_leaf(struct btrfs_root *root, struct btrfs_path *path); | 2206 | int btrfs_prev_leaf(struct btrfs_root *root, struct btrfs_path *path); |
2154 | int btrfs_leaf_free_space(struct btrfs_root *root, struct extent_buffer *leaf); | 2207 | int btrfs_leaf_free_space(struct btrfs_root *root, struct extent_buffer *leaf); |
2155 | int btrfs_drop_snapshot(struct btrfs_root *root, int update_ref); | 2208 | int btrfs_drop_snapshot(struct btrfs_root *root, |
2209 | struct btrfs_block_rsv *block_rsv, int update_ref); | ||
2156 | int btrfs_drop_subtree(struct btrfs_trans_handle *trans, | 2210 | int btrfs_drop_subtree(struct btrfs_trans_handle *trans, |
2157 | struct btrfs_root *root, | 2211 | struct btrfs_root *root, |
2158 | struct extent_buffer *node, | 2212 | struct extent_buffer *node, |
@@ -2245,6 +2299,12 @@ int btrfs_del_inode_ref(struct btrfs_trans_handle *trans, | |||
2245 | struct btrfs_root *root, | 2299 | struct btrfs_root *root, |
2246 | const char *name, int name_len, | 2300 | const char *name, int name_len, |
2247 | u64 inode_objectid, u64 ref_objectid, u64 *index); | 2301 | u64 inode_objectid, u64 ref_objectid, u64 *index); |
2302 | struct btrfs_inode_ref * | ||
2303 | btrfs_lookup_inode_ref(struct btrfs_trans_handle *trans, | ||
2304 | struct btrfs_root *root, | ||
2305 | struct btrfs_path *path, | ||
2306 | const char *name, int name_len, | ||
2307 | u64 inode_objectid, u64 ref_objectid, int mod); | ||
2248 | int btrfs_insert_empty_inode(struct btrfs_trans_handle *trans, | 2308 | int btrfs_insert_empty_inode(struct btrfs_trans_handle *trans, |
2249 | struct btrfs_root *root, | 2309 | struct btrfs_root *root, |
2250 | struct btrfs_path *path, u64 objectid); | 2310 | struct btrfs_path *path, u64 objectid); |
@@ -2257,6 +2317,8 @@ int btrfs_del_csums(struct btrfs_trans_handle *trans, | |||
2257 | struct btrfs_root *root, u64 bytenr, u64 len); | 2317 | struct btrfs_root *root, u64 bytenr, u64 len); |
2258 | int btrfs_lookup_bio_sums(struct btrfs_root *root, struct inode *inode, | 2318 | int btrfs_lookup_bio_sums(struct btrfs_root *root, struct inode *inode, |
2259 | struct bio *bio, u32 *dst); | 2319 | struct bio *bio, u32 *dst); |
2320 | int btrfs_lookup_bio_sums_dio(struct btrfs_root *root, struct inode *inode, | ||
2321 | struct bio *bio, u64 logical_offset, u32 *dst); | ||
2260 | int btrfs_insert_file_extent(struct btrfs_trans_handle *trans, | 2322 | int btrfs_insert_file_extent(struct btrfs_trans_handle *trans, |
2261 | struct btrfs_root *root, | 2323 | struct btrfs_root *root, |
2262 | u64 objectid, u64 pos, | 2324 | u64 objectid, u64 pos, |
@@ -2311,6 +2373,7 @@ int btrfs_truncate_inode_items(struct btrfs_trans_handle *trans, | |||
2311 | u32 min_type); | 2373 | u32 min_type); |
2312 | 2374 | ||
2313 | int btrfs_start_delalloc_inodes(struct btrfs_root *root, int delay_iput); | 2375 | int btrfs_start_delalloc_inodes(struct btrfs_root *root, int delay_iput); |
2376 | int btrfs_start_one_delalloc_inode(struct btrfs_root *root, int delay_iput); | ||
2314 | int btrfs_set_extent_delalloc(struct inode *inode, u64 start, u64 end, | 2377 | int btrfs_set_extent_delalloc(struct inode *inode, u64 start, u64 end, |
2315 | struct extent_state **cached_state); | 2378 | struct extent_state **cached_state); |
2316 | int btrfs_writepages(struct address_space *mapping, | 2379 | int btrfs_writepages(struct address_space *mapping, |
@@ -2349,10 +2412,20 @@ int btrfs_update_inode(struct btrfs_trans_handle *trans, | |||
2349 | int btrfs_orphan_add(struct btrfs_trans_handle *trans, struct inode *inode); | 2412 | int btrfs_orphan_add(struct btrfs_trans_handle *trans, struct inode *inode); |
2350 | int btrfs_orphan_del(struct btrfs_trans_handle *trans, struct inode *inode); | 2413 | int btrfs_orphan_del(struct btrfs_trans_handle *trans, struct inode *inode); |
2351 | void btrfs_orphan_cleanup(struct btrfs_root *root); | 2414 | void btrfs_orphan_cleanup(struct btrfs_root *root); |
2415 | void btrfs_orphan_pre_snapshot(struct btrfs_trans_handle *trans, | ||
2416 | struct btrfs_pending_snapshot *pending, | ||
2417 | u64 *bytes_to_reserve); | ||
2418 | void btrfs_orphan_post_snapshot(struct btrfs_trans_handle *trans, | ||
2419 | struct btrfs_pending_snapshot *pending); | ||
2420 | void btrfs_orphan_commit_root(struct btrfs_trans_handle *trans, | ||
2421 | struct btrfs_root *root); | ||
2352 | int btrfs_cont_expand(struct inode *inode, loff_t size); | 2422 | int btrfs_cont_expand(struct inode *inode, loff_t size); |
2353 | int btrfs_invalidate_inodes(struct btrfs_root *root); | 2423 | int btrfs_invalidate_inodes(struct btrfs_root *root); |
2354 | void btrfs_add_delayed_iput(struct inode *inode); | 2424 | void btrfs_add_delayed_iput(struct inode *inode); |
2355 | void btrfs_run_delayed_iputs(struct btrfs_root *root); | 2425 | void btrfs_run_delayed_iputs(struct btrfs_root *root); |
2426 | int btrfs_prealloc_file_range(struct inode *inode, int mode, | ||
2427 | u64 start, u64 num_bytes, u64 min_size, | ||
2428 | loff_t actual_len, u64 *alloc_hint); | ||
2356 | extern const struct dentry_operations btrfs_dentry_operations; | 2429 | extern const struct dentry_operations btrfs_dentry_operations; |
2357 | 2430 | ||
2358 | /* ioctl.c */ | 2431 | /* ioctl.c */ |
@@ -2409,4 +2482,12 @@ int btrfs_update_reloc_root(struct btrfs_trans_handle *trans, | |||
2409 | struct btrfs_root *root); | 2482 | struct btrfs_root *root); |
2410 | int btrfs_recover_relocation(struct btrfs_root *root); | 2483 | int btrfs_recover_relocation(struct btrfs_root *root); |
2411 | int btrfs_reloc_clone_csums(struct inode *inode, u64 file_pos, u64 len); | 2484 | int btrfs_reloc_clone_csums(struct inode *inode, u64 file_pos, u64 len); |
2485 | void btrfs_reloc_cow_block(struct btrfs_trans_handle *trans, | ||
2486 | struct btrfs_root *root, struct extent_buffer *buf, | ||
2487 | struct extent_buffer *cow); | ||
2488 | void btrfs_reloc_pre_snapshot(struct btrfs_trans_handle *trans, | ||
2489 | struct btrfs_pending_snapshot *pending, | ||
2490 | u64 *bytes_to_reserve); | ||
2491 | void btrfs_reloc_post_snapshot(struct btrfs_trans_handle *trans, | ||
2492 | struct btrfs_pending_snapshot *pending); | ||
2412 | #endif | 2493 | #endif |