Re: could fstat(1) show files in use by vnd(4)?

[email protected] (Michael van Elst)
Newsgroups gmane.os.netbsd.devel.kernel
Organization Serpens User Group
Message-ID <[email protected]>
[email protected] ("Greg A. Woods") writes:

>After a reboot we can see the vnd(4) uses:

>	# vndconfig -l
>	vnd0: /build (/dev/mapper/vg0-build) inode 861956
>	vnd1: /build (/dev/mapper/vg0-build) inode 861966
>	vnd2: /build (/dev/mapper/vg0-build) inode 861953
>	vnd3: not in use

>So, might it be possible to have fstat show these somehow?  (perhaps
>with the/a kernel thread identified as having them open)

fstat reports file descriptors, not the underlying file handles.

pstat -f reports the file handles, but it dumps only a pointer to a vnode
and nothing that identifies a file directly.

pstat -v does dump the vnodes.

# ls -li testimage 
23471029 -rw-r--r--  1 mlelstv  staff  10485760 Aug 12 07:11 testimage
...

# vnconfig -l
vnd0: /home (/dev/dk5) inode 23471029
...

# pstat -v
...
*** MOUNT ffs /dev/dk5 on /home (log,nodev,nosuid,local)
ADDR             TYP VFLAG  USE HOLD TAG NPAGE FILEID IFLAG RDEV|SZ
...
ffff000019fe4c00 reg     M    2    0   1     0 23471029   - 10485760
...

N.B.

# pstat -f | grep ffff000019fe4c00
#

There is no file handle, vnd uses the vnode directly.



>Also, is this a crash that should be fixed, or is "umount -f" always a
>Buyer-Beware operation with expected "undefined behaviour"?

umount -f should either do nothing or do the umount, while mogrifying
each vnode to reference deadfs where all operations are supposed to
fail except for releasing the vnode. Still buyer-beware, but otherwise
a clearly defined behaviour.

The crash seems to happen at:

    error = VOP_BMAP(vnd->sc_vp, bn / bsize, &vp, &nbn, &nra);

where

    bsize = vnd->sc_vp->v_mount->mnt_stat.f_iosize;

deadfs hasn't initialized f_iosize. Maybe:

Index: vnd.c
===================================================================
RCS file: /cvsroot/src/sys/dev/vnd.c,v
retrieving revision 1.289
diff -p -u -r1.289 vnd.c
--- vnd.c       19 May 2023 15:42:43 -0000      1.289
+++ vnd.c       12 Aug 2024 05:31:36 -0000
@@ -875,6 +875,9 @@ handle_with_strategy(struct vnd_softc *v
        bn = obp->b_rawblkno * vnd->sc_dkdev.dk_label->d_secsize;
 
        bsize = vnd->sc_vp->v_mount->mnt_stat.f_iosize;
+       /* use default if the filesystem didn't specify a block size */
+       if (bsize <= 0)
+               bsize = BLKDEV_IOSIZE;
        skipped = 0;
 
        /*
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.