看板 DFBSD_bugs 關於我們 聯絡資訊
: :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);