DragonFly BSD
DragonFly bugs List (threaded) for 2004-12
[Date Prev][Date Next]  [Thread Prev][Thread Next]  [Date Index][Thread Index]

Re: kernel panic in -stable


From: Matthew Dillon <dillon@xxxxxxxxxxxxxxxxxxxx>
Date: Wed, 29 Dec 2004 19:15:09 -0800 (PST)

    Ok, try this patch.

    Theoretically the trigger for your bug is when you disconnect an
    smb session, then do a 'ps' (or anything does a 'ps' equivalent,
    in the case of the crash a KDE daemon was doing it).  See if you
    can reproduce the bug without the patch and then see if the patch
    fixes it.  It may be hard to reproduce but since it was totally
    broken before I'll commit the patch anyway (unless the patch causes
    an instant panic that is :-)).

					-Matt

Index: smb_iod.c
===================================================================
RCS file: /cvs/src/sys/netproto/smb/smb_iod.c,v
retrieving revision 1.10
diff -u -r1.10 smb_iod.c
--- smb_iod.c	21 Jun 2004 05:31:47 -0000	1.10
+++ smb_iod.c	30 Dec 2004 03:07:24 -0000
@@ -648,7 +648,7 @@
 }
 
 #define	kthread_create_compat	kthread_create2
-
+#define kthread_exit_compat	kthread_exit2
 
 void
 smb_iod_thread(void *arg)
@@ -663,7 +663,7 @@
 			break;
 		tsleep(&iod->iod_flags, 0, "90idle", iod->iod_sleeptimo);
 	}
-	kthread_exit();
+	kthread_exit_compat();
 }
 
 int
Index: smb_subr.c
===================================================================
RCS file: /cvs/src/sys/netproto/smb/smb_subr.c,v
retrieving revision 1.12
diff -u -r1.12 smb_subr.c
--- smb_subr.c	20 Jun 2004 22:29:10 -0000	1.12
+++ smb_subr.c	30 Dec 2004 03:09:46 -0000
@@ -361,6 +361,9 @@
 /*
  * Create a kernel process/thread/whatever.  It shares it's address space
  * with proc0 - ie: kernel only.
+ *
+ * XXX only the SMB protocol uses this, we should convert this mess to a
+ * pure thread when possible.
  */
 int
 kthread_create2(void (*func)(void *), void *arg,
@@ -399,6 +402,12 @@
 	return 0;
 }
 
+void
+kthread_exit2(void)
+{
+	exit1(0);
+}
+
 /*
  * smb_sleep() icky compat routine.  Leave the token held through the tsleep
  * to interlock against the sleep.  Remember that the token could be lost
Index: smb_subr.h
===================================================================
RCS file: /cvs/src/sys/netproto/smb/smb_subr.h,v
retrieving revision 1.9
diff -u -r1.9 smb_subr.h
--- smb_subr.h	19 Mar 2004 17:06:08 -0000	1.9
+++ smb_subr.h	30 Dec 2004 03:08:17 -0000
@@ -172,6 +172,7 @@
  */
 int kthread_create2(void (*func)(void *), void *arg,
     struct proc **newpp, int flags, const char *fmt, ...);
+void kthread_exit2(void);
 int smb_sleep(void *chan, struct lwkt_tokref *ilock, int slpflags, const char *wmesg, int timo);
 
 



[Date Prev][Date Next]  [Thread Prev][Thread Next]  [Date Index][Thread Index]