看板 DFBSD_bugs 關於我們 聯絡資訊
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);