Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 21 Apr 2007 19:20:31 +0200
From:      des@des.no (Dag-Erling =?iso-8859-1?Q?Sm=F8rgrav?=)
To:        Roman Divacky <rdivacky@freebsd.org>
Cc:        emulation@freebsd.org, Scot Hetzel <swhetzel@gmail.com>
Subject:   Re: linuxolator - ltp testing: panic with fsync02 test
Message-ID:  <86hcr94pb4.fsf@dwp.des.no>
In-Reply-To: <86lkgl4pkx.fsf@dwp.des.no> (Dag-Erling =?iso-8859-1?Q?Sm=F8r?= =?iso-8859-1?Q?grav's?= message of "Sat, 21 Apr 2007 19:14:38 %2B0200")
References:  <790a9fff0704201848y5f6587fehf34af106ae3f7285@mail.gmail.com> <20070421080604.GA79048@freebsd.org> <86lkgl4pkx.fsf@dwp.des.no>

next in thread | previous in thread | raw e-mail | index | archive | help
--=-=-=
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: quoted-printable

des@des.no (Dag-Erling Sm=F8rgrav) writes:
> Roman Divacky <rdivacky@freebsd.org> writes:
> > On Fri, Apr 20, 2007 at 08:48:11PM -0500, Scot Hetzel wrote:
> > > Unread portion of the kernel message buffer:
> > > panic: NOT MPSAFE and Giant not held
> > I think this is related to MPSAFEing of pseudofs recently.. hopefully
> > des can tell us more (CCed)
> Yes, linprocfs_domtab() needs to call VFS_LOCK_GIANT() before namei().

Here's a tentative patch.

DES
--=20
Dag-Erling Sm=F8rgrav - des@des.no


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment; filename=linprocfs.diff

Index: sys/compat/linprocfs/linprocfs.c
===================================================================
RCS file: /home/ncvs/src/sys/compat/linprocfs/linprocfs.c,v
retrieving revision 1.110
diff -u -r1.110 linprocfs.c
--- sys/compat/linprocfs/linprocfs.c	15 Apr 2007 17:02:03 -0000	1.110
+++ sys/compat/linprocfs/linprocfs.c	21 Apr 2007 17:18:25 -0000
@@ -312,9 +312,11 @@
 	int error;
 
 	/* resolve symlinks etc. in the emulation tree prefix */
-	NDINIT(&nd, LOOKUP, FOLLOW, UIO_SYSSPACE, linux_emul_path, td);
+	NDINIT(&nd, LOOKUP, FOLLOW | MPSAFE, UIO_SYSSPACE, linux_emul_path, td);
 	flep = NULL;
-	if (namei(&nd) != 0 || vn_fullpath(td, nd.ni_vp, &dlep, &flep) != 0)
+	error = namei(&nd);
+	VFS_UNLOCK_GIANT(NDHASGIANT(&nd));
+	if (error != 0 || vn_fullpath(td, nd.ni_vp, &dlep, &flep) != 0)
 		lep = linux_emul_path;
 	else
 		lep = dlep;

--=-=-=--



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