| From: Omar Sandoval <osandov@fb.com> |
| Date: Fri, 11 May 2018 13:13:31 -0700 |
| Subject: Btrfs: don't BUG_ON() in btrfs_truncate_inode_items() |
| |
| commit 0552210997badb6a60740a26ff9d976a416510f0 upstream. |
| |
| btrfs_free_extent() can fail because of ENOMEM. There's no reason to |
| panic here, we can just abort the transaction. |
| |
| Fixes: f4b9aa8d3b87 ("btrfs_truncate") |
| Reviewed-by: Nikolay Borisov <nborisov@suse.com> |
| Signed-off-by: Omar Sandoval <osandov@fb.com> |
| Reviewed-by: David Sterba <dsterba@suse.com> |
| Signed-off-by: David Sterba <dsterba@suse.com> |
| [bwh: Backported to 3.16: |
| - Also pass root to btrfs_abort_transaction() |
| - Adjust context] |
| Signed-off-by: Ben Hutchings <ben@decadent.org.uk> |
| --- |
| fs/btrfs/inode.c | 5 ++++- |
| 1 file changed, 4 insertions(+), 1 deletion(-) |
| |
| --- a/fs/btrfs/inode.c |
| +++ b/fs/btrfs/inode.c |
| @@ -4313,7 +4313,10 @@ delete: |
| extent_num_bytes, 0, |
| btrfs_header_owner(leaf), |
| ino, extent_offset, 0); |
| - BUG_ON(ret); |
| + if (ret) { |
| + btrfs_abort_transaction(trans, root, ret); |
| + break; |
| + } |
| } |
| |
| if (found_type == BTRFS_INODE_ITEM_KEY) |