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