On Sun, Jul 13, 2025 at 10:46:57PM +0900, Olivier Certner wrote: > Hi Charlie, > > The panic you're seeing is caused by 'MPASS(*eofflag != 0);' in > vn_dir_next_dirent(). This test is here to check that VOP_READDIR() works > properly. In particular, if VOP_READDIR() returned 0 (no error), and the > length it filled is 0 (nothing was added), then we must be at EOF, and > VOP_READDIR() must have set '*eofflag' to something non-zero. UFS has been > verified to abide by this rule (unless the directory being read is > malformed). Which filesystem are you using? > > Shot in the dark & educated guess: You're using ZFS, and you've just stumbled > on the following case (lines from 'zfs_vnops_os.c'): > > /* > > * Quit if directory has been removed (posix) > > */ > if ((*eofp = zp->z_unlinked) != 0) { > zfs_exit(zfsvfs, FTAG); > return (0); > } > > which is a corner case that apparently has been missed. Just add some 'if > (eofflag != NULL) *eofflag = 1;' inside the "then" block there and retry. It > looks like all other cases in this function are handled correctly (but I have > not thoroughly verified).
The store to *eofp sets eofflag, so that is not the problem. Based on the presence of "efi" as a component name in the stack trace that Charlie provided, I suspect the problem is rather in msdosfs, but I don't immediately see what's wrong there. > I'll be mostly AFK for the next 10 days, so probably won't be able to > follow-up, but hope that will help. > > Thanks and regards. > > -- > Olivier Certner