Olivier Certner wrote:
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).

I'll be mostly AFK for the next 10 days, so probably won't be able to 
follow-up, but hope that will help.

Yes this is ZFS, I will give your suggestion a try. I do have one UFS system but since I don't have supporting infrastructure for that machine to easily roll back I haven't tested there.

--
Charlie Li
...nope, still don't have an exit line.

Attachment: OpenPGP_signature.asc
Description: OpenPGP digital signature

Reply via email to