I had occasion to use wedges on a vnd(4), only to be reminded that they're not currently supported. Anyone see a problem with this patch? I've given it light testing, and haven't come across any issues yet...
+j Index: sys/dev/vnd.c =================================================================== RCS file: /cvsroot/src/sys/dev/vnd.c,v retrieving revision 1.208 diff -p -r1.208 vnd.c *** sys/dev/vnd.c 2 Mar 2010 21:32:29 -0000 1.208 --- sys/dev/vnd.c 21 Jun 2010 04:24:56 -0000 *************** extern struct cfdriver vnd_cd; *** 254,259 **** --- 254,261 ---- static struct vnd_softc *vnd_spawn(int); int vnd_destroy(device_t); + static struct dkdriver vnddkdriver = { vndstrategy, minphys }; + void vndattach(int num) { *************** vnd_attach(device_t parent, device_t sel *** 282,288 **** sc->sc_comp_buff = NULL; sc->sc_comp_decombuf = NULL; bufq_alloc(&sc->sc_tab, "disksort", BUFQ_SORT_RAWBLOCK); ! disk_init(&sc->sc_dkdev, device_xname(self), NULL); if (!pmf_device_register(self, NULL, NULL)) aprint_error_dev(self, "couldn't establish power handler\n"); } --- 284,290 ---- sc->sc_comp_buff = NULL; sc->sc_comp_decombuf = NULL; bufq_alloc(&sc->sc_tab, "disksort", BUFQ_SORT_RAWBLOCK); ! disk_init(&sc->sc_dkdev, device_xname(self), &vnddkdriver); if (!pmf_device_register(self, NULL, NULL)) aprint_error_dev(self, "couldn't establish power handler\n"); } *************** unlock_and_exit: *** 1501,1506 **** --- 1503,1541 ---- VOP_UNLOCK(vnd->sc_vp, 0); return error; + case DIOCAWEDGE: + { + struct dkwedge_info *dkw = (void *) data; + + if ((flag & FWRITE) == 0) + return (EBADF); + + /* If the ioctl happens here, the parent is us. */ + strlcpy(dkw->dkw_parent, device_xname(vnd->sc_dev), + sizeof(dkw->dkw_parent)); + return (dkwedge_add(dkw)); + } + + case DIOCDWEDGE: + { + struct dkwedge_info *dkw = (void *) data; + + if ((flag & FWRITE) == 0) + return (EBADF); + + /* If the ioctl happens here, the parent is us. */ + strlcpy(dkw->dkw_parent, device_xname(vnd->sc_dev), + sizeof(dkw->dkw_parent)); + return (dkwedge_del(dkw)); + } + + case DIOCLWEDGES: + { + struct dkwedge_list *dkwl = (void *) data; + + return (dkwedge_list(&vnd->sc_dkdev, dkwl, l)); + } + default: return ENOTTY; }