Date: Thu, 26 Mar 2009 19:10:08 GMT From: Jaakko Heinonen <jh@saunalahti.fi> To: freebsd-fs@FreeBSD.org Subject: Re: kern/132068: [zfs] page fault when using ZFS over NFS on 7.1-RELEASE/amd64 Message-ID: <200903261910.n2QJA8HF015949@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
The following reply was made to PR kern/132068; it has been noted by GNATS. From: Jaakko Heinonen <jh@saunalahti.fi> To: Edward Fisk <7ogcg7g02@sneakemail.com> Cc: bug-followup@FreeBSD.org Subject: Re: kern/132068: [zfs] page fault when using ZFS over NFS on 7.1-RELEASE/amd64 Date: Thu, 26 Mar 2009 21:01:10 +0200 I was able to trigger a panic on current using this patch: %%% Index: sys/nfsserver/nfs_srvsubs.c =================================================================== --- sys/nfsserver/nfs_srvsubs.c (revision 190316) +++ sys/nfsserver/nfs_srvsubs.c (working copy) @@ -1169,6 +1169,8 @@ nfsrv_fhtovp(fhandle_t *fhp, int lockfla vfs_unbusy(mp); if (error) goto out; + if ((*vpp)->v_type == VBAD) + panic("VBAD *vpp in nfsrv_fhtovp()"); #ifdef MNT_EXNORESPORT if (!(exflags & (MNT_EXNORESPORT|MNT_EXPUBLIC))) { saddr = (struct sockaddr_in *)nam; %%% #2 0xc08537d2 in panic (fmt=Variable "fmt" is not available.) at /home/jaakko/src/head/sys/kern/kern_shutdown.c:576 #3 0xc0a1c17e in nfsrv_fhtovp (fhp=0xf48ecae4, lockflag=1, vpp=0xf48ecad8, vfslockedp=0xf48ecac4, nfsd=0xf48ecbb0, slp=0x0, nam=0xc63aeac4, rdonlyp=0xf48ecad0, pubflag=1) at /home/jaakko/src/head/sys/nfsserver/nfs_srvsubs.c:1173 #4 0xc0a0ff20 in nfsrv_commit (nfsd=0xf48ecbb0, slp=0x0, mrq=0xf48ecba8) at /home/jaakko/src/head/sys/nfsserver/nfs_serv.c:3836 #5 0xc0a1b1a7 in nfssvc_program (rqst=0xca95d000, xprt=0xc63aea00) at /home/jaakko/src/head/sys/nfsserver/nfs_srvkrpc.c:420 #6 0xc0a35fe2 in svc_run_internal (pool=0xc57a7a80, ismaster=0) at /home/jaakko/src/head/sys/rpc/svc.c:883 #7 0xc0a362c0 in svc_thread_start (arg=0xc57a7a80) at /home/jaakko/src/head/sys/rpc/svc.c:1188 #8 0xc082fd38 in fork_exit (callout=0xc0a362b0 <svc_thread_start>, arg=0xc57a7a80, frame=0xf48ecd38) at /home/jaakko/src/head/sys/kern/kern_fork.c:821 #9 0xc0b41630 in fork_trampoline () at /home/jaakko/src/head/sys/i386/i386/exception.s:270 I now know what is going on. The vnode may be reclaimed during zfs_zget() because it doesn't hold the vnode lock (except when a new znode is created). I tried to modify zfs_zget() to grab the vnode lock and check if the vnode is doomed. I was able to trigger the condition. However eventually vnode locking deadlocked with lookup(). I used exclusive locking so maybe one could avoid deadlocking with shared locking but it isn't a real solution especially because shared lookups can be disabled. Also other deadlock scenarios may exist. On 2009-03-05, Edward Fisk wrote: > The machine did a panic earlier, but was unfortunately unable to do a dump. > > panic: Bad link elm 0xffffff014f3e2400 prev->next != elm > xprt_unregister_locked() at xprt_unregister_locked+0xad This is a different issue. You may have already seen this discussion: http://lists.freebsd.org/pipermail/freebsd-current/2009-March/005097.html -- Jaakko
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200903261910.n2QJA8HF015949>