diff -p -up mkinitrd-6.0.62/nash/block.c.root-devnum mkinitrd-6.0.62/nash/block.c --- mkinitrd-6.0.62/nash/block.c.root-devnum 2008-08-25 10:57:16.000000000 +0200 +++ mkinitrd-6.0.62/nash/block.c 2008-08-25 10:58:57.000000000 +0200 @@ -494,8 +494,10 @@ nashFindFsByName(nashContext *nc, const bdev = blkid_get_dev(nc->cache, name, BLKID_DEV_NORMAL); } + /* do not return immediately, check device access + since blkid now returns cached devices that may not exist */ if (bdev) - return strdup(blkid_dev_devname(bdev)); + name = blkid_dev_devname(bdev); if (!access(name, F_OK)) return strdup(name); @@ -525,6 +527,13 @@ nashMkPathBySpec(nashContext *nc, const char *existing = nashGetPathBySpec(nc, spec); struct stat sb; + if (!existing) { + char *p; + dev_t devNum = strtoul(spec, &p, 16); + if (!*p && devNum > 0) + return smartmknod(path, S_IFBLK | 0700, devNum); + } + if (!existing || stat(existing, &sb) < 0 || !S_ISBLK(sb.st_mode)) return -1;