Skip to content

Commit

Permalink
btrfs: don't BUG_ON() in btrfs_drop_extents()
Browse files Browse the repository at this point in the history
btrfs_drop_extents() calls BUG_ON() in case the counter of to be deleted
extents is greater than 0. But all of these code paths can handle errors,
so there's no need to crash the kernel. Instead WARN() that the condition
has been met and gracefully bail out.

Reviewed-by: Filipe Manana <[email protected]>
Reviewed-by: Qu Wenruo <[email protected]>
Signed-off-by: Johannes Thumshirn <[email protected]>
Signed-off-by: David Sterba <[email protected]>
  • Loading branch information
morbidrsa authored and kdave committed Dec 2, 2024
1 parent 1363dba commit b62abe3
Showing 1 changed file with 21 additions and 4 deletions.
25 changes: 21 additions & 4 deletions fs/btrfs/file.c
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
#include "ioctl.h"
#include "file.h"
#include "super.h"
#include "print-tree.h"

/*
* Helper to fault in page and copy. This should go away and be replaced with
Expand Down Expand Up @@ -245,7 +246,11 @@ int btrfs_drop_extents(struct btrfs_trans_handle *trans,
next_slot:
leaf = path->nodes[0];
if (path->slots[0] >= btrfs_header_nritems(leaf)) {
BUG_ON(del_nr > 0);
if (WARN_ON(del_nr > 0)) {
btrfs_print_leaf(leaf);
ret = -EINVAL;
break;
}
ret = btrfs_next_leaf(root, path);
if (ret < 0)
break;
Expand Down Expand Up @@ -321,7 +326,11 @@ int btrfs_drop_extents(struct btrfs_trans_handle *trans,
* | -------- extent -------- |
*/
if (args->start > key.offset && args->end < extent_end) {
BUG_ON(del_nr > 0);
if (WARN_ON(del_nr > 0)) {
btrfs_print_leaf(leaf);
ret = -EINVAL;
break;
}
if (extent_type == BTRFS_FILE_EXTENT_INLINE) {
ret = -EOPNOTSUPP;
break;
Expand Down Expand Up @@ -409,7 +418,11 @@ int btrfs_drop_extents(struct btrfs_trans_handle *trans,
* | -------- extent -------- |
*/
if (args->start > key.offset && args->end >= extent_end) {
BUG_ON(del_nr > 0);
if (WARN_ON(del_nr > 0)) {
btrfs_print_leaf(leaf);
ret = -EINVAL;
break;
}
if (extent_type == BTRFS_FILE_EXTENT_INLINE) {
ret = -EOPNOTSUPP;
break;
Expand Down Expand Up @@ -437,7 +450,11 @@ int btrfs_drop_extents(struct btrfs_trans_handle *trans,
del_slot = path->slots[0];
del_nr = 1;
} else {
BUG_ON(del_slot + del_nr != path->slots[0]);
if (WARN_ON(del_slot + del_nr != path->slots[0])) {
btrfs_print_leaf(leaf);
ret = -EINVAL;
break;
}
del_nr++;
}

Expand Down

0 comments on commit b62abe3

Please sign in to comment.