File lilo.x86.mount_by_persistent_name.patch of Package lilo

Do not pass root=major:minor to the initrd
---
 bsect.c |   42 +++++++++++++-----------------------------
 1 file changed, 13 insertions(+), 29 deletions(-)

diff -urp a/src/bsect.c b/src/bsect.c
--- a/src/bsect.c	2010-11-01 17:22:29.000000000 +0100
+++ b/src/bsect.c	2011-09-23 08:22:56.017387013 +0200
@@ -947,18 +947,6 @@ printf("MAX_IMAGES = %d\n", MAX_IMAGES);
 }
 
 
-static int dev_number(char *dev)
-{
-    struct stat st;
-
-    if (stat(dev,&st) >= 0) return st.st_rdev;
-    if (!isdigit(*dev)) die("Illegal 'root=' specification: %s", dev);
-    if (verbose >= 1) 
-	printf("Warning: cannot 'stat' device \"%s\"; trying numerical conversion\n", dev);
-    return to_number(dev);
-}
-
-
 static int get_image(char *name,char *label,IMAGE_DESCR *descr)
 {
     char *here,*deflt,*tmp;
@@ -1062,7 +1050,6 @@ static char options[SECTOR_SIZE]; /* thi
 
 static void bsect_common(IMAGE_DESCR *descr, int image)
 {
-    struct stat st;
     char *here,*root,*ram_disk,*vga,*password;
     char *literal,*append,*fback;
     char fallback_buf[SECTOR_SIZE];
@@ -1085,22 +1072,19 @@ if (image) { /* long section specific to
       "read-write")) strcat(options,"rw ");
     if ((root = cfg_get_strg(cf_kernel,"root")) || (root = cfg_get_strg(
       cf_options,"root")))  {
-	if (!strcasecmp(root,"current")) {
-	    if (stat("/",&st) < 0) pdie("stat /");
-	    sprintf(strchr(options,0),"root=%x ",(unsigned int) st.st_dev);
-	}
-	else if (strlen(root)>12 && !strncmp(root,"/dev/mapper/",12)) {
-	    sprintf(strchr(options,0),"root=%s ", root);
-	}
-	else if (strlen(root)>6 && !strncmp(root,"LABEL=",6)) {
-	    sprintf(strchr(options,0),"root=%s ", root);
-	}
-	else if (strlen(root)>5 && !strncmp(root,"UUID=",5)) {
-	    sprintf(strchr(options,0),"root=%s ", root);
-        }
-	else {
-	    sprintf(strchr(options,0),"root=%x ",dev_number(root));
-	}
+       /* root= is a property of either:
+       * prepare_namespace()
+       * or /init in initramfs
+       * or /linuxrc in a loopmounted initrd
+       * Its not a property of the bootloader or anything else
+       * related to loading the kernel/initrd into memory (or configuring
+       * that event)
+       *
+       * Pass root= via /proc/cmdline as configured in the config file
+       * If no root= is configured, initrd has a hardcoded value
+       * based on the '/' entry in /etc/fstab
+       */
+       sprintf(strchr(options,0),"root=%s ", root);
       }	
     if ((ram_disk = cfg_get_strg(cf_kernel,"ramdisk")) || (ram_disk =
       cfg_get_strg(cf_options,"ramdisk")))
openSUSE Build Service is sponsored by