summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFilipe Manana <fdmanana@suse.com>2023-08-28 09:06:42 +0100
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2023-10-06 14:56:32 +0200
commit0d1a761dec2259c0ed159ea6a19d3103aa80e0e1 (patch)
treee2a2d93ecdcae053fa52b8268cde17c3c3cc515f
parentdbf1a719850577bb51fc7512a3972994b797a17b (diff)
downloadlinux-stable-0d1a761dec2259c0ed159ea6a19d3103aa80e0e1.tar.gz
linux-stable-0d1a761dec2259c0ed159ea6a19d3103aa80e0e1.tar.bz2
linux-stable-0d1a761dec2259c0ed159ea6a19d3103aa80e0e1.zip
btrfs: improve error message after failure to add delayed dir index item
[ Upstream commit 91bfe3104b8db0310f76f2dcb6aacef24c889366 ] If we fail to add a delayed dir index item because there's already another item with the same index number, we print an error message (and then BUG). However that message isn't very helpful to debug anything because we don't know what's the index number and what are the values of index counters in the inode and its delayed inode (index_cnt fields of struct btrfs_inode and struct btrfs_delayed_node). So update the error message to include the index number and counters. We actually had a recent case where this issue was hit by a syzbot report (see the link below). Link: https://lore.kernel.org/linux-btrfs/00000000000036e1290603e097e0@google.com/ Reviewed-by: Qu Wenruo <wqu@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> Stable-dep-of: 2c58c3931ede ("btrfs: remove BUG() after failure to insert delayed dir index item") Signed-off-by: Sasha Levin <sashal@kernel.org>
-rw-r--r--fs/btrfs/delayed-inode.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/fs/btrfs/delayed-inode.c b/fs/btrfs/delayed-inode.c
index d2cbb7733c7d..34e843460e4d 100644
--- a/fs/btrfs/delayed-inode.c
+++ b/fs/btrfs/delayed-inode.c
@@ -1506,9 +1506,10 @@ int btrfs_insert_delayed_dir_index(struct btrfs_trans_handle *trans,
ret = __btrfs_add_delayed_item(delayed_node, delayed_item);
if (unlikely(ret)) {
btrfs_err(trans->fs_info,
- "err add delayed dir index item(name: %.*s) into the insertion tree of the delayed node(root id: %llu, inode id: %llu, errno: %d)",
- name_len, name, delayed_node->root->root_key.objectid,
- delayed_node->inode_id, ret);
+"error adding delayed dir index item, name: %.*s, index: %llu, root: %llu, dir: %llu, dir->index_cnt: %llu, delayed_node->index_cnt: %llu, error: %d",
+ name_len, name, index, btrfs_root_id(delayed_node->root),
+ delayed_node->inode_id, dir->index_cnt,
+ delayed_node->index_cnt, ret);
BUG();
}
mutex_unlock(&delayed_node->mutex);