Date: Tue, 28 Feb 2006 05:03:20 -0500 From: Kris Kennaway <kris@obsecurity.org> To: Kris Kennaway <kris@obsecurity.org> Cc: freebsd-stable@freebsd.org Subject: Re: Patch for quota deadlock Message-ID: <20060228100320.GA56232@xor.obsecurity.org> In-Reply-To: <20060228100040.GA56094@xor.obsecurity.org> References: <20060221195601.GA63134@xor.obsecurity.org> <20060228074037.GE21678@e-Gitt.NET> <20060228075139.GA38928@xor.obsecurity.org> <200602281158.03030.nike_d@cytexbg.com> <20060228100040.GA56094@xor.obsecurity.org>
next in thread | previous in thread | raw e-mail | index | archive | help
--tThc/1wpZn/ma/RB Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Tue, Feb 28, 2006 at 05:00:40AM -0500, Kris Kennaway wrote: > On Tue, Feb 28, 2006 at 11:58:02AM +0200, Niki Denev wrote: > > On Tuesday 28 February 2006 09:51, Kris Kennaway wrote: > > > On Tue, Feb 28, 2006 at 08:40:37AM +0100, Oliver Brandmueller wrote: > > > > Anyway, I'll discuss with my colleagues and we'll see if we want to= take > > > > the risk. > > > > > > Thanks, it would be a big help if you're willing to try. > > > > > > Kris > >=20 > > I'm jumping here from the [snaphost timestamps] thread. > >=20 > > Here is what happened when i compiled the kernel with QUOTAS enabled,= =20 > > enable_quotas=3D"YES" in rc.conf, and LK_NOWAIT patch applied : >=20 > > Enabling quotas:KDB: stack backtrace: > > vfs_badlock() at vfs_badlock+0x95 > > assert_vop_locked() at assert_vop_locked+0x77 > > quotaon() at quotaon+0x182 > > ufs_quotactl() at ufs_quotactl+0x150 > > quotactl() at quotactl+0x15c > > syscall() at syscall+0x642 > > Xfast_syscall() at Xfast_syscall+0xa8 > > --- syscall (148, FreeBSD ELF64, quotactl), rip =3D 0x80068671c, rsp = =3D=20 >=20 > Thanks, I forgot about this. You'll need these patches too: >=20 > http://www.freebsd.org/cgi/cvsweb.cgi/src/sys/ufs/ufs/ufs_quota.c.diff?r1= =3D1.77&r2=3D1.78 > http://www.freebsd.org/cgi/cvsweb.cgi/src/sys/ufs/ufs/ufs_quota.c.diff?r1= =3D1.78&r2=3D1.79 Here is the combined patch, without the $FreeBSD$ bits that won't apply on RELENG_6: Index: ufs_quota.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /home/ncvs/src/sys/ufs/ufs/ufs_quota.c,v retrieving revision 1.77 retrieving revision 1.80 diff -u -u -r1.77 -r1.80 --- ufs_quota.c 9 Jan 2006 20:42:19 -0000 1.77 +++ ufs_quota.c 22 Feb 2006 06:12:53 -0000 1.80 @@ -429,8 +429,9 @@ quotaoff(td, mp, type); ump->um_qflags[type] |=3D QTF_OPENING; mp->mnt_flag |=3D MNT_QUOTA; - ASSERT_VOP_LOCKED(vp, "quotaon"); + vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, td); vp->v_vflag |=3D VV_SYSTEM; + VOP_UNLOCK(vp, 0, td); *vpp =3D vp; /* * Save the credential of the process that turned on quotas. @@ -535,8 +536,9 @@ } MNT_IUNLOCK(mp); dqflush(qvp); - ASSERT_VOP_LOCKED(qvp, "quotaoff"); + vn_lock(qvp, LK_EXCLUSIVE | LK_RETRY, td); qvp->v_vflag &=3D ~VV_SYSTEM; + VOP_UNLOCK(qvp, 0, td); error =3D vn_close(qvp, FREAD|FWRITE, td->td_ucred, td); ump->um_quotas[type] =3D NULLVP; crfree(ump->um_cred[type]); @@ -748,7 +750,7 @@ MNT_ILOCK(mp); continue; } - error =3D vget(vp, LK_EXCLUSIVE | LK_NOWAIT | LK_INTERLOCK, td); + error =3D vget(vp, LK_EXCLUSIVE | LK_INTERLOCK, td); if (error) { MNT_ILOCK(mp); if (error =3D=3D ENOENT) { --tThc/1wpZn/ma/RB Content-Type: application/pgp-signature Content-Disposition: inline -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.2.1 (FreeBSD) iD8DBQFEBB/oWry0BWjoQKURAgcTAKDvNpc9ZvjGVUWrNlee5809WQHpuQCgz7a9 4vWukcNZSDjQPEFM4M6lrw0= =GIiz -----END PGP SIGNATURE----- --tThc/1wpZn/ma/RB--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20060228100320.GA56232>