2014-12-01 00:01:06

by Shaohua Li

[permalink] [raw]
Subject: [PATCH] blk-mq: move the kdump check to blk_mq_alloc_tag_set

We call blk_mq_alloc_tag_set() first then blk_mq_init_queue(). The requests are
allocated in the former function. So the kdump check should be moved to there
to really save memory.

Signed-off-by: Shaohua Li <[email protected]>
---
block/blk-mq.c | 20 ++++++++++----------
1 file changed, 10 insertions(+), 10 deletions(-)

diff --git a/block/blk-mq.c b/block/blk-mq.c
index 1d016fc..d5b4643 100644
--- a/block/blk-mq.c
+++ b/block/blk-mq.c
@@ -1784,16 +1784,6 @@ struct request_queue *blk_mq_init_queue(struct blk_mq_tag_set *set)
if (!ctx)
return ERR_PTR(-ENOMEM);

- /*
- * If a crashdump is active, then we are potentially in a very
- * memory constrained environment. Limit us to 1 queue and
- * 64 tags to prevent using too much memory.
- */
- if (is_kdump_kernel()) {
- set->nr_hw_queues = 1;
- set->queue_depth = min(64U, set->queue_depth);
- }
-
hctxs = kmalloc_node(set->nr_hw_queues * sizeof(*hctxs), GFP_KERNEL,
set->numa_node);

@@ -2065,6 +2055,16 @@ int blk_mq_alloc_tag_set(struct blk_mq_tag_set *set)
set->queue_depth = BLK_MQ_MAX_DEPTH;
}

+ /*
+ * If a crashdump is active, then we are potentially in a very
+ * memory constrained environment. Limit us to 1 queue and
+ * 64 tags to prevent using too much memory.
+ */
+ if (is_kdump_kernel()) {
+ set->nr_hw_queues = 1;
+ set->queue_depth = min(64U, set->queue_depth);
+ }
+
set->tags = kmalloc_node(set->nr_hw_queues *
sizeof(struct blk_mq_tags *),
GFP_KERNEL, set->numa_node);
--
1.8.3.2


2014-12-01 01:32:15

by Jens Axboe

[permalink] [raw]
Subject: Re: [PATCH] blk-mq: move the kdump check to blk_mq_alloc_tag_set

On 11/30/2014 05:00 PM, Shaohua Li wrote:
> We call blk_mq_alloc_tag_set() first then blk_mq_init_queue(). The requests are
> allocated in the former function. So the kdump check should be moved to there
> to really save memory.

Strange, it was even tested, but must have been altered after the fact.
Patch looks good to me, applied.

--
Jens Axboe