From: David Sterba <dsterba@suse.cz>
To: Johannes Thumshirn <johannes.thumshirn@wdc.com>
Cc: David Sterba <dsterba@suse.com>,
Naohiro Aota <naohiro.aota@wdc.com>,
linux-btrfs@vger.kernel.org
Subject: Re: [PATCH v2 1/2] btrfs: zoned: sanity check zone type
Date: Thu, 13 May 2021 00:30:28 +0200 [thread overview]
Message-ID: <20210512223028.GC7604@twin.jikos.cz> (raw)
In-Reply-To: <20210504083024.28072-2-johannes.thumshirn@wdc.com>
On Tue, May 04, 2021 at 10:30:23AM +0200, Johannes Thumshirn wrote:
> From: Naohiro Aota <naohiro.aota@wdc.com>
>
> The xfstests test case generic/475 creates a dm-linear device that gets
> changed to a dm-error device. This leads to errors in loading the block
> group's zone information when running on a zoned file system, ultimately
> resulting in a list corruption. When running on a kernel with list
> debugging enabled this leads to the following crash.
>
> BTRFS: error (device dm-2) in cleanup_transaction:1953: errno=-5 IO failure
> kernel BUG at lib/list_debug.c:54!
> invalid opcode: 0000 [#1] SMP PTI
> CPU: 1 PID: 2433 Comm: umount Tainted: G W 5.12.0+ #1018
> RIP: 0010:__list_del_entry_valid.cold+0x1d/0x47
> RSP: 0018:ffffc90001473df0 EFLAGS: 00010296
> RAX: 0000000000000054 RBX: ffff8881038fd000 RCX: ffffc90001473c90
> RDX: 0000000100001a31 RSI: 0000000000000003 RDI: 0000000000000003
> RBP: ffff888308871108 R08: 0000000000000003 R09: 0000000000000001
> R10: 3961373532383838 R11: 6666666620736177 R12: ffff888308871000
> R13: ffff8881038fd088 R14: ffff8881038fdc78 R15: dead000000000100
> FS: 00007f353c9b1540(0000) GS:ffff888627d00000(0000) knlGS:0000000000000000
> CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
> CR2: 00007f353cc2c710 CR3: 000000018e13c000 CR4: 00000000000006a0
> DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
> DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
> Call Trace:
> btrfs_free_block_groups+0xc9/0x310 [btrfs]
> close_ctree+0x2ee/0x31a [btrfs]
> ? call_rcu+0x8f/0x270
> ? mutex_lock+0x1c/0x40
> generic_shutdown_super+0x67/0x100
> kill_anon_super+0x14/0x30
> btrfs_kill_super+0x12/0x20 [btrfs]
> deactivate_locked_super+0x31/0x90
> cleanup_mnt+0x13e/0x1b0
> task_work_run+0x63/0xb0
> exit_to_user_mode_loop+0xd9/0xe0
> exit_to_user_mode_prepare+0x3e/0x60
> syscall_exit_to_user_mode+0x1d/0x50
> entry_SYSCALL_64_after_hwframe+0x44/0xae
>
> As dm-error has no support for zones, btrfs will run it's zone emulation
> mode on this device. The zone emulation mode emulates conventional zones,
> so bail out if the zone bitmap that gets populated on mount sees the zone
> as sequential while we're thinking it's a conventional zone when creating
> a block group.
>
> Note: this scenario is unlikely in a real wold application and can only
> happen by this (ab)use of device-mapper targets.
>
> Signed-off-by: Naohiro Aota <naohiro.aota@wdc.com>
> [ jth: commit message and error messages ]
> Signed-off-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
> ---
> fs/btrfs/zoned.c | 9 +++++++++
> 1 file changed, 9 insertions(+)
>
> diff --git a/fs/btrfs/zoned.c b/fs/btrfs/zoned.c
> index 70b23a0d03b1..6edf88580f47 100644
> --- a/fs/btrfs/zoned.c
> +++ b/fs/btrfs/zoned.c
> @@ -1126,6 +1126,15 @@ int btrfs_load_block_group_zone_info(struct btrfs_block_group *cache, bool new)
> goto out;
> }
>
> + if (zone.type == BLK_ZONE_TYPE_CONVENTIONAL) {
> + btrfs_err(fs_info,
> + "zoned: unexpected conventional zone: %llu on device %s (devid %llu)",
> + zone.start << SECTOR_SHIFT,
> + rcu_str_deref(device->name), device->devid);
> + ret = -EIO;
I messed up the patch queues when sending the pull request and the V1
got merged, without the message. I got this diff after rebase of
misc-next
--- a/fs/btrfs/zoned.c
+++ b/fs/btrfs/zoned.c
@@ -1127,6 +1127,10 @@ int btrfs_load_block_group_zone_info(struct btrfs_block_group *cache, bool new)
}
if (zone.type == BLK_ZONE_TYPE_CONVENTIONAL) {
+ btrfs_err_in_rcu(fs_info,
+ "zoned: unexpected conventional zone %llu on device %s (devid %llu)",
+ zone.start << SECTOR_SHIFT,
+ rcu_str_deref(device->name), device->devid);
ret = -EIO;
goto out;
---
I can update the changelog to describe what happened and that we want
this message and you don't need to resend anything, or you can send it
but because that it's my fault I'd rather do that but wanted to let you
know.
next prev parent reply other threads:[~2021-05-12 23:19 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-05-04 8:30 [PATCH v2 0/2] btrfs: zoned: two fixes for generic/475 Johannes Thumshirn
2021-05-04 8:30 ` [PATCH v2 1/2] btrfs: zoned: sanity check zone type Johannes Thumshirn
2021-05-05 22:30 ` David Sterba
2021-05-12 22:30 ` David Sterba [this message]
2021-05-17 7:11 ` Johannes Thumshirn
2021-05-04 8:30 ` [PATCH v2 2/2] btrfs: zoned: bail out if we can't read a reliable write pointer Johannes Thumshirn
2021-05-05 22:52 ` David Sterba
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210512223028.GC7604@twin.jikos.cz \
--to=dsterba@suse.cz \
--cc=dsterba@suse.com \
--cc=johannes.thumshirn@wdc.com \
--cc=linux-btrfs@vger.kernel.org \
--cc=naohiro.aota@wdc.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox