Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge branch 'for-linus-4.11' of git://git.kernel.org/pub/scm/linux/kernel/git/mason/linux-btrfs

Pull more btrfs updates from Chris Mason:
"Btrfs round two.

These are mostly a continuation of Dave Sterba's collection of
cleanups, but Filipe also has some bug fixes and performance
improvements"

* 'for-linus-4.11' of git://git.kernel.org/pub/scm/linux/kernel/git/mason/linux-btrfs: (69 commits)
btrfs: add dummy callback for readpage_io_failed and drop checks
btrfs: drop checks for mandatory extent_io_ops callbacks
btrfs: document existence of extent_io ops callbacks
btrfs: let writepage_end_io_hook return void
btrfs: do proper error handling in btrfs_insert_xattr_item
btrfs: handle allocation error in update_dev_stat_item
btrfs: remove BUG_ON from __tree_mod_log_insert
btrfs: derive maximum output size in the compression implementation
btrfs: use predefined limits for calculating maximum number of pages for compression
btrfs: export compression buffer limits in a header
btrfs: merge nr_pages input and output parameter in compress_pages
btrfs: merge length input and output parameter in compress_pages
btrfs: constify name of subvolume in creation helpers
btrfs: constify buffers used by compression helpers
btrfs: constify input buffer of btrfs_csum_data
btrfs: constify device path passed to relevant helpers
btrfs: make btrfs_inode_resume_unlocked_dio take btrfs_inode
btrfs: make btrfs_inode_block_unlocked_dio take btrfs_inode
btrfs: Make btrfs_add_nondir take btrfs_inode
btrfs: Make btrfs_add_link take btrfs_inode
...

