soft updates / background fsck directory link count bug
Tor Egge
Tor.Egge at cvsup.no.freebsd.org
Sat Sep 24 17:09:36 PDT 2005
> Relying on ufs_inactive() is probably the wrong thing to do because the
> ufs_inactive() call can be deferred indefinitely if another process
> holds a reference to the vnode. This is sufficient to cause background
> fsck to do the wrong thing even in the normal case.
> I think the cleanest fix would be for handle_workitem_remove() to
> explicity call ffs_update().
Agreed. The enclosed patch does that.
> Another subtle point is that ufs_inactive() calls
> vn_write_suspend_wait() before calling UFS_UPDATE(), but I don't think
> we want to call vn_write_suspend_wait() here.
It isn't needed when running down softupdates dependencies.
- Tor Egge
-------------- next part --------------
Index: sys/ufs/ffs/ffs_softdep.c
===================================================================
RCS file: /home/ncvs/src/sys/ufs/ffs/ffs_softdep.c,v
retrieving revision 1.184
diff -u -r1.184 ffs_softdep.c
--- sys/ufs/ffs/ffs_softdep.c 5 Sep 2005 22:14:33 -0000 1.184
+++ sys/ufs/ffs/ffs_softdep.c 24 Sep 2005 22:09:50 -0000
@@ -3477,6 +3477,8 @@
}
WORKLIST_INSERT(&inodedep->id_inowait, &dirrem->dm_list);
FREE_LOCK(&lk);
+ ip->i_flag |= IN_CHANGE;
+ ffs_update(vp, 0);
vput(vp);
}
More information about the freebsd-current
mailing list