panic: trap: fast data access mmu miss

Thomas Moestl t.moestl at tu-bs.de
Fri Oct 24 12:30:33 PDT 2003


On Fri, 2003/10/24 at 09:09:25 +0400, Alex Deiter wrote:
> panic: trap: fast data access mmu miss
> cpuid = 0;
> Debugger("panic")
> Stopped at      Debugger+0x1c:  ta              %xcc, 1
> db> tr
> panic() at panic+0x174
> trap() at trap+0x394
> -- fast data access mmu miss tar=0 %o7=0xc018b820 --
> quotactl() at quotactl+0x98
> syscall() at syscall+0x308
> -- syscall (148, FreeBSD ELF64, quotactl) %o7=0x1e3044 --
> userland() at 0x41187e88
> user trace: trap %o7=0x1e3044
> pc 0x41187e88, sp 0x7fdffffe221
> pc 0x15149c, sp 0x7fdffffe321
> pc 0x151818, sp 0x7fdffffe871
> pc 0x1c771c, sp 0x7fdffffe931
> pc 0x1a6938, sp 0x7fdffffea01
> pc 0x1b3904, sp 0x7fdffffec81
> pc 0x1d987c, sp 0x7fdffffedc1
> pc 0x1d99c0, sp 0x7fdffffeec1
> pc 0x1da06c, sp 0x7fdffffefa1
> pc 0x1db99c, sp 0x7fdfffff071
> pc 0x451ea8, sp 0x7fdfffff161
> pc 0x133560, sp 0x7fdfffff3f1
> pc 0x405d3f94, sp 0x7fdfffff4b1
> done

I believe that the attached patch should fix that; the panic is not
sparc64-specific, and should occur on all file systems that do not
define a vop_getwritemount method.

	- Thomas

-- 
Thomas Moestl <t.moestl at tu-bs.de>	http://www.tu-bs.de/~y0015675/
              <tmm at FreeBSD.org>		http://people.FreeBSD.org/~tmm/
PGP fingerprint: 1C97 A604 2BD0 E492 51D0  9C0F 1FE6 4F1D 419C 776C
-------------- next part --------------
Index: vfs_syscalls.c
===================================================================
RCS file: /vol/ncvs/src/sys/kern/vfs_syscalls.c,v
retrieving revision 1.331
diff -u -r1.331 vfs_syscalls.c
--- vfs_syscalls.c	21 Aug 2003 13:53:01 -0000	1.331
+++ vfs_syscalls.c	24 Oct 2003 19:08:29 -0000
@@ -189,7 +189,7 @@
 		caddr_t arg;
 	} */ *uap;
 {
-	struct mount *mp;
+	struct mount *mp, *wmp;
 	int error;
 	struct nameidata nd;
 
@@ -199,12 +199,13 @@
 	if ((error = namei(&nd)) != 0)
 		return (error);
 	NDFREE(&nd, NDF_ONLY_PNBUF);
-	error = vn_start_write(nd.ni_vp, &mp, V_WAIT | PCATCH);
+	error = vn_start_write(nd.ni_vp, &wmp, V_WAIT | PCATCH);
+	mp = nd.ni_vp->v_mount;
 	vrele(nd.ni_vp);
 	if (error)
 		return (error);
 	error = VFS_QUOTACTL(mp, uap->cmd, uap->uid, uap->arg, td);
-	vn_finished_write(mp);
+	vn_finished_write(wmp);
 	return (error);
 }
 


More information about the freebsd-current mailing list