It looks like nvp is NULL at the point where it crashed. Looking at the zfs code, zfs_vget always returns zero, even if it failed to find a vnode which matches the given 'inode' number. Try changing the return statement in zfs_vget from 'return (0)' to 'return (err)'. PS. the code is in src/sys/contrib/opensolaris/uts/common/fs/zfs/ zfs_vfsops.c - it took me a while to find it. On 26 Jun 2007, at 17:12, Philippe Pegon wrote: > Hi, > > I'm playing with zfs on vmware on FreeBSD current (world and kernel > of today with GENERIC kernel). I have 3 disks (virtuals) in raidz : > > # zpool status > pool: tank > state: ONLINE > scrub: none requested > config: > > NAME STATE READ WRITE CKSUM > tank ONLINE 0 0 0 > raidz1 ONLINE 0 0 0 > da0 ONLINE 0 0 0 > da1 ONLINE 0 0 0 > da2 ONLINE 0 0 0 > > errors: No known data errors > > with this zfs configuration : > > # zfs list > NAME USED AVAIL REFER MOUNTPOINT > tank 844M 8.93G 25.3K none > tank/nfs 24.0K 8.93G 24.0K /mnt/nfs > tank/obj 436M 8.93G 436M /usr/obj > tank/ports 244M 8.93G 244M /usr/ports > tank/src 162M 8.93G 162M /usr/src > > /mnt/nfs is nfs exported (zfs set sharenfs=on tank/nfs) and when I > mount it on a Linux box and try a ls from Linux, FreeBSD panic. > > panic and debug informations : > > # kgdb kernel.debug /var/crash/vmcore.0 > [GDB will not be able to debug user-mode threads: /usr/lib/ > libthread_db.so: Undefined symbol "ps_pglobal_lookup"] > GNU gdb 6.1.1 [FreeBSD] > Copyright 2004 Free Software Foundation, Inc. > GDB is free software, covered by the GNU General Public License, > and you are > welcome to change it and/or distribute copies of it under certain > conditions. > Type "show copying" to see the conditions. > There is absolutely no warranty for GDB. Type "show warranty" for > details. > This GDB was configured as "i386-marcel-freebsd". > > > Unread portion of the kernel message buffer: > > > Fatal trap 12: page fault while in kernel mode > cpuid = 0; apic id = 00 > fault virtual address = 0x10 > fault code = supervisor read, page not present > instruction pointer = 0x20:0xc08d088d > stack pointer = 0x28:0xd61f88f0 > frame pointer = 0x28:0xd61f8bec > code segment = base 0x0, limit 0xfffff, type 0x1b > = DPL 0, pres 1, def32 1, gran 1 > processor eflags = interrupt enabled, resume, IOPL = 0 > current process = 722 (nfsd) > panic: from debugger > cpuid = 0 > Uptime: 3h46m48s > Physical memory: 499 MB > Dumping 52 MB: 37 21 5 > > #0 doadump () at pcpu.h:195 > 195 __asm __volatile("movl %%fs:0,%0" : "=r" (td)); > (kgdb) backtrace > #0 doadump () at pcpu.h:195 > #1 0xc074997e in boot (howto=260) at /usr/src/sys/kern/ > kern_shutdown.c:409 > #2 0xc0749c3b in panic (fmt=Variable "fmt" is not available. > ) at /usr/src/sys/kern/kern_shutdown.c:563 > #3 0xc048bf87 in db_panic (addr=Could not find the frame base for > "db_panic". > ) at /usr/src/sys/ddb/db_command.c:433 > #4 0xc048c975 in db_command_loop () at /usr/src/sys/ddb/ > db_command.c:401 > #5 0xc048e0e5 in db_trap (type=12, code=0) at /usr/src/sys/ddb/ > db_main.c:222 > #6 0xc07703d6 in kdb_trap (type=12, code=0, tf=0xd61f88b0) at /usr/ > src/sys/kern/subr_kdb.c:502 > #7 0xc09f31bc in trap_fatal (frame=0xd61f88b0, eva=16) at /usr/src/ > sys/i386/i386/trap.c:861 > #8 0xc09f33f3 in trap_pfault (frame=0xd61f88b0, usermode=0, > eva=16) at /usr/src/sys/i386/i386/trap.c:784 > #9 0xc09f3d92 in trap (frame=0xd61f88b0) at /usr/src/sys/i386/i386/ > trap.c:462 > #10 0xc09d9a0b in calltrap () at /usr/src/sys/i386/i386/exception.s: > 139 > #11 0xc08d088d in nfsrv_readdirplus (nfsd=0xc3bb4500, > slp=0xc3d31900, td=0xc3b0be00, mrq=0xd61f8c58) at /usr/src/sys/ > nfsserver/nfs_serv.c:3640 > #12 0xc08de4b4 in nfssvc (td=0xc3b0be00, uap=0xd61f8cfc) at /usr/ > src/sys/nfsserver/nfs_syscalls.c:469 > #13 0xc09f36d3 in syscall (frame=0xd61f8d38) at /usr/src/sys/i386/ > i386/trap.c:1006 > #14 0xc09d9a70 in Xint0x80_syscall () at /usr/src/sys/i386/i386/ > exception.s:196 > #15 0x00000033 in ?? () > Previous frame inner to this frame (corrupt stack?) > (kgdb) list *0xc08d088d > 0xc08d088d is in nfsrv_readdirplus (/usr/src/sys/nfsserver/ > nfs_serv.c:3640). > 3635 */ > 3636 if (VFS_VGET(vp->v_mount, dp- > >d_fileno, LK_EXCLUSIVE, > 3637 &nvp)) > 3638 goto invalid; > 3639 bzero((caddr_t)nfhp, NFSX_V3FH); > 3640 nfhp->fh_fsid = > 3641 nvp->v_mount->mnt_stat.f_fsid; > 3642 /* > 3643 * XXXRW: Assert the mountpoints > are the same so that > 3644 * we know that acquiring Giant > based on the > _______________________________________________ > freebsd-current_at_freebsd.org mailing list > http://lists.freebsd.org/mailman/listinfo/freebsd-current > To unsubscribe, send any mail to "freebsd-current- > unsubscribe_at_freebsd.org"Received on Tue Jun 26 2007 - 15:48:37 UTC
This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:39:13 UTC