2014-04-19 10:00:32

by Ming Lei

[permalink] [raw]
Subject: [PATCH v1 next 0/4] blk-mq: misc changes

Hi,

Three of them are fixes, another one is cleanup.

V1:
- line break(2/4)
- use explicit cast(3/4)

Thanks,
--
Ming Lei


2014-04-19 10:01:05

by Ming Lei

[permalink] [raw]
Subject: [PATCH v1 next 1/4] blk-mq: free hctx->ctx_map when init failed

Avoid memory leak in the failure path.

Reviewed-by: Christoph Hellwig <[email protected]>
Signed-off-by: Ming Lei <[email protected]>
---
block/blk-mq.c | 1 +
1 file changed, 1 insertion(+)

diff --git a/block/blk-mq.c b/block/blk-mq.c
index ee225cc..5fbbb22 100644
--- a/block/blk-mq.c
+++ b/block/blk-mq.c
@@ -1289,6 +1289,7 @@ static int blk_mq_init_hw_queues(struct request_queue *q,

blk_mq_unregister_cpu_notifier(&hctx->cpu_notifier);
kfree(hctx->ctxs);
+ kfree(hctx->ctx_map);
}

return 1;
--
1.7.9.5

2014-04-19 10:01:46

by Ming Lei

[permalink] [raw]
Subject: [PATCH v1 next 2/4] blk-mq: fix allocation of set->tags

type of set->tags is struct blk_mq_tags **.

Reviewed-by: Christoph Hellwig <[email protected]>
Signed-off-by: Ming Lei <[email protected]>
---
block/blk-mq.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/block/blk-mq.c b/block/blk-mq.c
index 5fbbb22..c277797 100644
--- a/block/blk-mq.c
+++ b/block/blk-mq.c
@@ -1537,7 +1537,8 @@ int blk_mq_alloc_tag_set(struct blk_mq_tag_set *set)
return -EINVAL;


- set->tags = kmalloc_node(set->nr_hw_queues * sizeof(struct blk_mq_tags),
+ set->tags = kmalloc_node(set->nr_hw_queues *
+ sizeof(struct blk_mq_tags *),
GFP_KERNEL, set->numa_node);
if (!set->tags)
goto out;
--
1.7.9.5

2014-04-19 10:01:54

by Ming Lei

[permalink] [raw]
Subject: [PATCH v1 next 3/4] blk-mq: user (1 << order) to implement order_to_size()

Cc: Jörg-Volker Peetz <[email protected]>
Cc: Max Filippov <[email protected]>
Signed-off-by: Ming Lei <[email protected]>
---
block/blk-mq.c | 7 +------
1 file changed, 1 insertion(+), 6 deletions(-)

diff --git a/block/blk-mq.c b/block/blk-mq.c
index c277797..3a560a4 100644
--- a/block/blk-mq.c
+++ b/block/blk-mq.c
@@ -1130,12 +1130,7 @@ static void blk_mq_free_rq_map(struct blk_mq_tag_set *set,

static size_t order_to_size(unsigned int order)
{
- size_t ret = PAGE_SIZE;
-
- while (order--)
- ret *= 2;
-
- return ret;
+ return (size_t)PAGE_SIZE << order;
}

static struct blk_mq_tags *blk_mq_init_rq_map(struct blk_mq_tag_set *set,
--
1.7.9.5

2014-04-19 10:02:05

by Ming Lei

[permalink] [raw]
Subject: [PATCH v1 next 4/4] blk-mq: initialize req->q in allocation

The patch basically reverts the patch of(blk-mq:
initialize request on allocation) in Jens's tree(already
in -next), and only initialize req->q in allocation
for two reasons:

- presumed cache hotness on completion
- blk_rq_tagged(rq) depends on reset of req->mq_ctx

Signed-off-by: Ming Lei <[email protected]>
---
block/blk-mq.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/block/blk-mq.c b/block/blk-mq.c
index 3a560a4..c26b3be 100644
--- a/block/blk-mq.c
+++ b/block/blk-mq.c
@@ -82,7 +82,6 @@ static struct request *__blk_mq_alloc_request(struct blk_mq_hw_ctx *hctx,
tag = blk_mq_get_tag(hctx->tags, gfp, reserved);
if (tag != BLK_MQ_TAG_FAIL) {
rq = hctx->tags->rqs[tag];
- blk_rq_init(hctx->queue, rq);
rq->tag = tag;

return rq;
@@ -187,6 +186,7 @@ static void blk_mq_rq_ctx_init(struct request_queue *q, struct blk_mq_ctx *ctx,
if (blk_queue_io_stat(q))
rw_flags |= REQ_IO_STAT;

+ rq->q = q;
rq->mq_ctx = ctx;
rq->cmd_flags = rw_flags;
rq->start_time = jiffies;
@@ -258,6 +258,7 @@ static void __blk_mq_free_request(struct blk_mq_hw_ctx *hctx,
const int tag = rq->tag;
struct request_queue *q = rq->q;

+ blk_rq_init(hctx->queue, rq);
blk_mq_put_tag(hctx->tags, tag);
blk_mq_queue_exit(q);
}
@@ -1194,6 +1195,7 @@ static struct blk_mq_tags *blk_mq_init_rq_map(struct blk_mq_tag_set *set,
left -= to_do * rq_size;
for (j = 0; j < to_do; j++) {
tags->rqs[i] = p;
+ blk_rq_init(NULL, tags->rqs[i]);
if (set->ops->init_request) {
if (set->ops->init_request(set->driver_data,
tags->rqs[i], hctx_idx, i,
--
1.7.9.5

2014-04-22 01:03:15

by Jens Axboe

[permalink] [raw]
Subject: Re: [PATCH v1 next 0/4] blk-mq: misc changes

On 2014-04-19 04:00, Ming Lei wrote:
> Hi,
>
> Three of them are fixes, another one is cleanup.
>
> V1:
> - line break(2/4)
> - use explicit cast(3/4)

I believe this is v2, but I guess your first posting was v0 :-)
Applied for testing for 3.16, thanks.

--
Jens Axboe

2014-04-22 01:25:20

by Ming Lei

[permalink] [raw]
Subject: Re: [PATCH v1 next 0/4] blk-mq: misc changes

On Tue, Apr 22, 2014 at 9:03 AM, Jens Axboe <[email protected]> wrote:
> On 2014-04-19 04:00, Ming Lei wrote:
>>
>> Hi,
>>
>> Three of them are fixes, another one is cleanup.
>>
>> V1:
>> - line break(2/4)
>> - use explicit cast(3/4)
>
>
> I believe this is v2, but I guess your first posting was v0 :-)
> Applied for testing for 3.16, thanks.

Yeah, it is the C programming style, :-)

Thanks,
--
Ming Lei