Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 29 Nov 1999 15:02:08 -0800 (PST)
From:      Matthew Dillon <dillon@apollo.backplane.com>
To:        "Viren R.Shah" <viren@rstcorp.com>
Cc:        Eivind Eklund <eivind@FreeBSD.ORG>, Greg Lehey <grog@lemis.com>, freebsd-current@FreeBSD.ORG
Subject:   Re: repeatable crash in -current (softupdates, NFS)
Message-ID:  <199911292302.PAA12145@apollo.backplane.com>
References:  <14399.63511.296802.242618@jabberwock.rstcorp.com> <19991127195332.36233@mojave.sitaranetworks.com> <14402.62513.189527.729294@jabberwock.rstcorp.com> <199911292155.NAA09688@apollo.backplane.com> <14403.496.341437.658744@jabberwock.rstcorp.com>

next in thread | previous in thread | raw e-mail | index | archive | help

:OK, here's a -current system from today (11/29) morning [4am EST] with
:kernel compiled with DDB and -g.
:
:Tried doing a simple symlink over a NFS mounted filesystem:
:
:fatal trap 12: page fault while in kernel mode
:fault virtual address = 0x4
:fault code            = supervisor read, page not present
:instruction pointer   = 0x8:0xc0167979
:...
:db> trace
:  
:  vput(0) at vput+0x11
:  symlink (c9d4e200, c9d74f80, bfbfdab5, bfbfda9e, bfbfd99c) at symlink+0x1e3
:  syscall(2f, 2f, 2f, bfbfd99c, bfbfda9e) at syscall+0x176
:  Xint0x80_syscall() at Xint0x80_syscall+0x26

    I believe the problem is with the ASSERT_VOP_UNLOCKED macros that have
    been added to the symlink code in kern/vfs_syscalls.c, near the 
    end of the procedure.

    Also, I think there's a race condition with the ASSERT_VOP_UNLOCKED()
    macros... when a vnode is vput it is possible for it to be freed up,
    the assert may not be valid at that point.

    Please try this patch:

						-Matt

Index: vfs_syscalls.c
===================================================================
RCS file: /FreeBSD/FreeBSD-CVS/src/sys/kern/vfs_syscalls.c,v
retrieving revision 1.146
diff -u -r1.146 vfs_syscalls.c
--- vfs_syscalls.c	1999/11/20 10:00:40	1.146
+++ vfs_syscalls.c	1999/11/29 23:01:09
@@ -1307,7 +1307,8 @@
 		vput(nd.ni_vp);
 	vput(nd.ni_dvp);
 	ASSERT_VOP_UNLOCKED(nd.ni_dvp, "symlink");
-	ASSERT_VOP_UNLOCKED(nd.ni_vp, "symlink");
+	if (error == 0)
+		ASSERT_VOP_UNLOCKED(nd.ni_vp, "symlink");
 out:
 	zfree(namei_zone, path);
 	return (error);


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message




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