summaryrefslogtreecommitdiff
path: root/fs/btrfs/delayed-inode.c
diff options
context:
space:
mode:
authorFilipe Manana <fdmanana@suse.com>2022-05-31 18:06:41 +0300
committerDavid Sterba <dsterba@suse.com>2022-07-25 18:44:35 +0300
commit3bae13e9d42eae0fea7afd6a9aea6b4fe81770ad (patch)
tree35b6c8428a4be346aa15f05da441988fb6f05e81 /fs/btrfs/delayed-inode.c
parent06ac264f3fe56daaadf0bd4fca5910859d34f611 (diff)
downloadlinux-3bae13e9d42eae0fea7afd6a9aea6b4fe81770ad.tar.xz
btrfs: do not BUG_ON() on failure to reserve metadata for delayed item
At btrfs_insert_delayed_dir_index(), we don't expect the metadata reservation for the delayed dir index item insertion to fail, because the caller is supposed to have reserved 1 unit of metadata space for that. All callers are able to deal with an error in case that happens, so there is no need for something so drastic as a BUG_ON() in case of failure. Instead just emit a warning, so that's easily noticed during development (fstests in particular), and return the error to the caller. Reviewed-by: Nikolay Borisov <nborisov@suse.com> Signed-off-by: Filipe Manana <fdmanana@suse.com> Reviewed-by: David Sterba <dsterba@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
Diffstat (limited to 'fs/btrfs/delayed-inode.c')
-rw-r--r--fs/btrfs/delayed-inode.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/fs/btrfs/delayed-inode.c b/fs/btrfs/delayed-inode.c
index d9be90ac7c3a..6019c35de8de 100644
--- a/fs/btrfs/delayed-inode.c
+++ b/fs/btrfs/delayed-inode.c
@@ -1386,10 +1386,13 @@ int btrfs_insert_delayed_dir_index(struct btrfs_trans_handle *trans,
ret = btrfs_delayed_item_reserve_metadata(trans, dir->root, delayed_item);
/*
- * we have reserved enough space when we start a new transaction,
- * so reserving metadata failure is impossible
+ * Space was reserved for a dir index item insertion when we started the
+ * transaction, so getting a failure here should be impossible.
*/
- BUG_ON(ret);
+ if (WARN_ON(ret)) {
+ btrfs_release_delayed_item(delayed_item);
+ goto release_node;
+ }
mutex_lock(&delayed_node->mutex);
ret = __btrfs_add_delayed_insertion_item(delayed_node, delayed_item);