Date: Wed, 26 Apr 2006 18:42:28 +0200 From: Pawel Jakub Dawidek <pjd@FreeBSD.org> To: Kostik Belousov <kostikbel@gmail.com> Cc: freebsd-stable@freebsd.org, Dmitry Morozovsky <marck@rinet.ru>, Kris Kennaway <kris@obsecurity.org> Subject: Re: fsck_ufs locked in snaplk Message-ID: <20060426164228.GB17000@garage.freebsd.pl> In-Reply-To: <20060426133617.GG1446@deviant.kiev.zoral.com.ua> References: <20060425080932.1rv9hq0rcws4wc84@www.wolves.k12.mo.us> <20060425133532.GD1446@deviant.kiev.zoral.com.ua> <20060425095610.ibv24kg1kw00s040@www.wolves.k12.mo.us> <20060425185741.C71240@woozle.rinet.ru> <20060425153909.GE1446@deviant.kiev.zoral.com.ua> <20060425162252.GA54244@xor.obsecurity.org> <444EC8EA.8050305@asd.aplus.net> <20060426011703.GA61794@xor.obsecurity.org> <20060426134217.C93749@woozle.rinet.ru> <20060426133617.GG1446@deviant.kiev.zoral.com.ua>
next in thread | previous in thread | raw e-mail | index | archive | help
[-- Attachment #1 --]
On Wed, Apr 26, 2006 at 04:36:17PM +0300, Kostik Belousov wrote:
+> On Wed, Apr 26, 2006 at 01:43:42PM +0400, Dmitry Morozovsky wrote:
+> > On Tue, 25 Apr 2006, Kris Kennaway wrote:
+> >
+> > KK> What people are seeing now must be some other problem that I wan't
+> > KK> able to reproduce.
+> > KK>
+> > KK> Once I hear back from someone who can reproduce it with debugging
+> > KK> enabled (I'm also trying) we can try to fix it.
+> >
+> > Please try to simulate user who is over soft quota and is out of grace period.
+> > I'm trying to do so as well, but currently quite busy with other tasks :(
+>
+> I'm not sure whether the following is the issue you met, but:
+>
+> dqsync from sys/ufs/ufs/ufs_quota.c calls vn_start_secondary_write()
+> unconditionally. As result, mp->mnt_secondary_accwrites counter
+> from the struct mount will always increase after the entry to the dqsync.
+> ffs_snapshot calls ffs_sync, that calls dsync, that
+> iterates over vnodes and calls dqsync on them.
+> And, after the qsync, ffs_sync checks whether mp->mnt_secondary_accwrites
+> changes by calling softdep_check_suspend (see line 1221 of ffs_vfsops.c).
+> If changed, ffs_sync would restart the syncing loop, that never finishes.
+>
+> This is very strange, since if true, it basicaly means that snapshots
+> and quotas shall lead to immediate deadlock ...
+>
+> The following patch moves call to vn_start_secondary_write after
+> check for DQ_MOD. Please, try it.
Your patch must not be against HEAD, because in HEAD we have:
if ((dq->dq_flags & DQ_MOD) == 0)
return (0);
if ((dqvp = dq->dq_ump->um_quotas[dq->dq_type]) == NULLVP)
panic("dqsync: file");
(void) vn_start_secondary_write(dqvp, &mp, V_WAIT);
if (vp != dqvp)
vn_lock(dqvp, LK_EXCLUSIVE | LK_RETRY, td);
As you can see DQ_MOD is checked before vn_start_secondary_write().
--
Pawel Jakub Dawidek http://www.wheel.pl
pjd@FreeBSD.org http://www.FreeBSD.org
FreeBSD committer Am I Evil? Yes, I Am!
[-- Attachment #2 --]
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.2 (FreeBSD)
iD8DBQFET6L0ForvXbEpPzQRAqHTAJsEXuzi+DdJHHcGxQAqgmSs2vgpfgCgoXx0
XrGaLM60Xc+fdluNSunFsBY=
=C5+u
-----END PGP SIGNATURE-----
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20060426164228.GB17000>
