2023-05-18 04:01:21

by Angus Chen

[permalink] [raw]
Subject: [PATCH] init: Add bdev fs printk if mount_block_root failed

Attempt to printk all bdev fstype as root gives the following kernel panic:

[ 1.729006] VFS: Cannot open root device "vda" or unknown-block(253,0): error -19
[ 1.730603] Please append a correct "root=" boot option; here are the available partitions:
[ 1.732323] fd00 256000 vda
[ 1.732329] driver: virtio_blk
[ 1.734194] Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(253,0)
[ 1.734771] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 6.4.0-rc2+ #53
[ 1.735194] Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.10.2-1ubuntu1 04/01/2014
[ 1.735772] Call Trace:
[ 1.735950] <TASK>
[ 1.736113] dump_stack_lvl+0x32/0x50
[ 1.736367] panic+0x108/0x310
[ 1.736570] mount_block_root+0x161/0x310
[ 1.736849] ? rdinit_setup+0x40/0x40
[ 1.737088] prepare_namespace+0x10c/0x180
[ 1.737393] kernel_init_freeable+0x354/0x450
[ 1.737707] ? rest_init+0xd0/0xd0
[ 1.737945] kernel_init+0x16/0x130
[ 1.738196] ret_from_fork+0x1f/0x30

QEMU command line:
"qemu-system-x86_64 -append root=/dev/vda rootfstype=ext4 ..."

This error is because ext4 is not buildin and request ext4 module fail.

As a hint, printk all the bdev fstype available for prompts.

Signed-off-by: Angus Chen <[email protected]>
---
init/do_mounts.c | 13 ++++++++++++-
1 file changed, 12 insertions(+), 1 deletion(-)

