Re: [PATCH 10/16] show partitions on mount error

!MAILaRCHIVE_VOTE_RePLACE
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
To: Andrew Morton <akpm@...>
Cc: Linux Kernel Mailing List <linux-kernel@...>
Date: Monday, April 2, 2007 - 3:01 am

Hi,


On Apr 1 2007 22:47, Andrew Morton wrote:

Seems reasonable.
I have done some additional cleanups, see patch below.



Loaded with PXELINUX...

	LABEL l
		KERNEL bzImage
		APPEND root=/dev/foobar

or root=/dev/sdb both produce:

[...]
VFS: Cannot open root device "foobar" or unknown-block(0,0)
Please append a correct "root=" boot option; here are the available partitions:
0800    8388608 sda driver: sd
  0801     192748 sda1
  0802    8193150 sda2
0810    4194304 sdb driver: sd
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)

With root=/dev/sdb, the list of possible filesystems is also displayed
(a patch that was merged a (long)while back).


---

Integrated __init annotation, and deindented the loop by one level.
Replaces original patch.

Signed-off-by: Jan Engelhardt <jengelh@gmx.de>

Index: linux-2.6.21-rc5/block/genhd.c
===================================================================
--- linux-2.6.21-rc5.orig/block/genhd.c
+++ linux-2.6.21-rc5/block/genhd.c
@@ -215,6 +215,59 @@ struct gendisk *get_gendisk(dev_t dev, i
 	return  kobj ? to_disk(kobj) : NULL;
 }
 
+/*
+ * printk a full list of all partitions - intended for
+ * places where the root filesystem can't be mounted and thus
+ * to give the victim some idea of what went wrong
+ */
+void __init printk_all_partitions(void)
+{
+	int n;
+	struct gendisk *sgp;
+	mutex_lock(&block_subsys_lock);
+
+	/* For each block device... */
+	list_for_each_entry(sgp, &block_subsys.kset.list, kobj.entry) {
+		char buf[BDEVNAME_SIZE];
+		/*
+		 * Don't show empty devices or things that have been surpressed
+		 */
+		if (get_capacity(sgp) == 0 ||
+		  (sgp->flags & GENHD_FL_SUPPRESS_PARTITION_INFO))
+			continue;
+
+		/*
+		 * Note, unlike /proc/partitions, I am showing the numbers in
+		 * hex - the same format as the root= option takes.
+		 */
+		printk("%02x%02x %10llu %s",
+		       sgp->major, sgp->first_minor,
+		       (unsigned long long)get_capacity(sgp) >> 1,
+		       disk_name(sgp, 0, buf));
+		if (sgp->driverfs_dev != NULL &&
+		  sgp->driverfs_dev->driver != NULL)
+			printk(" driver: %s\n",
+			       sgp->driverfs_dev->driver->name);
+		else
+			printk(" (driver?)\n");
+
+		/* now show the partitions */
+		for (n = 0; n < sgp->minors - 1; ++n) {
+			if (sgp->part[n] == NULL)
+				continue;
+			if (sgp->part[n]->nr_sects == 0)
+				continue;
+			printk("  %02x%02x %10llu %s\n",
+			       sgp->major, n + 1 + sgp->first_minor,
+			       (unsigned long long)sgp->part[n]->nr_sects >> 1,
+			       disk_name(sgp, n + 1, buf));
+		} /* partition subloop */
+	} /* Block device loop */
+
+	mutex_unlock(&block_subsys_lock);
+	return;
+}
+
 #ifdef CONFIG_PROC_FS
 /* iterator */
 static void *part_start(struct seq_file *part, loff_t *pos)
Index: linux-2.6.21-rc5/include/linux/genhd.h
===================================================================
--- linux-2.6.21-rc5.orig/include/linux/genhd.h
+++ linux-2.6.21-rc5/include/linux/genhd.h
@@ -413,6 +413,7 @@ char *disk_name (struct gendisk *hd, int
 extern int rescan_partitions(struct gendisk *disk, struct block_device *bdev);
 extern void add_partition(struct gendisk *, int, sector_t, sector_t, int);
 extern void delete_partition(struct gendisk *, int);
+extern void printk_all_partitions(void);
 
 extern struct gendisk *alloc_disk_node(int minors, int node_id);
 extern struct gendisk *alloc_disk(int minors);
Index: linux-2.6.21-rc5/init/do_mounts.c
===================================================================
--- linux-2.6.21-rc5.orig/init/do_mounts.c
+++ linux-2.6.21-rc5/init/do_mounts.c
@@ -7,6 +7,7 @@
 #include <linux/root_dev.h>
 #include <linux/security.h>
 #include <linux/delay.h>
+#include <linux/genhd.h>
 #include <linux/mount.h>
 #include <linux/device.h>
 
@@ -307,17 +308,21 @@ retry:
 	        /*
 		 * Allow the user to distinguish between failed sys_open
 		 * and bad superblock on root device.
+		 * and give them a list of the available devices
 		 */
 #ifdef CONFIG_BLOCK
 		__bdevname(ROOT_DEV, b);
 #endif
 		printk("VFS: Cannot open root device \"%s\" or %s\n",
 				root_device_name, b);
-		printk("Please append a correct \"root=\" boot option\n");
+		printk("Please append a correct \"root=\" boot option; here are the available partitions:\n");
 
+		printk_all_partitions();
 		panic("VFS: Unable to mount root fs on %s", b);
 	}
 
