On Wed, 23 May 2007 08:28:47 -0500 Steven French <[EMAIL PROTECTED]> wrote:
> 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 */ The wordwrapping made that extraordinarily hard to read. Repairing... --- 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 */ This can end up running kthread_stop() against an already-exited task. - 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/