panic: unmount: dangling vnode

Matthew Dillon dillon at apollo.backplane.com
Wed Feb 10 09:11:48 PST 2010


:
:Hi Matt,
:
:Grab from...
:
:Just vnconfig and mount_ntfs it. I've put some dummy data in there.
:
:Cheers,
:Antonio Huete

    No luck.  I couldn't get it to crash.  

    Hmm.  Rumko, this is a bit drastic but here's a patch that
    will add serious debugging output to the console.  I kept
    the old patch too.  Please run this and upload a core from
    it when it crashes.  I may be able to figure out where the
    vnodes are being allocated from by looking at the backtrace.

						-Matt

diff --git a/sys/vfs/ntfs/ntfs_vfsops.c b/sys/vfs/ntfs/ntfs_vfsops.c
index d3d80d2..a57ec3c 100644
--- a/sys/vfs/ntfs/ntfs_vfsops.c
+++ b/sys/vfs/ntfs/ntfs_vfsops.c
@@ -633,12 +633,14 @@ ntfs_unmount(struct mount *mp, int mntflags)
 
 	dprintf(("ntfs_unmount: vflushing...\n"));
 	error = vflush(mp, 0, flags | SKIPSYSTEM);
+	error = vflush(mp, 0, flags | SKIPSYSTEM);
+	error = vflush(mp, 0, flags | SKIPSYSTEM);
 	if (error) {
 		kprintf("ntfs_unmount: vflush failed: %d\n",error);
 		return (error);
 	}
 
-	/* Check if only system vnodes are rest */
+	/* Check if only system vnodes are left */
 	for(i=0;i<NTFS_SYSNODESNUM;i++)
 		 if((ntmp->ntm_sysvn[i]) && 
 		    (ntmp->ntm_sysvn[i]->v_sysref.refcnt > 1)) return (EBUSY);
@@ -649,6 +651,8 @@ ntfs_unmount(struct mount *mp, int mntflags)
 
 	/* vflush system vnodes */
 	error = vflush(mp, 0, flags);
+	error = vflush(mp, 0, flags);
+	error = vflush(mp, 0, flags);
 	if (error)
 		kprintf("ntfs_unmount: vflush failed(sysnodes): %d\n",error);
 
@@ -894,6 +898,8 @@ ntfs_vgetex(struct mount *mp, ino_t ino, u_int32_t attrtype, char *attrname,
 	}
 
 	error = getnewvnode(VT_NTFS, ntmp->ntm_mountp, &vp, VLKTIMEOUT, 0);
+	kprintf("NTFS: getnewvnode %p\n", vp);
+	print_backtrace();
 	if(error) {
 		ntfs_frele(fp);
 		ntfs_ntput(ip);





More information about the Bugs mailing list