diff --git a/init/do_mounts.c b/init/do_mounts.c
index 811e94daf0a8..7fa48590c681 100644
--- a/init/do_mounts.c
+++ b/init/do_mounts.c
@@ -427,8 +427,19 @@ void __init mount_block_root(char *name, int flags)
printk("VFS: Cannot open root device \"%s\" or %s: error %d\n",
root_device_name, b, err);
printk("Please append a correct \"root=\" boot option; here are the available partitions:\n");
-
printk_all_partitions();
+
+ if (root_fs_names)
+ num_fs = list_bdev_fs_names(fs_names, PAGE_SIZE);
+ if (!num_fs)
+ pr_err("Can't find any bdev filesystem to be used for mount!\n");
+ else {
+ pr_err("List of all bdev filesystem:\n");
+ for (i = 0, p = fs_names; i < num_fs; i++, p += strlen(p)+1)
+ pr_err(" %s", p);
+ pr_err("\n");
+ }
+
panic("VFS: Unable to mount root fs on %s", b);
}
if (!(flags & SB_RDONLY)) {
--
2.25.1



2023-05-18 20:33:36

by Andrew Morton

[permalink] [raw]
Subject: Re: [PATCH] init: Add bdev fs printk if mount_block_root failed

On Thu, 18 May 2023 11:53:21 +0800 Angus Chen <[email protected]> wrote:

> Attempt to printk all bdev fstype as root gives the following kernel panic:
>
> [ 1.729006] VFS: Cannot open root device "vda" or unknown-block(253,0): error -19
> [ 1.730603] Please append a correct "root=" boot option; here are the available partitions:
> [ 1.732323] fd00 256000 vda
> [ 1.732329] driver: virtio_blk
> [ 1.734194] Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(253,0)
> [ 1.734771] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 6.4.0-rc2+ #53
> [ 1.735194] Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.10.2-1ubuntu1 04/01/2014
> [ 1.735772] Call Trace:
> [ 1.735950] <TASK>
> [ 1.736113] dump_stack_lvl+0x32/0x50
> [ 1.736367] panic+0x108/0x310
> [ 1.736570] mount_block_root+0x161/0x310
> [ 1.736849] ? rdinit_setup+0x40/0x40
> [ 1.737088] prepare_namespace+0x10c/0x180
> [ 1.737393] kernel_init_freeable+0x354/0x450
> [ 1.737707] ? rest_init+0xd0/0xd0
> [ 1.737945] kernel_init+0x16/0x130
> [ 1.738196] ret_from_fork+0x1f/0x30
>
> QEMU command line:
> "qemu-system-x86_64 -append root=/dev/vda rootfstype=ext4 ..."
>
> This error is because ext4 is not buildin and request ext4 module fail.
>
> As a hint, printk all the bdev fstype available for prompts.
>

Seems reasonable. I reworded the changelog a bit:

: Booting with the QEMU command line:
: "qemu-system-x86_64 -append root=/dev/vda rootfstype=ext4 ..."
: will panic if ext4 is not builtin and a request to load the ext4 module
: fails.
:
: [ 1.729006] VFS: Cannot open root device "vda" or unknown-block(253,0): error -19
: [ 1.730603] Please append a correct "root=" boot option; here are the available partitions:
: [ 1.732323] fd00 256000 vda
: [ 1.732329] driver: virtio_blk
: [ 1.734194] Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(253,0)
: [ 1.734771] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 6.4.0-rc2+ #53
: [ 1.735194] Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.10.2-1ubuntu1 04/01/2014
: [ 1.735772] Call Trace:
: [ 1.735950] <TASK>
: [ 1.736113] dump_stack_lvl+0x32/0x50
: [ 1.736367] panic+0x108/0x310
: [ 1.736570] mount_block_root+0x161/0x310
: [ 1.736849] ? rdinit_setup+0x40/0x40
: [ 1.737088] prepare_namespace+0x10c/0x180
: [ 1.737393] kernel_init_freeable+0x354/0x450
: [ 1.737707] ? rest_init+0xd0/0xd0
: [ 1.737945] kernel_init+0x16/0x130
: [ 1.738196] ret_from_fork+0x1f/0x30
:
: As a hint, print all the bdev fstypes which are available.

> --- a/init/do_mounts.c
> +++ b/init/do_mounts.c
> @@ -427,8 +427,19 @@ void __init mount_block_root(char *name, int flags)
> printk("VFS: Cannot open root device \"%s\" or %s: error %d\n",
> root_device_name, b, err);
> printk("Please append a correct \"root=\" boot option; here are the available partitions:\n");
> -
> printk_all_partitions();
> +
> + if (root_fs_names)
> + num_fs = list_bdev_fs_names(fs_names, PAGE_SIZE);
> + if (!num_fs)
> + pr_err("Can't find any bdev filesystem to be used for mount!\n");
> + else {
> + pr_err("List of all bdev filesystem:\n");
> + for (i = 0, p = fs_names; i < num_fs; i++, p += strlen(p)+1)
> + pr_err(" %s", p);
> + pr_err("\n");
> + }
> +
> panic("VFS: Unable to mount root fs on %s", b);
> }
> if (!(flags & SB_RDONLY)) {

And I added a little fix.

--- a/init/do_mounts.c~init-add-bdev-fs-printk-if-mount_block_root-failed-fix
+++ a/init/do_mounts.c
@@ -434,7 +434,7 @@ retry:
if (!num_fs)
pr_err("Can't find any bdev filesystem to be used for mount!\n");
else {
- pr_err("List of all bdev filesystem:\n");
+ pr_err("List of all bdev filesystems:\n");
for (i = 0, p = fs_names; i < num_fs; i++, p += strlen(p)+1)
pr_err(" %s", p);
pr_err("\n");
_


This function now uses a jumble of printk() and pr_err(). Perhaps
someone will go through and rationalize all of this sometime.


2023-05-18 20:56:21

by Nick Desaulniers

[permalink] [raw]
Subject: Re: [PATCH] init: Add bdev fs printk if mount_block_root failed

On Thu, May 18, 2023 at 1:02 PM Andrew Morton <[email protected]> wrote:
>
> On Thu, 18 May 2023 11:53:21 +0800 Angus Chen <[email protected]> wrote:
>
> > Attempt to printk all bdev fstype as root gives the following kernel panic:
> >
> > [ 1.729006] VFS: Cannot open root device "vda" or unknown-block(253,0): error -19
> > [ 1.730603] Please append a correct "root=" boot option; here are the available partitions:
> > [ 1.732323] fd00 256000 vda
> > [ 1.732329] driver: virtio_blk
> > [ 1.734194] Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(253,0)
> > [ 1.734771] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 6.4.0-rc2+ #53
> > [ 1.735194] Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.10.2-1ubuntu1 04/01/2014
> > [ 1.735772] Call Trace:
> > [ 1.735950] <TASK>
> > [ 1.736113] dump_stack_lvl+0x32/0x50
> > [ 1.736367] panic+0x108/0x310
> > [ 1.736570] mount_block_root+0x161/0x310
> > [ 1.736849] ? rdinit_setup+0x40/0x40
> > [ 1.737088] prepare_namespace+0x10c/0x180
> > [ 1.737393] kernel_init_freeable+0x354/0x450
> > [ 1.737707] ? rest_init+0xd0/0xd0
> > [ 1.737945] kernel_init+0x16/0x130
> > [ 1.738196] ret_from_fork+0x1f/0x30
> >
> > QEMU command line:
> > "qemu-system-x86_64 -append root=/dev/vda rootfstype=ext4 ..."
> >
> > This error is because ext4 is not buildin and request ext4 module fail.

Cool! I'm glad this got picked up; I personally find it confusing when
trying to start from something like an allnoconfig build then start
enabling configs then hitting this panic; it's unclear to users that
they are missing the config for the FS they are trying to load and on
first glance looks like something much worse is going wrong. In that
sense, I view this as a win. Thanks for the patch!

Acked-by: Nick Desaulniers <[email protected]>

I wish the commit message showed an example of the panic after the
patch, to contrast the before vs. after.

> >
> > As a hint, printk all the bdev fstype available for prompts.
> >
>
> Seems reasonable. I reworded the changelog a bit:
>
> : Booting with the QEMU command line:
> : "qemu-system-x86_64 -append root=/dev/vda rootfstype=ext4 ..."
> : will panic if ext4 is not builtin and a request to load the ext4 module
> : fails.
> :
> : [ 1.729006] VFS: Cannot open root device "vda" or unknown-block(253,0): error -19
> : [ 1.730603] Please append a correct "root=" boot option; here are the available partitions:
> : [ 1.732323] fd00 256000 vda
> : [ 1.732329] driver: virtio_blk
> : [ 1.734194] Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(253,0)
> : [ 1.734771] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 6.4.0-rc2+ #53
> : [ 1.735194] Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.10.2-1ubuntu1 04/01/2014
> : [ 1.735772] Call Trace:
> : [ 1.735950] <TASK>
> : [ 1.736113] dump_stack_lvl+0x32/0x50
> : [ 1.736367] panic+0x108/0x310
> : [ 1.736570] mount_block_root+0x161/0x310
> : [ 1.736849] ? rdinit_setup+0x40/0x40
> : [ 1.737088] prepare_namespace+0x10c/0x180
> : [ 1.737393] kernel_init_freeable+0x354/0x450
> : [ 1.737707] ? rest_init+0xd0/0xd0
> : [ 1.737945] kernel_init+0x16/0x130
> : [ 1.738196] ret_from_fork+0x1f/0x30
> :
> : As a hint, print all the bdev fstypes which are available.
>
> > --- a/init/do_mounts.c
> > +++ b/init/do_mounts.c
> > @@ -427,8 +427,19 @@ void __init mount_block_root(char *name, int flags)
> > printk("VFS: Cannot open root device \"%s\" or %s: error %d\n",
> > root_device_name, b, err);
> > printk("Please append a correct \"root=\" boot option; here are the available partitions:\n");
> > -
> > printk_all_partitions();
> > +
> > + if (root_fs_names)
> > + num_fs = list_bdev_fs_names(fs_names, PAGE_SIZE);
> > + if (!num_fs)
> > + pr_err("Can't find any bdev filesystem to be used for mount!\n");
> > + else {
> > + pr_err("List of all bdev filesystem:\n");
> > + for (i = 0, p = fs_names; i < num_fs; i++, p += strlen(p)+1)
> > + pr_err(" %s", p);
> > + pr_err("\n");
> > + }
> > +
> > panic("VFS: Unable to mount root fs on %s", b);
> > }
> > if (!(flags & SB_RDONLY)) {
>
> And I added a little fix.
>
> --- a/init/do_mounts.c~init-add-bdev-fs-printk-if-mount_block_root-failed-fix
> +++ a/init/do_mounts.c
> @@ -434,7 +434,7 @@ retry:
> if (!num_fs)
> pr_err("Can't find any bdev filesystem to be used for mount!\n");
> else {
> - pr_err("List of all bdev filesystem:\n");
> + pr_err("List of all bdev filesystems:\n");
> for (i = 0, p = fs_names; i < num_fs; i++, p += strlen(p)+1)
> pr_err(" %s", p);
> pr_err("\n");
> _
>
>
> This function now uses a jumble of printk() and pr_err(). Perhaps
> someone will go through and rationalize all of this sometime.
>


--
Thanks,
~Nick Desaulniers

2023-05-19 06:32:43

by Angus Chen

[permalink] [raw]
Subject: RE: [PATCH] init: Add bdev fs printk if mount_block_root failed



> -----Original Message-----
> From: Andrew Morton <[email protected]>
> Sent: Friday, May 19, 2023 4:02 AM
> To: Angus Chen <[email protected]>
> Cc: [email protected]; [email protected]; [email protected];
> [email protected]; [email protected]; [email protected];
> [email protected]; Al Viro <[email protected]>
> Subject: Re: [PATCH] init: Add bdev fs printk if mount_block_root failed
>
> On Thu, 18 May 2023 11:53:21 +0800 Angus Chen
> <[email protected]> wrote:
>
> > Attempt to printk all bdev fstype as root gives the following kernel panic:
> >
> > [ 1.729006] VFS: Cannot open root device "vda" or unknown-block(253,0):
> error -19
> > [ 1.730603] Please append a correct "root=" boot option; here are the
> available partitions:
> > [ 1.732323] fd00 256000 vda
> > [ 1.732329] driver: virtio_blk
> > [ 1.734194] Kernel panic - not syncing: VFS: Unable to mount root fs on
> unknown-block(253,0)
> > [ 1.734771] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 6.4.0-rc2+ #53
> > [ 1.735194] Hardware name: QEMU Standard PC (Q35 + ICH9, 2009),
> BIOS 1.10.2-1ubuntu1 04/01/2014
> > [ 1.735772] Call Trace:
> > [ 1.735950] <TASK>
> > [ 1.736113] dump_stack_lvl+0x32/0x50
> > [ 1.736367] panic+0x108/0x310
> > [ 1.736570] mount_block_root+0x161/0x310
> > [ 1.736849] ? rdinit_setup+0x40/0x40
> > [ 1.737088] prepare_namespace+0x10c/0x180
> > [ 1.737393] kernel_init_freeable+0x354/0x450
> > [ 1.737707] ? rest_init+0xd0/0xd0
> > [ 1.737945] kernel_init+0x16/0x130
> > [ 1.738196] ret_from_fork+0x1f/0x30
> >
> > QEMU command line:
> > "qemu-system-x86_64 -append root=/dev/vda rootfstype=ext4 ..."
> >
> > This error is because ext4 is not buildin and request ext4 module fail.
> >
> > As a hint, printk all the bdev fstype available for prompts.
> >
>
> Seems reasonable. I reworded the changelog a bit:
>
> : Booting with the QEMU command line:
> : "qemu-system-x86_64 -append root=/dev/vda rootfstype=ext4 ..."
> : will panic if ext4 is not builtin and a request to load the ext4 module
> : fails.
> :
> : [ 1.729006] VFS: Cannot open root device "vda" or unknown-block(253,0):
> error -19
> : [ 1.730603] Please append a correct "root=" boot option; here are the
> available partitions:
> : [ 1.732323] fd00 256000 vda
> : [ 1.732329] driver: virtio_blk
> : [ 1.734194] Kernel panic - not syncing: VFS: Unable to mount root fs on
> unknown-block(253,0)
> : [ 1.734771] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 6.4.0-rc2+ #53
> : [ 1.735194] Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS
> 1.10.2-1ubuntu1 04/01/2014
> : [ 1.735772] Call Trace:
> : [ 1.735950] <TASK>
> : [ 1.736113] dump_stack_lvl+0x32/0x50
> : [ 1.736367] panic+0x108/0x310
> : [ 1.736570] mount_block_root+0x161/0x310
> : [ 1.736849] ? rdinit_setup+0x40/0x40
> : [ 1.737088] prepare_namespace+0x10c/0x180
> : [ 1.737393] kernel_init_freeable+0x354/0x450
> : [ 1.737707] ? rest_init+0xd0/0xd0
> : [ 1.737945] kernel_init+0x16/0x130
> : [ 1.738196] ret_from_fork+0x1f/0x30
> :
> : As a hint, print all the bdev fstypes which are available.
Thank you for your reply. more readable now.
>
> > --- a/init/do_mounts.c
> > +++ b/init/do_mounts.c
> > @@ -427,8 +427,19 @@ void __init mount_block_root(char *name, int flags)
> > printk("VFS: Cannot open root device \"%s\" or %s: error %d\n",
> > root_device_name, b, err);
> > printk("Please append a correct \"root=\" boot option; here are the
> available partitions:\n");
> > -
> > printk_all_partitions();
> > +
> > + if (root_fs_names)
> > + num_fs = list_bdev_fs_names(fs_names, PAGE_SIZE);
> > + if (!num_fs)
> > + pr_err("Can't find any bdev filesystem to be used for mount!\n");
> > + else {
> > + pr_err("List of all bdev filesystem:\n");
> > + for (i = 0, p = fs_names; i < num_fs; i++, p += strlen(p)+1)
> > + pr_err(" %s", p);
> > + pr_err("\n");
> > + }
> > +
> > panic("VFS: Unable to mount root fs on %s", b);
> > }
> > if (!(flags & SB_RDONLY)) {
>
> And I added a little fix.
>
> --- a/init/do_mounts.c~init-add-bdev-fs-printk-if-mount_block_root-failed-fix
> +++ a/init/do_mounts.c
> @@ -434,7 +434,7 @@ retry:
> if (!num_fs)
> pr_err("Can't find any bdev filesystem to be used for mount!\n");
> else {
> - pr_err("List of all bdev filesystem:\n");
> + pr_err("List of all bdev filesystems:\n");
> for (i = 0, p = fs_names; i < num_fs; i++, p += strlen(p)+1)
> pr_err(" %s", p);
> pr_err("\n");
> _
>
>
> This function now uses a jumble of printk() and pr_err(). Perhaps
> someone will go through and rationalize all of this sometime.
Yes, I took the printk first but got a warning from checkpatch.pl.
Thanks.

2023-05-19 07:00:50

by Angus Chen

[permalink] [raw]
Subject: RE: [PATCH] init: Add bdev fs printk if mount_block_root failed



> -----Original Message-----
> From: Nick Desaulniers <[email protected]>
> Sent: Friday, May 19, 2023 4:36 AM
> To: Andrew Morton <[email protected]>; Angus Chen
> <[email protected]>
> Cc: [email protected]; [email protected]; [email protected];
> [email protected]; [email protected]; [email protected]; Al Viro
> <[email protected]>
> Subject: Re: [PATCH] init: Add bdev fs printk if mount_block_root failed
>
> On Thu, May 18, 2023 at 1:02 PM Andrew Morton <[email protected]>
> wrote:
> >
> > On Thu, 18 May 2023 11:53:21 +0800 Angus Chen
> <[email protected]> wrote:
> >
> > > Attempt to printk all bdev fstype as root gives the following kernel panic:
> > >
> > > [ 1.729006] VFS: Cannot open root device "vda" or
> unknown-block(253,0): error -19
> > > [ 1.730603] Please append a correct "root=" boot option; here are the
> available partitions:
> > > [ 1.732323] fd00 256000 vda
> > > [ 1.732329] driver: virtio_blk
> > > [ 1.734194] Kernel panic - not syncing: VFS: Unable to mount root fs on
> unknown-block(253,0)
> > > [ 1.734771] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 6.4.0-rc2+ #53
> > > [ 1.735194] Hardware name: QEMU Standard PC (Q35 + ICH9, 2009),
> BIOS 1.10.2-1ubuntu1 04/01/2014
> > > [ 1.735772] Call Trace:
> > > [ 1.735950] <TASK>
> > > [ 1.736113] dump_stack_lvl+0x32/0x50
> > > [ 1.736367] panic+0x108/0x310
> > > [ 1.736570] mount_block_root+0x161/0x310
> > > [ 1.736849] ? rdinit_setup+0x40/0x40
> > > [ 1.737088] prepare_namespace+0x10c/0x180
> > > [ 1.737393] kernel_init_freeable+0x354/0x450
> > > [ 1.737707] ? rest_init+0xd0/0xd0
> > > [ 1.737945] kernel_init+0x16/0x130
> > > [ 1.738196] ret_from_fork+0x1f/0x30
> > >
> > > QEMU command line:
> > > "qemu-system-x86_64 -append root=/dev/vda rootfstype=ext4 ..."
> > >
> > > This error is because ext4 is not buildin and request ext4 module fail.
>
> Cool! I'm glad this got picked up; I personally find it confusing when
> trying to start from something like an allnoconfig build then start
> enabling configs then hitting this panic; it's unclear to users that
> they are missing the config for the FS they are trying to load and on
> first glance looks like something much worse is going wrong. In that
> sense, I view this as a win. Thanks for the patch!
Thank you, you are welcome.
>
> Acked-by: Nick Desaulniers <[email protected]>
>
> I wish the commit message showed an example of the panic after the
> patch, to contrast the before vs. after.
en ,Did a need to send a v2 or just let it go this time?
The information is print:
[ 1.570841] VFS: Cannot open root device "vda" or unknown-block(253,0): error -19
[ 1.571513] Please append a correct "root=" boot option; here are the available partitions:
[ 1.572056] fd00 256000 vda
[ 1.572058] driver: virtio_blk
[ 1.572525] List of all bdev filesystem:
[ 1.572780] ext2
[ 1.572781]
[ 1.573027] Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(253,0)

Or:
[ 1.510467] VFS: Cannot open root device "vda" or unknown-block(253,0): error -19
[ 1.512033] Please append a correct "root=" boot option; here are the available partitions:
[ 1.513724] fd00 256000 vda
[ 1.513731] driver: virtio_blk
[ 1.514280] Can't find any bdev filesystem!
[ 1.514540] Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(253,0)
>
> > >
> > > As a hint, printk all the bdev fstype available for prompts.
> > >
> >
> > Seems reasonable. I reworded the changelog a bit:
> >
> > : Booting with the QEMU command line:
> > : "qemu-system-x86_64 -append root=/dev/vda rootfstype=ext4 ..."
> > : will panic if ext4 is not builtin and a request to load the ext4 module
> > : fails.
> > :
> > : [ 1.729006] VFS: Cannot open root device "vda" or unknown-block(253,0):
> error -19
> > : [ 1.730603] Please append a correct "root=" boot option; here are the
> available partitions:
> > : [ 1.732323] fd00 256000 vda
> > : [ 1.732329] driver: virtio_blk
> > : [ 1.734194] Kernel panic - not syncing: VFS: Unable to mount root fs on
> unknown-block(253,0)
> > : [ 1.734771] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 6.4.0-rc2+ #53
> > : [ 1.735194] Hardware name: QEMU Standard PC (Q35 + ICH9, 2009),
> BIOS 1.10.2-1ubuntu1 04/01/2014
> > : [ 1.735772] Call Trace:
> > : [ 1.735950] <TASK>
> > : [ 1.736113] dump_stack_lvl+0x32/0x50
> > : [ 1.736367] panic+0x108/0x310
> > : [ 1.736570] mount_block_root+0x161/0x310
> > : [ 1.736849] ? rdinit_setup+0x40/0x40
> > : [ 1.737088] prepare_namespace+0x10c/0x180
> > : [ 1.737393] kernel_init_freeable+0x354/0x450
> > : [ 1.737707] ? rest_init+0xd0/0xd0
> > : [ 1.737945] kernel_init+0x16/0x130
> > : [ 1.738196] ret_from_fork+0x1f/0x30
> > :
> > : As a hint, print all the bdev fstypes which are available.
> >
> > > --- a/init/do_mounts.c
> > > +++ b/init/do_mounts.c
> > > @@ -427,8 +427,19 @@ void __init mount_block_root(char *name, int
> flags)
> > > printk("VFS: Cannot open root device \"%s\" or %s:
> error %d\n",
> > > root_device_name, b, err);
> > > printk("Please append a correct \"root=\" boot option;
> here are the available partitions:\n");
> > > -
> > > printk_all_partitions();
> > > +
> > > + if (root_fs_names)
> > > + num_fs = list_bdev_fs_names(fs_names,
> PAGE_SIZE);
> > > + if (!num_fs)
> > > + pr_err("Can't find any bdev filesystem to be used
> for mount!\n");
> > > + else {
> > > + pr_err("List of all bdev filesystem:\n");
> > > + for (i = 0, p = fs_names; i < num_fs; i++, p +=
> strlen(p)+1)
> > > + pr_err(" %s", p);
> > > + pr_err("\n");
> > > + }
> > > +
> > > panic("VFS: Unable to mount root fs on %s", b);
> > > }
> > > if (!(flags & SB_RDONLY)) {
> >
> > And I added a little fix.
> >
> > --- a/init/do_mounts.c~init-add-bdev-fs-printk-if-mount_block_root-failed-fix
> > +++ a/init/do_mounts.c
> > @@ -434,7 +434,7 @@ retry:
> > if (!num_fs)
> > pr_err("Can't find any bdev filesystem to be
> used for mount!\n");
> > else {
> > - pr_err("List of all bdev filesystem:\n");
> > + pr_err("List of all bdev filesystems:\n");
> > for (i = 0, p = fs_names; i < num_fs; i++, p +=
> strlen(p)+1)
> > pr_err(" %s", p);
> > pr_err("\n");
> > _
> >
> >
> > This function now uses a jumble of printk() and pr_err(). Perhaps
> > someone will go through and rationalize all of this sometime.
> >
>
>
> --
> Thanks,
> ~Nick Desaulniers

2023-05-19 16:07:33

by Nick Desaulniers

[permalink] [raw]
Subject: Re: [PATCH] init: Add bdev fs printk if mount_block_root failed

On Thu, May 18, 2023 at 11:34 PM Angus Chen <[email protected]> wrote:
>
>
>
> > -----Original Message-----
> > From: Nick Desaulniers <[email protected]>
> > Sent: Friday, May 19, 2023 4:36 AM
> > To: Andrew Morton <[email protected]>; Angus Chen
> > <[email protected]>
> > Cc: [email protected]; [email protected]; [email protected];
> > [email protected]; [email protected]; [email protected]; Al Viro
> > <[email protected]>
> > Subject: Re: [PATCH] init: Add bdev fs printk if mount_block_root failed
> >
> > I wish the commit message showed an example of the panic after the
> > patch, to contrast the before vs. after.
> en ,Did a need to send a v2 or just let it go this time?

Nah, it's fine. LGTM

> The information is print:
> [ 1.570841] VFS: Cannot open root device "vda" or unknown-block(253,0): error -19
> [ 1.571513] Please append a correct "root=" boot option; here are the available partitions:
> [ 1.572056] fd00 256000 vda
> [ 1.572058] driver: virtio_blk
> [ 1.572525] List of all bdev filesystem:
> [ 1.572780] ext2
> [ 1.572781]
> [ 1.573027] Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(253,0)
>
> Or:
> [ 1.510467] VFS: Cannot open root device "vda" or unknown-block(253,0): error -19
> [ 1.512033] Please append a correct "root=" boot option; here are the available partitions:
> [ 1.513724] fd00 256000 vda
> [ 1.513731] driver: virtio_blk
> [ 1.514280] Can't find any bdev filesystem!
> [ 1.514540] Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(253,0)

--
Thanks,
~Nick Desaulniers