On Thu, Apr 25, 2019 at 8:52 AM Qu Wenruo <wqu@xxxxxxxx> wrote:
>
> We have a user reporting BUG_ON() triggered in
> btrfs_set_item_key_safe().
>
> Let's dump the leaf content before triggering BUG_ON() so that we can
> have some clue on what's going wrong.
> The output of tree locks should help us to debug such problem.
>
> Reviewed-by: Filip Manana <fdmanana@xxxxxxxx>
Filip -> Filipe
David can probably amend that at commit time.
> Signed-off-by: Qu Wenruo <wqu@xxxxxxxx>
> ---
> Changelog:
> v2:
> - Dump slot/old key/new key.
> v3:
> - Output message update, to avoid "on-disk" wording.
> - Use BUG() to replace BUG_ON(1) to make clang quite.
>
> fs/btrfs/ctree.c | 24 ++++++++++++++++++++++--
> 1 file changed, 22 insertions(+), 2 deletions(-)
>
> diff --git a/fs/btrfs/ctree.c b/fs/btrfs/ctree.c
> index 5116c2a1f0f9..5df76c17775a 100644
> --- a/fs/btrfs/ctree.c
> +++ b/fs/btrfs/ctree.c
> @@ -3185,11 +3185,31 @@ void btrfs_set_item_key_safe(struct btrfs_fs_info *fs_info,
> slot = path->slots[0];
> if (slot > 0) {
> btrfs_item_key(eb, &disk_key, slot - 1);
> - BUG_ON(comp_keys(&disk_key, new_key) >= 0);
> + if (unlikely(comp_keys(&disk_key, new_key) >= 0)) {
> + btrfs_crit(fs_info,
> + "slot %u key (%llu %u %llu) new key (%llu %u %llu)",
> + slot, btrfs_disk_key_objectid(&disk_key),
> + btrfs_disk_key_type(&disk_key),
> + btrfs_disk_key_offset(&disk_key),
> + new_key->objectid, new_key->type,
> + new_key->offset);
> + btrfs_print_leaf(eb);
> + BUG();
> + }
> }
> if (slot < btrfs_header_nritems(eb) - 1) {
> btrfs_item_key(eb, &disk_key, slot + 1);
> - BUG_ON(comp_keys(&disk_key, new_key) <= 0);
> + if (unlikely(comp_keys(&disk_key, new_key) <= 0)) {
> + btrfs_crit(fs_info,
> + "slot %u key (%llu %u %llu) new key (%llu %u %llu)",
> + slot, btrfs_disk_key_objectid(&disk_key),
> + btrfs_disk_key_type(&disk_key),
> + btrfs_disk_key_offset(&disk_key),
> + new_key->objectid, new_key->type,
> + new_key->offset);
> + btrfs_print_leaf(eb);
> + BUG();
> + }
> }
>
> btrfs_cpu_key_to_disk(&disk_key, new_key);
> --
> 2.21.0
>
--
Filipe David Manana,
“Whether you think you can, or you think you can't — you're right.”