From: Colin Watson Date: Sat, 17 Jul 2010 10:17:49 +0000 (+0100) Subject: merge mainline X-Git-Tag: 1.99~723^2~4 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=41f435b1b4f7651daf911d13c71e143689185f38;p=thirdparty%2Fgrub.git merge mainline --- 41f435b1b4f7651daf911d13c71e143689185f38 diff --cc disk/raid.c index d6a1f1d48,2d544afdc..87e713f30 --- a/disk/raid.c +++ b/disk/raid.c @@@ -536,44 -534,36 +536,34 @@@ insert_array (grub_disk_t disk, struct if (p) { - /* The number is already in use, so we need to find an new number. */ + /* The number is already in use, so we need to find a new one. */ int i = 0; - while (1) - { - for (p = array_list; p != NULL; p = p->next) - { - if (p->number == i) - break; - } - - if (!p) - { - /* We found an unused number. */ - array->number = i; - break; - } - - i++; - } - } - - array->name = grub_xasprintf ("md%d", array->number); + while (1) + { + for (p = array_list; p != NULL; p = p->next) + { + if (p->number == i) + break; + } + + if (! p) + { + /* We found an unused number. */ + array->number = i; + break; + } + + i++; + } + } + skip_duplicate_check: + /* mdraid 1.x superblocks have only a name stored not a number. + Use it directly as GRUB device. */ if (! array->name) - { - array->name = grub_malloc (13); - if (! array->name) - { - grub_free (array->uuid); - grub_free (array); - { - grub_free (array->uuid); - grub_free (array); -- - return grub_errno; - } - grub_sprintf (array->name, "md%d", array->number); - } - return grub_errno; - } ++ array->name = grub_xasprintf ("md%d", array->number); + else - grub_sprintf (array->name, "%s", array->name); ++ array->name = grub_xasprintf ("%s", array->name); grub_dprintf ("raid", "Found array %s (%s)\n", array->name, scanner_name); diff --cc kern/emu/getroot.c index 25f4eae61,24b2cd486..5b0849a98 --- a/kern/emu/getroot.c +++ b/kern/emu/getroot.c @@@ -590,22 -600,8 +600,22 @@@ grub_util_get_grub_dev (const char *os_ grub_dev = xasprintf ("md%s", p); free (p); } + else if (os_dev[7] == '/') + { + /* mdraid 1.x with a free name. */ + char *p , *q; + + p = strdup (os_dev + sizeof ("/dev/md/") - 1); + + q = strchr (p, 'p'); + if (q) + *q = ','; + + asprintf (&grub_dev, "%s", p); + free (p); + } else - grub_util_error ("Unknown kind of RAID device `%s'", os_dev); + grub_util_error ("unknown kind of RAID device `%s'", os_dev); break;