On Sun, May 29, 2022 at 01:18:16PM +0200, J. Hannken-Illjes wrote: > > On 29. May 2022, at 08:30, Michael van Elst <mlel...@serpens.de> wrote: > > > > bou...@antioche.eu.org (Manuel Bouyer) writes: > > > >> Hello, > >> do you have an idea on the problem in this thread: > >> http://mail-index.netbsd.org/port-xen/2022/05/27/msg010213.html > > [...] > >> I can't reproduce this when using vnd from userland. > > > > You can replicate it by addressing the block device with vnconfig. > > > > A workaround would be to modify the Xen block script to select the > > raw device: > > > > vnconfig /dev/r${disk}d $xparams >/dev/null; then > > > > or just the disk name: > > > > vnconfig ${disk} $xparams >/dev/null; then > > Good catch, sys/dev/vnd.c has this: > > 1751 static void > 1752 vndclear(struct vnd_softc *vnd, int myminor) > 1753 { > 1754 struct vnode *vp = vnd->sc_vp; > 1755 int fflags = FREAD; > 1756 int bmaj, cmaj, i, mn; > 1757 int s; > 1758 > 1759 #ifdef DEBUG > 1760 if (vnddebug & VDB_FOLLOW) > 1761 printf("vndclear(%p): vp %p\n", vnd, vp); > 1762 #endif > 1763 /* locate the major number */ > 1764 bmaj = bdevsw_lookup_major(&vnd_bdevsw); > 1765 cmaj = cdevsw_lookup_major(&vnd_cdevsw); > 1766 > 1767 /* Nuke the vnodes for any open instances */ > 1768 for (i = 0; i < MAXPARTITIONS; i++) { > 1769 mn = DISKMINOR(device_unit(vnd->sc_dev), i); > 1770 vdevgone(bmaj, mn, mn, VBLK); > 1771 if (mn != myminor) /* XXX avoid to kill own vnode */ > 1772 vdevgone(cmaj, mn, mn, VCHR); > 1773 } > > The "skip myself" on lines 1771/1772 is responsible for this behaviour.
Yes and doing the same for block devices avoids the issue. But Taylor is reluctant to commit this hack. -- Manuel Bouyer <bou...@antioche.eu.org> NetBSD: 26 ans d'experience feront toujours la difference --