I've been successfully running with this since Nov 24th. Definately changes the behavior as advertised and has no issues that I have seen in my testing, using duid's on svnd(4) on i386.
Penned by Joel Sing on 20101221 6:30.49, we have: | When a vnd(4) device is configured the device name is always configured as | vndX, even when it is created as a "safe" vnd (or svndX). This device name | is also used as the name for the disk: | | $ vnconfig -c svnd0 /tmp/test | $ sysctl hw.disknames | hw.disknames=sd0:19291b8cb83eb8b8,cd0:,vnd0: | | When DUIDs are used we end up mapping back to a device node using the name | of the disk. This means that we always end up using /dev/vnd* even for svnd | disks. | | The following diff adds a separate disk name that is populated based on | the mode that the vnd(4) is created with. This means that if you created | a vnd disk then the disk name will be vndX and diskmap(4) will open the | /dev/vnd* devices. Whereas if you created a svnd disk then the disk name | will be svndX and diskmap(4) will open /dev/svnd* devices. | | ok? | | Index: vnd.c | =================================================================== | RCS file: /cvs/src/sys/dev/vnd.c,v | retrieving revision 1.103 | diff -u -p -r1.103 vnd.c | --- vnd.c 22 Sep 2010 01:18:57 -0000 1.103 | +++ vnd.c 16 Nov 2010 14:37:41 -0000 | @@ -125,6 +125,7 @@ struct pool vndbufpl; | struct vnd_softc { | struct device sc_dev; | struct disk sc_dk; | + char sc_dk_name[16]; | | char sc_file[VNDNLEN]; /* file we're covering */ | int sc_flags; /* flags */ | @@ -780,6 +781,7 @@ vndioctl(dev_t dev, u_long cmd, caddr_t | return (error); | } | | + /* Set device name. */ | bzero(vnd->sc_dev.dv_xname, sizeof(vnd->sc_dev.dv_xname)); | if (snprintf(vnd->sc_dev.dv_xname, sizeof(vnd->sc_dev.dv_xname), | "vnd%d", unit) >= sizeof(vnd->sc_dev.dv_xname)) { | @@ -788,6 +790,16 @@ vndioctl(dev_t dev, u_long cmd, caddr_t | return(ENXIO); | } | | + /* Set disk name depending on how we were created. */ | + bzero(vnd->sc_dk_name, sizeof(vnd->sc_dk_name)); | + if (snprintf(vnd->sc_dk_name, sizeof(vnd->sc_dk_name), | + "%svnd%d", ((vnd->sc_flags & VNF_SIMPLE) ? "s" : ""), | + unit) >= sizeof(vnd->sc_dk_name)) { | + printf("VNDIOCSET: disk name too long\n"); | + vndunlock(vnd); | + return(ENXIO); | + } | + | /* Set geometry for device. */ | vnd->sc_secsize = vio->vnd_secsize; | vnd->sc_ntracks = vio->vnd_ntracks; | @@ -865,7 +877,7 @@ vndioctl(dev_t dev, u_long cmd, caddr_t | vnd->sc_vp, (unsigned long long)vnd->sc_size); | | /* Attach the disk. */ | - vnd->sc_dk.dk_name = vnd->sc_dev.dv_xname; | + vnd->sc_dk.dk_name = vnd->sc_dk_name; | disk_attach(&vnd->sc_dev, &vnd->sc_dk); | | vndunlock(vnd); | | | -- | | "Stop assuming that systems are secure unless demonstrated insecure; | start assuming that systems are insecure unless designed securely." | - Bruce Schneier -- Todd Fries .. t...@fries.net _____________________________________________ | \ 1.636.410.0632 (voice) | Free Daemon Consulting, LLC \ 1.405.227.9094 (voice) | http://FreeDaemonConsulting.com \ 1.866.792.3418 (FAX) | 2525 NW Expy #525, Oklahoma City, OK 73112 \ sip:freedae...@ekiga.net | "..in support of free software solutions." \ sip:4052279...@ekiga.net \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ 37E7 D3EB 74D0 8D66 A68D B866 0326 204E 3F42 004A http://todd.fries.net/pgp.txt