: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 [EMAIL PROTECTED]
with "unsubscribe freebsd-current" in the body of the message