Re: soft updates / background fsck directory link count bug

From: Tor Egge <Tor.Egge_at_cvsup.no.freebsd.org>
Date: Sun, 25 Sep 2005 00:09:32 +0000 (UTC)
> 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


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
_at__at_ -3477,6 +3477,8 _at__at_
 	}
 	WORKLIST_INSERT(&inodedep->id_inowait, &dirrem->dm_list);
 	FREE_LOCK(&lk);
+	ip->i_flag |= IN_CHANGE;
+	ffs_update(vp, 0);
 	vput(vp);
 }
 
Received on Sat Sep 24 2005 - 22:09:36 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:38:44 UTC