Linux Headquarters
[ Register ]
[ About us ] [ Home Page ]

[ Kernel ] [ Documentation ] [ Links ] [ Books ]

Advertisement

Kernel v2.6.25.6-rc2 /init/do_mounts.c

Filename:/init/do_mounts.c
Lines Added:26
Lines Deleted:1
Also changed in: (Previous) 2.6.25.6-rc1  2.6.25  2.6.25-rc9  2.6.25-rc8  2.6.25-rc7  2.6.25-rc6 
(Following) 2.6.26-rc6  2.6.26-rc7  2.6.26-rc8  2.6.26-rc9  2.6.26  2.6.26-git5 

Location
[  2.6.25.6-rc2
  [  init
     o  do_mounts.c

Patch

diff --git a/init/do_mounts.c b/init/do_mounts.c
index 3885e70..660c1e5 100644
--- a/init/do_mounts.c
+++ b/init/do_mounts.c
@@ -76,6 +76,7 @@ dev_t name_to_dev_t(char *name)
    char s[32];
    char *p;
    dev_t res = 0;
+   int part;
 
    if (strncmp(name, "/dev/", 5) != 0) {
       unsigned maj, min;
@@ -106,7 +107,31 @@ dev_t name_to_dev_t(char *name)
    for (p = s; *p; p++)
       if (*p == '/')
          *p = '!';
-   res = blk_lookup_devt(s);
+   res = blk_lookup_devt(s, 0);
+   if (res)
+      goto done;
+
+   /*
+    * try non-existant, but valid partition, which may only exist
+    * after revalidating the disk, like partitioned md devices
+    */
+   while (p > s && isdigit(p[-1]))
+      p--;
+   if (p == s || !*p || *p == '0')
+      goto fail;
+
+   /* try disk name without <part number> */
+   part = simple_strtoul(p, NULL, 10);
+   *p = '\0';
+   res = blk_lookup_devt(s, part);
+   if (res)
+      goto done;
+
+   /* try disk name without p<part number> */
+   if (p < s + 2 || !isdigit(p[-2]) || p[-1] != 'p')
+      goto fail;
+   p[-1] = '\0';
+   res = blk_lookup_devt(s, part);
    if (res)
       goto done;
 


Comments: webmaster (at) linuxhq.com.
Advertising: banners (at) linuxhq.com.
Compilation ©1998-2008 Linux Headquarters, Inc.