From: Jens Axboe <axboe@kernel.dk>
To: linux-block@vger.kernel.org
Cc: Jens Axboe <axboe@kernel.dk>
Subject: [PATCH 3/3] block: only allocate poll_stats if there's a user of them
Date: Tue, 23 Nov 2021 09:18:13 -0700 [thread overview]
Message-ID: <20211123161813.326307-4-axboe@kernel.dk> (raw)
In-Reply-To: <20211123161813.326307-1-axboe@kernel.dk>
This is essentially never used, yet it's about 1/3rd of the total
queue size. Allocate it when needed, and don't embed it in the queue.
Signed-off-by: Jens Axboe <axboe@kernel.dk>
---
block/blk-mq.c | 20 ++++++++++++++++++--
block/blk-stat.c | 6 ------
block/blk-sysfs.c | 1 +
include/linux/blkdev.h | 9 +++++++--
4 files changed, 26 insertions(+), 10 deletions(-)
diff --git a/block/blk-mq.c b/block/blk-mq.c
index 20a6445f6a01..cb41c441aa8f 100644
--- a/block/blk-mq.c
+++ b/block/blk-mq.c
@@ -4577,9 +4577,25 @@ EXPORT_SYMBOL_GPL(blk_mq_update_nr_hw_queues);
/* Enable polling stats and return whether they were already enabled. */
static bool blk_poll_stats_enable(struct request_queue *q)
{
- if (test_bit(QUEUE_FLAG_POLL_STATS, &q->queue_flags) ||
- blk_queue_flag_test_and_set(QUEUE_FLAG_POLL_STATS, q))
+ struct blk_rq_stat *poll_stat;
+
+ if (test_bit(QUEUE_FLAG_POLL_STATS, &q->queue_flags))
return true;
+
+ poll_stat = kzalloc(BLK_MQ_POLL_STATS_BKTS * sizeof(*poll_stat),
+ GFP_ATOMIC);
+ if (!poll_stat)
+ return false;
+
+ spin_lock_irq(&q->stats->lock);
+ if (blk_queue_flag_test_and_set(QUEUE_FLAG_POLL_STATS, q)) {
+ spin_unlock_irq(&q->stats->lock);
+ kfree(poll_stat);
+ return true;
+ }
+ q->poll_stat = poll_stat;
+ spin_unlock_irq(&q->stats->lock);
+
blk_stat_add_callback(q, q->poll_cb);
return false;
}
diff --git a/block/blk-stat.c b/block/blk-stat.c
index ae3dd1fb8e61..7ba504166d1b 100644
--- a/block/blk-stat.c
+++ b/block/blk-stat.c
@@ -12,12 +12,6 @@
#include "blk-mq.h"
#include "blk.h"
-struct blk_queue_stats {
- struct list_head callbacks;
- spinlock_t lock;
- bool enable_accounting;
-};
-
void blk_rq_stat_init(struct blk_rq_stat *stat)
{
stat->min = -1ULL;
diff --git a/block/blk-sysfs.c b/block/blk-sysfs.c
index cd75b0f73dc6..e1b846ec58cb 100644
--- a/block/blk-sysfs.c
+++ b/block/blk-sysfs.c
@@ -790,6 +790,7 @@ static void blk_release_queue(struct kobject *kobj)
blk_stat_free_callback(q->poll_cb);
blk_free_queue_stats(q->stats);
+ kfree(q->poll_stat);
blk_exit_queue(q);
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h
index bd4370baccca..b46fd2a80062 100644
--- a/include/linux/blkdev.h
+++ b/include/linux/blkdev.h
@@ -28,10 +28,15 @@ struct blk_flush_queue;
struct kiocb;
struct pr_ops;
struct rq_qos;
-struct blk_queue_stats;
struct blk_stat_callback;
struct blk_crypto_profile;
+struct blk_queue_stats {
+ struct list_head callbacks;
+ spinlock_t lock;
+ bool enable_accounting;
+};
+
/* Must be consistent with blk_mq_poll_stats_bkt() */
#define BLK_MQ_POLL_STATS_BKTS 16
@@ -267,7 +272,7 @@ struct request_queue {
int poll_nsec;
struct blk_stat_callback *poll_cb;
- struct blk_rq_stat poll_stat[BLK_MQ_POLL_STATS_BKTS];
+ struct blk_rq_stat *poll_stat;
struct timer_list timeout;
struct work_struct timeout_work;
--
2.34.0
next prev parent reply other threads:[~2021-11-23 16:18 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-11-23 16:18 [PATCHSET 0/3] Misc block cleanups Jens Axboe
2021-11-23 16:18 ` [PATCH 1/3] block: move io_context creation into where it's needed Jens Axboe
2021-11-23 16:39 ` Christoph Hellwig
2021-11-23 16:46 ` Jens Axboe
2021-11-23 16:53 ` Jens Axboe
2021-11-23 16:56 ` Christoph Hellwig
2021-11-23 17:04 ` Jens Axboe
2021-11-23 16:18 ` [PATCH 2/3] blk-ioprio: don't set bio priority if not needed Jens Axboe
2021-11-23 16:18 ` Jens Axboe [this message]
2021-11-23 16:21 ` [PATCH 3/3] block: only allocate poll_stats if there's a user of them Johannes Thumshirn
2021-11-23 16:27 ` Jens Axboe
2021-11-23 16:41 ` Christoph Hellwig
2021-11-23 16:44 ` Jens Axboe
2021-11-23 17:05 ` Christoph Hellwig
2021-11-23 17:06 ` Jens Axboe
-- strict thread matches above, loose matches on Subject: below --
2021-11-23 17:10 [PATCHSET 0/3 v2] Misc block cleanups Jens Axboe
2021-11-23 17:10 ` [PATCH 3/3] block: only allocate poll_stats if there's a user of them Jens Axboe
2021-11-23 18:50 ` Christoph Hellwig
2021-11-23 18:58 ` Jens Axboe
2021-11-23 18:59 ` Christoph Hellwig
2021-11-23 19:03 ` Jens Axboe
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=20211123161813.326307-4-axboe@kernel.dk \
--to=axboe@kernel.dk \
--cc=linux-block@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