Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 25 Sep 2005 00:21:13 -0700 (PDT)
From:      Don Lewis <truckman@FreeBSD.org>
To:        Tor.Egge@cvsup.no.freebsd.org
Cc:        scottl@FreeBSD.org, current@FreeBSD.org, mckusick@FreeBSD.org
Subject:   Re: soft updates / background fsck directory link count bug
Message-ID:  <200509250721.j8P7LD32092496@gw.catspoiler.org>
In-Reply-To: <20050925.000932.74671878.Tor.Egge@cvsup.no.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
--0-846930886-1127632882=:7432
Content-Type: TEXT/plain; charset=us-ascii

On 25 Sep, Tor Egge wrote:
>> 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.

It works well for me in the testing that I have done.  It also has the
advantage of doing the dirrem rundown much more quickly than the
unmodified code in your directory tree removal example.

BTW, without this modification, your directory tree removal example will
trigger a timeout in the syncer thread shutdown code if the system is
immediately rebooted after the rm -r.


--0-846930886-1127632882=:7432
Content-Type: TEXT/plain; name=softdep.diff6
Content-Disposition: attachment; filename=softdep.diff6

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);
 }
 

--0-846930886-1127632882=:7432--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200509250721.j8P7LD32092496>