+	printk("List of all partitions:\n");
+	printk_all_partitions();
 	printk("No filesystem could mount root, tried: ");
 	for (p = fs_names; *p; p += strlen(p)+1)
 		printk(" %s", p);
#<EOF>
-
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
[PATCH 0/16] Assorted patches, Jan Engelhardt, (Sun Apr 1, 2:13 pm)
[PATCH 16/16] warn-on-kthread-name-truncation.diff, Jan Engelhardt, (Sun Apr 1, 2:18 pm)
Re: [PATCH 16/16] warn-on-kthread-name-truncation.diff, Andrew Morton, (Mon Apr 2, 2:00 am)
Re: [PATCH 16/16] warn-on-kthread-name-truncation.diff, Jan Engelhardt, (Mon Apr 2, 2:51 am)
[PATCH 15/16] use-regular-eth-suffix.diff, Jan Engelhardt, (Sun Apr 1, 2:18 pm)
Re: [PATCH 15/16] use-regular-eth-suffix.diff, Kyle Moffett, (Sun Apr 1, 2:42 pm)
Re: [PATCH 15/16] use-regular-eth-suffix.diff, Jouni Malinen, (Sun Apr 1, 9:40 pm)
[PATCH 14/16] kconfig-allow-override.diff, Jan Engelhardt, (Sun Apr 1, 2:17 pm)
Re: [PATCH 14/16] kconfig-allow-override.diff, Sam Ravnborg, (Sun Apr 1, 2:44 pm)
Re: [PATCH 14/16] kconfig-allow-override.diff, Randy Dunlap, (Sun Apr 1, 3:09 pm)
[PATCH 13/16] show-pipesize-in-stat.diff, Jan Engelhardt, (Sun Apr 1, 2:17 pm)
Re: [PATCH 13/16] show-pipesize-in-stat.diff, Eric Dumazet, (Mon Apr 2, 6:41 am)
Re: [PATCH 13/16] show-pipesize-in-stat.diff, Jan Engelhardt, (Tue Apr 3, 8:48 pm)
Re: [PATCH 13/16] show-pipesize-in-stat.diff, Eric Dumazet, (Wed Apr 4, 1:03 am)
Re: [PATCH 13/16] show-pipesize-in-stat.diff, Jan Engelhardt, (Tue Apr 17, 4:05 am)
Re: [PATCH 13/16] show-pipesize-in-stat.diff, Andrew Morton, (Mon Apr 2, 1:58 am)
Re: [PATCH 13/16] show-pipesize-in-stat.diff, Jan Engelhardt, (Mon Apr 2, 2:48 am)
[PATCH 12/16] cifs-use-mutex.diff, Jan Engelhardt, (Sun Apr 1, 2:16 pm)
Re: [PATCH 12/16] cifs-use-mutex.diff, Roland Dreier, (Mon Apr 2, 1:36 am)
[PATCH 11/16] samba-eintr-fix.diff, Jan Engelhardt, (Sun Apr 1, 2:16 pm)
Re: [PATCH 11/16] samba-eintr-fix.diff, Andrew Morton, (Mon Apr 2, 1:53 am)
Re: [PATCH 11/16] samba-eintr-fix.diff, Dave Jones, (Sun Apr 1, 3:09 pm)
Re: [PATCH 11/16] samba-eintr-fix.diff, Jan Engelhardt, (Sun Apr 1, 3:28 pm)
Re: [PATCH 11/16] samba-eintr-fix.diff, Dave Jones, (Sun Apr 1, 3:42 pm)
[PATCH 10/16] show-partitions-on-mount-error.diff, Jan Engelhardt, (Sun Apr 1, 2:15 pm)
Re: [PATCH 10/16] show-partitions-on-mount-error.diff, Pavel Machek, (Mon Apr 2, 2:59 pm)
Re: [PATCH 10/16] show-partitions-on-mount-error.diff, Jan Engelhardt, (Tue Apr 3, 8:42 pm)
Re: [PATCH 10/16] show-partitions-on-mount-error.diff, Andrew Morton, (Mon Apr 2, 1:48 am)
Re: [PATCH 10/16] show partitions on mount error, Jan Engelhardt, (Mon Apr 2, 3:01 am)
Re: [PATCH 10/16] show-partitions-on-mount-error.diff, Andrew Morton, (Mon Apr 2, 1:47 am)
[PATCH 09/16] zlib-decompression-status.diff, Jan Engelhardt, (Sun Apr 1, 2:15 pm)
Re: [PATCH 09/16] zlib-decompression-status.diff, Jan Engelhardt, (Mon Apr 2, 2:50 pm)
[PATCH 08/16] console-printk-level.diff, Jan Engelhardt, (Sun Apr 1, 2:15 pm)
Re: [PATCH 08/16] console-printk-level.diff, Randy Dunlap, (Sun Apr 1, 3:07 pm)
[PATCH 07/16] kconfig-dynamic-frequency.diff, Jan Engelhardt, (Sun Apr 1, 2:15 pm)
Re: [PATCH 07/16] kconfig-dynamic-frequency.diff, Kyle Moffett, (Sun Apr 1, 2:39 pm)
Re: [PATCH 07/16] kconfig-dynamic-frequency.diff, Jan Engelhardt, (Sun Apr 1, 2:42 pm)
Re: [PATCH 07/16] kconfig-dynamic-frequency.diff, Kyle Moffett, (Sun Apr 1, 2:52 pm)
Re: [PATCH 07/16] kconfig-dynamic-frequency.diff, Robert P. J. Day, (Sun Apr 1, 4:22 pm)
Re: [PATCH 07/16] kconfig-dynamic-frequency.diff, Jan Engelhardt, (Sun Apr 1, 3:01 pm)
[PATCH], Kyle Moffett, (Sun Apr 1, 3:42 pm)
Re: [PATCH], Jan Engelhardt, (Sun Apr 1, 3:47 pm)
Re: [PATCH], Kyle Moffett, (Sun Apr 1, 4:07 pm)
Re: [PATCH], Andi Kleen, (Sun Apr 1, 7:03 pm)
[PATCH 06/16] isofs-add-write-bit.diff, Jan Engelhardt, (Sun Apr 1, 2:15 pm)
[PATCH 5/16] fix-kthread-niceness.diff, Jan Engelhardt, (Sun Apr 1, 2:14 pm)
Re: [PATCH 5/16] fix-kthread-niceness.diff, Andrew Morton, (Mon Apr 2, 1:39 am)
[PATCH 4/16] vt-printk-color.diff, Jan Engelhardt, (Sun Apr 1, 2:14 pm)
[PATCH 3/16] vt-underline-color.diff, Jan Engelhardt, (Sun Apr 1, 2:14 pm)
Re: [PATCH 3/16] vt-underline-color.diff, Andrew Morton, (Mon Apr 2, 1:37 am)
Re: [PATCH 3/16] vt-underline-color.diff, Antonino A. Daplas, (Mon Apr 2, 2:57 am)
[PATCH 2/16] vt-pure-colors.diff, Jan Engelhardt, (Sun Apr 1, 2:14 pm)
Re: [PATCH 2/16] vt-pure-colors.diff, James Bruce, (Sun Apr 1, 2:39 pm)
Re: [PATCH 2/16] vt-pure-colors.diff, Antonino A. Daplas, (Mon Apr 2, 2:49 am)
Re: [PATCH 2/16] vt-pure-colors.diff, Jan Engelhardt, (Mon Apr 2, 3:04 am)
Re: [PATCH 2/16] vt-pure-colors.diff, Antonino A. Daplas, (Mon Apr 2, 3:50 am)
Re: [PATCH 2/16] vt-pure-colors.diff, Jan Engelhardt, (Mon Apr 2, 4:01 am)
[PATCH 1/16] vt-sysfs-for-colors.diff, Jan Engelhardt, (Sun Apr 1, 2:13 pm)
Re: [PATCH 1/16] vt-sysfs-for-colors.diff, Antonino A. Daplas, (Mon Apr 2, 2:49 am)
[PATCH 17/16] Do not reset UTF8 on terminal reset, Jan Engelhardt, (Mon Apr 2, 3:31 am)
Re: [PATCH 17/16] Do not reset UTF8 on terminal reset, Pavel Machek, (Mon Apr 2, 2:50 pm)
Re: [PATCH 17/16] Do not reset UTF8 on terminal reset, Paul LeoNerd Evans, (Mon Apr 2, 7:26 am)
Re: [PATCH 17/16] Do not reset UTF8 on terminal reset, Antonino A. Daplas, (Mon Apr 2, 7:44 am)
Re: [PATCH 17/16] Do not reset UTF8 on terminal reset, Paul LeoNerd Evans, (Mon Apr 2, 7:54 am)
Re: [PATCH 17/16] Do not reset UTF8 on terminal reset, Antonino A. Daplas, (Mon Apr 2, 8:47 am)
Re: [PATCH 17/16] Do not reset UTF8 on terminal reset, Jan Engelhardt, (Mon Apr 2, 9:34 am)
Re: [PATCH 17/16] Do not reset UTF8 on terminal reset, Paul LeoNerd Evans, (Mon Apr 2, 9:20 am)
Re: [PATCH 17/16] Do not reset UTF8 on terminal reset, Antonino A. Daplas, (Mon Apr 2, 5:30 am)