When the write (or read) fails, the NFS client (nfs_doio) seems to set b_error (and BIO_ERROR in b_ioflags) correctly, but it propagates the error back up to VOP_STRATEGY(). I think the fix is to have nfs_strategy() ignore the error returned by nfs_doio() and always return back success, but I need to look at this closely one more time and test a bit before I commit that change. I'll do that shortly. mohan --- David O'Brien <obrien_at_freebsd.org> wrote: > FreeBSD 7.0-CURRENT #196: Wed Oct 26 23:19:58 PDT 2005 amd64 > > GNU gdb 6.1.1 [FreeBSD] > > Unread portion of the kernel message buffer: > panic: VOP_STRATEGY failed bp=0xffffffff9a12f1c8 vp=0xffffff012fa6d5d0 > cpuid = 3 > KDB: stack backtrace: > panic() at panic+0x253 > bufstrategy() at bufstrategy+0x6d > nfs_writebp() at nfs_writebp+0xf0 > nfs_write() at nfs_write+0x698 > VOP_WRITE_APV() at VOP_WRITE_APV+0xa4 > vn_write() at vn_write+0x1c3 > dofilewrite() at dofilewrite+0x87 > kern_writev() at kern_writev+0x51 > write() at write+0x4a > syscall() at syscall+0x4e7 > Xfast_syscall() at Xfast_syscall+0xa8 > --- syscall (4, FreeBSD ELF64, write), rip = 0x47a43c, rsp = 0x7fffffffe338, rbp = 0x680 --- > Uptime: 1h32m49s > > (kgdb) where > #0 doadump () at pcpu.h:172 > #1 0xffffffff803c6c6c in boot (howto=260) at ../../../kern/kern_shutdown.c:399 > #2 0xffffffff803c670b in panic ( > fmt=0xffffffff80647608 "VOP_STRATEGY failed bp=%p vp=%p") > at ../../../kern/kern_shutdown.c:555 > #3 0xffffffff8041ebad in bufstrategy (bo=0x0, bp=0xffffffff9a12f1c8) > at ../../../kern/vfs_bio.c:3690 > #4 0xffffffff804cd240 in nfs_writebp (bp=0xffffffff9a12f1c8, force=0, td=0x0) > at buf.h:415 > #5 0xffffffff804be458 in nfs_write (ap=0x0) at buf.h:401 > #6 0xffffffff805de9e4 in VOP_WRITE_APV (vop=0xffffffff807e58a0, > a=0xffffffffb83a49e0) at vnode_if.c:698 > #7 0xffffffff804390b3 in vn_write (fp=0xffffff00a9aea5a0, > uio=0xffffffffb83a4b20, active_cred=0x0, flags=0, td=0xffffff009fbd3500) > at vnode_if.h:372 > #8 0xffffffff803f1487 in dofilewrite (td=0xffffff009fbd3500, fd=3, > fp=0xffffff00a9aea5a0, auio=0xffffffffb83a4b20, offset=0, flags=0) > at file.h:246 > #9 0xffffffff803f1751 in kern_writev (td=0xffffff009fbd3500, fd=3, > auio=0xffffffffb83a4b20) at ../../../kern/sys_generic.c:402 > #10 0xffffffff803f184a in write (td=0x0, uap=0x0) > at ../../../kern/sys_generic.c:326 > #11 0xffffffff8058d6d7 in syscall (frame= > {tf_rdi = 3, tf_rsi = 6615040, tf_rdx = 1664, tf_rcx = 7, tf_r8 = 32752, tf_r9 = > 140737488347528, tf_rax = 4, tf_rbx = 6039296, tf_rbp = 1664, tf_r10 = -1096800402576, tf_r11 = > 6041920, tf_r12 = 6615040, tf_r13 = 0, tf_r14 = 0, tf_r15 = 0, tf_trapno = 12, tf_addr = > 6615040, tf_flags = 139, tf_err = 2, tf_rip = 4695100, tf_cs = 43, tf_rflags = 514, tf_rsp = > 140737488347960, tf_ss = 35}) > at ../../../amd64/amd64/trap.c:814 > #12 0xffffffff8057a518 in Xfast_syscall () > at ../../../amd64/amd64/exception.S:270 > #13 0x000000000047a43c in ?? () > Previous frame inner to this frame (corrupt stack?) > _______________________________________________ > 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 Thu Oct 27 2005 - 17:18:58 UTC
This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:38:46 UTC