+861 -656
+15 -16
fs/btrfs/btrfs_inode.h
··· 237 237 return ino; 238 238 } 239 239 240 - static inline void btrfs_i_size_write(struct inode *inode, u64 size) 240 + static inline void btrfs_i_size_write(struct btrfs_inode *inode, u64 size) 241 241 { 242 - i_size_write(inode, size); 243 - BTRFS_I(inode)->disk_i_size = size; 242 + i_size_write(&inode->vfs_inode, size); 243 + inode->disk_i_size = size; 244 244 } 245 245 246 - static inline bool btrfs_is_free_space_inode(struct inode *inode) 246 + static inline bool btrfs_is_free_space_inode(struct btrfs_inode *inode) 247 247 { 248 - struct btrfs_root *root = BTRFS_I(inode)->root; 248 + struct btrfs_root *root = inode->root; 249 249 250 250 if (root == root->fs_info->tree_root && 251 - btrfs_ino(BTRFS_I(inode)) != BTRFS_BTREE_INODE_OBJECTID) 251 + btrfs_ino(inode) != BTRFS_BTREE_INODE_OBJECTID) 252 252 return true; 253 - if (BTRFS_I(inode)->location.objectid == BTRFS_FREE_INO_OBJECTID) 253 + if (inode->location.objectid == BTRFS_FREE_INO_OBJECTID) 254 254 return true; 255 255 return false; 256 256 } ··· 311 311 * to grab i_mutex. It is used to avoid the endless truncate due to 312 312 * nonlocked dio read. 313 313 */ 314 - static inline void btrfs_inode_block_unlocked_dio(struct inode *inode) 314 + static inline void btrfs_inode_block_unlocked_dio(struct btrfs_inode *inode) 315 315 { 316 - set_bit(BTRFS_INODE_READDIO_NEED_LOCK, &BTRFS_I(inode)->runtime_flags); 316 + set_bit(BTRFS_INODE_READDIO_NEED_LOCK, &inode->runtime_flags); 317 317 smp_mb(); 318 318 } 319 319 320 - static inline void btrfs_inode_resume_unlocked_dio(struct inode *inode) 320 + static inline void btrfs_inode_resume_unlocked_dio(struct btrfs_inode *inode) 321 321 { 322 322 smp_mb__before_atomic(); 323 - clear_bit(BTRFS_INODE_READDIO_NEED_LOCK, 324 - &BTRFS_I(inode)->runtime_flags); 323 + clear_bit(BTRFS_INODE_READDIO_NEED_LOCK, &inode->runtime_flags); 325 324 } 326 325 327 - static inline void btrfs_print_data_csum_error(struct inode *inode, 326 + static inline void btrfs_print_data_csum_error(struct btrfs_inode *inode, 328 327 u64 logical_start, u32 csum, u32 csum_expected, int mirror_num) 329 328 { 330 - struct btrfs_root *root = BTRFS_I(inode)->root; 329 + struct btrfs_root *root = inode->root; 331 330 332 331 /* Output minus objectid, which is more meaningful */ 333 332 if (root->objectid >= BTRFS_LAST_FREE_OBJECTID) 334 333 btrfs_warn_rl(root->fs_info, 335 334 "csum failed root %lld ino %lld off %llu csum 0x%08x expected csum 0x%08x mirror %d", 336 - root->objectid, btrfs_ino(BTRFS_I(inode)), 335 + root->objectid, btrfs_ino(inode), 337 336 logical_start, csum, csum_expected, mirror_num); 338 337 else 339 338 btrfs_warn_rl(root->fs_info, 340 339 "csum failed root %llu ino %llu off %llu csum 0x%08x expected csum 0x%08x mirror %d", 341 - root->objectid, btrfs_ino(BTRFS_I(inode)), 340 + root->objectid, btrfs_ino(inode), 342 341 logical_start, csum, csum_expected, mirror_num); 343 342 } 344 343
+19 -24
fs/btrfs/compression.c
··· 100 100 return btrfs_bio_alloc(bdev, first_byte >> 9, BIO_MAX_PAGES, gfp_flags); 101 101 } 102 102 103 - static int check_compressed_csum(struct inode *inode, 103 + static int check_compressed_csum(struct btrfs_inode *inode, 104 104 struct compressed_bio *cb, 105 105 u64 disk_start) 106 106 { ··· 111 111 u32 csum; 112 112 u32 *cb_sum = &cb->sums; 113 113 114 - if (BTRFS_I(inode)->flags & BTRFS_INODE_NODATASUM) 114 + if (inode->flags & BTRFS_INODE_NODATASUM) 115 115 return 0; 116 116 117 117 for (i = 0; i < cb->nr_pages; i++) { ··· 125 125 126 126 if (csum != *cb_sum) { 127 127 btrfs_print_data_csum_error(inode, disk_start, csum, 128 - *cb_sum, cb->mirror_num); 128 + *cb_sum, cb->mirror_num); 129 129 ret = -EIO; 130 130 goto fail; 131 131 } ··· 165 165 goto out; 166 166 167 167 inode = cb->inode; 168 - ret = check_compressed_csum(inode, cb, 168 + ret = check_compressed_csum(BTRFS_I(inode), cb, 169 169 (u64)bio->bi_iter.bi_sector << 9); 170 170 if (ret) 171 171 goto csum_failed; ··· 911 911 } 912 912 913 913 /* 914 - * given an address space and start/len, compress the bytes. 914 + * Given an address space and start and length, compress the bytes into @pages 915 + * that are allocated on demand. 915 916 * 916 - * pages are allocated to hold the compressed result and stored 917 - * in 'pages' 917 + * @out_pages is an in/out parameter, holds maximum number of pages to allocate 918 + * and returns number of actually allocated pages 918 919 * 919 - * out_pages is used to return the number of pages allocated. There 920 - * may be pages allocated even if we return an error 921 - * 922 - * total_in is used to return the number of bytes actually read. It 923 - * may be smaller then len if we had to exit early because we 920 + * @total_in is used to return the number of bytes actually read. It 921 + * may be smaller than the input length if we had to exit early because we 924 922 * ran out of room in the pages array or because we cross the 925 923 * max_out threshold. 926 924 * 927 - * total_out is used to return the total number of compressed bytes 925 + * @total_out is an in/out parameter, must be set to the input length and will 926 + * be also used to return the total number of compressed bytes 928 927 * 929 - * max_out tells us the max number of bytes that we're allowed to 928 + * @max_out tells us the max number of bytes that we're allowed to 930 929 * stuff into pages 931 930 */ 932 931 int btrfs_compress_pages(int type, struct address_space *mapping, 933 - u64 start, unsigned long len, 934 - struct page **pages, 935 - unsigned long nr_dest_pages, 932 + u64 start, struct page **pages, 936 933 unsigned long *out_pages, 937 934 unsigned long *total_in, 938 - unsigned long *total_out, 939 - unsigned long max_out) 935 + unsigned long *total_out) 940 936 { 941 937 struct list_head *workspace; 942 938 int ret; ··· 940 944 workspace = find_workspace(type); 941 945 942 946 ret = btrfs_compress_op[type-1]->compress_pages(workspace, mapping, 943 - start, len, pages, 944 - nr_dest_pages, out_pages, 945 - total_in, total_out, 946 - max_out); 947 + start, pages, 948 + out_pages, 949 + total_in, total_out); 947 950 free_workspace(type, workspace); 948 951 return ret; 949 952 } ··· 1010 1015 * 1011 1016 * total_out is the last byte of the buffer 1012 1017 */ 1013 - int btrfs_decompress_buf2page(char *buf, unsigned long buf_start, 1018 + int btrfs_decompress_buf2page(const char *buf, unsigned long buf_start, 1014 1019 unsigned long total_out, u64 disk_start, 1015 1020 struct bio *bio) 1016 1021 {
+20 -10
fs/btrfs/compression.h
··· 19 19 #ifndef __BTRFS_COMPRESSION_ 20 20 #define __BTRFS_COMPRESSION_ 21 21 22 + /* 23 + * We want to make sure that amount of RAM required to uncompress an extent is 24 + * reasonable, so we limit the total size in ram of a compressed extent to 25 + * 128k. This is a crucial number because it also controls how easily we can 26 + * spread reads across cpus for decompression. 27 + * 28 + * We also want to make sure the amount of IO required to do a random read is 29 + * reasonably small, so we limit the size of a compressed extent to 128k. 30 + */ 31 + 32 + /* Maximum length of compressed data stored on disk */ 33 + #define BTRFS_MAX_COMPRESSED (SZ_128K) 34 + /* Maximum size of data before compression */ 35 + #define BTRFS_MAX_UNCOMPRESSED (SZ_128K) 36 + 22 37 void btrfs_init_compress(void); 23 38 void btrfs_exit_compress(void); 24 39 25 40 int btrfs_compress_pages(int type, struct address_space *mapping, 26 - u64 start, unsigned long len, 27 - struct page **pages, 28 - unsigned long nr_dest_pages, 41 + u64 start, struct page **pages, 29 42 unsigned long *out_pages, 30 43 unsigned long *total_in, 31 - unsigned long *total_out, 32 - unsigned long max_out); 44 + unsigned long *total_out); 33 45 int btrfs_decompress(int type, unsigned char *data_in, struct page *dest_page, 34 46 unsigned long start_byte, size_t srclen, size_t destlen); 35 - int btrfs_decompress_buf2page(char *buf, unsigned long buf_start, 47 + int btrfs_decompress_buf2page(const char *buf, unsigned long buf_start, 36 48 unsigned long total_out, u64 disk_start, 37 49 struct bio *bio); 38 50 ··· 71 59 72 60 int (*compress_pages)(struct list_head *workspace, 73 61 struct address_space *mapping, 74 - u64 start, unsigned long len, 62 + u64 start, 75 63 struct page **pages, 76 - unsigned long nr_dest_pages, 77 64 unsigned long *out_pages, 78 65 unsigned long *total_in, 79 - unsigned long *total_out, 80 - unsigned long max_out); 66 + unsigned long *total_out); 81 67 82 68 int (*decompress_bio)(struct list_head *workspace, 83 69 struct page **pages_in,
+7 -2
fs/btrfs/ctree.c
··· 453 453 struct rb_node *parent = NULL; 454 454 struct tree_mod_elem *cur; 455 455 456 - BUG_ON(!tm); 457 - 458 456 tm->seq = btrfs_inc_tree_mod_seq(fs_info); 459 457 460 458 tm_root = &fs_info->tree_mod_log; ··· 4157 4159 4158 4160 /* try to push all the items before our slot into the next leaf */ 4159 4161 slot = path->slots[0]; 4162 + space_needed = data_size; 4163 + if (slot > 0) 4164 + space_needed -= btrfs_leaf_free_space(fs_info, path->nodes[0]); 4160 4165 ret = push_leaf_left(trans, root, path, 1, space_needed, 0, slot); 4161 4166 if (ret < 0) 4162 4167 return ret; ··· 4215 4214 if (wret < 0) 4216 4215 return wret; 4217 4216 if (wret) { 4217 + space_needed = data_size; 4218 + if (slot > 0) 4219 + space_needed -= btrfs_leaf_free_space(fs_info, 4220 + l); 4218 4221 wret = push_leaf_left(trans, root, path, space_needed, 4219 4222 space_needed, 0, (u32)-1); 4220 4223 if (wret < 0)
+20 -19
fs/btrfs/ctree.h
··· 2687 2687 }; 2688 2688 2689 2689 int btrfs_check_data_free_space(struct inode *inode, u64 start, u64 len); 2690 - int btrfs_alloc_data_chunk_ondemand(struct inode *inode, u64 bytes); 2690 + int btrfs_alloc_data_chunk_ondemand(struct btrfs_inode *inode, u64 bytes); 2691 2691 void btrfs_free_reserved_data_space(struct inode *inode, u64 start, u64 len); 2692 2692 void btrfs_free_reserved_data_space_noquota(struct inode *inode, u64 start, 2693 2693 u64 len); ··· 2695 2695 struct btrfs_fs_info *fs_info); 2696 2696 void btrfs_trans_release_chunk_metadata(struct btrfs_trans_handle *trans); 2697 2697 int btrfs_orphan_reserve_metadata(struct btrfs_trans_handle *trans, 2698 - struct inode *inode); 2699 - void btrfs_orphan_release_metadata(struct inode *inode); 2698 + struct btrfs_inode *inode); 2699 + void btrfs_orphan_release_metadata(struct btrfs_inode *inode); 2700 2700 int btrfs_subvolume_reserve_metadata(struct btrfs_root *root, 2701 2701 struct btrfs_block_rsv *rsv, 2702 2702 int nitems, 2703 2703 u64 *qgroup_reserved, bool use_global_rsv); 2704 2704 void btrfs_subvolume_release_metadata(struct btrfs_fs_info *fs_info, 2705 2705 struct btrfs_block_rsv *rsv); 2706 - int btrfs_delalloc_reserve_metadata(struct inode *inode, u64 num_bytes); 2707 - void btrfs_delalloc_release_metadata(struct inode *inode, u64 num_bytes); 2706 + int btrfs_delalloc_reserve_metadata(struct btrfs_inode *inode, u64 num_bytes); 2707 + void btrfs_delalloc_release_metadata(struct btrfs_inode *inode, u64 num_bytes); 2708 2708 int btrfs_delalloc_reserve_space(struct inode *inode, u64 start, u64 len); 2709 2709 void btrfs_delalloc_release_space(struct inode *inode, u64 start, u64 len); 2710 2710 void btrfs_init_block_rsv(struct btrfs_block_rsv *rsv, unsigned short type); ··· 2982 2982 const char *name, int name_len); 2983 2983 int btrfs_insert_dir_item(struct btrfs_trans_handle *trans, 2984 2984 struct btrfs_root *root, const char *name, 2985 - int name_len, struct inode *dir, 2985 + int name_len, struct btrfs_inode *dir, 2986 2986 struct btrfs_key *location, u8 type, u64 index); 2987 2987 struct btrfs_dir_item *btrfs_lookup_dir_item(struct btrfs_trans_handle *trans, 2988 2988 struct btrfs_root *root, ··· 3081 3081 u64 file_start, int contig); 3082 3082 int btrfs_lookup_csums_range(struct btrfs_root *root, u64 start, u64 end, 3083 3083 struct list_head *list, int search_commit); 3084 - void btrfs_extent_item_to_extent_map(struct inode *inode, 3084 + void btrfs_extent_item_to_extent_map(struct btrfs_inode *inode, 3085 3085 const struct btrfs_path *path, 3086 3086 struct btrfs_file_extent_item *fi, 3087 3087 const bool new_inline, ··· 3100 3100 int delay_iput); 3101 3101 void btrfs_wait_and_free_delalloc_work(struct btrfs_delalloc_work *work); 3102 3102 3103 - struct extent_map *btrfs_get_extent_fiemap(struct inode *inode, struct page *page, 3104 - size_t pg_offset, u64 start, u64 len, 3105 - int create); 3103 + struct extent_map *btrfs_get_extent_fiemap(struct btrfs_inode *inode, 3104 + struct page *page, size_t pg_offset, u64 start, 3105 + u64 len, int create); 3106 3106 noinline int can_nocow_extent(struct inode *inode, u64 offset, u64 *len, 3107 3107 u64 *orig_start, u64 *orig_block_len, 3108 3108 u64 *ram_bytes); ··· 3123 3123 } 3124 3124 3125 3125 struct inode *btrfs_lookup_dentry(struct inode *dir, struct dentry *dentry); 3126 - int btrfs_set_inode_index(struct inode *dir, u64 *index); 3126 + int btrfs_set_inode_index(struct btrfs_inode *dir, u64 *index); 3127 3127 int btrfs_unlink_inode(struct btrfs_trans_handle *trans, 3128 3128 struct btrfs_root *root, 3129 3129 struct btrfs_inode *dir, struct btrfs_inode *inode, 3130 3130 const char *name, int name_len); 3131 3131 int btrfs_add_link(struct btrfs_trans_handle *trans, 3132 - struct inode *parent_inode, struct inode *inode, 3132 + struct btrfs_inode *parent_inode, struct btrfs_inode *inode, 3133 3133 const char *name, int name_len, int add_backref, u64 index); 3134 3134 int btrfs_unlink_subvol(struct btrfs_trans_handle *trans, 3135 3135 struct btrfs_root *root, ··· 3166 3166 long btrfs_ioctl_trans_end(struct file *file); 3167 3167 struct inode *btrfs_iget(struct super_block *s, struct btrfs_key *location, 3168 3168 struct btrfs_root *root, int *was_new); 3169 - struct extent_map *btrfs_get_extent(struct inode *inode, struct page *page, 3170 - size_t pg_offset, u64 start, u64 end, 3171 - int create); 3169 + struct extent_map *btrfs_get_extent(struct btrfs_inode *inode, 3170 + struct page *page, size_t pg_offset, 3171 + u64 start, u64 end, int create); 3172 3172 int btrfs_update_inode(struct btrfs_trans_handle *trans, 3173 3173 struct btrfs_root *root, 3174 3174 struct inode *inode); 3175 3175 int btrfs_update_inode_fallback(struct btrfs_trans_handle *trans, 3176 3176 struct btrfs_root *root, struct inode *inode); 3177 - int btrfs_orphan_add(struct btrfs_trans_handle *trans, struct inode *inode); 3177 + int btrfs_orphan_add(struct btrfs_trans_handle *trans, 3178 + struct btrfs_inode *inode); 3178 3179 int btrfs_orphan_cleanup(struct btrfs_root *root); 3179 3180 void btrfs_orphan_commit_root(struct btrfs_trans_handle *trans, 3180 3181 struct btrfs_root *root); ··· 3216 3215 int btrfs_auto_defrag_init(void); 3217 3216 void btrfs_auto_defrag_exit(void); 3218 3217 int btrfs_add_inode_defrag(struct btrfs_trans_handle *trans, 3219 - struct inode *inode); 3218 + struct btrfs_inode *inode); 3220 3219 int btrfs_run_defrag_inodes(struct btrfs_fs_info *fs_info); 3221 3220 void btrfs_cleanup_defrag_inodes(struct btrfs_fs_info *fs_info); 3222 3221 int btrfs_sync_file(struct file *file, loff_t start, loff_t end, int datasync); 3223 - void btrfs_drop_extent_cache(struct inode *inode, u64 start, u64 end, 3222 + void btrfs_drop_extent_cache(struct btrfs_inode *inode, u64 start, u64 end, 3224 3223 int skip_pinned); 3225 3224 extern const struct file_operations btrfs_file_operations; 3226 3225 int __btrfs_drop_extents(struct btrfs_trans_handle *trans, ··· 3234 3233 struct btrfs_root *root, struct inode *inode, u64 start, 3235 3234 u64 end, int drop_cache); 3236 3235 int btrfs_mark_extent_written(struct btrfs_trans_handle *trans, 3237 - struct inode *inode, u64 start, u64 end); 3236 + struct btrfs_inode *inode, u64 start, u64 end); 3238 3237 int btrfs_release_file(struct inode *inode, struct file *file); 3239 3238 int btrfs_dirty_pages(struct inode *inode, struct page **pages, 3240 3239 size_t num_pages, loff_t pos, size_t write_bytes,
+1 -1
fs/btrfs/delayed-inode.c
··· 1790 1790 1791 1791 i_uid_write(inode, btrfs_stack_inode_uid(inode_item)); 1792 1792 i_gid_write(inode, btrfs_stack_inode_gid(inode_item)); 1793 - btrfs_i_size_write(inode, btrfs_stack_inode_size(inode_item)); 1793 + btrfs_i_size_write(BTRFS_I(inode), btrfs_stack_inode_size(inode_item)); 1794 1794 inode->i_mode = btrfs_stack_inode_mode(inode_item); 1795 1795 set_nlink(inode, btrfs_stack_inode_nlink(inode_item)); 1796 1796 inode_set_bytes(inode, btrfs_stack_inode_nbytes(inode_item));
+3 -2
fs/btrfs/dev-replace.c
··· 304 304 dev_replace->cursor_left_last_write_of_item; 305 305 } 306 306 307 - int btrfs_dev_replace_start(struct btrfs_fs_info *fs_info, char *tgtdev_name, 308 - u64 srcdevid, char *srcdev_name, int read_src) 307 + int btrfs_dev_replace_start(struct btrfs_fs_info *fs_info, 308 + const char *tgtdev_name, u64 srcdevid, const char *srcdev_name, 309 + int read_src) 309 310 { 310 311 struct btrfs_root *root = fs_info->dev_root; 311 312 struct btrfs_trans_handle *trans;
+3 -2
fs/btrfs/dev-replace.h
··· 27 27 void btrfs_after_dev_replace_commit(struct btrfs_fs_info *fs_info); 28 28 int btrfs_dev_replace_by_ioctl(struct btrfs_fs_info *fs_info, 29 29 struct btrfs_ioctl_dev_replace_args *args); 30 - int btrfs_dev_replace_start(struct btrfs_fs_info *fs_info, char *tgtdev_name, 31 - u64 srcdevid, char *srcdev_name, int read_src); 30 + int btrfs_dev_replace_start(struct btrfs_fs_info *fs_info, 31 + const char *tgtdev_name, u64 srcdevid, const char *srcdev_name, 32 + int read_src); 32 33 void btrfs_dev_replace_status(struct btrfs_fs_info *fs_info, 33 34 struct btrfs_ioctl_dev_replace_args *args); 34 35 int btrfs_dev_replace_cancel(struct btrfs_fs_info *fs_info,
+5 -4
fs/btrfs/dir-item.c
··· 80 80 struct extent_buffer *leaf; 81 81 u32 data_size; 82 82 83 - BUG_ON(name_len + data_len > BTRFS_MAX_XATTR_SIZE(root->fs_info)); 83 + if (name_len + data_len > BTRFS_MAX_XATTR_SIZE(root->fs_info)) 84 + return -ENOSPC; 84 85 85 86 key.objectid = objectid; 86 87 key.type = BTRFS_XATTR_ITEM_KEY; ··· 121 120 */ 122 121 int btrfs_insert_dir_item(struct btrfs_trans_handle *trans, struct btrfs_root 123 122 *root, const char *name, int name_len, 124 - struct inode *dir, struct btrfs_key *location, 123 + struct btrfs_inode *dir, struct btrfs_key *location, 125 124 u8 type, u64 index) 126 125 { 127 126 int ret = 0; ··· 134 133 struct btrfs_disk_key disk_key; 135 134 u32 data_size; 136 135 137 - key.objectid = btrfs_ino(BTRFS_I(dir)); 136 + key.objectid = btrfs_ino(dir); 138 137 key.type = BTRFS_DIR_ITEM_KEY; 139 138 key.offset = btrfs_name_hash(name, name_len); 140 139 ··· 175 174 btrfs_release_path(path); 176 175 177 176 ret2 = btrfs_insert_delayed_dir_index(trans, root->fs_info, name, 178 - name_len, BTRFS_I(dir), &disk_key, type, index); 177 + name_len, dir, &disk_key, type, index); 179 178 out_free: 180 179 btrfs_free_path(path); 181 180 if (ret)
+20 -12
fs/btrfs/disk-io.c
··· 219 219 * extents on the btree inode are pretty simple, there's one extent 220 220 * that covers the entire device 221 221 */ 222 - static struct extent_map *btree_get_extent(struct inode *inode, 222 + static struct extent_map *btree_get_extent(struct btrfs_inode *inode, 223 223 struct page *page, size_t pg_offset, u64 start, u64 len, 224 224 int create) 225 225 { 226 - struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb); 227 - struct extent_map_tree *em_tree = &BTRFS_I(inode)->extent_tree; 226 + struct btrfs_fs_info *fs_info = btrfs_sb(inode->vfs_inode.i_sb); 227 + struct extent_map_tree *em_tree = &inode->extent_tree; 228 228 struct extent_map *em; 229 229 int ret; 230 230 ··· 265 265 return em; 266 266 } 267 267 268 - u32 btrfs_csum_data(char *data, u32 seed, size_t len) 268 + u32 btrfs_csum_data(const char *data, u32 seed, size_t len) 269 269 { 270 270 return btrfs_crc32c(seed, data, len); 271 271 } ··· 2205 2205 btrfs_destroy_workqueue(fs_info->delalloc_workers); 2206 2206 btrfs_destroy_workqueue(fs_info->workers); 2207 2207 btrfs_destroy_workqueue(fs_info->endio_workers); 2208 - btrfs_destroy_workqueue(fs_info->endio_meta_workers); 2209 2208 btrfs_destroy_workqueue(fs_info->endio_raid56_workers); 2210 2209 btrfs_destroy_workqueue(fs_info->endio_repair_workers); 2211 2210 btrfs_destroy_workqueue(fs_info->rmw_workers); 2212 - btrfs_destroy_workqueue(fs_info->endio_meta_write_workers); 2213 2211 btrfs_destroy_workqueue(fs_info->endio_write_workers); 2214 2212 btrfs_destroy_workqueue(fs_info->endio_freespace_worker); 2215 2213 btrfs_destroy_workqueue(fs_info->submit_workers); ··· 2217 2219 btrfs_destroy_workqueue(fs_info->flush_workers); 2218 2220 btrfs_destroy_workqueue(fs_info->qgroup_rescan_workers); 2219 2221 btrfs_destroy_workqueue(fs_info->extent_workers); 2222 + /* 2223 + * Now that all other work queues are destroyed, we can safely destroy 2224 + * the queues used for metadata I/O, since tasks from those other work 2225 + * queues can do metadata I/O operations. 2226 + */ 2227 + btrfs_destroy_workqueue(fs_info->endio_meta_workers); 2228 + btrfs_destroy_workqueue(fs_info->endio_meta_write_workers); 2220 2229 } 2221 2230 2222 2231 static void free_root_extent_buffers(struct btrfs_root *root) ··· 3266 3261 3267 3262 fail_block_groups: 3268 3263 btrfs_put_block_group_cache(fs_info); 3269 - btrfs_free_block_groups(fs_info); 3270 3264 3271 3265 fail_tree_roots: 3272 3266 free_root_pointers(fs_info, 1); ··· 3273 3269 3274 3270 fail_sb_buffer: 3275 3271 btrfs_stop_all_workers(fs_info); 3272 + btrfs_free_block_groups(fs_info); 3276 3273 fail_alloc: 3277 3274 fail_iput: 3278 3275 btrfs_mapping_tree_free(&fs_info->mapping_tree); ··· 3453 3448 btrfs_set_super_bytenr(sb, bytenr); 3454 3449 3455 3450 crc = ~(u32)0; 3456 - crc = btrfs_csum_data((char *)sb + 3451 + crc = btrfs_csum_data((const char *)sb + 3457 3452 BTRFS_CSUM_SIZE, crc, 3458 3453 BTRFS_SUPER_INFO_SIZE - 3459 3454 BTRFS_CSUM_SIZE); ··· 3982 3977 3983 3978 btrfs_put_block_group_cache(fs_info); 3984 3979 3985 - btrfs_free_block_groups(fs_info); 3986 - 3987 3980 /* 3988 3981 * we must make sure there is not any read request to 3989 3982 * submit after we stopping all workers. 3990 3983 */ 3991 3984 invalidate_inode_pages2(fs_info->btree_inode->i_mapping); 3992 3985 btrfs_stop_all_workers(fs_info); 3986 + 3987 + btrfs_free_block_groups(fs_info); 3993 3988 3994 3989 clear_bit(BTRFS_FS_OPEN, &fs_info->flags); 3995 3990 free_root_pointers(fs_info, 1); ··· 4658 4653 } 4659 4654 4660 4655 static const struct extent_io_ops btree_extent_io_ops = { 4661 - .readpage_end_io_hook = btree_readpage_end_io_hook, 4662 - .readpage_io_failed_hook = btree_io_failed_hook, 4656 + /* mandatory callbacks */ 4663 4657 .submit_bio_hook = btree_submit_bio_hook, 4658 + .readpage_end_io_hook = btree_readpage_end_io_hook, 4664 4659 /* note we're sharing with inode.c for the merge bio hook */ 4665 4660 .merge_bio_hook = btrfs_merge_bio_hook, 4661 + .readpage_io_failed_hook = btree_io_failed_hook, 4662 + 4663 + /* optional callbacks */ 4666 4664 };
+1 -1
fs/btrfs/disk-io.h
··· 116 116 int btrfs_buffer_uptodate(struct extent_buffer *buf, u64 parent_transid, 117 117 int atomic); 118 118 int btrfs_read_buffer(struct extent_buffer *buf, u64 parent_transid); 119 - u32 btrfs_csum_data(char *data, u32 seed, size_t len); 119 + u32 btrfs_csum_data(const char *data, u32 seed, size_t len); 120 120 void btrfs_csum_final(u32 crc, u8 *result); 121 121 int btrfs_bio_wq_end_io(struct btrfs_fs_info *info, struct bio *bio, 122 122 enum btrfs_wq_endio_type metadata);
+71 -73
fs/btrfs/extent-tree.c
··· 4135 4135 (may_use_included ? s_info->bytes_may_use : 0); 4136 4136 } 4137 4137 4138 - int btrfs_alloc_data_chunk_ondemand(struct inode *inode, u64 bytes) 4138 + int btrfs_alloc_data_chunk_ondemand(struct btrfs_inode *inode, u64 bytes) 4139 4139 { 4140 4140 struct btrfs_space_info *data_sinfo; 4141 - struct btrfs_root *root = BTRFS_I(inode)->root; 4141 + struct btrfs_root *root = inode->root; 4142 4142 struct btrfs_fs_info *fs_info = root->fs_info; 4143 4143 u64 used; 4144 4144 int ret = 0; ··· 4281 4281 round_down(start, fs_info->sectorsize); 4282 4282 start = round_down(start, fs_info->sectorsize); 4283 4283 4284 - ret = btrfs_alloc_data_chunk_ondemand(inode, len); 4284 + ret = btrfs_alloc_data_chunk_ondemand(BTRFS_I(inode), len); 4285 4285 if (ret < 0) 4286 4286 return ret; 4287 4287 ··· 5742 5742 5743 5743 /* Can only return 0 or -ENOSPC */ 5744 5744 int btrfs_orphan_reserve_metadata(struct btrfs_trans_handle *trans, 5745 - struct inode *inode) 5745 + struct btrfs_inode *inode) 5746 5746 { 5747 - struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb); 5748 - struct btrfs_root *root = BTRFS_I(inode)->root; 5747 + struct btrfs_fs_info *fs_info = btrfs_sb(inode->vfs_inode.i_sb); 5748 + struct btrfs_root *root = inode->root; 5749 5749 /* 5750 5750 * We always use trans->block_rsv here as we will have reserved space 5751 5751 * for our orphan when starting the transaction, using get_block_rsv() ··· 5762 5762 */ 5763 5763 u64 num_bytes = btrfs_calc_trans_metadata_size(fs_info, 1); 5764 5764 5765 - trace_btrfs_space_reservation(fs_info, "orphan", 5766 - btrfs_ino(BTRFS_I(inode)), num_bytes, 1); 5765 + trace_btrfs_space_reservation(fs_info, "orphan", btrfs_ino(inode), 5766 + num_bytes, 1); 5767 5767 return btrfs_block_rsv_migrate(src_rsv, dst_rsv, num_bytes, 1); 5768 5768 } 5769 5769 5770 - void btrfs_orphan_release_metadata(struct inode *inode) 5770 + void btrfs_orphan_release_metadata(struct btrfs_inode *inode) 5771 5771 { 5772 - struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb); 5773 - struct btrfs_root *root = BTRFS_I(inode)->root; 5772 + struct btrfs_fs_info *fs_info = btrfs_sb(inode->vfs_inode.i_sb); 5773 + struct btrfs_root *root = inode->root; 5774 5774 u64 num_bytes = btrfs_calc_trans_metadata_size(fs_info, 1); 5775 5775 5776 - trace_btrfs_space_reservation(fs_info, "orphan", 5777 - btrfs_ino(BTRFS_I(inode)), num_bytes, 0); 5776 + trace_btrfs_space_reservation(fs_info, "orphan", btrfs_ino(inode), 5777 + num_bytes, 0); 5778 5778 btrfs_block_rsv_release(fs_info, root->orphan_block_rsv, num_bytes); 5779 5779 } 5780 5780 ··· 5846 5846 * reserved extents that need to be freed. This must be called with 5847 5847 * BTRFS_I(inode)->lock held. 5848 5848 */ 5849 - static unsigned drop_outstanding_extent(struct inode *inode, u64 num_bytes) 5849 + static unsigned drop_outstanding_extent(struct btrfs_inode *inode, 5850 + u64 num_bytes) 5850 5851 { 5851 5852 unsigned drop_inode_space = 0; 5852 5853 unsigned dropped_extents = 0; ··· 5855 5854 5856 5855 num_extents = count_max_extents(num_bytes); 5857 5856 ASSERT(num_extents); 5858 - ASSERT(BTRFS_I(inode)->outstanding_extents >= num_extents); 5859 - BTRFS_I(inode)->outstanding_extents -= num_extents; 5857 + ASSERT(inode->outstanding_extents >= num_extents); 5858 + inode->outstanding_extents -= num_extents; 5860 5859 5861 - if (BTRFS_I(inode)->outstanding_extents == 0 && 5860 + if (inode->outstanding_extents == 0 && 5862 5861 test_and_clear_bit(BTRFS_INODE_DELALLOC_META_RESERVED, 5863 - &BTRFS_I(inode)->runtime_flags)) 5862 + &inode->runtime_flags)) 5864 5863 drop_inode_space = 1; 5865 5864 5866 5865 /* 5867 5866 * If we have more or the same amount of outstanding extents than we have 5868 5867 * reserved then we need to leave the reserved extents count alone. 5869 5868 */ 5870 - if (BTRFS_I(inode)->outstanding_extents >= 5871 - BTRFS_I(inode)->reserved_extents) 5869 + if (inode->outstanding_extents >= inode->reserved_extents) 5872 5870 return drop_inode_space; 5873 5871 5874 - dropped_extents = BTRFS_I(inode)->reserved_extents - 5875 - BTRFS_I(inode)->outstanding_extents; 5876 - BTRFS_I(inode)->reserved_extents -= dropped_extents; 5872 + dropped_extents = inode->reserved_extents - inode->outstanding_extents; 5873 + inode->reserved_extents -= dropped_extents; 5877 5874 return dropped_extents + drop_inode_space; 5878 5875 } 5879 5876 ··· 5893 5894 * 5894 5895 * This must be called with BTRFS_I(inode)->lock held. 5895 5896 */ 5896 - static u64 calc_csum_metadata_size(struct inode *inode, u64 num_bytes, 5897 + static u64 calc_csum_metadata_size(struct btrfs_inode *inode, u64 num_bytes, 5897 5898 int reserve) 5898 5899 { 5899 - struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb); 5900 + struct btrfs_fs_info *fs_info = btrfs_sb(inode->vfs_inode.i_sb); 5900 5901 u64 old_csums, num_csums; 5901 5902 5902 - if (BTRFS_I(inode)->flags & BTRFS_INODE_NODATASUM && 5903 - BTRFS_I(inode)->csum_bytes == 0) 5903 + if (inode->flags & BTRFS_INODE_NODATASUM && inode->csum_bytes == 0) 5904 5904 return 0; 5905 5905 5906 - old_csums = btrfs_csum_bytes_to_leaves(fs_info, 5907 - BTRFS_I(inode)->csum_bytes); 5906 + old_csums = btrfs_csum_bytes_to_leaves(fs_info, inode->csum_bytes); 5908 5907 if (reserve) 5909 - BTRFS_I(inode)->csum_bytes += num_bytes; 5908 + inode->csum_bytes += num_bytes; 5910 5909 else 5911 - BTRFS_I(inode)->csum_bytes -= num_bytes; 5912 - num_csums = btrfs_csum_bytes_to_leaves(fs_info, 5913 - BTRFS_I(inode)->csum_bytes); 5910 + inode->csum_bytes -= num_bytes; 5911 + num_csums = btrfs_csum_bytes_to_leaves(fs_info, inode->csum_bytes); 5914 5912 5915 5913 /* No change, no need to reserve more */ 5916 5914 if (old_csums == num_csums) ··· 5920 5924 return btrfs_calc_trans_metadata_size(fs_info, old_csums - num_csums); 5921 5925 } 5922 5926 5923 - int btrfs_delalloc_reserve_metadata(struct inode *inode, u64 num_bytes) 5927 + int btrfs_delalloc_reserve_metadata(struct btrfs_inode *inode, u64 num_bytes) 5924 5928 { 5925 - struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb); 5926 - struct btrfs_root *root = BTRFS_I(inode)->root; 5929 + struct btrfs_fs_info *fs_info = btrfs_sb(inode->vfs_inode.i_sb); 5930 + struct btrfs_root *root = inode->root; 5927 5931 struct btrfs_block_rsv *block_rsv = &fs_info->delalloc_block_rsv; 5928 5932 u64 to_reserve = 0; 5929 5933 u64 csum_bytes; ··· 5955 5959 schedule_timeout(1); 5956 5960 5957 5961 if (delalloc_lock) 5958 - mutex_lock(&BTRFS_I(inode)->delalloc_mutex); 5962 + mutex_lock(&inode->delalloc_mutex); 5959 5963 5960 5964 num_bytes = ALIGN(num_bytes, fs_info->sectorsize); 5961 5965 5962 - spin_lock(&BTRFS_I(inode)->lock); 5966 + spin_lock(&inode->lock); 5963 5967 nr_extents = count_max_extents(num_bytes); 5964 - BTRFS_I(inode)->outstanding_extents += nr_extents; 5968 + inode->outstanding_extents += nr_extents; 5965 5969 5966 5970 nr_extents = 0; 5967 - if (BTRFS_I(inode)->outstanding_extents > 5968 - BTRFS_I(inode)->reserved_extents) 5969 - nr_extents += BTRFS_I(inode)->outstanding_extents - 5970 - BTRFS_I(inode)->reserved_extents; 5971 + if (inode->outstanding_extents > inode->reserved_extents) 5972 + nr_extents += inode->outstanding_extents - 5973 + inode->reserved_extents; 5971 5974 5972 5975 /* We always want to reserve a slot for updating the inode. */ 5973 5976 to_reserve = btrfs_calc_trans_metadata_size(fs_info, nr_extents + 1); 5974 5977 to_reserve += calc_csum_metadata_size(inode, num_bytes, 1); 5975 - csum_bytes = BTRFS_I(inode)->csum_bytes; 5976 - spin_unlock(&BTRFS_I(inode)->lock); 5978 + csum_bytes = inode->csum_bytes; 5979 + spin_unlock(&inode->lock); 5977 5980 5978 5981 if (test_bit(BTRFS_FS_QUOTA_ENABLED, &fs_info->flags)) { 5979 5982 ret = btrfs_qgroup_reserve_meta(root, ··· 5988 5993 goto out_fail; 5989 5994 } 5990 5995 5991 - spin_lock(&BTRFS_I(inode)->lock); 5996 + spin_lock(&inode->lock); 5992 5997 if (test_and_set_bit(BTRFS_INODE_DELALLOC_META_RESERVED, 5993 - &BTRFS_I(inode)->runtime_flags)) { 5998 + &inode->runtime_flags)) { 5994 5999 to_reserve -= btrfs_calc_trans_metadata_size(fs_info, 1); 5995 6000 release_extra = true; 5996 6001 } 5997 - BTRFS_I(inode)->reserved_extents += nr_extents; 5998 - spin_unlock(&BTRFS_I(inode)->lock); 6002 + inode->reserved_extents += nr_extents; 6003 + spin_unlock(&inode->lock); 5999 6004 6000 6005 if (delalloc_lock) 6001 - mutex_unlock(&BTRFS_I(inode)->delalloc_mutex); 6006 + mutex_unlock(&inode->delalloc_mutex); 6002 6007 6003 6008 if (to_reserve) 6004 6009 trace_btrfs_space_reservation(fs_info, "delalloc", 6005 - btrfs_ino(BTRFS_I(inode)), to_reserve, 1); 6010 + btrfs_ino(inode), to_reserve, 1); 6006 6011 if (release_extra) 6007 6012 btrfs_block_rsv_release(fs_info, block_rsv, 6008 6013 btrfs_calc_trans_metadata_size(fs_info, 1)); 6009 6014 return 0; 6010 6015 6011 6016 out_fail: 6012 - spin_lock(&BTRFS_I(inode)->lock); 6017 + spin_lock(&inode->lock); 6013 6018 dropped = drop_outstanding_extent(inode, num_bytes); 6014 6019 /* 6015 6020 * If the inodes csum_bytes is the same as the original 6016 6021 * csum_bytes then we know we haven't raced with any free()ers 6017 6022 * so we can just reduce our inodes csum bytes and carry on. 6018 6023 */ 6019 - if (BTRFS_I(inode)->csum_bytes == csum_bytes) { 6024 + if (inode->csum_bytes == csum_bytes) { 6020 6025 calc_csum_metadata_size(inode, num_bytes, 0); 6021 6026 } else { 6022 - u64 orig_csum_bytes = BTRFS_I(inode)->csum_bytes; 6027 + u64 orig_csum_bytes = inode->csum_bytes; 6023 6028 u64 bytes; 6024 6029 6025 6030 /* ··· 6030 6035 * number of bytes that were freed while we were trying our 6031 6036 * reservation. 6032 6037 */ 6033 - bytes = csum_bytes - BTRFS_I(inode)->csum_bytes; 6034 - BTRFS_I(inode)->csum_bytes = csum_bytes; 6038 + bytes = csum_bytes - inode->csum_bytes; 6039 + inode->csum_bytes = csum_bytes; 6035 6040 to_free = calc_csum_metadata_size(inode, bytes, 0); 6036 6041 6037 6042 ··· 6040 6045 * been making this reservation and our ->csum_bytes were not 6041 6046 * artificially inflated. 6042 6047 */ 6043 - BTRFS_I(inode)->csum_bytes = csum_bytes - num_bytes; 6048 + inode->csum_bytes = csum_bytes - num_bytes; 6044 6049 bytes = csum_bytes - orig_csum_bytes; 6045 6050 bytes = calc_csum_metadata_size(inode, bytes, 0); 6046 6051 ··· 6052 6057 * need to do anything, the other free-ers did the correct 6053 6058 * thing. 6054 6059 */ 6055 - BTRFS_I(inode)->csum_bytes = orig_csum_bytes - num_bytes; 6060 + inode->csum_bytes = orig_csum_bytes - num_bytes; 6056 6061 if (bytes > to_free) 6057 6062 to_free = bytes - to_free; 6058 6063 else 6059 6064 to_free = 0; 6060 6065 } 6061 - spin_unlock(&BTRFS_I(inode)->lock); 6066 + spin_unlock(&inode->lock); 6062 6067 if (dropped) 6063 6068 to_free += btrfs_calc_trans_metadata_size(fs_info, dropped); 6064 6069 6065 6070 if (to_free) { 6066 6071 btrfs_block_rsv_release(fs_info, block_rsv, to_free); 6067 6072 trace_btrfs_space_reservation(fs_info, "delalloc", 6068 - btrfs_ino(BTRFS_I(inode)), to_free, 0); 6073 + btrfs_ino(inode), to_free, 0); 6069 6074 } 6070 6075 if (delalloc_lock) 6071 - mutex_unlock(&BTRFS_I(inode)->delalloc_mutex); 6076 + mutex_unlock(&inode->delalloc_mutex); 6072 6077 return ret; 6073 6078 } 6074 6079 ··· 6081 6086 * once we complete IO for a given set of bytes to release their metadata 6082 6087 * reservations. 6083 6088 */ 6084 - void btrfs_delalloc_release_metadata(struct inode *inode, u64 num_bytes) 6089 + void btrfs_delalloc_release_metadata(struct btrfs_inode *inode, u64 num_bytes) 6085 6090 { 6086 - struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb); 6091 + struct btrfs_fs_info *fs_info = btrfs_sb(inode->vfs_inode.i_sb); 6087 6092 u64 to_free = 0; 6088 6093 unsigned dropped; 6089 6094 6090 6095 num_bytes = ALIGN(num_bytes, fs_info->sectorsize); 6091 - spin_lock(&BTRFS_I(inode)->lock); 6096 + spin_lock(&inode->lock); 6092 6097 dropped = drop_outstanding_extent(inode, num_bytes); 6093 6098 6094 6099 if (num_bytes) 6095 6100 to_free = calc_csum_metadata_size(inode, num_bytes, 0); 6096 - spin_unlock(&BTRFS_I(inode)->lock); 6101 + spin_unlock(&inode->lock); 6097 6102 if (dropped > 0) 6098 6103 to_free += btrfs_calc_trans_metadata_size(fs_info, dropped); 6099 6104 6100 6105 if (btrfs_is_testing(fs_info)) 6101 6106 return; 6102 6107 6103 - trace_btrfs_space_reservation(fs_info, "delalloc", 6104 - btrfs_ino(BTRFS_I(inode)), to_free, 0); 6108 + trace_btrfs_space_reservation(fs_info, "delalloc", btrfs_ino(inode), 6109 + to_free, 0); 6105 6110 6106 6111 btrfs_block_rsv_release(fs_info, &fs_info->delalloc_block_rsv, to_free); 6107 6112 } ··· 6136 6141 ret = btrfs_check_data_free_space(inode, start, len); 6137 6142 if (ret < 0) 6138 6143 return ret; 6139 - ret = btrfs_delalloc_reserve_metadata(inode, len); 6144 + ret = btrfs_delalloc_reserve_metadata(BTRFS_I(inode), len); 6140 6145 if (ret < 0) 6141 6146 btrfs_free_reserved_data_space(inode, start, len); 6142 6147 return ret; ··· 6159 6164 */ 6160 6165 void btrfs_delalloc_release_space(struct inode *inode, u64 start, u64 len) 6161 6166 { 6162 - btrfs_delalloc_release_metadata(inode, len); 6167 + btrfs_delalloc_release_metadata(BTRFS_I(inode), len); 6163 6168 btrfs_free_reserved_data_space(inode, start, len); 6164 6169 } 6165 6170 ··· 9735 9740 } 9736 9741 } 9737 9742 9743 + /* 9744 + * Must be called only after stopping all workers, since we could have block 9745 + * group caching kthreads running, and therefore they could race with us if we 9746 + * freed the block groups before stopping them. 9747 + */ 9738 9748 int btrfs_free_block_groups(struct btrfs_fs_info *info) 9739 9749 { 9740 9750 struct btrfs_block_group_cache *block_group; ··· 9779 9779 list_del(&block_group->list); 9780 9780 up_write(&block_group->space_info->groups_sem); 9781 9781 9782 - if (block_group->cached == BTRFS_CACHE_STARTED) 9783 - wait_block_group_cache_done(block_group); 9784 - 9785 9782 /* 9786 9783 * We haven't cached this block group, which means we could 9787 9784 * possibly have excluded extents on this block group. ··· 9788 9791 free_excluded_extents(info, block_group); 9789 9792 9790 9793 btrfs_remove_free_space_cache(block_group); 9794 + ASSERT(block_group->cached != BTRFS_CACHE_STARTED); 9791 9795 ASSERT(list_empty(&block_group->dirty_list)); 9792 9796 ASSERT(list_empty(&block_group->io_list)); 9793 9797 ASSERT(list_empty(&block_group->bg_list)); ··· 10340 10342 mutex_unlock(&trans->transaction->cache_write_mutex); 10341 10343 10342 10344 if (!IS_ERR(inode)) { 10343 - ret = btrfs_orphan_add(trans, inode); 10345 + ret = btrfs_orphan_add(trans, BTRFS_I(inode)); 10344 10346 if (ret) { 10345 10347 btrfs_add_delayed_iput(inode); 10346 10348 goto out;
+37 -38
fs/btrfs/extent_io.c
··· 428 428 struct extent_state *state, unsigned *bits) 429 429 { 430 430 if (tree->ops && tree->ops->clear_bit_hook) 431 - tree->ops->clear_bit_hook(tree->mapping->host, state, bits); 431 + tree->ops->clear_bit_hook(BTRFS_I(tree->mapping->host), 432 + state, bits); 432 433 } 433 434 434 435 static void set_state_bits(struct extent_io_tree *tree, ··· 1960 1959 SetPageUptodate(page); 1961 1960 } 1962 1961 1963 - int free_io_failure(struct inode *inode, struct io_failure_record *rec) 1962 + int free_io_failure(struct btrfs_inode *inode, struct io_failure_record *rec) 1964 1963 { 1965 1964 int ret; 1966 1965 int err = 0; 1967 - struct extent_io_tree *failure_tree = &BTRFS_I(inode)->io_failure_tree; 1966 + struct extent_io_tree *failure_tree = &inode->io_failure_tree; 1968 1967 1969 1968 set_state_failrec(failure_tree, rec->start, NULL); 1970 1969 ret = clear_extent_bits(failure_tree, rec->start, ··· 1973 1972 if (ret) 1974 1973 err = ret; 1975 1974 1976 - ret = clear_extent_bits(&BTRFS_I(inode)->io_tree, rec->start, 1975 + ret = clear_extent_bits(&inode->io_tree, rec->start, 1977 1976 rec->start + rec->len - 1, 1978 1977 EXTENT_DAMAGED); 1979 1978 if (ret && !err) ··· 1993 1992 * currently, there can be no more than two copies of every data bit. thus, 1994 1993 * exactly one rewrite is required. 1995 1994 */ 1996 - int repair_io_failure(struct inode *inode, u64 start, u64 length, u64 logical, 1997 - struct page *page, unsigned int pg_offset, int mirror_num) 1995 + int repair_io_failure(struct btrfs_inode *inode, u64 start, u64 length, 1996 + u64 logical, struct page *page, 1997 + unsigned int pg_offset, int mirror_num) 1998 1998 { 1999 - struct btrfs_fs_info *fs_info = BTRFS_I(inode)->root->fs_info; 1999 + struct btrfs_fs_info *fs_info = inode->root->fs_info; 2000 2000 struct bio *bio; 2001 2001 struct btrfs_device *dev; 2002 2002 u64 map_length = 0; ··· 2056 2054 2057 2055 btrfs_info_rl_in_rcu(fs_info, 2058 2056 "read error corrected: ino %llu off %llu (dev %s sector %llu)", 2059 - btrfs_ino(BTRFS_I(inode)), start, 2057 + btrfs_ino(inode), start, 2060 2058 rcu_str_deref(dev->name), sector); 2061 2059 btrfs_bio_counter_dec(fs_info); 2062 2060 bio_put(bio); ··· 2076 2074 for (i = 0; i < num_pages; i++) { 2077 2075 struct page *p = eb->pages[i]; 2078 2076 2079 - ret = repair_io_failure(fs_info->btree_inode, start, 2077 + ret = repair_io_failure(BTRFS_I(fs_info->btree_inode), start, 2080 2078 PAGE_SIZE, start, p, 2081 2079 start - page_offset(p), mirror_num); 2082 2080 if (ret) ··· 2091 2089 * each time an IO finishes, we do a fast check in the IO failure tree 2092 2090 * to see if we need to process or clean up an io_failure_record 2093 2091 */ 2094 - int clean_io_failure(struct inode *inode, u64 start, struct page *page, 2092 + int clean_io_failure(struct btrfs_inode *inode, u64 start, struct page *page, 2095 2093 unsigned int pg_offset) 2096 2094 { 2097 2095 u64 private; 2098 2096 struct io_failure_record *failrec; 2099 - struct btrfs_fs_info *fs_info = BTRFS_I(inode)->root->fs_info; 2097 + struct btrfs_fs_info *fs_info = inode->root->fs_info; 2100 2098 struct extent_state *state; 2101 2099 int num_copies; 2102 2100 int ret; 2103 2101 2104 2102 private = 0; 2105 - ret = count_range_bits(&BTRFS_I(inode)->io_failure_tree, &private, 2103 + ret = count_range_bits(&inode->io_failure_tree, &private, 2106 2104 (u64)-1, 1, EXTENT_DIRTY, 0); 2107 2105 if (!ret) 2108 2106 return 0; 2109 2107 2110 - ret = get_state_failrec(&BTRFS_I(inode)->io_failure_tree, start, 2108 + ret = get_state_failrec(&inode->io_failure_tree, start, 2111 2109 &failrec); 2112 2110 if (ret) 2113 2111 return 0; ··· 2124 2122 if (fs_info->sb->s_flags & MS_RDONLY) 2125 2123 goto out; 2126 2124 2127 - spin_lock(&BTRFS_I(inode)->io_tree.lock); 2128 - state = find_first_extent_bit_state(&BTRFS_I(inode)->io_tree, 2125 + spin_lock(&inode->io_tree.lock); 2126 + state = find_first_extent_bit_state(&inode->io_tree, 2129 2127 failrec->start, 2130 2128 EXTENT_LOCKED); 2131 - spin_unlock(&BTRFS_I(inode)->io_tree.lock); 2129 + spin_unlock(&inode->io_tree.lock); 2132 2130 2133 2131 if (state && state->start <= failrec->start && 2134 2132 state->end >= failrec->start + failrec->len - 1) { ··· 2153 2151 * - under ordered extent 2154 2152 * - the inode is freeing 2155 2153 */ 2156 - void btrfs_free_io_failure_record(struct inode *inode, u64 start, u64 end) 2154 + void btrfs_free_io_failure_record(struct btrfs_inode *inode, u64 start, u64 end) 2157 2155 { 2158 - struct extent_io_tree *failure_tree = &BTRFS_I(inode)->io_failure_tree; 2156 + struct extent_io_tree *failure_tree = &inode->io_failure_tree; 2159 2157 struct io_failure_record *failrec; 2160 2158 struct extent_state *state, *next; 2161 2159 ··· 2395 2393 2396 2394 ret = btrfs_check_repairable(inode, failed_bio, failrec, failed_mirror); 2397 2395 if (!ret) { 2398 - free_io_failure(inode, failrec); 2396 + free_io_failure(BTRFS_I(inode), failrec); 2399 2397 return -EIO; 2400 2398 } 2401 2399 ··· 2408 2406 (int)phy_offset, failed_bio->bi_end_io, 2409 2407 NULL); 2410 2408 if (!bio) { 2411 - free_io_failure(inode, failrec); 2409 + free_io_failure(BTRFS_I(inode), failrec); 2412 2410 return -EIO; 2413 2411 } 2414 2412 bio_set_op_attrs(bio, REQ_OP_READ, read_mode); ··· 2420 2418 ret = tree->ops->submit_bio_hook(inode, bio, failrec->this_mirror, 2421 2419 failrec->bio_flags, 0); 2422 2420 if (ret) { 2423 - free_io_failure(inode, failrec); 2421 + free_io_failure(BTRFS_I(inode), failrec); 2424 2422 bio_put(bio); 2425 2423 } 2426 2424 ··· 2437 2435 2438 2436 tree = &BTRFS_I(page->mapping->host)->io_tree; 2439 2437 2440 - if (tree->ops && tree->ops->writepage_end_io_hook) { 2441 - ret = tree->ops->writepage_end_io_hook(page, start, 2442 - end, NULL, uptodate); 2443 - if (ret) 2444 - uptodate = 0; 2445 - } 2438 + if (tree->ops && tree->ops->writepage_end_io_hook) 2439 + tree->ops->writepage_end_io_hook(page, start, end, NULL, 2440 + uptodate); 2446 2441 2447 2442 if (!uptodate) { 2448 2443 ClearPageUptodate(page); ··· 2567 2568 len = bvec->bv_len; 2568 2569 2569 2570 mirror = io_bio->mirror_num; 2570 - if (likely(uptodate && tree->ops && 2571 - tree->ops->readpage_end_io_hook)) { 2571 + if (likely(uptodate && tree->ops)) { 2572 2572 ret = tree->ops->readpage_end_io_hook(io_bio, offset, 2573 2573 page, start, end, 2574 2574 mirror); 2575 2575 if (ret) 2576 2576 uptodate = 0; 2577 2577 else 2578 - clean_io_failure(inode, start, page, 0); 2578 + clean_io_failure(BTRFS_I(inode), start, 2579 + page, 0); 2579 2580 } 2580 2581 2581 2582 if (likely(uptodate)) 2582 2583 goto readpage_ok; 2583 2584 2584 - if (tree->ops && tree->ops->readpage_io_failed_hook) { 2585 + if (tree->ops) { 2585 2586 ret = tree->ops->readpage_io_failed_hook(page, mirror); 2586 2587 if (!ret && !bio->bi_error) 2587 2588 uptodate = 1; ··· 2730 2731 bio->bi_private = NULL; 2731 2732 bio_get(bio); 2732 2733 2733 - if (tree->ops && tree->ops->submit_bio_hook) 2734 + if (tree->ops) 2734 2735 ret = tree->ops->submit_bio_hook(page->mapping->host, bio, 2735 2736 mirror_num, bio_flags, start); 2736 2737 else ··· 2745 2746 unsigned long bio_flags) 2746 2747 { 2747 2748 int ret = 0; 2748 - if (tree->ops && tree->ops->merge_bio_hook) 2749 + if (tree->ops) 2749 2750 ret = tree->ops->merge_bio_hook(page, offset, size, bio, 2750 2751 bio_flags); 2751 2752 return ret; ··· 2856 2857 *em_cached = NULL; 2857 2858 } 2858 2859 2859 - em = get_extent(inode, page, pg_offset, start, len, 0); 2860 + em = get_extent(BTRFS_I(inode), page, pg_offset, start, len, 0); 2860 2861 if (em_cached && !IS_ERR_OR_NULL(em)) { 2861 2862 BUG_ON(*em_cached); 2862 2863 atomic_inc(&em->refs); ··· 3100 3101 inode = pages[0]->mapping->host; 3101 3102 while (1) { 3102 3103 lock_extent(tree, start, end); 3103 - ordered = btrfs_lookup_ordered_range(inode, start, 3104 + ordered = btrfs_lookup_ordered_range(BTRFS_I(inode), start, 3104 3105 end - start + 1); 3105 3106 if (!ordered) 3106 3107 break; ··· 3172 3173 3173 3174 while (1) { 3174 3175 lock_extent(tree, start, end); 3175 - ordered = btrfs_lookup_ordered_range(inode, start, 3176 + ordered = btrfs_lookup_ordered_range(BTRFS_I(inode), start, 3176 3177 PAGE_SIZE); 3177 3178 if (!ordered) 3178 3179 break; ··· 3369 3370 page_end, NULL, 1); 3370 3371 break; 3371 3372 } 3372 - em = epd->get_extent(inode, page, pg_offset, cur, 3373 + em = epd->get_extent(BTRFS_I(inode), page, pg_offset, cur, 3373 3374 end - cur + 1, 1); 3374 3375 if (IS_ERR_OR_NULL(em)) { 3375 3376 SetPageError(page); ··· 4334 4335 if (len == 0) 4335 4336 break; 4336 4337 len = ALIGN(len, sectorsize); 4337 - em = get_extent(inode, NULL, 0, offset, len, 0); 4338 + em = get_extent(BTRFS_I(inode), NULL, 0, offset, len, 0); 4338 4339 if (IS_ERR_OR_NULL(em)) 4339 4340 return em; 4340 4341
+32 -18
fs/btrfs/extent_io.h
··· 84 84 85 85 struct extent_state; 86 86 struct btrfs_root; 87 + struct btrfs_inode; 87 88 struct btrfs_io_bio; 88 89 struct io_failure_record; 89 90 ··· 92 91 int mirror_num, unsigned long bio_flags, 93 92 u64 bio_offset); 94 93 struct extent_io_ops { 95 - int (*fill_delalloc)(struct inode *inode, struct page *locked_page, 96 - u64 start, u64 end, int *page_started, 97 - unsigned long *nr_written); 98 - int (*writepage_start_hook)(struct page *page, u64 start, u64 end); 94 + /* 95 + * The following callbacks must be allways defined, the function 96 + * pointer will be called unconditionally. 97 + */ 99 98 extent_submit_bio_hook_t *submit_bio_hook; 99 + int (*readpage_end_io_hook)(struct btrfs_io_bio *io_bio, u64 phy_offset, 100 + struct page *page, u64 start, u64 end, 101 + int mirror); 100 102 int (*merge_bio_hook)(struct page *page, unsigned long offset, 101 103 size_t size, struct bio *bio, 102 104 unsigned long bio_flags); 103 105 int (*readpage_io_failed_hook)(struct page *page, int failed_mirror); 104 - int (*readpage_end_io_hook)(struct btrfs_io_bio *io_bio, u64 phy_offset, 105 - struct page *page, u64 start, u64 end, 106 - int mirror); 107 - int (*writepage_end_io_hook)(struct page *page, u64 start, u64 end, 106 + 107 + /* 108 + * Optional hooks, called if the pointer is not NULL 109 + */ 110 + int (*fill_delalloc)(struct inode *inode, struct page *locked_page, 111 + u64 start, u64 end, int *page_started, 112 + unsigned long *nr_written); 113 + 114 + int (*writepage_start_hook)(struct page *page, u64 start, u64 end); 115 + void (*writepage_end_io_hook)(struct page *page, u64 start, u64 end, 108 116 struct extent_state *state, int uptodate); 109 117 void (*set_bit_hook)(struct inode *inode, struct extent_state *state, 110 118 unsigned *bits); 111 - void (*clear_bit_hook)(struct inode *inode, struct extent_state *state, 112 - unsigned *bits); 119 + void (*clear_bit_hook)(struct btrfs_inode *inode, 120 + struct extent_state *state, 121 + unsigned *bits); 113 122 void (*merge_extent_hook)(struct inode *inode, 114 123 struct extent_state *new, 115 124 struct extent_state *other); ··· 220 209 221 210 struct extent_map_tree; 222 211 223 - typedef struct extent_map *(get_extent_t)(struct inode *inode, 212 + typedef struct extent_map *(get_extent_t)(struct btrfs_inode *inode, 224 213 struct page *page, 225 214 size_t pg_offset, 226 215 u64 start, u64 len, ··· 462 451 struct bio *btrfs_bio_clone(struct bio *bio, gfp_t gfp_mask); 463 452 464 453 struct btrfs_fs_info; 454 + struct btrfs_inode; 465 455 466 - int repair_io_failure(struct inode *inode, u64 start, u64 length, u64 logical, 467 - struct page *page, unsigned int pg_offset, 468 - int mirror_num); 469 - int clean_io_failure(struct inode *inode, u64 start, struct page *page, 470 - unsigned int pg_offset); 456 + int repair_io_failure(struct btrfs_inode *inode, u64 start, u64 length, 457 + u64 logical, struct page *page, 458 + unsigned int pg_offset, int mirror_num); 459 + int clean_io_failure(struct btrfs_inode *inode, u64 start, 460 + struct page *page, unsigned int pg_offset); 471 461 void end_extent_writepage(struct page *page, int err, u64 start, u64 end); 472 462 int repair_eb_io_failure(struct btrfs_fs_info *fs_info, 473 463 struct extent_buffer *eb, int mirror_num); ··· 492 480 int in_validation; 493 481 }; 494 482 495 - void btrfs_free_io_failure_record(struct inode *inode, u64 start, u64 end); 483 + 484 + void btrfs_free_io_failure_record(struct btrfs_inode *inode, u64 start, 485 + u64 end); 496 486 int btrfs_get_io_failure_record(struct inode *inode, u64 start, u64 end, 497 487 struct io_failure_record **failrec_ret); 498 488 int btrfs_check_repairable(struct inode *inode, struct bio *failed_bio, ··· 503 489 struct io_failure_record *failrec, 504 490 struct page *page, int pg_offset, int icsum, 505 491 bio_end_io_t *endio_func, void *data); 506 - int free_io_failure(struct inode *inode, struct io_failure_record *rec); 492 + int free_io_failure(struct btrfs_inode *inode, struct io_failure_record *rec); 507 493 #ifdef CONFIG_BTRFS_FS_RUN_SANITY_TESTS 508 494 noinline u64 find_lock_delalloc_range(struct inode *inode, 509 495 struct extent_io_tree *tree,
+33 -7
fs/btrfs/file-item.c
··· 214 214 * read from the commit root and sidestep a nasty deadlock 215 215 * between reading the free space cache and updating the csum tree. 216 216 */ 217 - if (btrfs_is_free_space_inode(inode)) { 217 + if (btrfs_is_free_space_inode(BTRFS_I(inode))) { 218 218 path->search_commit_root = 1; 219 219 path->skip_locking = 1; 220 220 } ··· 643 643 644 644 /* delete the entire item, it is inside our range */ 645 645 if (key.offset >= bytenr && csum_end <= end_byte) { 646 - ret = btrfs_del_item(trans, root, path); 646 + int del_nr = 1; 647 + 648 + /* 649 + * Check how many csum items preceding this one in this 650 + * leaf correspond to our range and then delete them all 651 + * at once. 652 + */ 653 + if (key.offset > bytenr && path->slots[0] > 0) { 654 + int slot = path->slots[0] - 1; 655 + 656 + while (slot >= 0) { 657 + struct btrfs_key pk; 658 + 659 + btrfs_item_key_to_cpu(leaf, &pk, slot); 660 + if (pk.offset < bytenr || 661 + pk.type != BTRFS_EXTENT_CSUM_KEY || 662 + pk.objectid != 663 + BTRFS_EXTENT_CSUM_OBJECTID) 664 + break; 665 + path->slots[0] = slot; 666 + del_nr++; 667 + key.offset = pk.offset; 668 + slot--; 669 + } 670 + } 671 + ret = btrfs_del_items(trans, root, path, 672 + path->slots[0], del_nr); 647 673 if (ret) 648 674 goto out; 649 675 if (key.offset == bytenr) ··· 930 904 goto out; 931 905 } 932 906 933 - void btrfs_extent_item_to_extent_map(struct inode *inode, 907 + void btrfs_extent_item_to_extent_map(struct btrfs_inode *inode, 934 908 const struct btrfs_path *path, 935 909 struct btrfs_file_extent_item *fi, 936 910 const bool new_inline, 937 911 struct extent_map *em) 938 912 { 939 - struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb); 940 - struct btrfs_root *root = BTRFS_I(inode)->root; 913 + struct btrfs_fs_info *fs_info = btrfs_sb(inode->vfs_inode.i_sb); 914 + struct btrfs_root *root = inode->root; 941 915 struct extent_buffer *leaf = path->nodes[0]; 942 916 const int slot = path->slots[0]; 943 917 struct btrfs_key key; ··· 1002 976 } 1003 977 } else { 1004 978 btrfs_err(fs_info, 1005 - "unknown file extent item type %d, inode %llu, offset %llu, root %llu", 1006 - type, btrfs_ino(BTRFS_I(inode)), extent_start, 979 + "unknown file extent item type %d, inode %llu, offset %llu, " 980 + "root %llu", type, btrfs_ino(inode), extent_start, 1007 981 root->root_key.objectid); 1008 982 } 1009 983 }
+73 -66
fs/btrfs/file.c
··· 92 92 * If an existing record is found the defrag item you 93 93 * pass in is freed 94 94 */ 95 - static int __btrfs_add_inode_defrag(struct inode *inode, 95 + static int __btrfs_add_inode_defrag(struct btrfs_inode *inode, 96 96 struct inode_defrag *defrag) 97 97 { 98 - struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb); 98 + struct btrfs_fs_info *fs_info = btrfs_sb(inode->vfs_inode.i_sb); 99 99 struct inode_defrag *entry; 100 100 struct rb_node **p; 101 101 struct rb_node *parent = NULL; ··· 123 123 return -EEXIST; 124 124 } 125 125 } 126 - set_bit(BTRFS_INODE_IN_DEFRAG, &BTRFS_I(inode)->runtime_flags); 126 + set_bit(BTRFS_INODE_IN_DEFRAG, &inode->runtime_flags); 127 127 rb_link_node(&defrag->rb_node, parent, p); 128 128 rb_insert_color(&defrag->rb_node, &fs_info->defrag_inodes); 129 129 return 0; ··· 145 145 * enabled 146 146 */ 147 147 int btrfs_add_inode_defrag(struct btrfs_trans_handle *trans, 148 - struct inode *inode) 148 + struct btrfs_inode *inode) 149 149 { 150 - struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb); 151 - struct btrfs_root *root = BTRFS_I(inode)->root; 150 + struct btrfs_fs_info *fs_info = btrfs_sb(inode->vfs_inode.i_sb); 151 + struct btrfs_root *root = inode->root; 152 152 struct inode_defrag *defrag; 153 153 u64 transid; 154 154 int ret; ··· 156 156 if (!__need_auto_defrag(fs_info)) 157 157 return 0; 158 158 159 - if (test_bit(BTRFS_INODE_IN_DEFRAG, &BTRFS_I(inode)->runtime_flags)) 159 + if (test_bit(BTRFS_INODE_IN_DEFRAG, &inode->runtime_flags)) 160 160 return 0; 161 161 162 162 if (trans) 163 163 transid = trans->transid; 164 164 else 165 - transid = BTRFS_I(inode)->root->last_trans; 165 + transid = inode->root->last_trans; 166 166 167 167 defrag = kmem_cache_zalloc(btrfs_inode_defrag_cachep, GFP_NOFS); 168 168 if (!defrag) 169 169 return -ENOMEM; 170 170 171 - defrag->ino = btrfs_ino(BTRFS_I(inode)); 171 + defrag->ino = btrfs_ino(inode); 172 172 defrag->transid = transid; 173 173 defrag->root = root->root_key.objectid; 174 174 175 175 spin_lock(&fs_info->defrag_inodes_lock); 176 - if (!test_bit(BTRFS_INODE_IN_DEFRAG, &BTRFS_I(inode)->runtime_flags)) { 176 + if (!test_bit(BTRFS_INODE_IN_DEFRAG, &inode->runtime_flags)) { 177 177 /* 178 178 * If we set IN_DEFRAG flag and evict the inode from memory, 179 179 * and then re-read this inode, this new inode doesn't have ··· 194 194 * the same inode in the tree, we will merge them together (by 195 195 * __btrfs_add_inode_defrag()) and free the one that we want to requeue. 196 196 */ 197 - static void btrfs_requeue_inode_defrag(struct inode *inode, 197 + static void btrfs_requeue_inode_defrag(struct btrfs_inode *inode, 198 198 struct inode_defrag *defrag) 199 199 { 200 - struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb); 200 + struct btrfs_fs_info *fs_info = btrfs_sb(inode->vfs_inode.i_sb); 201 201 int ret; 202 202 203 203 if (!__need_auto_defrag(fs_info)) ··· 334 334 */ 335 335 if (num_defrag == BTRFS_DEFRAG_BATCH) { 336 336 defrag->last_offset = range.start; 337 - btrfs_requeue_inode_defrag(inode, defrag); 337 + btrfs_requeue_inode_defrag(BTRFS_I(inode), defrag); 338 338 } else if (defrag->last_offset && !defrag->cycled) { 339 339 /* 340 340 * we didn't fill our defrag batch, but ··· 343 343 */ 344 344 defrag->last_offset = 0; 345 345 defrag->cycled = 1; 346 - btrfs_requeue_inode_defrag(inode, defrag); 346 + btrfs_requeue_inode_defrag(BTRFS_I(inode), defrag); 347 347 } else { 348 348 kmem_cache_free(btrfs_inode_defrag_cachep, defrag); 349 349 } ··· 529 529 * this drops all the extents in the cache that intersect the range 530 530 * [start, end]. Existing extents are split as required. 531 531 */ 532 - void btrfs_drop_extent_cache(struct inode *inode, u64 start, u64 end, 532 + void btrfs_drop_extent_cache(struct btrfs_inode *inode, u64 start, u64 end, 533 533 int skip_pinned) 534 534 { 535 535 struct extent_map *em; 536 536 struct extent_map *split = NULL; 537 537 struct extent_map *split2 = NULL; 538 - struct extent_map_tree *em_tree = &BTRFS_I(inode)->extent_tree; 538 + struct extent_map_tree *em_tree = &inode->extent_tree; 539 539 u64 len = end - start + 1; 540 540 u64 gen; 541 541 int ret; ··· 720 720 int leafs_visited = 0; 721 721 722 722 if (drop_cache) 723 - btrfs_drop_extent_cache(inode, start, end - 1, 0); 723 + btrfs_drop_extent_cache(BTRFS_I(inode), start, end - 1, 0); 724 724 725 725 if (start >= BTRFS_I(inode)->disk_i_size && !replace_extent) 726 726 modify_tree = 0; ··· 1082 1082 * two or three. 1083 1083 */ 1084 1084 int btrfs_mark_extent_written(struct btrfs_trans_handle *trans, 1085 - struct inode *inode, u64 start, u64 end) 1085 + struct btrfs_inode *inode, u64 start, u64 end) 1086 1086 { 1087 - struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb); 1088 - struct btrfs_root *root = BTRFS_I(inode)->root; 1087 + struct btrfs_fs_info *fs_info = btrfs_sb(inode->vfs_inode.i_sb); 1088 + struct btrfs_root *root = inode->root; 1089 1089 struct extent_buffer *leaf; 1090 1090 struct btrfs_path *path; 1091 1091 struct btrfs_file_extent_item *fi; ··· 1102 1102 int del_slot = 0; 1103 1103 int recow; 1104 1104 int ret; 1105 - u64 ino = btrfs_ino(BTRFS_I(inode)); 1105 + u64 ino = btrfs_ino(inode); 1106 1106 1107 1107 path = btrfs_alloc_path(); 1108 1108 if (!path) ··· 1415 1415 * the other < 0 number - Something wrong happens 1416 1416 */ 1417 1417 static noinline int 1418 - lock_and_cleanup_extent_if_need(struct inode *inode, struct page **pages, 1418 + lock_and_cleanup_extent_if_need(struct btrfs_inode *inode, struct page **pages, 1419 1419 size_t num_pages, loff_t pos, 1420 1420 size_t write_bytes, 1421 1421 u64 *lockstart, u64 *lockend, 1422 1422 struct extent_state **cached_state) 1423 1423 { 1424 - struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb); 1424 + struct btrfs_fs_info *fs_info = btrfs_sb(inode->vfs_inode.i_sb); 1425 1425 u64 start_pos; 1426 1426 u64 last_pos; 1427 1427 int i; ··· 1432 1432 + round_up(pos + write_bytes - start_pos, 1433 1433 fs_info->sectorsize) - 1; 1434 1434 1435 - if (start_pos < inode->i_size) { 1435 + if (start_pos < inode->vfs_inode.i_size) { 1436 1436 struct btrfs_ordered_extent *ordered; 1437 - lock_extent_bits(&BTRFS_I(inode)->io_tree, 1438 - start_pos, last_pos, cached_state); 1437 + lock_extent_bits(&inode->io_tree, start_pos, last_pos, 1438 + cached_state); 1439 1439 ordered = btrfs_lookup_ordered_range(inode, start_pos, 1440 1440 last_pos - start_pos + 1); 1441 1441 if (ordered && 1442 1442 ordered->file_offset + ordered->len > start_pos && 1443 1443 ordered->file_offset <= last_pos) { 1444 - unlock_extent_cached(&BTRFS_I(inode)->io_tree, 1445 - start_pos, last_pos, 1446 - cached_state, GFP_NOFS); 1444 + unlock_extent_cached(&inode->io_tree, start_pos, 1445 + last_pos, cached_state, GFP_NOFS); 1447 1446 for (i = 0; i < num_pages; i++) { 1448 1447 unlock_page(pages[i]); 1449 1448 put_page(pages[i]); 1450 1449 } 1451 - btrfs_start_ordered_extent(inode, ordered, 1); 1450 + btrfs_start_ordered_extent(&inode->vfs_inode, 1451 + ordered, 1); 1452 1452 btrfs_put_ordered_extent(ordered); 1453 1453 return -EAGAIN; 1454 1454 } 1455 1455 if (ordered) 1456 1456 btrfs_put_ordered_extent(ordered); 1457 1457 1458 - clear_extent_bit(&BTRFS_I(inode)->io_tree, start_pos, 1458 + clear_extent_bit(&inode->io_tree, start_pos, 1459 1459 last_pos, EXTENT_DIRTY | EXTENT_DELALLOC | 1460 1460 EXTENT_DO_ACCOUNTING | EXTENT_DEFRAG, 1461 1461 0, 0, cached_state, GFP_NOFS); ··· 1474 1474 return ret; 1475 1475 } 1476 1476 1477 - static noinline int check_can_nocow(struct inode *inode, loff_t pos, 1477 + static noinline int check_can_nocow(struct btrfs_inode *inode, loff_t pos, 1478 1478 size_t *write_bytes) 1479 1479 { 1480 - struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb); 1481 - struct btrfs_root *root = BTRFS_I(inode)->root; 1480 + struct btrfs_fs_info *fs_info = btrfs_sb(inode->vfs_inode.i_sb); 1481 + struct btrfs_root *root = inode->root; 1482 1482 struct btrfs_ordered_extent *ordered; 1483 1483 u64 lockstart, lockend; 1484 1484 u64 num_bytes; ··· 1493 1493 fs_info->sectorsize) - 1; 1494 1494 1495 1495 while (1) { 1496 - lock_extent(&BTRFS_I(inode)->io_tree, lockstart, lockend); 1496 + lock_extent(&inode->io_tree, lockstart, lockend); 1497 1497 ordered = btrfs_lookup_ordered_range(inode, lockstart, 1498 1498 lockend - lockstart + 1); 1499 1499 if (!ordered) { 1500 1500 break; 1501 1501 } 1502 - unlock_extent(&BTRFS_I(inode)->io_tree, lockstart, lockend); 1503 - btrfs_start_ordered_extent(inode, ordered, 1); 1502 + unlock_extent(&inode->io_tree, lockstart, lockend); 1503 + btrfs_start_ordered_extent(&inode->vfs_inode, ordered, 1); 1504 1504 btrfs_put_ordered_extent(ordered); 1505 1505 } 1506 1506 1507 1507 num_bytes = lockend - lockstart + 1; 1508 - ret = can_nocow_extent(inode, lockstart, &num_bytes, NULL, NULL, NULL); 1508 + ret = can_nocow_extent(&inode->vfs_inode, lockstart, &num_bytes, 1509 + NULL, NULL, NULL); 1509 1510 if (ret <= 0) { 1510 1511 ret = 0; 1511 1512 btrfs_end_write_no_snapshoting(root); ··· 1515 1514 num_bytes - pos + lockstart); 1516 1515 } 1517 1516 1518 - unlock_extent(&BTRFS_I(inode)->io_tree, lockstart, lockend); 1517 + unlock_extent(&inode->io_tree, lockstart, lockend); 1519 1518 1520 1519 return ret; 1521 1520 } ··· 1580 1579 if (ret < 0) { 1581 1580 if ((BTRFS_I(inode)->flags & (BTRFS_INODE_NODATACOW | 1582 1581 BTRFS_INODE_PREALLOC)) && 1583 - check_can_nocow(inode, pos, &write_bytes) > 0) { 1582 + check_can_nocow(BTRFS_I(inode), pos, 1583 + &write_bytes) > 0) { 1584 1584 /* 1585 1585 * For nodata cow case, no need to reserve 1586 1586 * data space. ··· 1601 1599 } 1602 1600 } 1603 1601 1604 - ret = btrfs_delalloc_reserve_metadata(inode, reserve_bytes); 1602 + ret = btrfs_delalloc_reserve_metadata(BTRFS_I(inode), 1603 + reserve_bytes); 1605 1604 if (ret) { 1606 1605 if (!only_release_metadata) 1607 1606 btrfs_free_reserved_data_space(inode, pos, ··· 1626 1623 if (ret) 1627 1624 break; 1628 1625 1629 - ret = lock_and_cleanup_extent_if_need(inode, pages, num_pages, 1630 - pos, write_bytes, &lockstart, 1631 - &lockend, &cached_state); 1626 + ret = lock_and_cleanup_extent_if_need(BTRFS_I(inode), pages, 1627 + num_pages, pos, write_bytes, &lockstart, 1628 + &lockend, &cached_state); 1632 1629 if (ret < 0) { 1633 1630 if (ret == -EAGAIN) 1634 1631 goto again; ··· 1680 1677 spin_unlock(&BTRFS_I(inode)->lock); 1681 1678 } 1682 1679 if (only_release_metadata) { 1683 - btrfs_delalloc_release_metadata(inode, 1680 + btrfs_delalloc_release_metadata(BTRFS_I(inode), 1684 1681 release_bytes); 1685 1682 } else { 1686 1683 u64 __pos; ··· 1741 1738 if (release_bytes) { 1742 1739 if (only_release_metadata) { 1743 1740 btrfs_end_write_no_snapshoting(root); 1744 - btrfs_delalloc_release_metadata(inode, release_bytes); 1741 + btrfs_delalloc_release_metadata(BTRFS_I(inode), 1742 + release_bytes); 1745 1743 } else { 1746 1744 btrfs_delalloc_release_space(inode, 1747 1745 round_down(pos, fs_info->sectorsize), ··· 2197 2193 return 0; 2198 2194 } 2199 2195 2200 - static int hole_mergeable(struct inode *inode, struct extent_buffer *leaf, 2196 + static int hole_mergeable(struct btrfs_inode *inode, struct extent_buffer *leaf, 2201 2197 int slot, u64 start, u64 end) 2202 2198 { 2203 2199 struct btrfs_file_extent_item *fi; ··· 2207 2203 return 0; 2208 2204 2209 2205 btrfs_item_key_to_cpu(leaf, &key, slot); 2210 - if (key.objectid != btrfs_ino(BTRFS_I(inode)) || 2206 + if (key.objectid != btrfs_ino(inode) || 2211 2207 key.type != BTRFS_EXTENT_DATA_KEY) 2212 2208 return 0; 2213 2209 ··· 2226 2222 return 0; 2227 2223 } 2228 2224 2229 - static int fill_holes(struct btrfs_trans_handle *trans, struct inode *inode, 2230 - struct btrfs_path *path, u64 offset, u64 end) 2225 + static int fill_holes(struct btrfs_trans_handle *trans, 2226 + struct btrfs_inode *inode, 2227 + struct btrfs_path *path, u64 offset, u64 end) 2231 2228 { 2232 - struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb); 2233 - struct btrfs_root *root = BTRFS_I(inode)->root; 2229 + struct btrfs_fs_info *fs_info = btrfs_sb(inode->vfs_inode.i_sb); 2230 + struct btrfs_root *root = inode->root; 2234 2231 struct extent_buffer *leaf; 2235 2232 struct btrfs_file_extent_item *fi; 2236 2233 struct extent_map *hole_em; 2237 - struct extent_map_tree *em_tree = &BTRFS_I(inode)->extent_tree; 2234 + struct extent_map_tree *em_tree = &inode->extent_tree; 2238 2235 struct btrfs_key key; 2239 2236 int ret; 2240 2237 2241 2238 if (btrfs_fs_incompat(fs_info, NO_HOLES)) 2242 2239 goto out; 2243 2240 2244 - key.objectid = btrfs_ino(BTRFS_I(inode)); 2241 + key.objectid = btrfs_ino(inode); 2245 2242 key.type = BTRFS_EXTENT_DATA_KEY; 2246 2243 key.offset = offset; 2247 2244 ··· 2258 2253 } 2259 2254 2260 2255 leaf = path->nodes[0]; 2261 - if (hole_mergeable(inode, leaf, path->slots[0]-1, offset, end)) { 2256 + if (hole_mergeable(inode, leaf, path->slots[0] - 1, offset, end)) { 2262 2257 u64 num_bytes; 2263 2258 2264 2259 path->slots[0]--; ··· 2290 2285 } 2291 2286 btrfs_release_path(path); 2292 2287 2293 - ret = btrfs_insert_file_extent(trans, root, btrfs_ino(BTRFS_I(inode)), 2288 + ret = btrfs_insert_file_extent(trans, root, btrfs_ino(inode), 2294 2289 offset, 0, 0, end - offset, 0, end - offset, 0, 0, 0); 2295 2290 if (ret) 2296 2291 return ret; ··· 2301 2296 hole_em = alloc_extent_map(); 2302 2297 if (!hole_em) { 2303 2298 btrfs_drop_extent_cache(inode, offset, end - 1, 0); 2304 - set_bit(BTRFS_INODE_NEEDS_FULL_SYNC, 2305 - &BTRFS_I(inode)->runtime_flags); 2299 + set_bit(BTRFS_INODE_NEEDS_FULL_SYNC, &inode->runtime_flags); 2306 2300 } else { 2307 2301 hole_em->start = offset; 2308 2302 hole_em->len = end - offset; ··· 2324 2320 free_extent_map(hole_em); 2325 2321 if (ret) 2326 2322 set_bit(BTRFS_INODE_NEEDS_FULL_SYNC, 2327 - &BTRFS_I(inode)->runtime_flags); 2323 + &inode->runtime_flags); 2328 2324 } 2329 2325 2330 2326 return 0; ··· 2341 2337 struct extent_map *em; 2342 2338 int ret = 0; 2343 2339 2344 - em = btrfs_get_extent(inode, NULL, 0, *start, *len, 0); 2340 + em = btrfs_get_extent(BTRFS_I(inode), NULL, 0, *start, *len, 0); 2345 2341 if (IS_ERR_OR_NULL(em)) { 2346 2342 if (!em) 2347 2343 ret = -ENOMEM; ··· 2554 2550 trans->block_rsv = &fs_info->trans_block_rsv; 2555 2551 2556 2552 if (cur_offset < drop_end && cur_offset < ino_size) { 2557 - ret = fill_holes(trans, inode, path, cur_offset, 2558 - drop_end); 2553 + ret = fill_holes(trans, BTRFS_I(inode), path, 2554 + cur_offset, drop_end); 2559 2555 if (ret) { 2560 2556 /* 2561 2557 * If we failed then we didn't insert our hole ··· 2626 2622 * cur_offset == drop_end). 2627 2623 */ 2628 2624 if (cur_offset < ino_size && cur_offset < drop_end) { 2629 - ret = fill_holes(trans, inode, path, cur_offset, drop_end); 2625 + ret = fill_holes(trans, BTRFS_I(inode), path, 2626 + cur_offset, drop_end); 2630 2627 if (ret) { 2631 2628 /* Same comment as above. */ 2632 2629 btrfs_abort_transaction(trans, ret); ··· 2752 2747 * 2753 2748 * For qgroup space, it will be checked later. 2754 2749 */ 2755 - ret = btrfs_alloc_data_chunk_ondemand(inode, alloc_end - alloc_start); 2750 + ret = btrfs_alloc_data_chunk_ondemand(BTRFS_I(inode), 2751 + alloc_end - alloc_start); 2756 2752 if (ret < 0) 2757 2753 return ret; 2758 2754 ··· 2833 2827 /* First, check if we exceed the qgroup limit */ 2834 2828 INIT_LIST_HEAD(&reserve_list); 2835 2829 while (1) { 2836 - em = btrfs_get_extent(inode, NULL, 0, cur_offset, 2830 + em = btrfs_get_extent(BTRFS_I(inode), NULL, 0, cur_offset, 2837 2831 alloc_end - cur_offset, 0); 2838 2832 if (IS_ERR_OR_NULL(em)) { 2839 2833 if (!em) ··· 2960 2954 &cached_state); 2961 2955 2962 2956 while (start < inode->i_size) { 2963 - em = btrfs_get_extent_fiemap(inode, NULL, 0, start, len, 0); 2957 + em = btrfs_get_extent_fiemap(BTRFS_I(inode), NULL, 0, 2958 + start, len, 0); 2964 2959 if (IS_ERR(em)) { 2965 2960 ret = PTR_ERR(em); 2966 2961 em = NULL;
+3 -2
fs/btrfs/free-space-cache.c
··· 260 260 btrfs_free_path(path); 261 261 } 262 262 263 - btrfs_i_size_write(inode, 0); 263 + btrfs_i_size_write(BTRFS_I(inode), 0); 264 264 truncate_pagecache(inode, 0); 265 265 266 266 /* ··· 3545 3545 3546 3546 if (ret) { 3547 3547 if (release_metadata) 3548 - btrfs_delalloc_release_metadata(inode, inode->i_size); 3548 + btrfs_delalloc_release_metadata(BTRFS_I(inode), 3549 + inode->i_size); 3549 3550 #ifdef DEBUG 3550 3551 btrfs_err(fs_info, 3551 3552 "failed to write free ino cache for root %llu",
+1 -1
fs/btrfs/inode-map.c
··· 499 499 ret = btrfs_prealloc_file_range_trans(inode, trans, 0, 0, prealloc, 500 500 prealloc, prealloc, &alloc_hint); 501 501 if (ret) { 502 - btrfs_delalloc_release_metadata(inode, prealloc); 502 + btrfs_delalloc_release_metadata(BTRFS_I(inode), prealloc); 503 503 goto out_put; 504 504 } 505 505
+229 -216
fs/btrfs/inode.c
··· 316 316 } 317 317 318 318 set_bit(BTRFS_INODE_NEEDS_FULL_SYNC, &BTRFS_I(inode)->runtime_flags); 319 - btrfs_delalloc_release_metadata(inode, end + 1 - start); 320 - btrfs_drop_extent_cache(inode, start, aligned_end - 1, 0); 319 + btrfs_delalloc_release_metadata(BTRFS_I(inode), end + 1 - start); 320 + btrfs_drop_extent_cache(BTRFS_I(inode), start, aligned_end - 1, 0); 321 321 out: 322 322 /* 323 323 * Don't forget to free the reserved space, as for inlined extent ··· 389 389 return 0; 390 390 } 391 391 392 - static inline void inode_should_defrag(struct inode *inode, 392 + static inline void inode_should_defrag(struct btrfs_inode *inode, 393 393 u64 start, u64 end, u64 num_bytes, u64 small_write) 394 394 { 395 395 /* If this is a small write inside eof, kick off a defrag */ 396 396 if (num_bytes < small_write && 397 - (start > 0 || end + 1 < BTRFS_I(inode)->disk_i_size)) 397 + (start > 0 || end + 1 < inode->disk_i_size)) 398 398 btrfs_add_inode_defrag(NULL, inode); 399 399 } 400 400 ··· 430 430 int ret = 0; 431 431 struct page **pages = NULL; 432 432 unsigned long nr_pages; 433 - unsigned long nr_pages_ret = 0; 434 433 unsigned long total_compressed = 0; 435 434 unsigned long total_in = 0; 436 - unsigned long max_compressed = SZ_128K; 437 - unsigned long max_uncompressed = SZ_128K; 438 435 int i; 439 436 int will_compress; 440 437 int compress_type = fs_info->compress_type; 441 438 int redirty = 0; 442 439 443 - inode_should_defrag(inode, start, end, end - start + 1, SZ_16K); 440 + inode_should_defrag(BTRFS_I(inode), start, end, end - start + 1, 441 + SZ_16K); 444 442 445 443 actual_end = min_t(u64, isize, end + 1); 446 444 again: 447 445 will_compress = 0; 448 446 nr_pages = (end >> PAGE_SHIFT) - (start >> PAGE_SHIFT) + 1; 449 - nr_pages = min_t(unsigned long, nr_pages, SZ_128K / PAGE_SIZE); 447 + BUILD_BUG_ON((BTRFS_MAX_COMPRESSED % PAGE_SIZE) != 0); 448 + nr_pages = min_t(unsigned long, nr_pages, 449 + BTRFS_MAX_COMPRESSED / PAGE_SIZE); 450 450 451 451 /* 452 452 * we don't want to send crud past the end of i_size through ··· 471 471 (start > 0 || end + 1 < BTRFS_I(inode)->disk_i_size)) 472 472 goto cleanup_and_bail_uncompressed; 473 473 474 - /* we want to make sure that amount of ram required to uncompress 475 - * an extent is reasonable, so we limit the total size in ram 476 - * of a compressed extent to 128k. This is a crucial number 477 - * because it also controls how easily we can spread reads across 478 - * cpus for decompression. 479 - * 480 - * We also want to make sure the amount of IO required to do 481 - * a random read is reasonably small, so we limit the size of 482 - * a compressed extent to 128k. 483 - */ 484 - total_compressed = min(total_compressed, max_uncompressed); 474 + total_compressed = min_t(unsigned long, total_compressed, 475 + BTRFS_MAX_UNCOMPRESSED); 485 476 num_bytes = ALIGN(end - start + 1, blocksize); 486 477 num_bytes = max(blocksize, num_bytes); 487 478 total_in = 0; ··· 507 516 redirty = 1; 508 517 ret = btrfs_compress_pages(compress_type, 509 518 inode->i_mapping, start, 510 - total_compressed, pages, 511 - nr_pages, &nr_pages_ret, 519 + pages, 520 + &nr_pages, 512 521 &total_in, 513 - &total_compressed, 514 - max_compressed); 522 + &total_compressed); 515 523 516 524 if (!ret) { 517 525 unsigned long offset = total_compressed & 518 526 (PAGE_SIZE - 1); 519 - struct page *page = pages[nr_pages_ret - 1]; 527 + struct page *page = pages[nr_pages - 1]; 520 528 char *kaddr; 521 529 522 530 /* zero the tail end of the last page, we might be ··· 596 606 * will submit them to the elevator. 597 607 */ 598 608 add_async_extent(async_cow, start, num_bytes, 599 - total_compressed, pages, nr_pages_ret, 609 + total_compressed, pages, nr_pages, 600 610 compress_type); 601 611 602 612 if (start + num_bytes < end) { ··· 613 623 * the compression code ran but failed to make things smaller, 614 624 * free any pages it allocated and our page pointer array 615 625 */ 616 - for (i = 0; i < nr_pages_ret; i++) { 626 + for (i = 0; i < nr_pages; i++) { 617 627 WARN_ON(pages[i]->mapping); 618 628 put_page(pages[i]); 619 629 } 620 630 kfree(pages); 621 631 pages = NULL; 622 632 total_compressed = 0; 623 - nr_pages_ret = 0; 633 + nr_pages = 0; 624 634 625 635 /* flag the file so we don't compress in the future */ 626 636 if (!btrfs_test_opt(fs_info, FORCE_COMPRESS) && ··· 649 659 return; 650 660 651 661 free_pages_out: 652 - for (i = 0; i < nr_pages_ret; i++) { 662 + for (i = 0; i < nr_pages; i++) { 653 663 WARN_ON(pages[i]->mapping); 654 664 put_page(pages[i]); 655 665 } ··· 796 806 BTRFS_ORDERED_COMPRESSED, 797 807 async_extent->compress_type); 798 808 if (ret) { 799 - btrfs_drop_extent_cache(inode, async_extent->start, 809 + btrfs_drop_extent_cache(BTRFS_I(inode), 810 + async_extent->start, 800 811 async_extent->start + 801 812 async_extent->ram_size - 1, 0); 802 813 goto out_free_reserve; ··· 924 933 struct extent_map *em; 925 934 int ret = 0; 926 935 927 - if (btrfs_is_free_space_inode(inode)) { 936 + if (btrfs_is_free_space_inode(BTRFS_I(inode))) { 928 937 WARN_ON_ONCE(1); 929 938 ret = -EINVAL; 930 939 goto out_unlock; ··· 934 943 num_bytes = max(blocksize, num_bytes); 935 944 disk_num_bytes = num_bytes; 936 945 937 - inode_should_defrag(inode, start, end, num_bytes, SZ_64K); 946 + inode_should_defrag(BTRFS_I(inode), start, end, num_bytes, SZ_64K); 938 947 939 948 if (start == 0) { 940 949 /* lets try to make an inline extent */ ··· 962 971 btrfs_super_total_bytes(fs_info->super_copy)); 963 972 964 973 alloc_hint = get_extent_allocation_hint(inode, start, num_bytes); 965 - btrfs_drop_extent_cache(inode, start, start + num_bytes - 1, 0); 974 + btrfs_drop_extent_cache(BTRFS_I(inode), start, 975 + start + num_bytes - 1, 0); 966 976 967 977 while (disk_num_bytes > 0) { 968 978 unsigned long op; ··· 1031 1039 return ret; 1032 1040 1033 1041 out_drop_extent_cache: 1034 - btrfs_drop_extent_cache(inode, start, start + ram_size - 1, 0); 1042 + btrfs_drop_extent_cache(BTRFS_I(inode), start, start + ram_size - 1, 0); 1035 1043 out_reserve: 1036 1044 btrfs_dec_block_group_reservations(fs_info, ins.objectid); 1037 1045 btrfs_free_reserved_extent(fs_info, ins.objectid, ins.offset, 1); ··· 1223 1231 return -ENOMEM; 1224 1232 } 1225 1233 1226 - nolock = btrfs_is_free_space_inode(inode); 1234 + nolock = btrfs_is_free_space_inode(BTRFS_I(inode)); 1227 1235 1228 1236 cow_start = (u64)-1; 1229 1237 cur_offset = start; ··· 1323 1331 * either valid or do not exist. 1324 1332 */ 1325 1333 if (csum_exist_in_range(fs_info, disk_bytenr, 1326 - num_bytes)) 1334 + num_bytes)) { 1335 + if (!nolock) 1336 + btrfs_end_write_no_snapshoting(root); 1327 1337 goto out_check; 1328 - if (!btrfs_inc_nocow_writers(fs_info, disk_bytenr)) 1338 + } 1339 + if (!btrfs_inc_nocow_writers(fs_info, disk_bytenr)) { 1340 + if (!nolock) 1341 + btrfs_end_write_no_snapshoting(root); 1329 1342 goto out_check; 1343 + } 1330 1344 nocow = 1; 1331 1345 } else if (extent_type == BTRFS_FILE_EXTENT_INLINE) { 1332 1346 extent_end = found_key.offset + ··· 1627 1629 } 1628 1630 1629 1631 static void btrfs_del_delalloc_inode(struct btrfs_root *root, 1630 - struct inode *inode) 1632 + struct btrfs_inode *inode) 1631 1633 { 1632 - struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb); 1634 + struct btrfs_fs_info *fs_info = btrfs_sb(inode->vfs_inode.i_sb); 1633 1635 1634 1636 spin_lock(&root->delalloc_lock); 1635 - if (!list_empty(&BTRFS_I(inode)->delalloc_inodes)) { 1636 - list_del_init(&BTRFS_I(inode)->delalloc_inodes); 1637 + if (!list_empty(&inode->delalloc_inodes)) { 1638 + list_del_init(&inode->delalloc_inodes); 1637 1639 clear_bit(BTRFS_INODE_IN_DELALLOC_LIST, 1638 - &BTRFS_I(inode)->runtime_flags); 1640 + &inode->runtime_flags); 1639 1641 root->nr_delalloc_inodes--; 1640 1642 if (!root->nr_delalloc_inodes) { 1641 1643 spin_lock(&fs_info->delalloc_root_lock); ··· 1668 1670 if (!(state->state & EXTENT_DELALLOC) && (*bits & EXTENT_DELALLOC)) { 1669 1671 struct btrfs_root *root = BTRFS_I(inode)->root; 1670 1672 u64 len = state->end + 1 - state->start; 1671 - bool do_list = !btrfs_is_free_space_inode(inode); 1673 + bool do_list = !btrfs_is_free_space_inode(BTRFS_I(inode)); 1672 1674 1673 1675 if (*bits & EXTENT_FIRST_DELALLOC) { 1674 1676 *bits &= ~EXTENT_FIRST_DELALLOC; ··· 1698 1700 /* 1699 1701 * extent_io.c clear_bit_hook, see set_bit_hook for why 1700 1702 */ 1701 - static void btrfs_clear_bit_hook(struct inode *inode, 1703 + static void btrfs_clear_bit_hook(struct btrfs_inode *inode, 1702 1704 struct extent_state *state, 1703 1705 unsigned *bits) 1704 1706 { 1705 - struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb); 1707 + struct btrfs_fs_info *fs_info = btrfs_sb(inode->vfs_inode.i_sb); 1706 1708 u64 len = state->end + 1 - state->start; 1707 1709 u32 num_extents = count_max_extents(len); 1708 1710 1709 - spin_lock(&BTRFS_I(inode)->lock); 1711 + spin_lock(&inode->lock); 1710 1712 if ((state->state & EXTENT_DEFRAG) && (*bits & EXTENT_DEFRAG)) 1711 - BTRFS_I(inode)->defrag_bytes -= len; 1712 - spin_unlock(&BTRFS_I(inode)->lock); 1713 + inode->defrag_bytes -= len; 1714 + spin_unlock(&inode->lock); 1713 1715 1714 1716 /* 1715 1717 * set_bit and clear bit hooks normally require _irqsave/restore ··· 1717 1719 * bit, which is only set or cleared with irqs on 1718 1720 */ 1719 1721 if ((state->state & EXTENT_DELALLOC) && (*bits & EXTENT_DELALLOC)) { 1720 - struct btrfs_root *root = BTRFS_I(inode)->root; 1722 + struct btrfs_root *root = inode->root; 1721 1723 bool do_list = !btrfs_is_free_space_inode(inode); 1722 1724 1723 1725 if (*bits & EXTENT_FIRST_DELALLOC) { 1724 1726 *bits &= ~EXTENT_FIRST_DELALLOC; 1725 1727 } else if (!(*bits & EXTENT_DO_ACCOUNTING)) { 1726 - spin_lock(&BTRFS_I(inode)->lock); 1727 - BTRFS_I(inode)->outstanding_extents -= num_extents; 1728 - spin_unlock(&BTRFS_I(inode)->lock); 1728 + spin_lock(&inode->lock); 1729 + inode->outstanding_extents -= num_extents; 1730 + spin_unlock(&inode->lock); 1729 1731 } 1730 1732 1731 1733 /* ··· 1745 1747 && do_list && !(state->state & EXTENT_NORESERVE) 1746 1748 && (*bits & (EXTENT_DO_ACCOUNTING | 1747 1749 EXTENT_CLEAR_DATA_RESV))) 1748 - btrfs_free_reserved_data_space_noquota(inode, 1750 + btrfs_free_reserved_data_space_noquota( 1751 + &inode->vfs_inode, 1749 1752 state->start, len); 1750 1753 1751 1754 __percpu_counter_add(&fs_info->delalloc_bytes, -len, 1752 1755 fs_info->delalloc_batch); 1753 - spin_lock(&BTRFS_I(inode)->lock); 1754 - BTRFS_I(inode)->delalloc_bytes -= len; 1755 - if (do_list && BTRFS_I(inode)->delalloc_bytes == 0 && 1756 + spin_lock(&inode->lock); 1757 + inode->delalloc_bytes -= len; 1758 + if (do_list && inode->delalloc_bytes == 0 && 1756 1759 test_bit(BTRFS_INODE_IN_DELALLOC_LIST, 1757 - &BTRFS_I(inode)->runtime_flags)) 1760 + &inode->runtime_flags)) 1758 1761 btrfs_del_delalloc_inode(root, inode); 1759 - spin_unlock(&BTRFS_I(inode)->lock); 1762 + spin_unlock(&inode->lock); 1760 1763 } 1761 1764 } 1762 1765 ··· 1853 1854 1854 1855 skip_sum = BTRFS_I(inode)->flags & BTRFS_INODE_NODATASUM; 1855 1856 1856 - if (btrfs_is_free_space_inode(inode)) 1857 + if (btrfs_is_free_space_inode(BTRFS_I(inode))) 1857 1858 metadata = BTRFS_WQ_ENDIO_FREE_SPACE; 1858 1859 1859 1860 if (bio_op(bio) != REQ_OP_WRITE) { ··· 1962 1963 if (PagePrivate2(page)) 1963 1964 goto out; 1964 1965 1965 - ordered = btrfs_lookup_ordered_range(inode, page_start, 1966 + ordered = btrfs_lookup_ordered_range(BTRFS_I(inode), page_start, 1966 1967 PAGE_SIZE); 1967 1968 if (ordered) { 1968 1969 unlock_extent_cached(&BTRFS_I(inode)->io_tree, page_start, ··· 2792 2793 bool nolock; 2793 2794 bool truncated = false; 2794 2795 2795 - nolock = btrfs_is_free_space_inode(inode); 2796 + nolock = btrfs_is_free_space_inode(BTRFS_I(inode)); 2796 2797 2797 2798 if (test_bit(BTRFS_ORDERED_IOERR, &ordered_extent->flags)) { 2798 2799 ret = -EIO; 2799 2800 goto out; 2800 2801 } 2801 2802 2802 - btrfs_free_io_failure_record(inode, ordered_extent->file_offset, 2803 - ordered_extent->file_offset + 2804 - ordered_extent->len - 1); 2803 + btrfs_free_io_failure_record(BTRFS_I(inode), 2804 + ordered_extent->file_offset, 2805 + ordered_extent->file_offset + 2806 + ordered_extent->len - 1); 2805 2807 2806 2808 if (test_bit(BTRFS_ORDERED_TRUNCATED, &ordered_extent->flags)) { 2807 2809 truncated = true; ··· 2873 2873 compress_type = ordered_extent->compress_type; 2874 2874 if (test_bit(BTRFS_ORDERED_PREALLOC, &ordered_extent->flags)) { 2875 2875 BUG_ON(compress_type); 2876 - ret = btrfs_mark_extent_written(trans, inode, 2876 + ret = btrfs_mark_extent_written(trans, BTRFS_I(inode), 2877 2877 ordered_extent->file_offset, 2878 2878 ordered_extent->file_offset + 2879 2879 logical_len); ··· 2914 2914 ordered_extent->len - 1, &cached_state, GFP_NOFS); 2915 2915 out: 2916 2916 if (root != fs_info->tree_root) 2917 - btrfs_delalloc_release_metadata(inode, ordered_extent->len); 2917 + btrfs_delalloc_release_metadata(BTRFS_I(inode), 2918 + ordered_extent->len); 2918 2919 if (trans) 2919 2920 btrfs_end_transaction(trans); 2920 2921 ··· 2930 2929 clear_extent_uptodate(io_tree, start, end, NULL, GFP_NOFS); 2931 2930 2932 2931 /* Drop the cache for the part of the extent we didn't write. */ 2933 - btrfs_drop_extent_cache(inode, start, end, 0); 2932 + btrfs_drop_extent_cache(BTRFS_I(inode), start, end, 0); 2934 2933 2935 2934 /* 2936 2935 * If the ordered extent had an IOERR or something else went ··· 2978 2977 btrfs_finish_ordered_io(ordered_extent); 2979 2978 } 2980 2979 2981 - static int btrfs_writepage_end_io_hook(struct page *page, u64 start, u64 end, 2980 + static void btrfs_writepage_end_io_hook(struct page *page, u64 start, u64 end, 2982 2981 struct extent_state *state, int uptodate) 2983 2982 { 2984 2983 struct inode *inode = page->mapping->host; ··· 2992 2991 ClearPagePrivate2(page); 2993 2992 if (!btrfs_dec_test_ordered_pending(inode, &ordered_extent, start, 2994 2993 end - start + 1, uptodate)) 2995 - return 0; 2994 + return; 2996 2995 2997 - if (btrfs_is_free_space_inode(inode)) { 2996 + if (btrfs_is_free_space_inode(BTRFS_I(inode))) { 2998 2997 wq = fs_info->endio_freespace_worker; 2999 2998 func = btrfs_freespace_write_helper; 3000 2999 } else { ··· 3005 3004 btrfs_init_work(&ordered_extent->work, func, finish_ordered_fn, NULL, 3006 3005 NULL); 3007 3006 btrfs_queue_work(wq, &ordered_extent->work); 3008 - 3009 - return 0; 3010 3007 } 3011 3008 3012 3009 static int __readpage_endio_check(struct inode *inode, ··· 3027 3028 kunmap_atomic(kaddr); 3028 3029 return 0; 3029 3030 zeroit: 3030 - btrfs_print_data_csum_error(inode, start, csum, csum_expected, 3031 + btrfs_print_data_csum_error(BTRFS_I(inode), start, csum, csum_expected, 3031 3032 io_bio->mirror_num); 3032 3033 memset(kaddr + pgoff, 1, len); 3033 3034 flush_dcache_page(page); ··· 3166 3167 * NOTE: caller of this function should reserve 5 units of metadata for 3167 3168 * this function. 3168 3169 */ 3169 - int btrfs_orphan_add(struct btrfs_trans_handle *trans, struct inode *inode) 3170 + int btrfs_orphan_add(struct btrfs_trans_handle *trans, 3171 + struct btrfs_inode *inode) 3170 3172 { 3171 - struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb); 3172 - struct btrfs_root *root = BTRFS_I(inode)->root; 3173 + struct btrfs_fs_info *fs_info = btrfs_sb(inode->vfs_inode.i_sb); 3174 + struct btrfs_root *root = inode->root; 3173 3175 struct btrfs_block_rsv *block_rsv = NULL; 3174 3176 int reserve = 0; 3175 3177 int insert = 0; ··· 3192 3192 } 3193 3193 3194 3194 if (!test_and_set_bit(BTRFS_INODE_HAS_ORPHAN_ITEM, 3195 - &BTRFS_I(inode)->runtime_flags)) { 3195 + &inode->runtime_flags)) { 3196 3196 #if 0 3197 3197 /* 3198 3198 * For proper ENOSPC handling, we should do orphan ··· 3209 3209 } 3210 3210 3211 3211 if (!test_and_set_bit(BTRFS_INODE_ORPHAN_META_RESERVED, 3212 - &BTRFS_I(inode)->runtime_flags)) 3212 + &inode->runtime_flags)) 3213 3213 reserve = 1; 3214 3214 spin_unlock(&root->orphan_lock); 3215 3215 ··· 3220 3220 if (ret) { 3221 3221 atomic_dec(&root->orphan_inodes); 3222 3222 clear_bit(BTRFS_INODE_ORPHAN_META_RESERVED, 3223 - &BTRFS_I(inode)->runtime_flags); 3223 + &inode->runtime_flags); 3224 3224 if (insert) 3225 3225 clear_bit(BTRFS_INODE_HAS_ORPHAN_ITEM, 3226 - &BTRFS_I(inode)->runtime_flags); 3226 + &inode->runtime_flags); 3227 3227 return ret; 3228 3228 } 3229 3229 } 3230 3230 3231 3231 /* insert an orphan item to track this unlinked/truncated file */ 3232 3232 if (insert >= 1) { 3233 - ret = btrfs_insert_orphan_item(trans, root, 3234 - btrfs_ino(BTRFS_I(inode))); 3233 + ret = btrfs_insert_orphan_item(trans, root, btrfs_ino(inode)); 3235 3234 if (ret) { 3236 3235 atomic_dec(&root->orphan_inodes); 3237 3236 if (reserve) { 3238 3237 clear_bit(BTRFS_INODE_ORPHAN_META_RESERVED, 3239 - &BTRFS_I(inode)->runtime_flags); 3238 + &inode->runtime_flags); 3240 3239 btrfs_orphan_release_metadata(inode); 3241 3240 } 3242 3241 if (ret != -EEXIST) { 3243 3242 clear_bit(BTRFS_INODE_HAS_ORPHAN_ITEM, 3244 - &BTRFS_I(inode)->runtime_flags); 3243 + &inode->runtime_flags); 3245 3244 btrfs_abort_transaction(trans, ret); 3246 3245 return ret; 3247 3246 } ··· 3265 3266 * item for this particular inode. 3266 3267 */ 3267 3268 static int btrfs_orphan_del(struct btrfs_trans_handle *trans, 3268 - struct inode *inode) 3269 + struct btrfs_inode *inode) 3269 3270 { 3270 - struct btrfs_root *root = BTRFS_I(inode)->root; 3271 + struct btrfs_root *root = inode->root; 3271 3272 int delete_item = 0; 3272 3273 int release_rsv = 0; 3273 3274 int ret = 0; 3274 3275 3275 3276 spin_lock(&root->orphan_lock); 3276 3277 if (test_and_clear_bit(BTRFS_INODE_HAS_ORPHAN_ITEM, 3277 - &BTRFS_I(inode)->runtime_flags)) 3278 + &inode->runtime_flags)) 3278 3279 delete_item = 1; 3279 3280 3280 3281 if (test_and_clear_bit(BTRFS_INODE_ORPHAN_META_RESERVED, 3281 - &BTRFS_I(inode)->runtime_flags)) 3282 + &inode->runtime_flags)) 3282 3283 release_rsv = 1; 3283 3284 spin_unlock(&root->orphan_lock); 3284 3285 ··· 3286 3287 atomic_dec(&root->orphan_inodes); 3287 3288 if (trans) 3288 3289 ret = btrfs_del_orphan_item(trans, root, 3289 - btrfs_ino(BTRFS_I(inode))); 3290 + btrfs_ino(inode)); 3290 3291 } 3291 3292 3292 3293 if (release_rsv) ··· 3452 3453 ret = PTR_ERR(trans); 3453 3454 goto out; 3454 3455 } 3455 - ret = btrfs_orphan_add(trans, inode); 3456 + ret = btrfs_orphan_add(trans, BTRFS_I(inode)); 3456 3457 btrfs_end_transaction(trans); 3457 3458 if (ret) { 3458 3459 iput(inode); ··· 3461 3462 3462 3463 ret = btrfs_truncate(inode); 3463 3464 if (ret) 3464 - btrfs_orphan_del(NULL, inode); 3465 + btrfs_orphan_del(NULL, BTRFS_I(inode)); 3465 3466 } else { 3466 3467 nr_unlink++; 3467 3468 } ··· 3616 3617 set_nlink(inode, btrfs_inode_nlink(leaf, inode_item)); 3617 3618 i_uid_write(inode, btrfs_inode_uid(leaf, inode_item)); 3618 3619 i_gid_write(inode, btrfs_inode_gid(leaf, inode_item)); 3619 - btrfs_i_size_write(inode, btrfs_inode_size(leaf, inode_item)); 3620 + btrfs_i_size_write(BTRFS_I(inode), btrfs_inode_size(leaf, inode_item)); 3620 3621 3621 3622 inode->i_atime.tv_sec = btrfs_timespec_sec(leaf, &inode_item->atime); 3622 3623 inode->i_atime.tv_nsec = btrfs_timespec_nsec(leaf, &inode_item->atime); ··· 3864 3865 * The data relocation inode should also be directly updated 3865 3866 * without delay 3866 3867 */ 3867 - if (!btrfs_is_free_space_inode(inode) 3868 + if (!btrfs_is_free_space_inode(BTRFS_I(inode)) 3868 3869 && root->root_key.objectid != BTRFS_DATA_RELOC_TREE_OBJECTID 3869 3870 && !test_bit(BTRFS_FS_LOG_RECOVERING, &fs_info->flags)) { 3870 3871 btrfs_update_root_times(trans, root); ··· 3987 3988 if (ret) 3988 3989 goto out; 3989 3990 3990 - btrfs_i_size_write(&dir->vfs_inode, 3991 - dir->vfs_inode.i_size - name_len * 2); 3991 + btrfs_i_size_write(dir, dir->vfs_inode.i_size - name_len * 2); 3992 3992 inode_inc_iversion(&inode->vfs_inode); 3993 3993 inode_inc_iversion(&dir->vfs_inode); 3994 3994 inode->vfs_inode.i_ctime = dir->vfs_inode.i_mtime = ··· 4054 4056 goto out; 4055 4057 4056 4058 if (inode->i_nlink == 0) { 4057 - ret = btrfs_orphan_add(trans, inode); 4059 + ret = btrfs_orphan_add(trans, BTRFS_I(inode)); 4058 4060 if (ret) 4059 4061 goto out; 4060 4062 } ··· 4135 4137 goto out; 4136 4138 } 4137 4139 4138 - btrfs_i_size_write(dir, dir->i_size - name_len * 2); 4140 + btrfs_i_size_write(BTRFS_I(dir), dir->i_size - name_len * 2); 4139 4141 inode_inc_iversion(dir); 4140 4142 dir->i_mtime = dir->i_ctime = current_time(dir); 4141 4143 ret = btrfs_update_inode_fallback(trans, root, dir); ··· 4171 4173 goto out; 4172 4174 } 4173 4175 4174 - err = btrfs_orphan_add(trans, inode); 4176 + err = btrfs_orphan_add(trans, BTRFS_I(inode)); 4175 4177 if (err) 4176 4178 goto out; 4177 4179 ··· 4182 4184 BTRFS_I(d_inode(dentry)), dentry->d_name.name, 4183 4185 dentry->d_name.len); 4184 4186 if (!err) { 4185 - btrfs_i_size_write(inode, 0); 4187 + btrfs_i_size_write(BTRFS_I(inode), 0); 4186 4188 /* 4187 4189 * Propagate the last_unlink_trans value of the deleted dir to 4188 4190 * its parent directory. This is to prevent an unrecoverable ··· 4318 4320 * for non-free space inodes and ref cows, we want to back off from 4319 4321 * time to time 4320 4322 */ 4321 - if (!btrfs_is_free_space_inode(inode) && 4323 + if (!btrfs_is_free_space_inode(BTRFS_I(inode)) && 4322 4324 test_bit(BTRFS_ROOT_REF_COWS, &root->state)) 4323 4325 be_nice = 1; 4324 4326 ··· 4334 4336 */ 4335 4337 if (test_bit(BTRFS_ROOT_REF_COWS, &root->state) || 4336 4338 root == fs_info->tree_root) 4337 - btrfs_drop_extent_cache(inode, ALIGN(new_size, 4339 + btrfs_drop_extent_cache(BTRFS_I(inode), ALIGN(new_size, 4338 4340 fs_info->sectorsize), 4339 4341 (u64)-1, 0); 4340 4342 ··· 4410 4412 if (found_type > min_type) { 4411 4413 del_item = 1; 4412 4414 } else { 4413 - if (item_end < new_size) { 4414 - /* 4415 - * With NO_HOLES mode, for the following mapping 4416 - * 4417 - * [0-4k][hole][8k-12k] 4418 - * 4419 - * if truncating isize down to 6k, it ends up 4420 - * isize being 8k. 4421 - */ 4422 - if (btrfs_fs_incompat(root->fs_info, NO_HOLES)) 4423 - last_size = new_size; 4415 + if (item_end < new_size) 4424 4416 break; 4425 - } 4426 4417 if (found_key.offset >= new_size) 4427 4418 del_item = 1; 4428 4419 else ··· 4594 4607 btrfs_abort_transaction(trans, ret); 4595 4608 } 4596 4609 error: 4597 - if (root->root_key.objectid != BTRFS_TREE_LOG_OBJECTID) 4610 + if (root->root_key.objectid != BTRFS_TREE_LOG_OBJECTID) { 4611 + ASSERT(last_size >= new_size); 4612 + if (!err && last_size > new_size) 4613 + last_size = new_size; 4598 4614 btrfs_ordered_update_i_size(inode, last_size, NULL); 4615 + } 4599 4616 4600 4617 btrfs_free_path(path); 4601 4618 ··· 4826 4835 4827 4836 lock_extent_bits(io_tree, hole_start, block_end - 1, 4828 4837 &cached_state); 4829 - ordered = btrfs_lookup_ordered_range(inode, hole_start, 4838 + ordered = btrfs_lookup_ordered_range(BTRFS_I(inode), hole_start, 4830 4839 block_end - hole_start); 4831 4840 if (!ordered) 4832 4841 break; ··· 4838 4847 4839 4848 cur_offset = hole_start; 4840 4849 while (1) { 4841 - em = btrfs_get_extent(inode, NULL, 0, cur_offset, 4850 + em = btrfs_get_extent(BTRFS_I(inode), NULL, 0, cur_offset, 4842 4851 block_end - cur_offset, 0); 4843 4852 if (IS_ERR(em)) { 4844 4853 err = PTR_ERR(em); ··· 4855 4864 hole_size); 4856 4865 if (err) 4857 4866 break; 4858 - btrfs_drop_extent_cache(inode, cur_offset, 4867 + btrfs_drop_extent_cache(BTRFS_I(inode), cur_offset, 4859 4868 cur_offset + hole_size - 1, 0); 4860 4869 hole_em = alloc_extent_map(); 4861 4870 if (!hole_em) { ··· 4881 4890 write_unlock(&em_tree->lock); 4882 4891 if (err != -EEXIST) 4883 4892 break; 4884 - btrfs_drop_extent_cache(inode, cur_offset, 4893 + btrfs_drop_extent_cache(BTRFS_I(inode), 4894 + cur_offset, 4885 4895 cur_offset + 4886 4896 hole_size - 1, 0); 4887 4897 } ··· 4979 4987 * so we need to guarantee from this point on that everything 4980 4988 * will be consistent. 4981 4989 */ 4982 - ret = btrfs_orphan_add(trans, inode); 4990 + ret = btrfs_orphan_add(trans, BTRFS_I(inode)); 4983 4991 btrfs_end_transaction(trans); 4984 4992 if (ret) 4985 4993 return ret; ··· 4988 4996 truncate_setsize(inode, newsize); 4989 4997 4990 4998 /* Disable nonlocked read DIO to avoid the end less truncate */ 4991 - btrfs_inode_block_unlocked_dio(inode); 4999 + btrfs_inode_block_unlocked_dio(BTRFS_I(inode)); 4992 5000 inode_dio_wait(inode); 4993 - btrfs_inode_resume_unlocked_dio(inode); 5001 + btrfs_inode_resume_unlocked_dio(BTRFS_I(inode)); 4994 5002 4995 5003 ret = btrfs_truncate(inode); 4996 5004 if (ret && inode->i_nlink) { ··· 4999 5007 /* To get a stable disk_i_size */ 5000 5008 err = btrfs_wait_ordered_range(inode, 0, (u64)-1); 5001 5009 if (err) { 5002 - btrfs_orphan_del(NULL, inode); 5010 + btrfs_orphan_del(NULL, BTRFS_I(inode)); 5003 5011 return err; 5004 5012 } 5005 5013 ··· 5011 5019 */ 5012 5020 trans = btrfs_join_transaction(root); 5013 5021 if (IS_ERR(trans)) { 5014 - btrfs_orphan_del(NULL, inode); 5022 + btrfs_orphan_del(NULL, BTRFS_I(inode)); 5015 5023 return ret; 5016 5024 } 5017 5025 i_size_write(inode, BTRFS_I(inode)->disk_i_size); 5018 - err = btrfs_orphan_del(trans, inode); 5026 + err = btrfs_orphan_del(trans, BTRFS_I(inode)); 5019 5027 if (err) 5020 5028 btrfs_abort_transaction(trans, err); 5021 5029 btrfs_end_transaction(trans); ··· 5173 5181 if (inode->i_nlink && 5174 5182 ((btrfs_root_refs(&root->root_item) != 0 && 5175 5183 root->root_key.objectid != BTRFS_ROOT_TREE_OBJECTID) || 5176 - btrfs_is_free_space_inode(inode))) 5184 + btrfs_is_free_space_inode(BTRFS_I(inode)))) 5177 5185 goto no_delete; 5178 5186 5179 5187 if (is_bad_inode(inode)) { 5180 - btrfs_orphan_del(NULL, inode); 5188 + btrfs_orphan_del(NULL, BTRFS_I(inode)); 5181 5189 goto no_delete; 5182 5190 } 5183 5191 /* do we really want it for ->i_nlink > 0 and zero btrfs_root_refs? */ 5184 5192 if (!special_file(inode->i_mode)) 5185 5193 btrfs_wait_ordered_range(inode, 0, (u64)-1); 5186 5194 5187 - btrfs_free_io_failure_record(inode, 0, (u64)-1); 5195 + btrfs_free_io_failure_record(BTRFS_I(inode), 0, (u64)-1); 5188 5196 5189 5197 if (test_bit(BTRFS_FS_LOG_RECOVERING, &fs_info->flags)) { 5190 5198 BUG_ON(test_bit(BTRFS_INODE_HAS_ORPHAN_ITEM, ··· 5200 5208 5201 5209 ret = btrfs_commit_inode_delayed_inode(BTRFS_I(inode)); 5202 5210 if (ret) { 5203 - btrfs_orphan_del(NULL, inode); 5211 + btrfs_orphan_del(NULL, BTRFS_I(inode)); 5204 5212 goto no_delete; 5205 5213 } 5206 5214 5207 5215 rsv = btrfs_alloc_block_rsv(fs_info, BTRFS_BLOCK_RSV_TEMP); 5208 5216 if (!rsv) { 5209 - btrfs_orphan_del(NULL, inode); 5217 + btrfs_orphan_del(NULL, BTRFS_I(inode)); 5210 5218 goto no_delete; 5211 5219 } 5212 5220 rsv->size = min_size; 5213 5221 rsv->failfast = 1; 5214 5222 global_rsv = &fs_info->global_block_rsv; 5215 5223 5216 - btrfs_i_size_write(inode, 0); 5224 + btrfs_i_size_write(BTRFS_I(inode), 0); 5217 5225 5218 5226 /* 5219 5227 * This is a bit simpler than btrfs_truncate since we've already ··· 5248 5256 btrfs_warn(fs_info, 5249 5257 "Could not get space for a delete, will truncate on mount %d", 5250 5258 ret); 5251 - btrfs_orphan_del(NULL, inode); 5259 + btrfs_orphan_del(NULL, BTRFS_I(inode)); 5252 5260 btrfs_free_block_rsv(fs_info, rsv); 5253 5261 goto no_delete; 5254 5262 } 5255 5263 5256 5264 trans = btrfs_join_transaction(root); 5257 5265 if (IS_ERR(trans)) { 5258 - btrfs_orphan_del(NULL, inode); 5266 + btrfs_orphan_del(NULL, BTRFS_I(inode)); 5259 5267 btrfs_free_block_rsv(fs_info, rsv); 5260 5268 goto no_delete; 5261 5269 } ··· 5281 5289 if (ret) { 5282 5290 ret = btrfs_commit_transaction(trans); 5283 5291 if (ret) { 5284 - btrfs_orphan_del(NULL, inode); 5292 + btrfs_orphan_del(NULL, BTRFS_I(inode)); 5285 5293 btrfs_free_block_rsv(fs_info, rsv); 5286 5294 goto no_delete; 5287 5295 } ··· 5310 5318 */ 5311 5319 if (ret == 0) { 5312 5320 trans->block_rsv = root->orphan_block_rsv; 5313 - btrfs_orphan_del(trans, inode); 5321 + btrfs_orphan_del(trans, BTRFS_I(inode)); 5314 5322 } else { 5315 - btrfs_orphan_del(NULL, inode); 5323 + btrfs_orphan_del(NULL, BTRFS_I(inode)); 5316 5324 } 5317 5325 5318 5326 trans->block_rsv = &fs_info->trans_block_rsv; ··· 5890 5898 if (test_bit(BTRFS_INODE_DUMMY, &BTRFS_I(inode)->runtime_flags)) 5891 5899 return 0; 5892 5900 5893 - if (btrfs_fs_closing(root->fs_info) && btrfs_is_free_space_inode(inode)) 5901 + if (btrfs_fs_closing(root->fs_info) && 5902 + btrfs_is_free_space_inode(BTRFS_I(inode))) 5894 5903 nolock = true; 5895 5904 5896 5905 if (wbc->sync_mode == WB_SYNC_ALL) { ··· 5971 5978 * and then set the in-memory index_cnt variable to reflect 5972 5979 * free sequence numbers 5973 5980 */ 5974 - static int btrfs_set_inode_index_count(struct inode *inode) 5981 + static int btrfs_set_inode_index_count(struct btrfs_inode *inode) 5975 5982 { 5976 - struct btrfs_root *root = BTRFS_I(inode)->root; 5983 + struct btrfs_root *root = inode->root; 5977 5984 struct btrfs_key key, found_key; 5978 5985 struct btrfs_path *path; 5979 5986 struct extent_buffer *leaf; 5980 5987 int ret; 5981 5988 5982 - key.objectid = btrfs_ino(BTRFS_I(inode)); 5989 + key.objectid = btrfs_ino(inode); 5983 5990 key.type = BTRFS_DIR_INDEX_KEY; 5984 5991 key.offset = (u64)-1; 5985 5992 ··· 6002 6009 * else has to start at 2 6003 6010 */ 6004 6011 if (path->slots[0] == 0) { 6005 - BTRFS_I(inode)->index_cnt = 2; 6012 + inode->index_cnt = 2; 6006 6013 goto out; 6007 6014 } 6008 6015 ··· 6011 6018 leaf = path->nodes[0]; 6012 6019 btrfs_item_key_to_cpu(leaf, &found_key, path->slots[0]); 6013 6020 6014 - if (found_key.objectid != btrfs_ino(BTRFS_I(inode)) || 6021 + if (found_key.objectid != btrfs_ino(inode) || 6015 6022 found_key.type != BTRFS_DIR_INDEX_KEY) { 6016 - BTRFS_I(inode)->index_cnt = 2; 6023 + inode->index_cnt = 2; 6017 6024 goto out; 6018 6025 } 6019 6026 6020 - BTRFS_I(inode)->index_cnt = found_key.offset + 1; 6027 + inode->index_cnt = found_key.offset + 1; 6021 6028 out: 6022 6029 btrfs_free_path(path); 6023 6030 return ret; ··· 6027 6034 * helper to find a free sequence number in a given directory. This current 6028 6035 * code is very simple, later versions will do smarter things in the btree 6029 6036 */ 6030 - int btrfs_set_inode_index(struct inode *dir, u64 *index) 6037 + int btrfs_set_inode_index(struct btrfs_inode *dir, u64 *index) 6031 6038 { 6032 6039 int ret = 0; 6033 6040 6034 - if (BTRFS_I(dir)->index_cnt == (u64)-1) { 6035 - ret = btrfs_inode_delayed_dir_index_count(BTRFS_I(dir)); 6041 + if (dir->index_cnt == (u64)-1) { 6042 + ret = btrfs_inode_delayed_dir_index_count(dir); 6036 6043 if (ret) { 6037 6044 ret = btrfs_set_inode_index_count(dir); 6038 6045 if (ret) ··· 6040 6047 } 6041 6048 } 6042 6049 6043 - *index = BTRFS_I(dir)->index_cnt; 6044 - BTRFS_I(dir)->index_cnt++; 6050 + *index = dir->index_cnt; 6051 + dir->index_cnt++; 6045 6052 6046 6053 return ret; 6047 6054 } ··· 6102 6109 if (dir && name) { 6103 6110 trace_btrfs_inode_request(dir); 6104 6111 6105 - ret = btrfs_set_inode_index(dir, index); 6112 + ret = btrfs_set_inode_index(BTRFS_I(dir), index); 6106 6113 if (ret) { 6107 6114 btrfs_free_path(path); 6108 6115 iput(inode); ··· 6237 6244 * inode to the parent directory. 6238 6245 */ 6239 6246 int btrfs_add_link(struct btrfs_trans_handle *trans, 6240 - struct inode *parent_inode, struct inode *inode, 6247 + struct btrfs_inode *parent_inode, struct btrfs_inode *inode, 6241 6248 const char *name, int name_len, int add_backref, u64 index) 6242 6249 { 6243 - struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb); 6250 + struct btrfs_fs_info *fs_info = btrfs_sb(inode->vfs_inode.i_sb); 6244 6251 int ret = 0; 6245 6252 struct btrfs_key key; 6246 - struct btrfs_root *root = BTRFS_I(parent_inode)->root; 6247 - u64 ino = btrfs_ino(BTRFS_I(inode)); 6248 - u64 parent_ino = btrfs_ino(BTRFS_I(parent_inode)); 6253 + struct btrfs_root *root = parent_inode->root; 6254 + u64 ino = btrfs_ino(inode); 6255 + u64 parent_ino = btrfs_ino(parent_inode); 6249 6256 6250 6257 if (unlikely(ino == BTRFS_FIRST_FREE_OBJECTID)) { 6251 - memcpy(&key, &BTRFS_I(inode)->root->root_key, sizeof(key)); 6258 + memcpy(&key, &inode->root->root_key, sizeof(key)); 6252 6259 } else { 6253 6260 key.objectid = ino; 6254 6261 key.type = BTRFS_INODE_ITEM_KEY; ··· 6270 6277 6271 6278 ret = btrfs_insert_dir_item(trans, root, name, name_len, 6272 6279 parent_inode, &key, 6273 - btrfs_inode_type(inode), index); 6280 + btrfs_inode_type(&inode->vfs_inode), index); 6274 6281 if (ret == -EEXIST || ret == -EOVERFLOW) 6275 6282 goto fail_dir_item; 6276 6283 else if (ret) { ··· 6278 6285 return ret; 6279 6286 } 6280 6287 6281 - btrfs_i_size_write(parent_inode, parent_inode->i_size + 6288 + btrfs_i_size_write(parent_inode, parent_inode->vfs_inode.i_size + 6282 6289 name_len * 2); 6283 - inode_inc_iversion(parent_inode); 6284 - parent_inode->i_mtime = parent_inode->i_ctime = 6285 - current_time(parent_inode); 6286 - ret = btrfs_update_inode(trans, root, parent_inode); 6290 + inode_inc_iversion(&parent_inode->vfs_inode); 6291 + parent_inode->vfs_inode.i_mtime = parent_inode->vfs_inode.i_ctime = 6292 + current_time(&parent_inode->vfs_inode); 6293 + ret = btrfs_update_inode(trans, root, &parent_inode->vfs_inode); 6287 6294 if (ret) 6288 6295 btrfs_abort_transaction(trans, ret); 6289 6296 return ret; ··· 6307 6314 } 6308 6315 6309 6316 static int btrfs_add_nondir(struct btrfs_trans_handle *trans, 6310 - struct inode *dir, struct dentry *dentry, 6311 - struct inode *inode, int backref, u64 index) 6317 + struct btrfs_inode *dir, struct dentry *dentry, 6318 + struct btrfs_inode *inode, int backref, u64 index) 6312 6319 { 6313 6320 int err = btrfs_add_link(trans, dir, inode, 6314 6321 dentry->d_name.name, dentry->d_name.len, ··· 6364 6371 if (err) 6365 6372 goto out_unlock_inode; 6366 6373 6367 - err = btrfs_add_nondir(trans, dir, dentry, inode, 0, index); 6374 + err = btrfs_add_nondir(trans, BTRFS_I(dir), dentry, BTRFS_I(inode), 6375 + 0, index); 6368 6376 if (err) { 6369 6377 goto out_unlock_inode; 6370 6378 } else { ··· 6442 6448 if (err) 6443 6449 goto out_unlock_inode; 6444 6450 6445 - err = btrfs_add_nondir(trans, dir, dentry, inode, 0, index); 6451 + err = btrfs_add_nondir(trans, BTRFS_I(dir), dentry, BTRFS_I(inode), 6452 + 0, index); 6446 6453 if (err) 6447 6454 goto out_unlock_inode; 6448 6455 ··· 6485 6490 if (inode->i_nlink >= BTRFS_LINK_MAX) 6486 6491 return -EMLINK; 6487 6492 6488 - err = btrfs_set_inode_index(dir, &index); 6493 + err = btrfs_set_inode_index(BTRFS_I(dir), &index); 6489 6494 if (err) 6490 6495 goto fail; 6491 6496 ··· 6509 6514 ihold(inode); 6510 6515 set_bit(BTRFS_INODE_COPY_EVERYTHING, &BTRFS_I(inode)->runtime_flags); 6511 6516 6512 - err = btrfs_add_nondir(trans, dir, dentry, inode, 1, index); 6517 + err = btrfs_add_nondir(trans, BTRFS_I(dir), dentry, BTRFS_I(inode), 6518 + 1, index); 6513 6519 6514 6520 if (err) { 6515 6521 drop_inode = 1; ··· 6524 6528 * If new hard link count is 1, it's a file created 6525 6529 * with open(2) O_TMPFILE flag. 6526 6530 */ 6527 - err = btrfs_orphan_del(trans, inode); 6531 + err = btrfs_orphan_del(trans, BTRFS_I(inode)); 6528 6532 if (err) 6529 6533 goto fail; 6530 6534 } ··· 6585 6589 if (err) 6586 6590 goto out_fail_inode; 6587 6591 6588 - btrfs_i_size_write(inode, 0); 6592 + btrfs_i_size_write(BTRFS_I(inode), 0); 6589 6593 err = btrfs_update_inode(trans, root, inode); 6590 6594 if (err) 6591 6595 goto out_fail_inode; 6592 6596 6593 - err = btrfs_add_link(trans, dir, inode, dentry->d_name.name, 6594 - dentry->d_name.len, 0, index); 6597 + err = btrfs_add_link(trans, BTRFS_I(dir), BTRFS_I(inode), 6598 + dentry->d_name.name, 6599 + dentry->d_name.len, 0, index); 6595 6600 if (err) 6596 6601 goto out_fail_inode; 6597 6602 ··· 6722 6725 * This also copies inline extents directly into the page. 6723 6726 */ 6724 6727 6725 - struct extent_map *btrfs_get_extent(struct inode *inode, struct page *page, 6726 - size_t pg_offset, u64 start, u64 len, 6727 - int create) 6728 + struct extent_map *btrfs_get_extent(struct btrfs_inode *inode, 6729 + struct page *page, 6730 + size_t pg_offset, u64 start, u64 len, 6731 + int create) 6728 6732 { 6729 - struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb); 6733 + struct btrfs_fs_info *fs_info = btrfs_sb(inode->vfs_inode.i_sb); 6730 6734 int ret; 6731 6735 int err = 0; 6732 6736 u64 extent_start = 0; 6733 6737 u64 extent_end = 0; 6734 - u64 objectid = btrfs_ino(BTRFS_I(inode)); 6738 + u64 objectid = btrfs_ino(inode); 6735 6739 u32 found_type; 6736 6740 struct btrfs_path *path = NULL; 6737 - struct btrfs_root *root = BTRFS_I(inode)->root; 6741 + struct btrfs_root *root = inode->root; 6738 6742 struct btrfs_file_extent_item *item; 6739 6743 struct extent_buffer *leaf; 6740 6744 struct btrfs_key found_key; 6741 6745 struct extent_map *em = NULL; 6742 - struct extent_map_tree *em_tree = &BTRFS_I(inode)->extent_tree; 6743 - struct extent_io_tree *io_tree = &BTRFS_I(inode)->io_tree; 6746 + struct extent_map_tree *em_tree = &inode->extent_tree; 6747 + struct extent_io_tree *io_tree = &inode->io_tree; 6744 6748 struct btrfs_trans_handle *trans = NULL; 6745 6749 const bool new_inline = !page || create; 6746 6750 ··· 6854 6856 goto not_found_em; 6855 6857 } 6856 6858 6857 - btrfs_extent_item_to_extent_map(inode, path, item, new_inline, em); 6859 + btrfs_extent_item_to_extent_map(inode, path, item, 6860 + new_inline, em); 6858 6861 6859 6862 if (found_type == BTRFS_FILE_EXTENT_REG || 6860 6863 found_type == BTRFS_FILE_EXTENT_PREALLOC) { ··· 6991 6992 write_unlock(&em_tree->lock); 6992 6993 out: 6993 6994 6994 - trace_btrfs_get_extent(root, BTRFS_I(inode), em); 6995 + trace_btrfs_get_extent(root, inode, em); 6995 6996 6996 6997 btrfs_free_path(path); 6997 6998 if (trans) { ··· 7007 7008 return em; 7008 7009 } 7009 7010 7010 - struct extent_map *btrfs_get_extent_fiemap(struct inode *inode, struct page *page, 7011 - size_t pg_offset, u64 start, u64 len, 7012 - int create) 7011 + struct extent_map *btrfs_get_extent_fiemap(struct btrfs_inode *inode, 7012 + struct page *page, 7013 + size_t pg_offset, u64 start, u64 len, 7014 + int create) 7013 7015 { 7014 7016 struct extent_map *em; 7015 7017 struct extent_map *hole_em = NULL; ··· 7047 7047 em = NULL; 7048 7048 7049 7049 /* ok, we didn't find anything, lets look for delalloc */ 7050 - found = count_range_bits(&BTRFS_I(inode)->io_tree, &range_start, 7050 + found = count_range_bits(&inode->io_tree, &range_start, 7051 7051 end, len, EXTENT_DELALLOC, 1); 7052 7052 found_end = range_start + found; 7053 7053 if (found_end < range_start) ··· 7162 7162 if (ret) { 7163 7163 if (em) { 7164 7164 free_extent_map(em); 7165 - btrfs_drop_extent_cache(inode, start, 7165 + btrfs_drop_extent_cache(BTRFS_I(inode), start, 7166 7166 start + len - 1, 0); 7167 7167 } 7168 7168 em = ERR_PTR(ret); ··· 7423 7423 * doing DIO to, so we need to make sure there's no ordered 7424 7424 * extents in this range. 7425 7425 */ 7426 - ordered = btrfs_lookup_ordered_range(inode, lockstart, 7426 + ordered = btrfs_lookup_ordered_range(BTRFS_I(inode), lockstart, 7427 7427 lockend - lockstart + 1); 7428 7428 7429 7429 /* ··· 7529 7529 } 7530 7530 7531 7531 do { 7532 - btrfs_drop_extent_cache(inode, em->start, 7532 + btrfs_drop_extent_cache(BTRFS_I(inode), em->start, 7533 7533 em->start + em->len - 1, 0); 7534 7534 write_lock(&em_tree->lock); 7535 7535 ret = add_extent_mapping(em_tree, em, 1); ··· 7617 7617 goto err; 7618 7618 } 7619 7619 7620 - em = btrfs_get_extent(inode, NULL, 0, start, len, 0); 7620 + em = btrfs_get_extent(BTRFS_I(inode), NULL, 0, start, len, 0); 7621 7621 if (IS_ERR(em)) { 7622 7622 ret = PTR_ERR(em); 7623 7623 goto unlock_err; ··· 7854 7854 ret = btrfs_check_dio_repairable(inode, failed_bio, failrec, 7855 7855 failed_mirror); 7856 7856 if (!ret) { 7857 - free_io_failure(inode, failrec); 7857 + free_io_failure(BTRFS_I(inode), failrec); 7858 7858 return -EIO; 7859 7859 } 7860 7860 ··· 7868 7868 bio = btrfs_create_repair_bio(inode, failed_bio, failrec, page, 7869 7869 pgoff, isector, repair_endio, repair_arg); 7870 7870 if (!bio) { 7871 - free_io_failure(inode, failrec); 7871 + free_io_failure(BTRFS_I(inode), failrec); 7872 7872 return -EIO; 7873 7873 } 7874 7874 bio_set_op_attrs(bio, REQ_OP_READ, read_mode); ··· 7879 7879 7880 7880 ret = submit_dio_repair_bio(inode, bio, failrec->this_mirror); 7881 7881 if (ret) { 7882 - free_io_failure(inode, failrec); 7882 + free_io_failure(BTRFS_I(inode), failrec); 7883 7883 bio_put(bio); 7884 7884 } 7885 7885 ··· 7909 7909 7910 7910 done->uptodate = 1; 7911 7911 bio_for_each_segment_all(bvec, bio, i) 7912 - clean_io_failure(done->inode, done->start, bvec->bv_page, 0); 7912 + clean_io_failure(BTRFS_I(done->inode), done->start, bvec->bv_page, 0); 7913 7913 end: 7914 7914 complete(&done->done); 7915 7915 bio_put(bio); ··· 7995 7995 bvec->bv_page, bvec->bv_offset, 7996 7996 done->start, bvec->bv_len); 7997 7997 if (!ret) 7998 - clean_io_failure(done->inode, done->start, 7998 + clean_io_failure(BTRFS_I(done->inode), done->start, 7999 7999 bvec->bv_page, bvec->bv_offset); 8000 8000 else 8001 8001 uptodate = 0; ··· 8796 8796 lock_extent_bits(tree, page_start, page_end, &cached_state); 8797 8797 again: 8798 8798 start = page_start; 8799 - ordered = btrfs_lookup_ordered_range(inode, start, 8799 + ordered = btrfs_lookup_ordered_range(BTRFS_I(inode), start, 8800 8800 page_end - start + 1); 8801 8801 if (ordered) { 8802 8802 end = min(page_end, ordered->file_offset + ordered->len - 1); ··· 8962 8962 * we can't set the delalloc bits if there are pending ordered 8963 8963 * extents. Drop our locks and wait for them to finish 8964 8964 */ 8965 - ordered = btrfs_lookup_ordered_range(inode, page_start, PAGE_SIZE); 8965 + ordered = btrfs_lookup_ordered_range(BTRFS_I(inode), page_start, 8966 + PAGE_SIZE); 8966 8967 if (ordered) { 8967 8968 unlock_extent_cached(io_tree, page_start, page_end, 8968 8969 &cached_state, GFP_NOFS); ··· 9161 9160 9162 9161 if (ret == 0 && inode->i_nlink > 0) { 9163 9162 trans->block_rsv = root->orphan_block_rsv; 9164 - ret = btrfs_orphan_del(trans, inode); 9163 + ret = btrfs_orphan_del(trans, BTRFS_I(inode)); 9165 9164 if (ret) 9166 9165 err = ret; 9167 9166 } ··· 9206 9205 inode->i_fop = &btrfs_dir_file_operations; 9207 9206 9208 9207 set_nlink(inode, 1); 9209 - btrfs_i_size_write(inode, 0); 9208 + btrfs_i_size_write(BTRFS_I(inode), 0); 9210 9209 unlock_new_inode(inode); 9211 9210 9212 9211 err = btrfs_subvol_inherit_props(trans, new_root, parent_root); ··· 9279 9278 #ifdef CONFIG_BTRFS_FS_RUN_SANITY_TESTS 9280 9279 void btrfs_test_destroy_inode(struct inode *inode) 9281 9280 { 9282 - btrfs_drop_extent_cache(inode, 0, (u64)-1, 0); 9281 + btrfs_drop_extent_cache(BTRFS_I(inode), 0, (u64)-1, 0); 9283 9282 kmem_cache_free(btrfs_inode_cachep, BTRFS_I(inode)); 9284 9283 } 9285 9284 #endif ··· 9334 9333 } 9335 9334 btrfs_qgroup_check_reserved_leak(inode); 9336 9335 inode_tree_del(inode); 9337 - btrfs_drop_extent_cache(inode, 0, (u64)-1, 0); 9336 + btrfs_drop_extent_cache(BTRFS_I(inode), 0, (u64)-1, 0); 9338 9337 free: 9339 9338 call_rcu(&inode->i_rcu, btrfs_i_callback); 9340 9339 } ··· 9481 9480 * We need to find a free sequence number both in the source and 9482 9481 * in the destination directory for the exchange. 9483 9482 */ 9484 - ret = btrfs_set_inode_index(new_dir, &old_idx); 9483 + ret = btrfs_set_inode_index(BTRFS_I(new_dir), &old_idx); 9485 9484 if (ret) 9486 9485 goto out_fail; 9487 - ret = btrfs_set_inode_index(old_dir, &new_idx); 9486 + ret = btrfs_set_inode_index(BTRFS_I(old_dir), &new_idx); 9488 9487 if (ret) 9489 9488 goto out_fail; 9490 9489 ··· 9582 9581 goto out_fail; 9583 9582 } 9584 9583 9585 - ret = btrfs_add_link(trans, new_dir, old_inode, 9584 + ret = btrfs_add_link(trans, BTRFS_I(new_dir), BTRFS_I(old_inode), 9586 9585 new_dentry->d_name.name, 9587 9586 new_dentry->d_name.len, 0, old_idx); 9588 9587 if (ret) { ··· 9590 9589 goto out_fail; 9591 9590 } 9592 9591 9593 - ret = btrfs_add_link(trans, old_dir, new_inode, 9592 + ret = btrfs_add_link(trans, BTRFS_I(old_dir), BTRFS_I(new_inode), 9594 9593 old_dentry->d_name.name, 9595 9594 old_dentry->d_name.len, 0, new_idx); 9596 9595 if (ret) { ··· 9692 9691 if (ret) 9693 9692 goto out; 9694 9693 9695 - ret = btrfs_add_nondir(trans, dir, dentry, 9696 - inode, 0, index); 9694 + ret = btrfs_add_nondir(trans, BTRFS_I(dir), dentry, 9695 + BTRFS_I(inode), 0, index); 9697 9696 if (ret) 9698 9697 goto out; 9699 9698 ··· 9792 9791 if (dest != root) 9793 9792 btrfs_record_root_in_trans(trans, dest); 9794 9793 9795 - ret = btrfs_set_inode_index(new_dir, &index); 9794 + ret = btrfs_set_inode_index(BTRFS_I(new_dir), &index); 9796 9795 if (ret) 9797 9796 goto out_fail; 9798 9797 ··· 9859 9858 new_dentry->d_name.len); 9860 9859 } 9861 9860 if (!ret && new_inode->i_nlink == 0) 9862 - ret = btrfs_orphan_add(trans, d_inode(new_dentry)); 9861 + ret = btrfs_orphan_add(trans, 9862 + BTRFS_I(d_inode(new_dentry))); 9863 9863 if (ret) { 9864 9864 btrfs_abort_transaction(trans, ret); 9865 9865 goto out_fail; 9866 9866 } 9867 9867 } 9868 9868 9869 - ret = btrfs_add_link(trans, new_dir, old_inode, 9869 + ret = btrfs_add_link(trans, BTRFS_I(new_dir), BTRFS_I(old_inode), 9870 9870 new_dentry->d_name.name, 9871 9871 new_dentry->d_name.len, 0, index); 9872 9872 if (ret) { ··· 10234 10232 inode_nohighmem(inode); 10235 10233 inode->i_mapping->a_ops = &btrfs_symlink_aops; 10236 10234 inode_set_bytes(inode, name_len); 10237 - btrfs_i_size_write(inode, name_len); 10235 + btrfs_i_size_write(BTRFS_I(inode), name_len); 10238 10236 err = btrfs_update_inode(trans, root, inode); 10239 10237 /* 10240 10238 * Last step, add directory indexes for our symlink inode. This is the ··· 10242 10240 * elsewhere above. 10243 10241 */ 10244 10242 if (!err) 10245 - err = btrfs_add_nondir(trans, dir, dentry, inode, 0, index); 10243 + err = btrfs_add_nondir(trans, BTRFS_I(dir), dentry, 10244 + BTRFS_I(inode), 0, index); 10246 10245 if (err) { 10247 10246 drop_inode = 1; 10248 10247 goto out_unlock_inode; ··· 10329 10326 break; 10330 10327 } 10331 10328 10332 - btrfs_drop_extent_cache(inode, cur_offset, 10329 + btrfs_drop_extent_cache(BTRFS_I(inode), cur_offset, 10333 10330 cur_offset + ins.offset -1, 0); 10334 10331 10335 10332 em = alloc_extent_map(); ··· 10356 10353 write_unlock(&em_tree->lock); 10357 10354 if (ret != -EEXIST) 10358 10355 break; 10359 - btrfs_drop_extent_cache(inode, cur_offset, 10356 + btrfs_drop_extent_cache(BTRFS_I(inode), cur_offset, 10360 10357 cur_offset + ins.offset - 1, 10361 10358 0); 10362 10359 } ··· 10478 10475 ret = btrfs_update_inode(trans, root, inode); 10479 10476 if (ret) 10480 10477 goto out_inode; 10481 - ret = btrfs_orphan_add(trans, inode); 10478 + ret = btrfs_orphan_add(trans, BTRFS_I(inode)); 10482 10479 if (ret) 10483 10480 goto out_inode; 10484 10481 ··· 10506 10503 unlock_new_inode(inode); 10507 10504 goto out; 10508 10505 10506 + } 10507 + 10508 + __attribute__((const)) 10509 + static int dummy_readpage_io_failed_hook(struct page *page, int failed_mirror) 10510 + { 10511 + return 0; 10509 10512 } 10510 10513 10511 10514 static const struct inode_operations btrfs_dir_inode_operations = { ··· 10552 10543 }; 10553 10544 10554 10545 static const struct extent_io_ops btrfs_extent_io_ops = { 10555 - .fill_delalloc = run_delalloc_range, 10546 + /* mandatory callbacks */ 10556 10547 .submit_bio_hook = btrfs_submit_bio_hook, 10557 - .merge_bio_hook = btrfs_merge_bio_hook, 10558 10548 .readpage_end_io_hook = btrfs_readpage_end_io_hook, 10549 + .merge_bio_hook = btrfs_merge_bio_hook, 10550 + .readpage_io_failed_hook = dummy_readpage_io_failed_hook, 10551 + 10552 + /* optional callbacks */ 10553 + .fill_delalloc = run_delalloc_range, 10559 10554 .writepage_end_io_hook = btrfs_writepage_end_io_hook, 10560 10555 .writepage_start_hook = btrfs_writepage_start_hook, 10561 10556 .set_bit_hook = btrfs_set_bit_hook,
+19 -19
fs/btrfs/ioctl.c
··· 434 434 435 435 static noinline int create_subvol(struct inode *dir, 436 436 struct dentry *dentry, 437 - char *name, int namelen, 437 + const char *name, int namelen, 438 438 u64 *async_transid, 439 439 struct btrfs_qgroup_inherit *inherit) 440 440 { ··· 580 580 /* 581 581 * insert the directory item 582 582 */ 583 - ret = btrfs_set_inode_index(dir, &index); 583 + ret = btrfs_set_inode_index(BTRFS_I(dir), &index); 584 584 if (ret) { 585 585 btrfs_abort_transaction(trans, ret); 586 586 goto fail; 587 587 } 588 588 589 589 ret = btrfs_insert_dir_item(trans, root, 590 - name, namelen, dir, &key, 590 + name, namelen, BTRFS_I(dir), &key, 591 591 BTRFS_FT_DIR, index); 592 592 if (ret) { 593 593 btrfs_abort_transaction(trans, ret); 594 594 goto fail; 595 595 } 596 596 597 - btrfs_i_size_write(dir, dir->i_size + namelen * 2); 597 + btrfs_i_size_write(BTRFS_I(dir), dir->i_size + namelen * 2); 598 598 ret = btrfs_update_inode(trans, root, dir); 599 599 BUG_ON(ret); 600 600 ··· 832 832 * inside this filesystem so it's quite a bit simpler. 833 833 */ 834 834 static noinline int btrfs_mksubvol(const struct path *parent, 835 - char *name, int namelen, 835 + const char *name, int namelen, 836 836 struct btrfs_root *snap_src, 837 837 u64 *async_transid, bool readonly, 838 838 struct btrfs_qgroup_inherit *inherit) ··· 1009 1009 1010 1010 /* get the big lock and read metadata off disk */ 1011 1011 lock_extent_bits(io_tree, start, end, &cached); 1012 - em = btrfs_get_extent(inode, NULL, 0, start, len, 0); 1012 + em = btrfs_get_extent(BTRFS_I(inode), NULL, 0, start, len, 0); 1013 1013 unlock_extent_cached(io_tree, start, end, &cached, GFP_NOFS); 1014 1014 1015 1015 if (IS_ERR(em)) ··· 1625 1625 } 1626 1626 1627 1627 static noinline int btrfs_ioctl_snap_create_transid(struct file *file, 1628 - char *name, unsigned long fd, int subvol, 1628 + const char *name, unsigned long fd, int subvol, 1629 1629 u64 *transid, bool readonly, 1630 1630 struct btrfs_qgroup_inherit *inherit) 1631 1631 { ··· 3298 3298 if (endoff > destoff + olen) 3299 3299 endoff = destoff + olen; 3300 3300 if (endoff > inode->i_size) 3301 - btrfs_i_size_write(inode, endoff); 3301 + btrfs_i_size_write(BTRFS_I(inode), endoff); 3302 3302 3303 3303 ret = btrfs_update_inode(trans, root, inode); 3304 3304 if (ret) { ··· 3311 3311 return ret; 3312 3312 } 3313 3313 3314 - static void clone_update_extent_map(struct inode *inode, 3314 + static void clone_update_extent_map(struct btrfs_inode *inode, 3315 3315 const struct btrfs_trans_handle *trans, 3316 3316 const struct btrfs_path *path, 3317 3317 const u64 hole_offset, 3318 3318 const u64 hole_len) 3319 3319 { 3320 - struct extent_map_tree *em_tree = &BTRFS_I(inode)->extent_tree; 3320 + struct extent_map_tree *em_tree = &inode->extent_tree; 3321 3321 struct extent_map *em; 3322 3322 int ret; 3323 3323 3324 3324 em = alloc_extent_map(); 3325 3325 if (!em) { 3326 - set_bit(BTRFS_INODE_NEEDS_FULL_SYNC, 3327 - &BTRFS_I(inode)->runtime_flags); 3326 + set_bit(BTRFS_INODE_NEEDS_FULL_SYNC, &inode->runtime_flags); 3328 3327 return; 3329 3328 } 3330 3329 ··· 3337 3338 if (btrfs_file_extent_type(path->nodes[0], fi) == 3338 3339 BTRFS_FILE_EXTENT_INLINE) 3339 3340 set_bit(BTRFS_INODE_NEEDS_FULL_SYNC, 3340 - &BTRFS_I(inode)->runtime_flags); 3341 + &inode->runtime_flags); 3341 3342 } else { 3342 3343 em->start = hole_offset; 3343 3344 em->len = hole_len; ··· 3363 3364 } 3364 3365 3365 3366 if (ret) 3366 - set_bit(BTRFS_INODE_NEEDS_FULL_SYNC, 3367 - &BTRFS_I(inode)->runtime_flags); 3367 + set_bit(BTRFS_INODE_NEEDS_FULL_SYNC, &inode->runtime_flags); 3368 3368 } 3369 3369 3370 3370 /* ··· 3789 3791 3790 3792 /* If we have an implicit hole (NO_HOLES feature). */ 3791 3793 if (drop_start < new_key.offset) 3792 - clone_update_extent_map(inode, trans, 3794 + clone_update_extent_map(BTRFS_I(inode), trans, 3793 3795 NULL, drop_start, 3794 3796 new_key.offset - drop_start); 3795 3797 3796 - clone_update_extent_map(inode, trans, path, 0, 0); 3798 + clone_update_extent_map(BTRFS_I(inode), trans, 3799 + path, 0, 0); 3797 3800 3798 3801 btrfs_mark_buffer_dirty(leaf); 3799 3802 btrfs_release_path(path); ··· 3844 3845 btrfs_end_transaction(trans); 3845 3846 goto out; 3846 3847 } 3847 - clone_update_extent_map(inode, trans, NULL, last_dest_end, 3848 - destoff + len - last_dest_end); 3848 + clone_update_extent_map(BTRFS_I(inode), trans, NULL, 3849 + last_dest_end, 3850 + destoff + len - last_dest_end); 3849 3851 ret = clone_finish_inode_update(trans, inode, destoff + len, 3850 3852 destoff, olen, no_time_update); 3851 3853 }
+6 -6
fs/btrfs/lzo.c
··· 76 76 memcpy(buf, &dlen, LZO_LEN); 77 77 } 78 78 79 - static inline size_t read_compress_length(char *buf) 79 + static inline size_t read_compress_length(const char *buf) 80 80 { 81 81 __le32 dlen; 82 82 ··· 86 86 87 87 static int lzo_compress_pages(struct list_head *ws, 88 88 struct address_space *mapping, 89 - u64 start, unsigned long len, 89 + u64 start, 90 90 struct page **pages, 91 - unsigned long nr_dest_pages, 92 91 unsigned long *out_pages, 93 92 unsigned long *total_in, 94 - unsigned long *total_out, 95 - unsigned long max_out) 93 + unsigned long *total_out) 96 94 { 97 95 struct workspace *workspace = list_entry(ws, struct workspace, list); 98 96 int ret = 0; ··· 100 102 struct page *in_page = NULL; 101 103 struct page *out_page = NULL; 102 104 unsigned long bytes_left; 103 - 105 + unsigned long len = *total_out; 106 + unsigned long nr_dest_pages = *out_pages; 107 + const unsigned long max_out = nr_dest_pages * PAGE_SIZE; 104 108 size_t in_len; 105 109 size_t out_len; 106 110 char *buf;
+4 -5
fs/btrfs/ordered-data.c
··· 879 879 /* Since the DIO code tries to lock a wide area we need to look for any ordered 880 880 * extents that exist in the range, rather than just the start of the range. 881 881 */ 882 - struct btrfs_ordered_extent *btrfs_lookup_ordered_range(struct inode *inode, 883 - u64 file_offset, 884 - u64 len) 882 + struct btrfs_ordered_extent *btrfs_lookup_ordered_range( 883 + struct btrfs_inode *inode, u64 file_offset, u64 len) 885 884 { 886 885 struct btrfs_ordered_inode_tree *tree; 887 886 struct rb_node *node; 888 887 struct btrfs_ordered_extent *entry = NULL; 889 888 890 - tree = &BTRFS_I(inode)->ordered_tree; 889 + tree = &inode->ordered_tree; 891 890 spin_lock_irq(&tree->lock); 892 891 node = tree_search(tree, file_offset); 893 892 if (!node) { ··· 922 923 { 923 924 struct btrfs_ordered_extent *oe; 924 925 925 - oe = btrfs_lookup_ordered_range(inode, file_offset, len); 926 + oe = btrfs_lookup_ordered_range(BTRFS_I(inode), file_offset, len); 926 927 if (oe) { 927 928 btrfs_put_ordered_extent(oe); 928 929 return true;
+4 -3
fs/btrfs/ordered-data.h
··· 189 189 int btrfs_wait_ordered_range(struct inode *inode, u64 start, u64 len); 190 190 struct btrfs_ordered_extent * 191 191 btrfs_lookup_first_ordered_extent(struct inode * inode, u64 file_offset); 192 - struct btrfs_ordered_extent *btrfs_lookup_ordered_range(struct inode *inode, 193 - u64 file_offset, 194 - u64 len); 192 + struct btrfs_ordered_extent *btrfs_lookup_ordered_range( 193 + struct btrfs_inode *inode, 194 + u64 file_offset, 195 + u64 len); 195 196 bool btrfs_have_ordered_extents_in_range(struct inode *inode, 196 197 u64 file_offset, 197 198 u64 len);
+9 -8
fs/btrfs/relocation.c
··· 1714 1714 if (!ret) 1715 1715 continue; 1716 1716 1717 - btrfs_drop_extent_cache(inode, key.offset, end, 1718 - 1); 1717 + btrfs_drop_extent_cache(BTRFS_I(inode), 1718 + key.offset, end, 1); 1719 1719 unlock_extent(&BTRFS_I(inode)->io_tree, 1720 1720 key.offset, end); 1721 1721 } ··· 2130 2130 2131 2131 /* the lock_extent waits for readpage to complete */ 2132 2132 lock_extent(&BTRFS_I(inode)->io_tree, start, end); 2133 - btrfs_drop_extent_cache(inode, start, end, 1); 2133 + btrfs_drop_extent_cache(BTRFS_I(inode), start, end, 1); 2134 2134 unlock_extent(&BTRFS_I(inode)->io_tree, start, end); 2135 2135 } 2136 2136 return 0; ··· 3161 3161 free_extent_map(em); 3162 3162 break; 3163 3163 } 3164 - btrfs_drop_extent_cache(inode, start, end, 0); 3164 + btrfs_drop_extent_cache(BTRFS_I(inode), start, end, 0); 3165 3165 } 3166 3166 unlock_extent(&BTRFS_I(inode)->io_tree, start, end); 3167 3167 return ret; ··· 3203 3203 index = (cluster->start - offset) >> PAGE_SHIFT; 3204 3204 last_index = (cluster->end - offset) >> PAGE_SHIFT; 3205 3205 while (index <= last_index) { 3206 - ret = btrfs_delalloc_reserve_metadata(inode, PAGE_SIZE); 3206 + ret = btrfs_delalloc_reserve_metadata(BTRFS_I(inode), 3207 + PAGE_SIZE); 3207 3208 if (ret) 3208 3209 goto out; 3209 3210 ··· 3216 3215 page = find_or_create_page(inode->i_mapping, index, 3217 3216 mask); 3218 3217 if (!page) { 3219 - btrfs_delalloc_release_metadata(inode, 3218 + btrfs_delalloc_release_metadata(BTRFS_I(inode), 3220 3219 PAGE_SIZE); 3221 3220 ret = -ENOMEM; 3222 3221 goto out; ··· 3235 3234 if (!PageUptodate(page)) { 3236 3235 unlock_page(page); 3237 3236 put_page(page); 3238 - btrfs_delalloc_release_metadata(inode, 3237 + btrfs_delalloc_release_metadata(BTRFS_I(inode), 3239 3238 PAGE_SIZE); 3240 3239 ret = -EIO; 3241 3240 goto out; ··· 4246 4245 BUG_ON(IS_ERR(inode) || is_bad_inode(inode)); 4247 4246 BTRFS_I(inode)->index_cnt = group->key.objectid; 4248 4247 4249 - err = btrfs_orphan_add(trans, inode); 4248 + err = btrfs_orphan_add(trans, BTRFS_I(inode)); 4250 4249 out: 4251 4250 btrfs_end_transaction(trans); 4252 4251 btrfs_btree_balance_dirty(fs_info);
+6 -5
fs/btrfs/scrub.c
··· 731 731 ret = -EIO; 732 732 goto out; 733 733 } 734 - ret = repair_io_failure(inode, offset, PAGE_SIZE, 734 + ret = repair_io_failure(BTRFS_I(inode), offset, PAGE_SIZE, 735 735 fixup->logical, page, 736 736 offset - page_offset(page), 737 737 fixup->mirror_num); ··· 4236 4236 scrub_pending_trans_workers_dec(sctx); 4237 4237 } 4238 4238 4239 - static int check_extent_to_block(struct inode *inode, u64 start, u64 len, 4239 + static int check_extent_to_block(struct btrfs_inode *inode, u64 start, u64 len, 4240 4240 u64 logical) 4241 4241 { 4242 4242 struct extent_state *cached_state = NULL; ··· 4246 4246 u64 lockstart = start, lockend = start + len - 1; 4247 4247 int ret = 0; 4248 4248 4249 - io_tree = &BTRFS_I(inode)->io_tree; 4249 + io_tree = &inode->io_tree; 4250 4250 4251 4251 lock_extent_bits(io_tree, lockstart, lockend, &cached_state); 4252 4252 ordered = btrfs_lookup_ordered_range(inode, lockstart, len); ··· 4325 4325 io_tree = &BTRFS_I(inode)->io_tree; 4326 4326 nocow_ctx_logical = nocow_ctx->logical; 4327 4327 4328 - ret = check_extent_to_block(inode, offset, len, nocow_ctx_logical); 4328 + ret = check_extent_to_block(BTRFS_I(inode), offset, len, 4329 + nocow_ctx_logical); 4329 4330 if (ret) { 4330 4331 ret = ret > 0 ? 0 : ret; 4331 4332 goto out; ··· 4373 4372 } 4374 4373 } 4375 4374 4376 - ret = check_extent_to_block(inode, offset, len, 4375 + ret = check_extent_to_block(BTRFS_I(inode), offset, len, 4377 4376 nocow_ctx_logical); 4378 4377 if (ret) { 4379 4378 ret = ret > 0 ? 0 : ret;
+119 -6
fs/btrfs/send.c
··· 1681 1681 { 1682 1682 int ret; 1683 1683 1684 + if (ino == BTRFS_FIRST_FREE_OBJECTID) 1685 + return 1; 1686 + 1684 1687 ret = get_cur_inode_state(sctx, ino, gen); 1685 1688 if (ret < 0) 1686 1689 goto out; ··· 1869 1866 * not deleted and then re-created, if it was then we have no overwrite 1870 1867 * and we can just unlink this entry. 1871 1868 */ 1872 - if (sctx->parent_root) { 1869 + if (sctx->parent_root && dir != BTRFS_FIRST_FREE_OBJECTID) { 1873 1870 ret = get_inode_info(sctx->parent_root, dir, NULL, &gen, NULL, 1874 1871 NULL, NULL, NULL); 1875 1872 if (ret < 0 && ret != -ENOENT) ··· 1936 1933 ret = is_inode_existent(sctx, dir, dir_gen); 1937 1934 if (ret <= 0) 1938 1935 goto out; 1936 + 1937 + if (dir != BTRFS_FIRST_FREE_OBJECTID) { 1938 + ret = get_inode_info(sctx->send_root, dir, NULL, &gen, NULL, 1939 + NULL, NULL, NULL); 1940 + if (ret < 0 && ret != -ENOENT) 1941 + goto out; 1942 + if (ret) { 1943 + ret = 0; 1944 + goto out; 1945 + } 1946 + if (gen != dir_gen) 1947 + goto out; 1948 + } 1939 1949 1940 1950 /* check if the ref was overwritten by another ref */ 1941 1951 ret = lookup_dir_item_inode(sctx->send_root, dir, name, name_len, ··· 3572 3556 { 3573 3557 int ret = 0; 3574 3558 u64 ino = parent_ref->dir; 3559 + u64 ino_gen = parent_ref->dir_gen; 3575 3560 u64 parent_ino_before, parent_ino_after; 3576 3561 struct fs_path *path_before = NULL; 3577 3562 struct fs_path *path_after = NULL; ··· 3593 3576 * at get_cur_path()). 3594 3577 */ 3595 3578 while (ino > BTRFS_FIRST_FREE_OBJECTID) { 3579 + u64 parent_ino_after_gen; 3580 + 3596 3581 if (is_waiting_for_move(sctx, ino)) { 3597 3582 /* 3598 3583 * If the current inode is an ancestor of ino in the ··· 3617 3598 fs_path_reset(path_after); 3618 3599 3619 3600 ret = get_first_ref(sctx->send_root, ino, &parent_ino_after, 3620 - NULL, path_after); 3601 + &parent_ino_after_gen, path_after); 3621 3602 if (ret < 0) 3622 3603 goto out; 3623 3604 ret = get_first_ref(sctx->parent_root, ino, &parent_ino_before, ··· 3634 3615 if (ino > sctx->cur_ino && 3635 3616 (parent_ino_before != parent_ino_after || len1 != len2 || 3636 3617 memcmp(path_before->start, path_after->start, len1))) { 3637 - ret = 1; 3638 - break; 3618 + u64 parent_ino_gen; 3619 + 3620 + ret = get_inode_info(sctx->parent_root, ino, NULL, 3621 + &parent_ino_gen, NULL, NULL, NULL, 3622 + NULL); 3623 + if (ret < 0) 3624 + goto out; 3625 + if (ino_gen == parent_ino_gen) { 3626 + ret = 1; 3627 + break; 3628 + } 3639 3629 } 3640 3630 ino = parent_ino_after; 3631 + ino_gen = parent_ino_after_gen; 3641 3632 } 3642 3633 3643 3634 out: ··· 5306 5277 return ret; 5307 5278 } 5308 5279 5280 + static int range_is_hole_in_parent(struct send_ctx *sctx, 5281 + const u64 start, 5282 + const u64 end) 5283 + { 5284 + struct btrfs_path *path; 5285 + struct btrfs_key key; 5286 + struct btrfs_root *root = sctx->parent_root; 5287 + u64 search_start = start; 5288 + int ret; 5289 + 5290 + path = alloc_path_for_send(); 5291 + if (!path) 5292 + return -ENOMEM; 5293 + 5294 + key.objectid = sctx->cur_ino; 5295 + key.type = BTRFS_EXTENT_DATA_KEY; 5296 + key.offset = search_start; 5297 + ret = btrfs_search_slot(NULL, root, &key, path, 0, 0); 5298 + if (ret < 0) 5299 + goto out; 5300 + if (ret > 0 && path->slots[0] > 0) 5301 + path->slots[0]--; 5302 + 5303 + while (search_start < end) { 5304 + struct extent_buffer *leaf = path->nodes[0]; 5305 + int slot = path->slots[0]; 5306 + struct btrfs_file_extent_item *fi; 5307 + u64 extent_end; 5308 + 5309 + if (slot >= btrfs_header_nritems(leaf)) { 5310 + ret = btrfs_next_leaf(root, path); 5311 + if (ret < 0) 5312 + goto out; 5313 + else if (ret > 0) 5314 + break; 5315 + continue; 5316 + } 5317 + 5318 + btrfs_item_key_to_cpu(leaf, &key, slot); 5319 + if (key.objectid < sctx->cur_ino || 5320 + key.type < BTRFS_EXTENT_DATA_KEY) 5321 + goto next; 5322 + if (key.objectid > sctx->cur_ino || 5323 + key.type > BTRFS_EXTENT_DATA_KEY || 5324 + key.offset >= end) 5325 + break; 5326 + 5327 + fi = btrfs_item_ptr(leaf, slot, struct btrfs_file_extent_item); 5328 + if (btrfs_file_extent_type(leaf, fi) == 5329 + BTRFS_FILE_EXTENT_INLINE) { 5330 + u64 size = btrfs_file_extent_inline_len(leaf, slot, fi); 5331 + 5332 + extent_end = ALIGN(key.offset + size, 5333 + root->fs_info->sectorsize); 5334 + } else { 5335 + extent_end = key.offset + 5336 + btrfs_file_extent_num_bytes(leaf, fi); 5337 + } 5338 + if (extent_end <= start) 5339 + goto next; 5340 + if (btrfs_file_extent_disk_bytenr(leaf, fi) == 0) { 5341 + search_start = extent_end; 5342 + goto next; 5343 + } 5344 + ret = 0; 5345 + goto out; 5346 + next: 5347 + path->slots[0]++; 5348 + } 5349 + ret = 1; 5350 + out: 5351 + btrfs_free_path(path); 5352 + return ret; 5353 + } 5354 + 5309 5355 static int maybe_send_hole(struct send_ctx *sctx, struct btrfs_path *path, 5310 5356 struct btrfs_key *key) 5311 5357 { ··· 5425 5321 return ret; 5426 5322 } 5427 5323 5428 - if (sctx->cur_inode_last_extent < key->offset) 5429 - ret = send_hole(sctx, key->offset); 5324 + if (sctx->cur_inode_last_extent < key->offset) { 5325 + ret = range_is_hole_in_parent(sctx, 5326 + sctx->cur_inode_last_extent, 5327 + key->offset); 5328 + if (ret < 0) 5329 + return ret; 5330 + else if (ret == 0) 5331 + ret = send_hole(sctx, key->offset); 5332 + else 5333 + ret = 0; 5334 + } 5430 5335 sctx->cur_inode_last_extent = extent_end; 5431 5336 return ret; 5432 5337 }
+24 -22
fs/btrfs/tests/inode-tests.c
··· 278 278 279 279 /* First with no extents */ 280 280 BTRFS_I(inode)->root = root; 281 - em = btrfs_get_extent(inode, NULL, 0, 0, sectorsize, 0); 281 + em = btrfs_get_extent(BTRFS_I(inode), NULL, 0, 0, sectorsize, 0); 282 282 if (IS_ERR(em)) { 283 283 em = NULL; 284 284 test_msg("Got an error when we shouldn't have\n"); ··· 293 293 goto out; 294 294 } 295 295 free_extent_map(em); 296 - btrfs_drop_extent_cache(inode, 0, (u64)-1, 0); 296 + btrfs_drop_extent_cache(BTRFS_I(inode), 0, (u64)-1, 0); 297 297 298 298 /* 299 299 * All of the magic numbers are based on the mapping setup in ··· 302 302 */ 303 303 setup_file_extents(root, sectorsize); 304 304 305 - em = btrfs_get_extent(inode, NULL, 0, 0, (u64)-1, 0); 305 + em = btrfs_get_extent(BTRFS_I(inode), NULL, 0, 0, (u64)-1, 0); 306 306 if (IS_ERR(em)) { 307 307 test_msg("Got an error when we shouldn't have\n"); 308 308 goto out; ··· 323 323 offset = em->start + em->len; 324 324 free_extent_map(em); 325 325 326 - em = btrfs_get_extent(inode, NULL, 0, offset, sectorsize, 0); 326 + em = btrfs_get_extent(BTRFS_I(inode), NULL, 0, offset, sectorsize, 0); 327 327 if (IS_ERR(em)) { 328 328 test_msg("Got an error when we shouldn't have\n"); 329 329 goto out; ··· 350 350 offset = em->start + em->len; 351 351 free_extent_map(em); 352 352 353 - em = btrfs_get_extent(inode, NULL, 0, offset, sectorsize, 0); 353 + em = btrfs_get_extent(BTRFS_I(inode), NULL, 0, offset, sectorsize, 0); 354 354 if (IS_ERR(em)) { 355 355 test_msg("Got an error when we shouldn't have\n"); 356 356 goto out; ··· 372 372 free_extent_map(em); 373 373 374 374 /* Regular extent */ 375 - em = btrfs_get_extent(inode, NULL, 0, offset, sectorsize, 0); 375 + em = btrfs_get_extent(BTRFS_I(inode), NULL, 0, offset, sectorsize, 0); 376 376 if (IS_ERR(em)) { 377 377 test_msg("Got an error when we shouldn't have\n"); 378 378 goto out; ··· 399 399 free_extent_map(em); 400 400 401 401 /* The next 3 are split extents */ 402 - em = btrfs_get_extent(inode, NULL, 0, offset, sectorsize, 0); 402 + em = btrfs_get_extent(BTRFS_I(inode), NULL, 0, offset, sectorsize, 0); 403 403 if (IS_ERR(em)) { 404 404 test_msg("Got an error when we shouldn't have\n"); 405 405 goto out; ··· 428 428 offset = em->start + em->len; 429 429 free_extent_map(em); 430 430 431 - em = btrfs_get_extent(inode, NULL, 0, offset, sectorsize, 0); 431 + em = btrfs_get_extent(BTRFS_I(inode), NULL, 0, offset, sectorsize, 0); 432 432 if (IS_ERR(em)) { 433 433 test_msg("Got an error when we shouldn't have\n"); 434 434 goto out; ··· 450 450 offset = em->start + em->len; 451 451 free_extent_map(em); 452 452 453 - em = btrfs_get_extent(inode, NULL, 0, offset, sectorsize, 0); 453 + em = btrfs_get_extent(BTRFS_I(inode), NULL, 0, offset, sectorsize, 0); 454 454 if (IS_ERR(em)) { 455 455 test_msg("Got an error when we shouldn't have\n"); 456 456 goto out; ··· 484 484 free_extent_map(em); 485 485 486 486 /* Prealloc extent */ 487 - em = btrfs_get_extent(inode, NULL, 0, offset, sectorsize, 0); 487 + em = btrfs_get_extent(BTRFS_I(inode), NULL, 0, offset, sectorsize, 0); 488 488 if (IS_ERR(em)) { 489 489 test_msg("Got an error when we shouldn't have\n"); 490 490 goto out; ··· 513 513 free_extent_map(em); 514 514 515 515 /* The next 3 are a half written prealloc extent */ 516 - em = btrfs_get_extent(inode, NULL, 0, offset, sectorsize, 0); 516 + em = btrfs_get_extent(BTRFS_I(inode), NULL, 0, offset, sectorsize, 0); 517 517 if (IS_ERR(em)) { 518 518 test_msg("Got an error when we shouldn't have\n"); 519 519 goto out; ··· 543 543 offset = em->start + em->len; 544 544 free_extent_map(em); 545 545 546 - em = btrfs_get_extent(inode, NULL, 0, offset, sectorsize, 0); 546 + em = btrfs_get_extent(BTRFS_I(inode), NULL, 0, offset, sectorsize, 0); 547 547 if (IS_ERR(em)) { 548 548 test_msg("Got an error when we shouldn't have\n"); 549 549 goto out; ··· 576 576 offset = em->start + em->len; 577 577 free_extent_map(em); 578 578 579 - em = btrfs_get_extent(inode, NULL, 0, offset, sectorsize, 0); 579 + em = btrfs_get_extent(BTRFS_I(inode), NULL, 0, offset, sectorsize, 0); 580 580 if (IS_ERR(em)) { 581 581 test_msg("Got an error when we shouldn't have\n"); 582 582 goto out; ··· 611 611 free_extent_map(em); 612 612 613 613 /* Now for the compressed extent */ 614 - em = btrfs_get_extent(inode, NULL, 0, offset, sectorsize, 0); 614 + em = btrfs_get_extent(BTRFS_I(inode), NULL, 0, offset, sectorsize, 0); 615 615 if (IS_ERR(em)) { 616 616 test_msg("Got an error when we shouldn't have\n"); 617 617 goto out; ··· 645 645 free_extent_map(em); 646 646 647 647 /* Split compressed extent */ 648 - em = btrfs_get_extent(inode, NULL, 0, offset, sectorsize, 0); 648 + em = btrfs_get_extent(BTRFS_I(inode), NULL, 0, offset, sectorsize, 0); 649 649 if (IS_ERR(em)) { 650 650 test_msg("Got an error when we shouldn't have\n"); 651 651 goto out; ··· 680 680 offset = em->start + em->len; 681 681 free_extent_map(em); 682 682 683 - em = btrfs_get_extent(inode, NULL, 0, offset, sectorsize, 0); 683 + em = btrfs_get_extent(BTRFS_I(inode), NULL, 0, offset, sectorsize, 0); 684 684 if (IS_ERR(em)) { 685 685 test_msg("Got an error when we shouldn't have\n"); 686 686 goto out; ··· 707 707 offset = em->start + em->len; 708 708 free_extent_map(em); 709 709 710 - em = btrfs_get_extent(inode, NULL, 0, offset, sectorsize, 0); 710 + em = btrfs_get_extent(BTRFS_I(inode), NULL, 0, offset, sectorsize, 0); 711 711 if (IS_ERR(em)) { 712 712 test_msg("Got an error when we shouldn't have\n"); 713 713 goto out; ··· 742 742 free_extent_map(em); 743 743 744 744 /* A hole between regular extents but no hole extent */ 745 - em = btrfs_get_extent(inode, NULL, 0, offset + 6, sectorsize, 0); 745 + em = btrfs_get_extent(BTRFS_I(inode), NULL, 0, offset + 6, 746 + sectorsize, 0); 746 747 if (IS_ERR(em)) { 747 748 test_msg("Got an error when we shouldn't have\n"); 748 749 goto out; ··· 770 769 offset = em->start + em->len; 771 770 free_extent_map(em); 772 771 773 - em = btrfs_get_extent(inode, NULL, 0, offset, 4096 * 1024, 0); 772 + em = btrfs_get_extent(BTRFS_I(inode), NULL, 0, offset, 4096 * 1024, 0); 774 773 if (IS_ERR(em)) { 775 774 test_msg("Got an error when we shouldn't have\n"); 776 775 goto out; ··· 803 802 offset = em->start + em->len; 804 803 free_extent_map(em); 805 804 806 - em = btrfs_get_extent(inode, NULL, 0, offset, sectorsize, 0); 805 + em = btrfs_get_extent(BTRFS_I(inode), NULL, 0, offset, sectorsize, 0); 807 806 if (IS_ERR(em)) { 808 807 test_msg("Got an error when we shouldn't have\n"); 809 808 goto out; ··· 886 885 insert_inode_item_key(root); 887 886 insert_extent(root, sectorsize, sectorsize, sectorsize, 0, sectorsize, 888 887 sectorsize, BTRFS_FILE_EXTENT_REG, 0, 1); 889 - em = btrfs_get_extent(inode, NULL, 0, 0, 2 * sectorsize, 0); 888 + em = btrfs_get_extent(BTRFS_I(inode), NULL, 0, 0, 2 * sectorsize, 0); 890 889 if (IS_ERR(em)) { 891 890 test_msg("Got an error when we shouldn't have\n"); 892 891 goto out; ··· 908 907 } 909 908 free_extent_map(em); 910 909 911 - em = btrfs_get_extent(inode, NULL, 0, sectorsize, 2 * sectorsize, 0); 910 + em = btrfs_get_extent(BTRFS_I(inode), NULL, 0, sectorsize, 911 + 2 * sectorsize, 0); 912 912 if (IS_ERR(em)) { 913 913 test_msg("Got an error when we shouldn't have\n"); 914 914 goto out;
+3 -3
fs/btrfs/transaction.c
··· 1505 1505 /* 1506 1506 * insert the directory item 1507 1507 */ 1508 - ret = btrfs_set_inode_index(parent_inode, &index); 1508 + ret = btrfs_set_inode_index(BTRFS_I(parent_inode), &index); 1509 1509 BUG_ON(ret); /* -ENOMEM */ 1510 1510 1511 1511 /* check if there is a file/dir which has the same name. */ ··· 1644 1644 1645 1645 ret = btrfs_insert_dir_item(trans, parent_root, 1646 1646 dentry->d_name.name, dentry->d_name.len, 1647 - parent_inode, &key, 1647 + BTRFS_I(parent_inode), &key, 1648 1648 BTRFS_FT_DIR, index); 1649 1649 /* We have check then name at the beginning, so it is impossible. */ 1650 1650 BUG_ON(ret == -EEXIST || ret == -EOVERFLOW); ··· 1653 1653 goto fail; 1654 1654 } 1655 1655 1656 - btrfs_i_size_write(parent_inode, parent_inode->i_size + 1656 + btrfs_i_size_write(BTRFS_I(parent_inode), parent_inode->i_size + 1657 1657 dentry->d_name.len * 2); 1658 1658 parent_inode->i_mtime = parent_inode->i_ctime = 1659 1659 current_time(parent_inode);
+51 -46
fs/btrfs/tree-log.c
··· 673 673 unsigned long dest_offset; 674 674 struct btrfs_key ins; 675 675 676 + if (btrfs_file_extent_disk_bytenr(eb, item) == 0 && 677 + btrfs_fs_incompat(fs_info, NO_HOLES)) 678 + goto update_inode; 679 + 676 680 ret = btrfs_insert_empty_item(trans, root, path, key, 677 681 sizeof(*item)); 678 682 if (ret) ··· 829 825 } 830 826 831 827 inode_add_bytes(inode, nbytes); 828 + update_inode: 832 829 ret = btrfs_update_inode(trans, root, inode); 833 830 out: 834 831 if (inode) ··· 1327 1322 } 1328 1323 1329 1324 /* insert our name */ 1330 - ret = btrfs_add_link(trans, dir, inode, name, namelen, 1331 - 0, ref_index); 1325 + ret = btrfs_add_link(trans, BTRFS_I(dir), 1326 + BTRFS_I(inode), 1327 + name, namelen, 0, ref_index); 1332 1328 if (ret) 1333 1329 goto out; 1334 1330 ··· 1647 1641 return -EIO; 1648 1642 } 1649 1643 1650 - ret = btrfs_add_link(trans, dir, inode, name, name_len, 1, index); 1644 + ret = btrfs_add_link(trans, BTRFS_I(dir), BTRFS_I(inode), name, 1645 + name_len, 1, index); 1651 1646 1652 1647 /* FIXME, put inode into FIXUP list */ 1653 1648 ··· 1787 1780 out: 1788 1781 btrfs_release_path(path); 1789 1782 if (!ret && update_size) { 1790 - btrfs_i_size_write(dir, dir->i_size + name_len * 2); 1783 + btrfs_i_size_write(BTRFS_I(dir), dir->i_size + name_len * 2); 1791 1784 ret = btrfs_update_inode(trans, root, dir); 1792 1785 } 1793 1786 kfree(name); ··· 5052 5045 * a full commit is required. 5053 5046 */ 5054 5047 static noinline int check_parent_dirs_for_sync(struct btrfs_trans_handle *trans, 5055 - struct inode *inode, 5048 + struct btrfs_inode *inode, 5056 5049 struct dentry *parent, 5057 5050 struct super_block *sb, 5058 5051 u64 last_committed) 5059 5052 { 5060 5053 int ret = 0; 5061 5054 struct dentry *old_parent = NULL; 5062 - struct inode *orig_inode = inode; 5055 + struct btrfs_inode *orig_inode = inode; 5063 5056 5064 5057 /* 5065 5058 * for regular files, if its inode is already on disk, we don't ··· 5067 5060 * we can use the last_unlink_trans field to record renames 5068 5061 * and other fun in this file. 5069 5062 */ 5070 - if (S_ISREG(inode->i_mode) && 5071 - BTRFS_I(inode)->generation <= last_committed && 5072 - BTRFS_I(inode)->last_unlink_trans <= last_committed) 5073 - goto out; 5063 + if (S_ISREG(inode->vfs_inode.i_mode) && 5064 + inode->generation <= last_committed && 5065 + inode->last_unlink_trans <= last_committed) 5066 + goto out; 5074 5067 5075 - if (!S_ISDIR(inode->i_mode)) { 5068 + if (!S_ISDIR(inode->vfs_inode.i_mode)) { 5076 5069 if (!parent || d_really_is_negative(parent) || sb != parent->d_sb) 5077 5070 goto out; 5078 - inode = d_inode(parent); 5071 + inode = BTRFS_I(d_inode(parent)); 5079 5072 } 5080 5073 5081 5074 while (1) { ··· 5086 5079 * think this inode has already been logged. 5087 5080 */ 5088 5081 if (inode != orig_inode) 5089 - BTRFS_I(inode)->logged_trans = trans->transid; 5082 + inode->logged_trans = trans->transid; 5090 5083 smp_mb(); 5091 5084 5092 - if (btrfs_must_commit_transaction(trans, BTRFS_I(inode))) { 5085 + if (btrfs_must_commit_transaction(trans, inode)) { 5093 5086 ret = 1; 5094 5087 break; 5095 5088 } ··· 5098 5091 break; 5099 5092 5100 5093 if (IS_ROOT(parent)) { 5101 - inode = d_inode(parent); 5102 - if (btrfs_must_commit_transaction(trans, BTRFS_I(inode))) 5094 + inode = BTRFS_I(d_inode(parent)); 5095 + if (btrfs_must_commit_transaction(trans, inode)) 5103 5096 ret = 1; 5104 5097 break; 5105 5098 } ··· 5107 5100 parent = dget_parent(parent); 5108 5101 dput(old_parent); 5109 5102 old_parent = parent; 5110 - inode = d_inode(parent); 5103 + inode = BTRFS_I(d_inode(parent)); 5111 5104 5112 5105 } 5113 5106 dput(old_parent); ··· 5294 5287 } 5295 5288 5296 5289 static int btrfs_log_all_parents(struct btrfs_trans_handle *trans, 5297 - struct inode *inode, 5290 + struct btrfs_inode *inode, 5298 5291 struct btrfs_log_ctx *ctx) 5299 5292 { 5300 - struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb); 5293 + struct btrfs_fs_info *fs_info = btrfs_sb(inode->vfs_inode.i_sb); 5301 5294 int ret; 5302 5295 struct btrfs_path *path; 5303 5296 struct btrfs_key key; 5304 - struct btrfs_root *root = BTRFS_I(inode)->root; 5305 - const u64 ino = btrfs_ino(BTRFS_I(inode)); 5297 + struct btrfs_root *root = inode->root; 5298 + const u64 ino = btrfs_ino(inode); 5306 5299 5307 5300 path = btrfs_alloc_path(); 5308 5301 if (!path) ··· 5397 5390 * the last committed transaction 5398 5391 */ 5399 5392 static int btrfs_log_inode_parent(struct btrfs_trans_handle *trans, 5400 - struct btrfs_root *root, struct inode *inode, 5393 + struct btrfs_root *root, 5394 + struct btrfs_inode *inode, 5401 5395 struct dentry *parent, 5402 5396 const loff_t start, 5403 5397 const loff_t end, ··· 5412 5404 int ret = 0; 5413 5405 u64 last_committed = fs_info->last_trans_committed; 5414 5406 bool log_dentries = false; 5415 - struct inode *orig_inode = inode; 5407 + struct btrfs_inode *orig_inode = inode; 5416 5408 5417 - sb = inode->i_sb; 5409 + sb = inode->vfs_inode.i_sb; 5418 5410 5419 5411 if (btrfs_test_opt(fs_info, NOTREELOG)) { 5420 5412 ret = 1; ··· 5431 5423 goto end_no_trans; 5432 5424 } 5433 5425 5434 - if (root != BTRFS_I(inode)->root || 5435 - btrfs_root_refs(&root->root_item) == 0) { 5426 + if (root != inode->root || btrfs_root_refs(&root->root_item) == 0) { 5436 5427 ret = 1; 5437 5428 goto end_no_trans; 5438 5429 } 5439 5430 5440 - ret = check_parent_dirs_for_sync(trans, inode, parent, 5441 - sb, last_committed); 5431 + ret = check_parent_dirs_for_sync(trans, inode, parent, sb, 5432 + last_committed); 5442 5433 if (ret) 5443 5434 goto end_no_trans; 5444 5435 5445 - if (btrfs_inode_in_log(BTRFS_I(inode), trans->transid)) { 5436 + if (btrfs_inode_in_log(inode, trans->transid)) { 5446 5437 ret = BTRFS_NO_LOG_SYNC; 5447 5438 goto end_no_trans; 5448 5439 } ··· 5450 5443 if (ret) 5451 5444 goto end_no_trans; 5452 5445 5453 - ret = btrfs_log_inode(trans, root, BTRFS_I(inode), inode_only, 5454 - start, end, ctx); 5446 + ret = btrfs_log_inode(trans, root, inode, inode_only, start, end, ctx); 5455 5447 if (ret) 5456 5448 goto end_trans; 5457 5449 ··· 5460 5454 * we can use the last_unlink_trans field to record renames 5461 5455 * and other fun in this file. 5462 5456 */ 5463 - if (S_ISREG(inode->i_mode) && 5464 - BTRFS_I(inode)->generation <= last_committed && 5465 - BTRFS_I(inode)->last_unlink_trans <= last_committed) { 5457 + if (S_ISREG(inode->vfs_inode.i_mode) && 5458 + inode->generation <= last_committed && 5459 + inode->last_unlink_trans <= last_committed) { 5466 5460 ret = 0; 5467 5461 goto end_trans; 5468 5462 } 5469 5463 5470 - if (S_ISDIR(inode->i_mode) && ctx && ctx->log_new_dentries) 5464 + if (S_ISDIR(inode->vfs_inode.i_mode) && ctx && ctx->log_new_dentries) 5471 5465 log_dentries = true; 5472 5466 5473 5467 /* ··· 5511 5505 * but the file inode does not have a matching BTRFS_INODE_REF_KEY item 5512 5506 * and has a link count of 2. 5513 5507 */ 5514 - if (BTRFS_I(inode)->last_unlink_trans > last_committed) { 5508 + if (inode->last_unlink_trans > last_committed) { 5515 5509 ret = btrfs_log_all_parents(trans, orig_inode, ctx); 5516 5510 if (ret) 5517 5511 goto end_trans; ··· 5521 5515 if (!parent || d_really_is_negative(parent) || sb != parent->d_sb) 5522 5516 break; 5523 5517 5524 - inode = d_inode(parent); 5525 - if (root != BTRFS_I(inode)->root) 5518 + inode = BTRFS_I(d_inode(parent)); 5519 + if (root != inode->root) 5526 5520 break; 5527 5521 5528 - if (BTRFS_I(inode)->generation > last_committed) { 5529 - ret = btrfs_log_inode(trans, root, BTRFS_I(inode), 5530 - LOG_INODE_EXISTS, 5531 - 0, LLONG_MAX, ctx); 5522 + if (inode->generation > last_committed) { 5523 + ret = btrfs_log_inode(trans, root, inode, 5524 + LOG_INODE_EXISTS, 0, LLONG_MAX, ctx); 5532 5525 if (ret) 5533 5526 goto end_trans; 5534 5527 } ··· 5539 5534 old_parent = parent; 5540 5535 } 5541 5536 if (log_dentries) 5542 - ret = log_new_dir_dentries(trans, root, BTRFS_I(orig_inode), ctx); 5537 + ret = log_new_dir_dentries(trans, root, orig_inode, ctx); 5543 5538 else 5544 5539 ret = 0; 5545 5540 end_trans: ··· 5571 5566 struct dentry *parent = dget_parent(dentry); 5572 5567 int ret; 5573 5568 5574 - ret = btrfs_log_inode_parent(trans, root, d_inode(dentry), parent, 5575 - start, end, 0, ctx); 5569 + ret = btrfs_log_inode_parent(trans, root, BTRFS_I(d_inode(dentry)), 5570 + parent, start, end, 0, ctx); 5576 5571 dput(parent); 5577 5572 5578 5573 return ret; ··· 5834 5829 (!old_dir || old_dir->logged_trans <= fs_info->last_trans_committed)) 5835 5830 return 0; 5836 5831 5837 - return btrfs_log_inode_parent(trans, root, &inode->vfs_inode, parent, 0, 5832 + return btrfs_log_inode_parent(trans, root, inode, parent, 0, 5838 5833 LLONG_MAX, 1, NULL); 5839 5834 } 5840 5835
+12 -9
fs/btrfs/volumes.c
··· 1725 1725 * Function to update ctime/mtime for a given device path. 1726 1726 * Mainly used for ctime/mtime based probe like libblkid. 1727 1727 */ 1728 - static void update_dev_time(char *path_name) 1728 + static void update_dev_time(const char *path_name) 1729 1729 { 1730 1730 struct file *filp; 1731 1731 ··· 1851 1851 fs_info->fs_devices->latest_bdev = next_device->bdev; 1852 1852 } 1853 1853 1854 - int btrfs_rm_device(struct btrfs_fs_info *fs_info, char *device_path, u64 devid) 1854 + int btrfs_rm_device(struct btrfs_fs_info *fs_info, const char *device_path, 1855 + u64 devid) 1855 1856 { 1856 1857 struct btrfs_device *device; 1857 1858 struct btrfs_fs_devices *cur_devices; ··· 2092 2091 } 2093 2092 2094 2093 static int btrfs_find_device_by_path(struct btrfs_fs_info *fs_info, 2095 - char *device_path, 2094 + const char *device_path, 2096 2095 struct btrfs_device **device) 2097 2096 { 2098 2097 int ret = 0; ··· 2119 2118 } 2120 2119 2121 2120 int btrfs_find_device_missing_or_by_path(struct btrfs_fs_info *fs_info, 2122 - char *device_path, 2121 + const char *device_path, 2123 2122 struct btrfs_device **device) 2124 2123 { 2125 2124 *device = NULL; ··· 2152 2151 * Lookup a device given by device id, or the path if the id is 0. 2153 2152 */ 2154 2153 int btrfs_find_device_by_devspec(struct btrfs_fs_info *fs_info, u64 devid, 2155 - char *devpath, struct btrfs_device **device) 2154 + const char *devpath, 2155 + struct btrfs_device **device) 2156 2156 { 2157 2157 int ret; 2158 2158 ··· 2309 2307 return ret; 2310 2308 } 2311 2309 2312 - int btrfs_init_new_device(struct btrfs_fs_info *fs_info, char *device_path) 2310 + int btrfs_init_new_device(struct btrfs_fs_info *fs_info, const char *device_path) 2313 2311 { 2314 2312 struct btrfs_root *root = fs_info->dev_root; 2315 2313 struct request_queue *q; ··· 2517 2515 } 2518 2516 2519 2517 int btrfs_init_dev_replace_tgtdev(struct btrfs_fs_info *fs_info, 2520 - char *device_path, 2518 + const char *device_path, 2521 2519 struct btrfs_device *srcdev, 2522 2520 struct btrfs_device **device_out) 2523 2521 { ··· 6956 6954 key.offset = device->devid; 6957 6955 6958 6956 path = btrfs_alloc_path(); 6959 - BUG_ON(!path); 6957 + if (!path) 6958 + return -ENOMEM; 6960 6959 ret = btrfs_search_slot(trans, dev_root, &key, path, -1, 1); 6961 6960 if (ret < 0) { 6962 6961 btrfs_warn_in_rcu(fs_info, ··· 7105 7102 return 0; 7106 7103 } 7107 7104 7108 - void btrfs_scratch_superblocks(struct block_device *bdev, char *device_path) 7105 + void btrfs_scratch_superblocks(struct block_device *bdev, const char *device_path) 7109 7106 { 7110 7107 struct buffer_head *bh; 7111 7108 struct btrfs_super_block *disk_super;
+6 -6
fs/btrfs/volumes.h
··· 422 422 void btrfs_assign_next_active_device(struct btrfs_fs_info *fs_info, 423 423 struct btrfs_device *device, struct btrfs_device *this_dev); 424 424 int btrfs_find_device_missing_or_by_path(struct btrfs_fs_info *fs_info, 425 - char *device_path, 425 + const char *device_path, 426 426 struct btrfs_device **device); 427 427 int btrfs_find_device_by_devspec(struct btrfs_fs_info *fs_info, u64 devid, 428 - char *devpath, 428 + const char *devpath, 429 429 struct btrfs_device **device); 430 430 struct btrfs_device *btrfs_alloc_device(struct btrfs_fs_info *fs_info, 431 431 const u64 *devid, 432 432 const u8 *uuid); 433 433 int btrfs_rm_device(struct btrfs_fs_info *fs_info, 434 - char *device_path, u64 devid); 434 + const char *device_path, u64 devid); 435 435 void btrfs_cleanup_fs_uuids(void); 436 436 int btrfs_num_copies(struct btrfs_fs_info *fs_info, u64 logical, u64 len); 437 437 int btrfs_grow_device(struct btrfs_trans_handle *trans, ··· 439 439 struct btrfs_device *btrfs_find_device(struct btrfs_fs_info *fs_info, u64 devid, 440 440 u8 *uuid, u8 *fsid); 441 441 int btrfs_shrink_device(struct btrfs_device *device, u64 new_size); 442 - int btrfs_init_new_device(struct btrfs_fs_info *fs_info, char *path); 442 + int btrfs_init_new_device(struct btrfs_fs_info *fs_info, const char *path); 443 443 int btrfs_init_dev_replace_tgtdev(struct btrfs_fs_info *fs_info, 444 - char *device_path, 444 + const char *device_path, 445 445 struct btrfs_device *srcdev, 446 446 struct btrfs_device **device_out); 447 447 int btrfs_balance(struct btrfs_balance_control *bctl, ··· 474 474 struct btrfs_device *tgtdev); 475 475 void btrfs_init_dev_replace_tgtdev_for_resume(struct btrfs_fs_info *fs_info, 476 476 struct btrfs_device *tgtdev); 477 - void btrfs_scratch_superblocks(struct block_device *bdev, char *device_path); 477 + void btrfs_scratch_superblocks(struct block_device *bdev, const char *device_path); 478 478 int btrfs_is_parity_mirror(struct btrfs_mapping_tree *map_tree, 479 479 u64 logical, u64 len, int mirror_num); 480 480 unsigned long btrfs_full_stripe_len(struct btrfs_fs_info *fs_info,
+5 -4
fs/btrfs/zlib.c
··· 73 73 74 74 static int zlib_compress_pages(struct list_head *ws, 75 75 struct address_space *mapping, 76 - u64 start, unsigned long len, 76 + u64 start, 77 77 struct page **pages, 78 - unsigned long nr_dest_pages, 79 78 unsigned long *out_pages, 80 79 unsigned long *total_in, 81 - unsigned long *total_out, 82 - unsigned long max_out) 80 + unsigned long *total_out) 83 81 { 84 82 struct workspace *workspace = list_entry(ws, struct workspace, list); 85 83 int ret; ··· 87 89 struct page *in_page = NULL; 88 90 struct page *out_page = NULL; 89 91 unsigned long bytes_left; 92 + unsigned long len = *total_out; 93 + unsigned long nr_dest_pages = *out_pages; 94 + const unsigned long max_out = nr_dest_pages * PAGE_SIZE; 90 95 91 96 *out_pages = 0; 92 97 *total_out = 0;