Message ID | bb54e5910f8393a1404393138bc74df751d6655f.1693209858.git.fdmanana@suse.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | btrfs: updates to error path for delayed dir index insertion failure | expand |
On 2023/8/28 16:06, fdmanana@kernel.org wrote: > From: Filipe Manana <fdmanana@suse.com> > > 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/ > Signed-off-by: Filipe Manana <fdmanana@suse.com> Reviewed-by: Qu Wenruo <wqu@suse.com> Thanks, Qu > --- > fs/btrfs/delayed-inode.c | 7 ++++--- > 1 file changed, 4 insertions(+), 3 deletions(-) > > diff --git a/fs/btrfs/delayed-inode.c b/fs/btrfs/delayed-inode.c > index 08ecb4d0cc45..f9dae729811b 100644 > --- a/fs/btrfs/delayed-inode.c > +++ b/fs/btrfs/delayed-inode.c > @@ -1498,9 +1498,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);
diff --git a/fs/btrfs/delayed-inode.c b/fs/btrfs/delayed-inode.c index 08ecb4d0cc45..f9dae729811b 100644 --- a/fs/btrfs/delayed-inode.c +++ b/fs/btrfs/delayed-inode.c @@ -1498,9 +1498,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);