init: Add bdev fs printk if mount_block_root failed

Message ID 20230518035321.1672-1-angus.chen@jaguarmicro.com
State New
Headers
Series init: Add bdev fs printk if mount_block_root failed |

Commit Message

Angus Chen May 18, 2023, 3:53 a.m. UTC
  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 <angus.chen@jaguarmicro.com>
---
 init/do_mounts.c | 13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)
  

Comments

Andrew Morton May 18, 2023, 8:02 p.m. UTC | #1
On Thu, 18 May 2023 11:53:21 +0800 Angus Chen <angus.chen@jaguarmicro.com> 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");
  
Nick Desaulniers May 18, 2023, 8:35 p.m. UTC | #2
On Thu, May 18, 2023 at 1:02 PM Andrew Morton <akpm@linux-foundation.org> wrote:
>
> On Thu, 18 May 2023 11:53:21 +0800 Angus Chen <angus.chen@jaguarmicro.com> 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 <ndesaulniers@google.com>

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.
>
  
Angus Chen May 19, 2023, 6:23 a.m. UTC | #3
> -----Original Message-----
> From: Andrew Morton <akpm@linux-foundation.org>
> Sent: Friday, May 19, 2023 4:02 AM
> To: Angus Chen <angus.chen@jaguarmicro.com>
> Cc: masahiroy@kernel.org; vbabka@suse.cz; peterz@infradead.org;
> ndesaulniers@google.com; paulmck@kernel.org; rppt@kernel.org;
> linux-kernel@vger.kernel.org; Al Viro <viro@zeniv.linux.org.uk>
> Subject: Re: [PATCH] init: Add bdev fs printk if mount_block_root failed
> 
> On Thu, 18 May 2023 11:53:21 +0800 Angus Chen
> <angus.chen@jaguarmicro.com> 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.
  
Angus Chen May 19, 2023, 6:34 a.m. UTC | #4
> -----Original Message-----
> From: Nick Desaulniers <ndesaulniers@google.com>
> Sent: Friday, May 19, 2023 4:36 AM
> To: Andrew Morton <akpm@linux-foundation.org>; Angus Chen
> <angus.chen@jaguarmicro.com>
> Cc: masahiroy@kernel.org; vbabka@suse.cz; peterz@infradead.org;
> paulmck@kernel.org; rppt@kernel.org; linux-kernel@vger.kernel.org; Al Viro
> <viro@zeniv.linux.org.uk>
> Subject: Re: [PATCH] init: Add bdev fs printk if mount_block_root failed
> 
> On Thu, May 18, 2023 at 1:02 PM Andrew Morton <akpm@linux-foundation.org>
> wrote:
> >
> > On Thu, 18 May 2023 11:53:21 +0800 Angus Chen
> <angus.chen@jaguarmicro.com> 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 <ndesaulniers@google.com>
> 
> 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
  
Nick Desaulniers May 19, 2023, 3:58 p.m. UTC | #5
On Thu, May 18, 2023 at 11:34 PM Angus Chen <angus.chen@jaguarmicro.com> wrote:
>
>
>
> > -----Original Message-----
> > From: Nick Desaulniers <ndesaulniers@google.com>
> > Sent: Friday, May 19, 2023 4:36 AM
> > To: Andrew Morton <akpm@linux-foundation.org>; Angus Chen
> > <angus.chen@jaguarmicro.com>
> > Cc: masahiroy@kernel.org; vbabka@suse.cz; peterz@infradead.org;
> > paulmck@kernel.org; rppt@kernel.org; linux-kernel@vger.kernel.org; Al Viro
> > <viro@zeniv.linux.org.uk>
> > 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)
  

Patch

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)) {