From: Mike Snitzer <snitzer@redhat.com>
To: Bart Van Assche <bart.vanassche@sandisk.com>
Cc: device-mapper development <dm-devel@redhat.com>
Subject: Re: [PATCH 1/7] dm: Fix a (theoretical?) race condition in rq_completed()
Date: Tue, 15 Nov 2016 19:46:01 -0500 [thread overview]
Message-ID: <20161116004601.GC19059@redhat.com> (raw)
In-Reply-To: <8357d3a6-f1bc-3631-6ca4-fc78253640f7@sandisk.com>
On Tue, Nov 15 2016 at 6:32pm -0500,
Bart Van Assche <bart.vanassche@sandisk.com> wrote:
> It is required to hold the queue lock when calling blk_run_queue_async()
> to avoid that a race between blk_run_queue_async() and
> blk_cleanup_queue() is triggered.
>
> Signed-off-by: Bart Van Assche <bart.vanassche@sandisk.com>
I picked this patch up earlier today, see:
https://git.kernel.org/cgit/linux/kernel/git/device-mapper/linux-dm.git/commit/?h=dm-4.10&id=d15bb3a6467e102e60d954aadda5fb19ce6fd8ec
But you your "(theoretical?)", I'd really expected you to have realized
an actual the need for this change...
Mike
> ---
> drivers/md/dm-rq.c | 10 ++++++++--
> 1 file changed, 8 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/md/dm-rq.c b/drivers/md/dm-rq.c
> index f9f37ad..7df7948 100644
> --- a/drivers/md/dm-rq.c
> +++ b/drivers/md/dm-rq.c
> @@ -210,6 +210,9 @@ static void rq_end_stats(struct mapped_device *md, struct request *orig)
> */
> static void rq_completed(struct mapped_device *md, int rw, bool run_queue)
> {
> + struct request_queue *q = md->queue;
> + unsigned long flags;
> +
> atomic_dec(&md->pending[rw]);
>
> /* nudge anyone waiting on suspend queue */
> @@ -222,8 +225,11 @@ static void rq_completed(struct mapped_device *md, int rw, bool run_queue)
> * back into ->request_fn() could deadlock attempting to grab the
> * queue lock again.
> */
> - if (!md->queue->mq_ops && run_queue)
> - blk_run_queue_async(md->queue);
> + if (!q->mq_ops && run_queue) {
> + spin_lock_irqsave(q->queue_lock, flags);
> + blk_run_queue_async(q);
> + spin_unlock_irqrestore(q->queue_lock, flags);
> + }
>
> /*
> * dm_put() must be at the end of this function. See the comment above
> --
> 2.10.1
>
> --
> dm-devel mailing list
> dm-devel@redhat.com
> https://www.redhat.com/mailman/listinfo/dm-devel
next prev parent reply other threads:[~2016-11-16 0:46 UTC|newest]
Thread overview: 39+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-11-15 23:31 [PATCH 0/7] dm-mpath: Fix a race condition in the blk-mq path Bart Van Assche
2016-11-15 23:32 ` [PATCH 1/7] dm: Fix a (theoretical?) race condition in rq_completed() Bart Van Assche
2016-11-16 0:46 ` Mike Snitzer [this message]
2016-11-15 23:33 ` [PATCH 2/7] dm: Simplify dm_table_determine_type() Bart Van Assche
2016-11-16 14:54 ` Mike Snitzer
2016-11-16 20:14 ` Bart Van Assche
2016-11-16 21:11 ` Mike Snitzer
2016-11-16 21:53 ` Bart Van Assche
2016-11-16 23:09 ` Mike Snitzer
2016-11-15 23:33 ` [PATCH 3/7] dm-mpath: Document a locking assumption Bart Van Assche
2016-11-18 0:07 ` Mike Snitzer
2016-11-15 23:34 ` [PATCH 4/7] dm-mpath: Change return type of pg_init_all_paths() from int into void Bart Van Assche
2016-11-15 23:34 ` [PATCH 5/7] dm-mpath: Do not touch *__clone if request allocation fails Bart Van Assche
2016-11-15 23:34 ` [PATCH 6/7] dm-mpath: Avoid code duplication in __multipath_map() Bart Van Assche
2016-11-16 0:39 ` Mike Snitzer
2016-11-15 23:35 ` [PATCH 7/7] dm-mpath: Fix a race condition " Bart Van Assche
2016-11-16 0:37 ` Mike Snitzer
2016-11-16 0:40 ` Bart Van Assche
2016-11-16 1:01 ` Mike Snitzer
2016-11-16 1:08 ` Bart Van Assche
2016-11-16 1:50 ` Mike Snitzer
2016-11-21 21:44 ` Bart Van Assche
2016-11-21 23:43 ` Mike Snitzer
2016-11-21 23:57 ` Bart Van Assche
2016-11-22 0:34 ` Mike Snitzer
2016-11-22 23:47 ` Bart Van Assche
2016-11-23 0:48 ` Mike Snitzer
2016-11-23 3:16 ` Mike Snitzer
2016-11-23 18:28 ` Bart Van Assche
2016-11-23 18:50 ` Mike Snitzer
2016-11-16 0:47 ` [PATCH 0/7] dm-mpath: Fix a race condition in the blk-mq path Mike Snitzer
2016-11-16 0:57 ` Bart Van Assche
2016-11-16 1:08 ` Mike Snitzer
2016-11-16 1:10 ` Bart Van Assche
2016-11-16 1:53 ` Mike Snitzer
2016-11-16 7:39 ` Hannes Reinecke
2016-11-16 14:56 ` Mike Snitzer
2016-11-16 18:22 ` Bart Van Assche
2016-11-16 19:32 ` Mike Snitzer
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=20161116004601.GC19059@redhat.com \
--to=snitzer@redhat.com \
--cc=bart.vanassche@sandisk.com \
--cc=dm-devel@redhat.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.