提交 e48c465b 编写于 作者: C Chris Mason

Btrfs: Fix new state initialization order

As the extent state tree is manipulated, there are call backs
that are used to take extra actions when different state bits are set
or cleared.  One example of this is a counter for the total number
of delayed allocation bytes in a single inode and in the whole FS.

When new states are inserted, this callback is being done before we
properly setup the new state.  This hasn't caused problems before
because the lock bit was always done first, and the existing call backs
don't care about the lock bit.

This patch makes sure the state is properly setup before using the
callback, which is important for later optimizations that do more work
without using the lock bit.
Signed-off-by: NChris Mason <chris.mason@oracle.com>
上级 890871be
...@@ -367,10 +367,10 @@ static int insert_state(struct extent_io_tree *tree, ...@@ -367,10 +367,10 @@ static int insert_state(struct extent_io_tree *tree,
} }
if (bits & EXTENT_DIRTY) if (bits & EXTENT_DIRTY)
tree->dirty_bytes += end - start + 1; tree->dirty_bytes += end - start + 1;
set_state_cb(tree, state, bits);
state->state |= bits;
state->start = start; state->start = start;
state->end = end; state->end = end;
set_state_cb(tree, state, bits);
state->state |= bits;
node = tree_insert(&tree->state, end, &state->rb_node); node = tree_insert(&tree->state, end, &state->rb_node);
if (node) { if (node) {
struct extent_state *found; struct extent_state *found;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册