DragonFly BSD
DragonFly bugs List (threaded) for 2010-02
[Date Prev][Date Next]  [Thread Prev][Thread Next]  [Date Index][Thread Index]

Re: panic: unmount: dangling vnode


From: Matthew Dillon <dillon@xxxxxxxxxxxxxxxxxxxx>
Date: Tue, 9 Feb 2010 18:21:55 -0800 (PST)

:I had a ntfs read-only mount and copied a few files off of it. After that I
:tried unmounting it, which resulted in the panic mentioned in the subject. The
:core is available at leaf:~rumko/crash/vnode/*.6 and the kernel was from about
:31st Jan.

    Ok, try this patch.  It looks like NTFS accesses auxillary vnodes
    while flushing other vnodes, so a single vflush scan won't catch them
    all.  I don't even know if multiple vflushes will catch them all
    but lets try it and find out.

					-Matt

diff --git a/sys/vfs/ntfs/ntfs_vfsops.c b/sys/vfs/ntfs/ntfs_vfsops.c
index d3d80d2..2a8c1a5 100644
--- a/sys/vfs/ntfs/ntfs_vfsops.c
+++ b/sys/vfs/ntfs/ntfs_vfsops.c
@@ -633,6 +633,8 @@ 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);
@@ -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);
 



[Date Prev][Date Next]  [Thread Prev][Thread Next]  [Date Index][Thread Index]