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 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.