diff options
author | Nikolay Borisov <n.borisov.lkml@gmail.com> | 2017-02-20 06:50:47 -0500 |
---|---|---|
committer | David Sterba <dsterba@suse.com> | 2017-02-28 05:30:08 -0500 |
commit | a012a74e78d99aa27f8487c050e9ac3183bc3785 (patch) | |
tree | 87997b44b50d8ccf3b35289fadaf15404858d083 /fs/btrfs | |
parent | 35339c245b5939315e8763deb7f9b68fffe54912 (diff) |
btrfs: Make fill_holes take btrfs_inode
Signed-off-by: Nikolay Borisov <nborisov@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
Diffstat (limited to 'fs/btrfs')
-rw-r--r-- | fs/btrfs/file.c | 37 |
1 files changed, 18 insertions, 19 deletions
diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c index 27dfdfb7ff19..ef4ecd003742 100644 --- a/fs/btrfs/file.c +++ b/fs/btrfs/file.c | |||
@@ -2224,22 +2224,23 @@ static int hole_mergeable(struct btrfs_inode *inode, struct extent_buffer *leaf, | |||
2224 | return 0; | 2224 | return 0; |
2225 | } | 2225 | } |
2226 | 2226 | ||
2227 | static int fill_holes(struct btrfs_trans_handle *trans, struct inode *inode, | 2227 | static int fill_holes(struct btrfs_trans_handle *trans, |
2228 | struct btrfs_path *path, u64 offset, u64 end) | 2228 | struct btrfs_inode *inode, |
2229 | struct btrfs_path *path, u64 offset, u64 end) | ||
2229 | { | 2230 | { |
2230 | struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb); | 2231 | struct btrfs_fs_info *fs_info = btrfs_sb(inode->vfs_inode.i_sb); |
2231 | struct btrfs_root *root = BTRFS_I(inode)->root; | 2232 | struct btrfs_root *root = inode->root; |
2232 | struct extent_buffer *leaf; | 2233 | struct extent_buffer *leaf; |
2233 | struct btrfs_file_extent_item *fi; | 2234 | struct btrfs_file_extent_item *fi; |
2234 | struct extent_map *hole_em; | 2235 | struct extent_map *hole_em; |
2235 | struct extent_map_tree *em_tree = &BTRFS_I(inode)->extent_tree; | 2236 | struct extent_map_tree *em_tree = &inode->extent_tree; |
2236 | struct btrfs_key key; | 2237 | struct btrfs_key key; |
2237 | int ret; | 2238 | int ret; |
2238 | 2239 | ||
2239 | if (btrfs_fs_incompat(fs_info, NO_HOLES)) | 2240 | if (btrfs_fs_incompat(fs_info, NO_HOLES)) |
2240 | goto out; | 2241 | goto out; |
2241 | 2242 | ||
2242 | key.objectid = btrfs_ino(BTRFS_I(inode)); | 2243 | key.objectid = btrfs_ino(inode); |
2243 | key.type = BTRFS_EXTENT_DATA_KEY; | 2244 | key.type = BTRFS_EXTENT_DATA_KEY; |
2244 | key.offset = offset; | 2245 | key.offset = offset; |
2245 | 2246 | ||
@@ -2255,8 +2256,7 @@ static int fill_holes(struct btrfs_trans_handle *trans, struct inode *inode, | |||
2255 | } | 2256 | } |
2256 | 2257 | ||
2257 | leaf = path->nodes[0]; | 2258 | leaf = path->nodes[0]; |
2258 | if (hole_mergeable(BTRFS_I(inode), leaf, path->slots[0] - 1, | 2259 | if (hole_mergeable(inode, leaf, path->slots[0] - 1, offset, end)) { |
2259 | offset, end)) { | ||
2260 | u64 num_bytes; | 2260 | u64 num_bytes; |
2261 | 2261 | ||
2262 | path->slots[0]--; | 2262 | path->slots[0]--; |
@@ -2271,7 +2271,7 @@ static int fill_holes(struct btrfs_trans_handle *trans, struct inode *inode, | |||
2271 | goto out; | 2271 | goto out; |
2272 | } | 2272 | } |
2273 | 2273 | ||
2274 | if (hole_mergeable(BTRFS_I(inode), leaf, path->slots[0], offset, end)) { | 2274 | if (hole_mergeable(inode, leaf, path->slots[0], offset, end)) { |
2275 | u64 num_bytes; | 2275 | u64 num_bytes; |
2276 | 2276 | ||
2277 | key.offset = offset; | 2277 | key.offset = offset; |
@@ -2288,7 +2288,7 @@ static int fill_holes(struct btrfs_trans_handle *trans, struct inode *inode, | |||
2288 | } | 2288 | } |
2289 | btrfs_release_path(path); | 2289 | btrfs_release_path(path); |
2290 | 2290 | ||
2291 | ret = btrfs_insert_file_extent(trans, root, btrfs_ino(BTRFS_I(inode)), | 2291 | ret = btrfs_insert_file_extent(trans, root, btrfs_ino(inode), |
2292 | offset, 0, 0, end - offset, 0, end - offset, 0, 0, 0); | 2292 | offset, 0, 0, end - offset, 0, end - offset, 0, 0, 0); |
2293 | if (ret) | 2293 | if (ret) |
2294 | return ret; | 2294 | return ret; |
@@ -2298,9 +2298,8 @@ out: | |||
2298 | 2298 | ||
2299 | hole_em = alloc_extent_map(); | 2299 | hole_em = alloc_extent_map(); |
2300 | if (!hole_em) { | 2300 | if (!hole_em) { |
2301 | btrfs_drop_extent_cache(BTRFS_I(inode), offset, end - 1, 0); | 2301 | btrfs_drop_extent_cache(inode, offset, end - 1, 0); |
2302 | set_bit(BTRFS_INODE_NEEDS_FULL_SYNC, | 2302 | set_bit(BTRFS_INODE_NEEDS_FULL_SYNC, &inode->runtime_flags); |
2303 | &BTRFS_I(inode)->runtime_flags); | ||
2304 | } else { | 2303 | } else { |
2305 | hole_em->start = offset; | 2304 | hole_em->start = offset; |
2306 | hole_em->len = end - offset; | 2305 | hole_em->len = end - offset; |
@@ -2315,8 +2314,7 @@ out: | |||
2315 | hole_em->generation = trans->transid; | 2314 | hole_em->generation = trans->transid; |
2316 | 2315 | ||
2317 | do { | 2316 | do { |
2318 | btrfs_drop_extent_cache(BTRFS_I(inode), offset, | 2317 | btrfs_drop_extent_cache(inode, offset, end - 1, 0); |
2319 | end - 1, 0); | ||
2320 | write_lock(&em_tree->lock); | 2318 | write_lock(&em_tree->lock); |
2321 | ret = add_extent_mapping(em_tree, hole_em, 1); | 2319 | ret = add_extent_mapping(em_tree, hole_em, 1); |
2322 | write_unlock(&em_tree->lock); | 2320 | write_unlock(&em_tree->lock); |
@@ -2324,7 +2322,7 @@ out: | |||
2324 | free_extent_map(hole_em); | 2322 | free_extent_map(hole_em); |
2325 | if (ret) | 2323 | if (ret) |
2326 | set_bit(BTRFS_INODE_NEEDS_FULL_SYNC, | 2324 | set_bit(BTRFS_INODE_NEEDS_FULL_SYNC, |
2327 | &BTRFS_I(inode)->runtime_flags); | 2325 | &inode->runtime_flags); |
2328 | } | 2326 | } |
2329 | 2327 | ||
2330 | return 0; | 2328 | return 0; |
@@ -2554,8 +2552,8 @@ static int btrfs_punch_hole(struct inode *inode, loff_t offset, loff_t len) | |||
2554 | trans->block_rsv = &fs_info->trans_block_rsv; | 2552 | trans->block_rsv = &fs_info->trans_block_rsv; |
2555 | 2553 | ||
2556 | if (cur_offset < drop_end && cur_offset < ino_size) { | 2554 | if (cur_offset < drop_end && cur_offset < ino_size) { |
2557 | ret = fill_holes(trans, inode, path, cur_offset, | 2555 | ret = fill_holes(trans, BTRFS_I(inode), path, |
2558 | drop_end); | 2556 | cur_offset, drop_end); |
2559 | if (ret) { | 2557 | if (ret) { |
2560 | /* | 2558 | /* |
2561 | * If we failed then we didn't insert our hole | 2559 | * If we failed then we didn't insert our hole |
@@ -2626,7 +2624,8 @@ static int btrfs_punch_hole(struct inode *inode, loff_t offset, loff_t len) | |||
2626 | * cur_offset == drop_end). | 2624 | * cur_offset == drop_end). |
2627 | */ | 2625 | */ |
2628 | if (cur_offset < ino_size && cur_offset < drop_end) { | 2626 | if (cur_offset < ino_size && cur_offset < drop_end) { |
2629 | ret = fill_holes(trans, inode, path, cur_offset, drop_end); | 2627 | ret = fill_holes(trans, BTRFS_I(inode), path, |
2628 | cur_offset, drop_end); | ||
2630 | if (ret) { | 2629 | if (ret) { |
2631 | /* Same comment as above. */ | 2630 | /* Same comment as above. */ |
2632 | btrfs_abort_transaction(trans, ret); | 2631 | btrfs_abort_transaction(trans, ret); |