Commit 9c8e63db authored by Josef Bacik's avatar Josef Bacik Committed by David Sterba

Btrfs: kill BUG_ON()'s in btrfs_mark_extent_written

No reason to bug on in here, fs corruption could easily cause these things to
happen.
Signed-off-by: default avatarJosef Bacik <jbacik@fb.com>
Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
parent 8436ea91
...@@ -1110,13 +1110,25 @@ int btrfs_mark_extent_written(struct btrfs_trans_handle *trans, ...@@ -1110,13 +1110,25 @@ int btrfs_mark_extent_written(struct btrfs_trans_handle *trans,
leaf = path->nodes[0]; leaf = path->nodes[0];
btrfs_item_key_to_cpu(leaf, &key, path->slots[0]); btrfs_item_key_to_cpu(leaf, &key, path->slots[0]);
BUG_ON(key.objectid != ino || key.type != BTRFS_EXTENT_DATA_KEY); if (key.objectid != ino ||
key.type != BTRFS_EXTENT_DATA_KEY) {
ret = -EINVAL;
btrfs_abort_transaction(trans, ret);
goto out;
}
fi = btrfs_item_ptr(leaf, path->slots[0], fi = btrfs_item_ptr(leaf, path->slots[0],
struct btrfs_file_extent_item); struct btrfs_file_extent_item);
BUG_ON(btrfs_file_extent_type(leaf, fi) != if (btrfs_file_extent_type(leaf, fi) != BTRFS_FILE_EXTENT_PREALLOC) {
BTRFS_FILE_EXTENT_PREALLOC); ret = -EINVAL;
btrfs_abort_transaction(trans, ret);
goto out;
}
extent_end = key.offset + btrfs_file_extent_num_bytes(leaf, fi); extent_end = key.offset + btrfs_file_extent_num_bytes(leaf, fi);
BUG_ON(key.offset > start || extent_end < end); if (key.offset > start || extent_end < end) {
ret = -EINVAL;
btrfs_abort_transaction(trans, ret);
goto out;
}
bytenr = btrfs_file_extent_disk_bytenr(leaf, fi); bytenr = btrfs_file_extent_disk_bytenr(leaf, fi);
num_bytes = btrfs_file_extent_disk_num_bytes(leaf, fi); num_bytes = btrfs_file_extent_disk_num_bytes(leaf, fi);
...@@ -1213,12 +1225,19 @@ int btrfs_mark_extent_written(struct btrfs_trans_handle *trans, ...@@ -1213,12 +1225,19 @@ int btrfs_mark_extent_written(struct btrfs_trans_handle *trans,
ret = btrfs_inc_extent_ref(trans, root, bytenr, num_bytes, 0, ret = btrfs_inc_extent_ref(trans, root, bytenr, num_bytes, 0,
root->root_key.objectid, root->root_key.objectid,
ino, orig_offset); ino, orig_offset);
BUG_ON(ret); /* -ENOMEM */ if (ret) {
btrfs_abort_transaction(trans, ret);
goto out;
}
if (split == start) { if (split == start) {
key.offset = start; key.offset = start;
} else { } else {
BUG_ON(start != key.offset); if (start != key.offset) {
ret = -EINVAL;
btrfs_abort_transaction(trans, ret);
goto out;
}
path->slots[0]--; path->slots[0]--;
extent_end = end; extent_end = end;
} }
...@@ -1240,7 +1259,10 @@ int btrfs_mark_extent_written(struct btrfs_trans_handle *trans, ...@@ -1240,7 +1259,10 @@ int btrfs_mark_extent_written(struct btrfs_trans_handle *trans,
ret = btrfs_free_extent(trans, root, bytenr, num_bytes, ret = btrfs_free_extent(trans, root, bytenr, num_bytes,
0, root->root_key.objectid, 0, root->root_key.objectid,
ino, orig_offset); ino, orig_offset);
BUG_ON(ret); /* -ENOMEM */ if (ret) {
btrfs_abort_transaction(trans, ret);
goto out;
}
} }
other_start = 0; other_start = 0;
other_end = start; other_end = start;
...@@ -1257,7 +1279,10 @@ int btrfs_mark_extent_written(struct btrfs_trans_handle *trans, ...@@ -1257,7 +1279,10 @@ int btrfs_mark_extent_written(struct btrfs_trans_handle *trans,
ret = btrfs_free_extent(trans, root, bytenr, num_bytes, ret = btrfs_free_extent(trans, root, bytenr, num_bytes,
0, root->root_key.objectid, 0, root->root_key.objectid,
ino, orig_offset); ino, orig_offset);
BUG_ON(ret); /* -ENOMEM */ if (ret) {
btrfs_abort_transaction(trans, ret);
goto out;
}
} }
if (del_nr == 0) { if (del_nr == 0) {
fi = btrfs_item_ptr(leaf, path->slots[0], fi = btrfs_item_ptr(leaf, path->slots[0],
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment