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

Reply via email to