From: Giuliano Procida <gprocida@google.com>
To: greg@kroah.com
Cc: stable@vger.kernel.org, Giuliano Procida <gprocida@google.com>
Subject: [PATCH 1/4] block: more locking around delayed work
Date: Tue, 7 Apr 2020 17:55:36 +0100 [thread overview]
Message-ID: <20200407165539.161505-2-gprocida@google.com> (raw)
In-Reply-To: <CAGvU0Hn2U88Dy2MEP-ZTNvfrWaKF4XL9EtR+4iF5BZ6_GW3Tvg@mail.gmail.com>
commit 287922eb0b186e2a5bf54fdd04b734c25c90035c upstream.
The upstream commit (block: defer timeouts to a workqueue) included
various locking changes. The original commit message did not say
anything about the extra locking. Perhaps this is only needed for
workqueue callbacks and not timer callbacks. We assume it is needed
here.
This patch includes the locking changes but leaves timeouts using a
timer.
Both blk_mq_rq_timer and blk_rq_timed_out_timer will return without
without doing any work if they cannot acquire the queue (without
waiting).
Signed-off-by: Giuliano Procida <gprocida@google.com>
---
block/blk-mq.c | 4 ++++
block/blk-timeout.c | 3 +++
2 files changed, 7 insertions(+)
diff --git a/block/blk-mq.c b/block/blk-mq.c
index 8649dbf06ce4..11a23bf73fd9 100644
--- a/block/blk-mq.c
+++ b/block/blk-mq.c
@@ -628,6 +628,9 @@ static void blk_mq_rq_timer(unsigned long priv)
};
int i;
+ if (blk_queue_enter(q, GFP_NOWAIT))
+ return;
+
blk_mq_queue_tag_busy_iter(q, blk_mq_check_expired, &data);
if (data.next_set) {
@@ -642,6 +645,7 @@ static void blk_mq_rq_timer(unsigned long priv)
blk_mq_tag_idle(hctx);
}
}
+ blk_queue_exit(q);
}
/*
diff --git a/block/blk-timeout.c b/block/blk-timeout.c
index aa40aa93381b..2bc03df554a6 100644
--- a/block/blk-timeout.c
+++ b/block/blk-timeout.c
@@ -134,6 +134,8 @@ void blk_rq_timed_out_timer(unsigned long data)
struct request *rq, *tmp;
int next_set = 0;
+ if (blk_queue_enter(q, GFP_NOWAIT))
+ return;
spin_lock_irqsave(q->queue_lock, flags);
list_for_each_entry_safe(rq, tmp, &q->timeout_list, timeout_list)
@@ -143,6 +145,7 @@ void blk_rq_timed_out_timer(unsigned long data)
mod_timer(&q->timeout, round_jiffies_up(next));
spin_unlock_irqrestore(q->queue_lock, flags);
+ blk_queue_exit(q);
}
/**
--
2.26.0.292.g33ef6b2f38-goog
next prev parent reply other threads:[~2020-04-07 16:55 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-04-01 17:47 backport request for use-after-free blk_mq_queue_tag_busy_iter Giuliano Procida
2020-04-01 17:55 ` Greg KH
2020-04-03 9:20 ` Greg KH
2020-04-03 22:30 ` Giuliano Procida
2020-04-07 16:31 ` Giuliano Procida
2020-04-07 16:55 ` [PATCH 0/4] " Giuliano Procida
2020-04-10 9:04 ` Greg KH
2020-04-07 16:55 ` Giuliano Procida [this message]
2020-04-10 9:03 ` [PATCH 1/4] block: more locking around delayed work Greg KH
2020-04-15 12:03 ` Giuliano Procida
2020-04-07 16:55 ` [PATCH 2/4] blk-mq: Allow timeouts to run while queue is freezing Giuliano Procida
2020-04-07 16:55 ` [PATCH 3/4] blk-mq: sync things with blk_mq_queue_tag_busy_iter Giuliano Procida
2020-04-07 16:55 ` [PATCH 4/4] blk-mq: Allow blocking queue tag iter callbacks Giuliano Procida
2020-04-07 21:02 ` backport request for use-after-free blk_mq_queue_tag_busy_iter Giuliano Procida
2020-04-15 13:00 ` [PATCH v2 0/4] " Giuliano Procida
2020-05-18 7:27 ` Greg KH
2020-04-15 13:00 ` [PATCH v2 1/4] block: more locking around delayed work Giuliano Procida
2020-04-15 13:00 ` [PATCH v2 2/4] blk-mq: Allow timeouts to run while queue is freezing Giuliano Procida
2020-04-15 13:00 ` [PATCH v2 3/4] blk-mq: sync the update nr_hw_queues with blk_mq_queue_tag_busy_iter Giuliano Procida
2020-04-15 13:00 ` [PATCH v2 4/4] blk-mq: Allow blocking queue tag iter callbacks Giuliano Procida
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=20200407165539.161505-2-gprocida@google.com \
--to=gprocida@google.com \
--cc=greg@kroah.com \
--cc=stable@vger.kernel.org \
/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;
as well as URLs for NNTP newsgroup(s).