diff options
author | Josef Bacik <jbacik@fusionio.com> | 2013-04-24 16:38:50 -0400 |
---|---|---|
committer | Josef Bacik <jbacik@fusionio.com> | 2013-05-06 15:55:09 -0400 |
commit | 32b0253803bf8e384a37a70f2dfffb2056e7d087 (patch) | |
tree | ee17b31fdbb07bf94aea26a62d8099a396f5202a /fs | |
parent | 171f6537abb1929ab9072ed084872273300ca175 (diff) | |
download | op-kernel-dev-32b0253803bf8e384a37a70f2dfffb2056e7d087.zip op-kernel-dev-32b0253803bf8e384a37a70f2dfffb2056e7d087.tar.gz |
Btrfs: don't panic if we're trying to drop too many refs
This is just obnoxious. Just print a message, abort the transaction, and return
an error. Thanks,
Signed-off-by: Josef Bacik <jbacik@fusionio.com>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/btrfs/extent-tree.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c index 6526f1f..f8a5652 100644 --- a/fs/btrfs/extent-tree.c +++ b/fs/btrfs/extent-tree.c @@ -5596,7 +5596,13 @@ static int __btrfs_free_extent(struct btrfs_trans_handle *trans, } refs = btrfs_extent_refs(leaf, ei); - BUG_ON(refs < refs_to_drop); + if (refs < refs_to_drop) { + btrfs_err(info, "trying to drop %d refs but we only have %Lu " + "for bytenr %Lu\n", refs_to_drop, refs, bytenr); + ret = -EINVAL; + btrfs_abort_transaction(trans, extent_root, ret); + goto out; + } refs -= refs_to_drop; if (refs > 0) { |