Messages in this thread | | | Date | Wed, 18 Dec 2019 17:31:18 +0100 | From | David Sterba <> | Subject | Re: [PATCH] btrfs: remove BUG_ON used as assertions |
| |
On Sun, Dec 15, 2019 at 11:12:36AM -0600, Aditya Pakki wrote: > alloc_extent_state_atomic() allocates extents via GFP_ATOMIC flag > and cannot fail.
Here you say it cannot fail (without a proof)
> There are multiple invocations of BUG_ON on the > return value to check for failure. The patch replaces certain > invocations of BUG_ON by returning the error upstream. > > Signed-off-by: Aditya Pakki <pakki001@umn.edu> > --- > fs/btrfs/extent_io.c | 20 ++++++++++++++++---- > 1 file changed, 16 insertions(+), 4 deletions(-) > > diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c > index eb8bd0258360..e72e5a333e71 100644 > --- a/fs/btrfs/extent_io.c > +++ b/fs/btrfs/extent_io.c > @@ -989,7 +989,10 @@ __set_extent_bit(struct extent_io_tree *tree, u64 start, u64 end, > node = tree_search_for_insert(tree, start, &p, &parent); > if (!node) { > prealloc = alloc_extent_state_atomic(prealloc); > - BUG_ON(!prealloc); > + if (!prealloc) { > + err = -ENOMEM; > + goto out;
And add error handling when it fails, which is in contradiction but anyway, replacing BUG_ON with error checks requires auditing the whole call chain up. We've had attempts to do this change already, none of them was correct so unfortunatelly the BUG_ON needs to stay to avoid errors being silently ignored.
| |