Hi again,

Attached is a semantically equivalent patch to the one I posted a few
minutes ago, but I think this one is more readable.

Please let me know if you get it tested, rick

----- Original Message -----
> Hi John,
> 
> the box crashed again running a 10-stable kernel with following patch of
> yours:
> 
> On Wed, 7 Oct 2015, John Baldwin wrote:
> > Index: smb_iod.c
> > ===================================================================
> > --- smb_iod.c   (revision 288952)
> > +++ smb_iod.c   (working copy)
> > @@ -624,6 +624,13 @@
> >                        SMB_IOD_EVUNLOCK(iod);
> >                } else
> >                        free(evp, M_SMBIOD);
> > +               if (iod->iod_flags & SMBIOD_SHUTDOWN) {
> > +                       if (!STAILQ_EMPTY(&iod->iod_evlist))
> > +                               printf("%s: shutdown with pending
> > events\n",
> > +                                   __func__);
> > +                       }
> > +                       return;
> > +               }
> >        }
> > #if 0
> >        if (iod->iod_state == SMBIOD_ST_VCACTIVE) {
> >
> 
> here is what I got on the kvm console:
> 
>      login: panic: Assertion mtx_unowned(m) failed at
>      /usr/src/sys/kern/kern_mutex.c:955^M
>      cpuid = 1^M
>      KDB: stack backtrace:^M
>      #0 0xffffffff80975bb0 at kdb_backtrace+0x60^M
>      #1 0xffffffff8093baa6 at vpanic+0x126^M
>      #2 0xffffffff8093b979 at kassert_panic+0x139^M
>      #3 0xffffffff80921c47 at _mtx_destroy+0x77^M
>      #4 0xffffffff81a1c114 at smb_iod_destroy+0xc4^M
>      #5 0xffffffff81a12eea at smb_vc_free+0x1a^M
>      #6 0xffffffff81a13e24 at sdp_trydestroy+0xb4^M
>      #7 0xffffffff81a1cb36 at smbfs_unmount+0xd6^M
>      #8 0xffffffff809d9e84 at dounmount+0x524^M
>      #9 0xffffffff809d9936 at sys_unmount+0x3c6^M
>      #10 0xffffffff80d42235 at amd64_syscall+0x265^M
>      #11 0xffffffff80d25cfb at Xfast_syscall+0xfb^M
>      Uptime: 19h48m28s^M
>      Dumping 179 out of 999
>      MB:..9%..18%..27%..36%..45%..54%..63%..72%..81%..98%^M
>      Dump complete^M
>      Automatic reboot in 15 seconds - press a key on the console to abort^M
> 
> heres the crashinfo:
> 
>      panic: Assertion mtx_unowned(m) failed at
>      /usr/src/sys/kern/kern_mutex.c:955
> 
>      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 "amd64-marcel-freebsd"...
> 
>      Unread portion of the kernel message buffer:
>      panic: Assertion mtx_unowned(m) failed at
>      /usr/src/sys/kern/kern_mutex.c:955
>      cpuid = 1
>      KDB: stack backtrace:
>      #0 0xffffffff80975bb0 at kdb_backtrace+0x60
>      #1 0xffffffff8093baa6 at vpanic+0x126
>      #2 0xffffffff8093b979 at kassert_panic+0x139
>      #3 0xffffffff80921c47 at _mtx_destroy+0x77
>      #4 0xffffffff81a1c114 at smb_iod_destroy+0xc4
>      #5 0xffffffff81a12eea at smb_vc_free+0x1a
>      #6 0xffffffff81a13e24 at sdp_trydestroy+0xb4
>      #7 0xffffffff81a1cb36 at smbfs_unmount+0xd6
>      #8 0xffffffff809d9e84 at dounmount+0x524
>      #9 0xffffffff809d9936 at sys_unmount+0x3c6
>      #10 0xffffffff80d42235 at amd64_syscall+0x265
>      #11 0xffffffff80d25cfb at Xfast_syscall+0xfb
>      Uptime: 19h48m28s
>      Dumping 179 out of 999
>      MB:..9%..18%..27%..36%..45%..54%..63%..72%..81%..98%
> 
>      Reading symbols from /boot/kernel/smbfs.ko.symbols...done.
>      Loaded symbols for /boot/kernel/smbfs.ko.symbols
>      Reading symbols from /boot/kernel/libiconv.ko.symbols...done.
>      Loaded symbols for /boot/kernel/libiconv.ko.symbols
>      Reading symbols from /boot/kernel/libmchain.ko.symbols...done.
>      Loaded symbols for /boot/kernel/libmchain.ko.symbols
>      #0  doadump (textdump=<value optimized out>) at pcpu.h:219
>      219     pcpu.h: No such file or directory.
>           in pcpu.h
>      (kgdb) #0  doadump (textdump=<value optimized out>) at pcpu.h:219
>      #1  0xffffffff8093b5f2 in kern_reboot (howto=260)
>       at /usr/src/sys/kern/kern_shutdown.c:451
>      #2  0xffffffff8093bae5 in vpanic (fmt=<value optimized out>,
>       ap=<value optimized out>) at /usr/src/sys/kern/kern_shutdown.c:758
>      #3  0xffffffff8093b979 in kassert_panic (fmt=<value optimized out>)
>       at /usr/src/sys/kern/kern_shutdown.c:646
>      #4  0xffffffff80921c47 in _mtx_destroy (c=0xfffff80009284690)
>       at /usr/src/sys/kern/kern_mutex.c:955
>      #5  0xffffffff81a1c114 in smb_iod_destroy (iod=0xfffff80009284600)
>       at /usr/src/sys/modules/smbfs/../../netsmb/smb_iod.c:706
>      #6  0xffffffff81a12eea in smb_vc_free (cp=0xfffff8003a602a00)
>       at /usr/src/sys/modules/smbfs/../../netsmb/smb_conn.c:499
>      #7  0xffffffff81a13e24 in sdp_trydestroy (sdp=0xfffff8000a7cbc80)
>       at /usr/src/sys/modules/smbfs/../../netsmb/smb_dev.c:166
>      #8  0xffffffff81a1cb36 in smbfs_unmount (mp=0xfffff80039f88330,
>       mntflags=<value optimized out>)
>       at /usr/src/sys/modules/smbfs/../../fs/smbfs/smbfs_vfsops.c:297
>      #9  0xffffffff809d9e84 in dounmount (mp=0xfffff80039f88330,
>      flags=134217728,
>       td=0xfffff8000f2b0000) at /usr/src/sys/kern/vfs_mount.c:1313
>      #10 0xffffffff809d9936 in sys_unmount (td=0xfffff8000f2b0000,
>       uap=0xfffffe003d67fb80) at /usr/src/sys/kern/vfs_mount.c:1205
>      #11 0xffffffff80d42235 in amd64_syscall (td=0xfffff8000f2b0000,
>      traced=0)
>       at subr_syscall.c:134
>      #12 0xffffffff80d25cfb in Xfast_syscall ()
>       at /usr/src/sys/amd64/amd64/exception.S:396
>      #13 0x000000080089190a in ?? ()
>      Previous frame inner to this frame (corrupt stack?)
>      Current language:  auto; currently minimal
>      (kgdb)
> 
> 
> I have kgdb710 from ports setup in case you need me to check something.
> 
> Greetings
> Christian
> 
> --
> Christian Kratzer                   CK Software GmbH
> Email:   c...@cksoft.de               Wildberger Weg 24/2
> Phone:   +49 7032 893 997 - 0       D-71126 Gaeufelden
> Fax:     +49 7032 893 997 - 9       HRB 245288, Amtsgericht Stuttgart
> Mobile:  +49 171 1947 843           Geschaeftsfuehrer: Christian Kratzer
> Web:     http://www.cksoft.de/
> _______________________________________________
> freebsd-stable@freebsd.org mailing list
> https://lists.freebsd.org/mailman/listinfo/freebsd-stable
> To unsubscribe, send any mail to "freebsd-stable-unsubscr...@freebsd.org"
> 
--- smb_iod.c.orig	2015-10-10 18:53:34.000000000 -0400
+++ smb_iod.c	2015-10-10 18:58:54.000000000 -0400
@@ -619,6 +619,32 @@ smb_iod_main(struct smbiod *iod)
 			break;
 		}
 		if (evp->ev_type & SMBIOD_EV_SYNC) {
+			if (evp->ev_type & SMBIOD_EV_SHUTDOWN) {
+				smb_iod_sendall(iod);
+				smb_iod_recvall(iod);
+				SMB_IOD_EVLOCK(iod);
+				if (!STAILQ_EMPTY(&iod->iod_evlist)) {
+					/*
+					 * If this printf occurs, the code here
+					 * should be modified to do a loop
+					 * free()ing all the entries still
+					 * in the STAILQ.
+					 */
+					printf("%s: shutdown with pending"
+					    " events\n", __func__);
+				}
+				/*
+				 * For the SMBIOD_EV_SHUTDOWN case, everything
+				 * else should be performed before this point,
+				 * since smb_iod_destroy() is able to proceed to
+				 * destroy the mutexes and the *evp structure
+				 * once the wakeup()/SMB_IOD_EVUNLOCK() is
+				 * performed.
+				 */
+				wakeup(evp);
+				SMB_IOD_EVUNLOCK(iod);
+				return;
+			}
 			SMB_IOD_EVLOCK(iod);
 			wakeup(evp);
 			SMB_IOD_EVUNLOCK(iod);
_______________________________________________
freebsd-stable@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-stable
To unsubscribe, send any mail to "freebsd-stable-unsubscr...@freebsd.org"

Reply via email to