diff options
author | Josef Bacik <jbacik@fusionio.com> | 2013-05-09 13:49:30 -0400 |
---|---|---|
committer | Josef Bacik <jbacik@fusionio.com> | 2013-05-17 21:40:15 -0400 |
commit | b1c79e0947e0c190f865e2eb7b84a0fea0021cec (patch) | |
tree | 30ab171c673a21d5506732bb6f9266235e2530fb /fs/btrfs/ctree.c | |
parent | 73e1e61fb85ab206854b6d87ff31733628bb8d72 (diff) | |
download | op-kernel-dev-b1c79e0947e0c190f865e2eb7b84a0fea0021cec.zip op-kernel-dev-b1c79e0947e0c190f865e2eb7b84a0fea0021cec.tar.gz |
Btrfs: handle running extent ops with skinny metadata
Chris hit a bug where we weren't finding extent records when running extent ops.
This is because we use the delayed_ref_head when running the extent op, which
means we can't use the ->type checks to see if we are metadata. We also lose
the level of the metadata we are working on. So to fix this we can just check
the ->is_data section of the extent_op, and we can store the level of the buffer
we were modifying in the extent_op. Thanks,
Signed-off-by: Josef Bacik <jbacik@fusionio.com>
Diffstat (limited to 'fs/btrfs/ctree.c')
-rw-r--r-- | fs/btrfs/ctree.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/fs/btrfs/ctree.c b/fs/btrfs/ctree.c index de6de8e..02fae7f 100644 --- a/fs/btrfs/ctree.c +++ b/fs/btrfs/ctree.c @@ -951,10 +951,12 @@ static noinline int update_ref_for_cow(struct btrfs_trans_handle *trans, BUG_ON(ret); /* -ENOMEM */ } if (new_flags != 0) { + int level = btrfs_header_level(buf); + ret = btrfs_set_disk_extent_flags(trans, root, buf->start, buf->len, - new_flags, 0); + new_flags, level, 0); if (ret) return ret; } |