Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 04 Oct 2002 14:11:57 -0700
From:      Peter Wemm <peter@wemm.org>
To:        Poul-Henning Kamp <phk@critter.freebsd.dk>
Cc:        n0go013 <ttz@blahdeblah.demon.co.uk>, current <freebsd-current@freebsd.org>
Subject:   Re: [ GEOM tests ] disklabel warnings and vinum drives lost 
Message-ID:  <20021004211157.378592A896@canning.wemm.org>
In-Reply-To: <35389.1033748850@critter.freebsd.dk> 

next in thread | previous in thread | raw e-mail | index | archive | help
Poul-Henning Kamp wrote:
> In message <20021004161119.GA10830@pooh.blahdeblah.demon.co.uk>, n0go013 writ
    es
> :
> >On 04.10-15:40, fergus wrote:
> >> On 04.10-14:20, Poul-Henning Kamp wrote:
> >> [...]
> >> > I suspect vinum uses this sysctl to get an inventory of disks in
> >> > the system, so can I get you to try again making sure you have
> >> > rev. 1.20 of src/sys/geom/geom_disk.c ?
> >[...]
> >> i'll let you know the test results when i have some.
> >
> >same results -- can't initialise any drives.  i think the example below
> >points more directly to the issue but i'm pretty sure it is because the
> >direct read from the disk does not return a valid disklabel.  without a
> >'vinum' partition entry vinum spews.
> 
> I have no idea how vinum does this or something else, but clearly
> something is not done the right way in vinum...

vinum is so much unbelievable stuff in it.  Consider this stuff:

sys/dev/vinum/vinumio.c:

    /* Find the device */
    if (bcmp(dname, "ad", 2) == 0)                          /* IDE disk */
        devmajor = 116;
    else if (bcmp(dname, "wd", 2) == 0)                     /* IDE disk */
        devmajor = 3;
    else if (bcmp(dname, "da", 2) == 0)
        devmajor = 13;
    else if (bcmp(dname, "vn", 2) == 0)
        devmajor = 43;
    else if (bcmp(dname, "md", 2) == 0)
        devmajor = 95;
    else if (bcmp(dname, "ar", 2) == 0)
        devmajor = 157;
    else if (bcmp(dname, "amrd", 4) == 0) {
        devmajor = 133;
        dname += 2;
    } else if (bcmp(dname, "mlxd", 4) == 0) {
        devmajor = 131;
        dname += 2;
    } else if (bcmp(dname, "idad", 4) == 0) {
        devmajor = 109;
        dname += 2;
    } else if (bcmp(dname, "twed", 4) == 0) {               /* 3ware raid */
      devmajor = 147;
      dname += 2;
    } else
      return ENODEV;
    dname += 2;                                             /* point past */

It goes *way* downhill from there. :-(

Guess what happens when a new driver is added to the kernel?

Guess what happens if somebody doesn't use the "official" naming in /dev?

This crud has *got* to be taken out and shot, then reworked to do it
properly.

Oh, and lets not talk about trying to run vinum on partition schemes that
do not even *have* disklabels.

Cheers,
-Peter
--
Peter Wemm - peter@wemm.org; peter@FreeBSD.org; peter@yahoo-inc.com
"All of this is for nothing if we don't go to the stars" - JMS/B5


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20021004211157.378592A896>