Yes - this patch looks better. I also am not sure whether the send_sig is still necessary to wake up a thread blocked in tcp recv_msg (only do a wake_up_process vs. doing a send_sig(SIGKILL) )
Unless someone knows for sure whether the send_sig is redundant, I would like to merge Shaggy's version of the patch "young dave" <[EMAIL PROTECTED]> wrote on 05/23/2007 03:37:04 AM: > Hi, > Sorry for the wrong patch in my last post. > > How about save the tsk then call kthread_stop like this: > > diff -udr linux/fs/cifs/connect.c linux.new/fs/cifs/connect.c > --- linux/fs/cifs/connect.c 2007-05-23 10:59:13.000000000 +0000 > +++ linux.new/fs/cifs/connect.c 2007-05-23 16:33:54.000000000 +0000 > @@ -2069,8 +2069,9 @@ > srvTcp->tcpStatus = CifsExiting; > spin_unlock(&GlobalMid_Lock); > if (srvTcp->tsk) { > + struct task_struct * tsk = srvTcp->tsk; > send_sig(SIGKILL,srvTcp->tsk,1); > - kthread_stop(srvTcp->tsk); > + kthread_stop(tsk); > } > } > /* If find_unc succeeded then rc == 0 so we can not end */ > > Regards > dave Shaggy's suggested patch seems slightly better: diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c index 216fb62..b6e2158 100644 --- a/fs/cifs/connect.c +++ b/fs/cifs/connect.c @@ -2069,8 +2069,12 @@ cifs_mount(struct super_block *sb, struct cifs_sb_info *cifs_sb, srvTcp->tcpStatus = CifsExiting; spin_unlock(&GlobalMid_Lock); if (srvTcp->tsk) { + struct task_struct *tsk; send_sig(SIGKILL,srvTcp->tsk,1); - kthread_stop(srvTcp->tsk); + /* srvTcp->tsk can be zeroed at any time */ + tsk = srvTcp->tsk; + if (tsk) + kthread_stop(tsk); } } /* If find_unc succeeded then rc == 0 so we can not end */ Steve French Senior Software Engineer Linux Technology Center - IBM Austin phone: 512-838-2294 email: sfrench at-sign us dot ibm dot com - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/