diff options
author | Josef Bacik <jbacik@fb.com> | 2014-12-12 16:02:20 -0500 |
---|---|---|
committer | Chris Mason <clm@fb.com> | 2015-01-02 14:47:55 -0500 |
commit | df95e7f0d93e2fa776b168eac798a16a1e361022 (patch) | |
tree | 4df7fcaeb07ab05c876e3d3a77ca6d55c3cc7a7d | |
parent | 6b6d24b38991f72fe974215c96e0fdfe409ea50e (diff) | |
download | linux-df95e7f0d93e2fa776b168eac798a16a1e361022.tar.bz2 |
Btrfs: abort transaction if we don't find the block group
We shouldn't BUG_ON() if there is corruption. I hit this while testing my block
group patch and the abort worked properly. Thanks,
Signed-off-by: Josef Bacik <jbacik@fb.com>
Signed-off-by: Chris Mason <clm@fb.com>
-rw-r--r-- | fs/btrfs/extent-tree.c | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c index a80b97100d90..15116585e714 100644 --- a/fs/btrfs/extent-tree.c +++ b/fs/btrfs/extent-tree.c @@ -3139,9 +3139,11 @@ static int write_one_cache_group(struct btrfs_trans_handle *trans, struct extent_buffer *leaf; ret = btrfs_search_slot(trans, extent_root, &cache->key, path, 0, 1); - if (ret < 0) + if (ret) { + if (ret > 0) + ret = -ENOENT; goto fail; - BUG_ON(ret); /* Corruption */ + } leaf = path->nodes[0]; bi = btrfs_item_ptr_offset(leaf, path->slots[0]); @@ -3149,11 +3151,9 @@ static int write_one_cache_group(struct btrfs_trans_handle *trans, btrfs_mark_buffer_dirty(leaf); btrfs_release_path(path); fail: - if (ret) { + if (ret) btrfs_abort_transaction(trans, root, ret); - return ret; - } - return 0; + return ret; } |