提交 a2f392e4 编写于 作者: N Nikolay Borisov 提交者: David Sterba

btrfs: Make clone_update_extent_map take btrfs_inode

Signed-off-by: NNikolay Borisov <nborisov@suse.com>
Signed-off-by: NDavid Sterba <dsterba@suse.com>
上级 6fc0ef68
...@@ -3311,20 +3311,19 @@ static int clone_finish_inode_update(struct btrfs_trans_handle *trans, ...@@ -3311,20 +3311,19 @@ static int clone_finish_inode_update(struct btrfs_trans_handle *trans,
return ret; return ret;
} }
static void clone_update_extent_map(struct inode *inode, static void clone_update_extent_map(struct btrfs_inode *inode,
const struct btrfs_trans_handle *trans, const struct btrfs_trans_handle *trans,
const struct btrfs_path *path, const struct btrfs_path *path,
const u64 hole_offset, const u64 hole_offset,
const u64 hole_len) const u64 hole_len)
{ {
struct extent_map_tree *em_tree = &BTRFS_I(inode)->extent_tree; struct extent_map_tree *em_tree = &inode->extent_tree;
struct extent_map *em; struct extent_map *em;
int ret; int ret;
em = alloc_extent_map(); em = alloc_extent_map();
if (!em) { if (!em) {
set_bit(BTRFS_INODE_NEEDS_FULL_SYNC, set_bit(BTRFS_INODE_NEEDS_FULL_SYNC, &inode->runtime_flags);
&BTRFS_I(inode)->runtime_flags);
return; return;
} }
...@@ -3333,13 +3332,12 @@ static void clone_update_extent_map(struct inode *inode, ...@@ -3333,13 +3332,12 @@ static void clone_update_extent_map(struct inode *inode,
fi = btrfs_item_ptr(path->nodes[0], path->slots[0], fi = btrfs_item_ptr(path->nodes[0], path->slots[0],
struct btrfs_file_extent_item); struct btrfs_file_extent_item);
btrfs_extent_item_to_extent_map(BTRFS_I(inode), path, fi, btrfs_extent_item_to_extent_map(inode, path, fi, false, em);
false, em);
em->generation = -1; em->generation = -1;
if (btrfs_file_extent_type(path->nodes[0], fi) == if (btrfs_file_extent_type(path->nodes[0], fi) ==
BTRFS_FILE_EXTENT_INLINE) BTRFS_FILE_EXTENT_INLINE)
set_bit(BTRFS_INODE_NEEDS_FULL_SYNC, set_bit(BTRFS_INODE_NEEDS_FULL_SYNC,
&BTRFS_I(inode)->runtime_flags); &inode->runtime_flags);
} else { } else {
em->start = hole_offset; em->start = hole_offset;
em->len = hole_len; em->len = hole_len;
...@@ -3360,13 +3358,12 @@ static void clone_update_extent_map(struct inode *inode, ...@@ -3360,13 +3358,12 @@ static void clone_update_extent_map(struct inode *inode,
free_extent_map(em); free_extent_map(em);
break; break;
} }
btrfs_drop_extent_cache(BTRFS_I(inode), em->start, btrfs_drop_extent_cache(inode, em->start,
em->start + em->len - 1, 0); em->start + em->len - 1, 0);
} }
if (ret) if (ret)
set_bit(BTRFS_INODE_NEEDS_FULL_SYNC, set_bit(BTRFS_INODE_NEEDS_FULL_SYNC, &inode->runtime_flags);
&BTRFS_I(inode)->runtime_flags);
} }
/* /*
...@@ -3792,11 +3789,12 @@ static int btrfs_clone(struct inode *src, struct inode *inode, ...@@ -3792,11 +3789,12 @@ static int btrfs_clone(struct inode *src, struct inode *inode,
/* If we have an implicit hole (NO_HOLES feature). */ /* If we have an implicit hole (NO_HOLES feature). */
if (drop_start < new_key.offset) if (drop_start < new_key.offset)
clone_update_extent_map(inode, trans, clone_update_extent_map(BTRFS_I(inode), trans,
NULL, drop_start, NULL, drop_start,
new_key.offset - drop_start); new_key.offset - drop_start);
clone_update_extent_map(inode, trans, path, 0, 0); clone_update_extent_map(BTRFS_I(inode), trans,
path, 0, 0);
btrfs_mark_buffer_dirty(leaf); btrfs_mark_buffer_dirty(leaf);
btrfs_release_path(path); btrfs_release_path(path);
...@@ -3846,8 +3844,9 @@ static int btrfs_clone(struct inode *src, struct inode *inode, ...@@ -3846,8 +3844,9 @@ static int btrfs_clone(struct inode *src, struct inode *inode,
btrfs_end_transaction(trans); btrfs_end_transaction(trans);
goto out; goto out;
} }
clone_update_extent_map(inode, trans, NULL, last_dest_end, clone_update_extent_map(BTRFS_I(inode), trans, NULL,
destoff + len - last_dest_end); last_dest_end,
destoff + len - last_dest_end);
ret = clone_finish_inode_update(trans, inode, destoff + len, ret = clone_finish_inode_update(trans, inode, destoff + len,
destoff, olen, no_time_update); destoff, olen, no_time_update);
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册