From: Gal Rosen <galr@storwize.com>
To: Vladislav Bolkhovitin <vst@vlnb.net>
Cc: James Bottomley <James.Bottomley@HansenPartnership.com>,
linux-driver@qlogic.com, linux-scsi@vger.kernel.org,
scst-devel@lists.sourceforge.net
Subject: Re: [PATCH] qla2xxx: Fix dpc_thread race on the module unload
Date: Wed, 30 Jul 2008 10:10:39 +0300 [thread overview]
Message-ID: <1217401839.4133.119.camel@galr-linux> (raw)
In-Reply-To: <488E0C78.80205@vlnb.net>
From: James Bottomley <James.Bottomley@Ha...> - 2008-07-29 15:28
On Tue, 2008-07-29 at 19:13 +0400, Vladislav Bolkhovitin wrote:
> James Bottomley wrote:
> > On Tue, 2008-07-29 at 13:32 +0400, Vladislav Bolkhovitin wrote:
> >> Nope, taking only one that hunk from this patch isn't sufficient.
> >> Around
> >> dpc_thread there is pretty simple and classical race. You can't do
> >>
> >> if (x != NULL)
> >> y = *x;
> >>
> >> without any protection, if x can be set to NULL by another thread.
It
> >> can happen exactly between "if" and "*x" and hence lead to a crash,
> >> correct?
> >
> > No.
>
> What "No"? The above unlocked "if (x != NULL) y = *x;" is always safe
> now? ;)
No ... no as in your analysis based on the example is not correct to
conclude protection is required. We have quite a number of examples of
this within the linux kernel (the SCSI error thread would be one).
But the wake up of the SCSI error thread is also called by holding a
spinlock (but not to protect the stopping of the thread).
The difference here is that the assignment of the thread to NULL is in
the thread function, when exiting from the while loop, and not before
calling kthread_stop() routine (like in the qla).
Maybe this would be the solution.
next prev parent reply other threads:[~2008-07-30 7:10 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-07-28 17:33 [PATCH] qla2xxx: Fix dpc_thread race on the module unload Vladislav Bolkhovitin
2008-07-28 17:41 ` Andrew Vasquez
2008-07-28 17:49 ` Vladislav Bolkhovitin
2008-07-28 17:56 ` James Bottomley
2008-07-28 18:14 ` Vladislav Bolkhovitin
2008-07-29 7:30 ` Gal Rosen
2008-07-30 7:10 ` Gal Rosen [this message]
2008-07-31 6:12 ` Gal Rosen
2008-07-31 9:11 ` Vladislav Bolkhovitin
2008-07-31 16:02 ` Andrew Vasquez
2008-07-31 17:41 ` Vladislav Bolkhovitin
2008-07-31 17:55 ` Andrew Vasquez
2008-08-01 12:28 ` Vladislav Bolkhovitin
2008-07-29 4:27 ` Christoph Hellwig
2008-07-29 9:32 ` Vladislav Bolkhovitin
2008-07-28 18:07 ` Andrew Vasquez
2008-07-29 9:32 ` Vladislav Bolkhovitin
2008-07-29 14:40 ` James Bottomley
2008-07-29 15:13 ` Vladislav Bolkhovitin
2008-07-29 15:28 ` James Bottomley
2008-07-29 15:36 ` Vladislav Bolkhovitin
2008-07-30 10:30 ` Andrew Vasquez
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1217401839.4133.119.camel@galr-linux \
--to=galr@storwize.com \
--cc=James.Bottomley@HansenPartnership.com \
--cc=linux-driver@qlogic.com \
--cc=linux-scsi@vger.kernel.org \
--cc=scst-devel@lists.sourceforge.net \
--cc=vst@vlnb.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox