All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/4] blk-mq: cleanup on all kinds of kobjects
@ 2017-02-22 10:13 Ming Lei
  2017-02-22 10:13 ` [PATCH 1/4] blk-mq: initialize mq kobjects in blk_mq_init_allocated_queue() Ming Lei
                   ` (5 more replies)
  0 siblings, 6 replies; 8+ messages in thread
From: Ming Lei @ 2017-02-22 10:13 UTC (permalink / raw)
  To: Jens Axboe, linux-kernel, linux-block, Christoph Hellwig, Omar Sandoval
  Cc: Ming Lei

This patchset cleans up on kojects of request_queue.mq_kobj,
sw queue's kobject and hw queue's kobject.

The 1st patch initialized kobject of request_queue and sw queue
in blk_mq_init_allocated_queue(), so we can avoid to initialize
these kobjects several times, and this patch fixes one kerne
warning reported from Omar Sandoval.

The 2nd patch makes lifetime consitent between mq request queue/sw
queue and their kobjects.

The 3rd patch makes lifetime consitent between hw queue and their
kobjects.

The last patch is a followup of 3rd patch.

Thanks,
Ming

Ming Lei (4):
  blk-mq: initialize mq kobjects in blk_mq_init_allocated_queue()
  blk-mq: make lifetime consitent between q/ctx and its kobject
  blk-mq: make lifetime consistent between hctx and its kobject
  blk-mq: free hctx->cpumask in release handler of hctx's kobject

 block/blk-mq-sysfs.c | 40 +++++++++++++++++++++++++---------------
 block/blk-mq.c       | 28 ++++++++++------------------
 block/blk-mq.h       |  2 ++
 3 files changed, 37 insertions(+), 33 deletions(-)

-- 
2.7.4

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCH 1/4] blk-mq: initialize mq kobjects in blk_mq_init_allocated_queue()
  2017-02-22 10:13 [PATCH 0/4] blk-mq: cleanup on all kinds of kobjects Ming Lei
@ 2017-02-22 10:13 ` Ming Lei
  2017-02-22 10:14 ` [PATCH 2/4] blk-mq: make lifetime consitent between q/ctx and its kobject Ming Lei
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 8+ messages in thread
From: Ming Lei @ 2017-02-22 10:13 UTC (permalink / raw)
  To: Jens Axboe, linux-kernel, linux-block, Christoph Hellwig, Omar Sandoval
  Cc: Ming Lei

Both q->mq_kobj and sw queues' kobjects should have been initialized
once, instead of doing that each add_disk context.

Also this patch removes clearing of ctx in blk_mq_init_cpu_queues()
because percpu allocator fills zero to allocated variable.

This patch fixes one issue[1] reported from Omar.

[1] kernel wearning when doing unbind/bind on one scsi-mq device

[   19.347924] kobject (ffff8800791ea0b8): tried to init an initialized object, something is seriously wrong.
[   19.349781] CPU: 1 PID: 84 Comm: kworker/u8:1 Not tainted 4.10.0-rc7-00210-g53f39eeaa263 #34
[   19.350686] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.10.1-20161122_114906-anatol 04/01/2014
[   19.350920] Workqueue: events_unbound async_run_entry_fn
[   19.350920] Call Trace:
[   19.350920]  dump_stack+0x63/0x83
[   19.350920]  kobject_init+0x77/0x90
[   19.350920]  blk_mq_register_dev+0x40/0x130
[   19.350920]  blk_register_queue+0xb6/0x190
[   19.350920]  device_add_disk+0x1ec/0x4b0
[   19.350920]  sd_probe_async+0x10d/0x1c0 [sd_mod]
[   19.350920]  async_run_entry_fn+0x48/0x150
[   19.350920]  process_one_work+0x1d0/0x480
[   19.350920]  worker_thread+0x48/0x4e0
[   19.350920]  kthread+0x101/0x140
[   19.350920]  ? process_one_work+0x480/0x480
[   19.350920]  ? kthread_create_on_node+0x60/0x60
[   19.350920]  ret_from_fork+0x2c/0x40

Cc: Omar Sandoval <osandov@osandov.com>
Signed-off-by: Ming Lei <tom.leiming@gmail.com>
---
 block/blk-mq-sysfs.c | 4 +---
 block/blk-mq.c       | 4 +++-
 block/blk-mq.h       | 1 +
 3 files changed, 5 insertions(+), 4 deletions(-)

diff --git a/block/blk-mq-sysfs.c b/block/blk-mq-sysfs.c
index 295e69670c39..124305407c80 100644
--- a/block/blk-mq-sysfs.c
+++ b/block/blk-mq-sysfs.c
@@ -277,7 +277,7 @@ void blk_mq_hctx_kobj_init(struct blk_mq_hw_ctx *hctx)
 	kobject_init(&hctx->kobj, &blk_mq_hw_ktype);
 }
 
-static void blk_mq_sysfs_init(struct request_queue *q)
+void blk_mq_sysfs_init(struct request_queue *q)
 {
 	struct blk_mq_ctx *ctx;
 	int cpu;
@@ -297,8 +297,6 @@ int blk_mq_register_dev(struct device *dev, struct request_queue *q)
 
 	blk_mq_disable_hotplug();
 
-	blk_mq_sysfs_init(q);
-
 	ret = kobject_add(&q->mq_kobj, kobject_get(&dev->kobj), "%s", "mq");
 	if (ret < 0)
 		goto out;
diff --git a/block/blk-mq.c b/block/blk-mq.c
index b29e7dc7b309..ade1d7cde37e 100644
--- a/block/blk-mq.c
+++ b/block/blk-mq.c
@@ -1941,7 +1941,6 @@ static void blk_mq_init_cpu_queues(struct request_queue *q,
 		struct blk_mq_ctx *__ctx = per_cpu_ptr(q->queue_ctx, i);
 		struct blk_mq_hw_ctx *hctx;
 
-		memset(__ctx, 0, sizeof(*__ctx));
 		__ctx->cpu = i;
 		spin_lock_init(&__ctx->lock);
 		INIT_LIST_HEAD(&__ctx->rq_list);
@@ -2248,6 +2247,9 @@ struct request_queue *blk_mq_init_allocated_queue(struct blk_mq_tag_set *set,
 	if (!q->queue_ctx)
 		goto err_exit;
 
+	/* init q->mq_kobj and sw queues' kobjects */
+	blk_mq_sysfs_init(q);
+
 	q->queue_hw_ctx = kzalloc_node(nr_cpu_ids * sizeof(*(q->queue_hw_ctx)),
 						GFP_KERNEL, set->numa_node);
 	if (!q->queue_hw_ctx)
diff --git a/block/blk-mq.h b/block/blk-mq.h
index 24b2256186f3..445343425f6d 100644
--- a/block/blk-mq.h
+++ b/block/blk-mq.h
@@ -77,6 +77,7 @@ static inline struct blk_mq_hw_ctx *blk_mq_map_queue(struct request_queue *q,
 /*
  * sysfs helpers
  */
+extern void blk_mq_sysfs_init(struct request_queue *q);
 extern int blk_mq_sysfs_register(struct request_queue *q);
 extern void blk_mq_sysfs_unregister(struct request_queue *q);
 extern void blk_mq_hctx_kobj_init(struct blk_mq_hw_ctx *hctx);
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 2/4] blk-mq: make lifetime consitent between q/ctx and its kobject
  2017-02-22 10:13 [PATCH 0/4] blk-mq: cleanup on all kinds of kobjects Ming Lei
  2017-02-22 10:13 ` [PATCH 1/4] blk-mq: initialize mq kobjects in blk_mq_init_allocated_queue() Ming Lei
@ 2017-02-22 10:14 ` Ming Lei
  2017-02-22 10:14 ` [PATCH 3/4] blk-mq: make lifetime consistent between hctx " Ming Lei
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 8+ messages in thread
From: Ming Lei @ 2017-02-22 10:14 UTC (permalink / raw)
  To: Jens Axboe, linux-kernel, linux-block, Christoph Hellwig, Omar Sandoval
  Cc: Ming Lei

Currently from kobject view, both q->mq_kobj and ctx->kobj can
be released during one cycle of blk_mq_register_dev() and
blk_mq_unregister_dev(). Actually, sw queue's lifetime is
same with its request queue's, which is covered by request_queue->kobj.

So we don't need to call kobject_put() for the two kinds of
kobject in __blk_mq_unregister_dev(), instead we do that
in release handler of request queue.

Signed-off-by: Ming Lei <tom.leiming@gmail.com>
---
 block/blk-mq-sysfs.c | 20 +++++++++++++-------
 block/blk-mq.c       |  7 ++++++-
 block/blk-mq.h       |  1 +
 3 files changed, 20 insertions(+), 8 deletions(-)

diff --git a/block/blk-mq-sysfs.c b/block/blk-mq-sysfs.c
index 124305407c80..77fb238af2be 100644
--- a/block/blk-mq-sysfs.c
+++ b/block/blk-mq-sysfs.c
@@ -242,15 +242,11 @@ static int blk_mq_register_hctx(struct blk_mq_hw_ctx *hctx)
 static void __blk_mq_unregister_dev(struct device *dev, struct request_queue *q)
 {
 	struct blk_mq_hw_ctx *hctx;
-	struct blk_mq_ctx *ctx;
-	int i, j;
+	int i;
 
 	queue_for_each_hw_ctx(q, hctx, i) {
 		blk_mq_unregister_hctx(hctx);
 
-		hctx_for_each_ctx(hctx, ctx, j)
-			kobject_put(&ctx->kobj);
-
 		kobject_put(&hctx->kobj);
 	}
 
@@ -258,8 +254,6 @@ static void __blk_mq_unregister_dev(struct device *dev, struct request_queue *q)
 
 	kobject_uevent(&q->mq_kobj, KOBJ_REMOVE);
 	kobject_del(&q->mq_kobj);
-	kobject_put(&q->mq_kobj);
-
 	kobject_put(&dev->kobj);
 
 	q->mq_sysfs_init_done = false;
@@ -277,6 +271,18 @@ void blk_mq_hctx_kobj_init(struct blk_mq_hw_ctx *hctx)
 	kobject_init(&hctx->kobj, &blk_mq_hw_ktype);
 }
 
+void blk_mq_sysfs_deinit(struct request_queue *q)
+{
+	struct blk_mq_ctx *ctx;
+	int cpu;
+
+	for_each_possible_cpu(cpu) {
+		ctx = per_cpu_ptr(q->queue_ctx, cpu);
+		kobject_put(&ctx->kobj);
+	}
+	kobject_put(&q->mq_kobj);
+}
+
 void blk_mq_sysfs_init(struct request_queue *q)
 {
 	struct blk_mq_ctx *ctx;
diff --git a/block/blk-mq.c b/block/blk-mq.c
index ade1d7cde37e..bc45736d70ba 100644
--- a/block/blk-mq.c
+++ b/block/blk-mq.c
@@ -2160,7 +2160,12 @@ void blk_mq_release(struct request_queue *q)
 
 	kfree(q->queue_hw_ctx);
 
-	/* ctx kobj stays in queue_ctx */
+	/*
+	 * release .mq_kobj and sw queue's kobject now because
+	 * both share lifetime with request queue.
+	 */
+	blk_mq_sysfs_deinit(q);
+
 	free_percpu(q->queue_ctx);
 }
 
diff --git a/block/blk-mq.h b/block/blk-mq.h
index 445343425f6d..2cd73b762351 100644
--- a/block/blk-mq.h
+++ b/block/blk-mq.h
@@ -78,6 +78,7 @@ static inline struct blk_mq_hw_ctx *blk_mq_map_queue(struct request_queue *q,
  * sysfs helpers
  */
 extern void blk_mq_sysfs_init(struct request_queue *q);
+extern void blk_mq_sysfs_deinit(struct request_queue *q);
 extern int blk_mq_sysfs_register(struct request_queue *q);
 extern void blk_mq_sysfs_unregister(struct request_queue *q);
 extern void blk_mq_hctx_kobj_init(struct blk_mq_hw_ctx *hctx);
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 3/4] blk-mq: make lifetime consistent between hctx and its kobject
  2017-02-22 10:13 [PATCH 0/4] blk-mq: cleanup on all kinds of kobjects Ming Lei
  2017-02-22 10:13 ` [PATCH 1/4] blk-mq: initialize mq kobjects in blk_mq_init_allocated_queue() Ming Lei
  2017-02-22 10:14 ` [PATCH 2/4] blk-mq: make lifetime consitent between q/ctx and its kobject Ming Lei
@ 2017-02-22 10:14 ` Ming Lei
  2017-02-22 10:14 ` [PATCH 4/4] blk-mq: free hctx->cpumask in release handler of hctx's kobject Ming Lei
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 8+ messages in thread
From: Ming Lei @ 2017-02-22 10:14 UTC (permalink / raw)
  To: Jens Axboe, linux-kernel, linux-block, Christoph Hellwig, Omar Sandoval
  Cc: Ming Lei

This patch removes kobject_put() over hctx in __blk_mq_unregister_dev(),
and trys to keep lifetime consistent between hctx and hctx's kobject.

Now blk_mq_sysfs_register() and blk_mq_sysfs_unregister() become
totally symmetrical, and kobject's refcounter drops to zero just
when the hctx is freed.

Signed-off-by: Ming Lei <tom.leiming@gmail.com>
---
 block/blk-mq-sysfs.c | 15 ++++++++++-----
 block/blk-mq.c       |  5 +----
 2 files changed, 11 insertions(+), 9 deletions(-)

diff --git a/block/blk-mq-sysfs.c b/block/blk-mq-sysfs.c
index 77fb238af2be..cb19ec16a7fc 100644
--- a/block/blk-mq-sysfs.c
+++ b/block/blk-mq-sysfs.c
@@ -17,6 +17,14 @@ static void blk_mq_sysfs_release(struct kobject *kobj)
 {
 }
 
+static void blk_mq_hw_sysfs_release(struct kobject *kobj)
+{
+	struct blk_mq_hw_ctx *hctx = container_of(kobj, struct blk_mq_hw_ctx,
+						  kobj);
+	kfree(hctx->ctxs);
+	kfree(hctx);
+}
+
 struct blk_mq_ctx_sysfs_entry {
 	struct attribute attr;
 	ssize_t (*show)(struct blk_mq_ctx *, char *);
@@ -200,7 +208,7 @@ static struct kobj_type blk_mq_ctx_ktype = {
 static struct kobj_type blk_mq_hw_ktype = {
 	.sysfs_ops	= &blk_mq_hw_sysfs_ops,
 	.default_attrs	= default_hw_ctx_attrs,
-	.release	= blk_mq_sysfs_release,
+	.release	= blk_mq_hw_sysfs_release,
 };
 
 static void blk_mq_unregister_hctx(struct blk_mq_hw_ctx *hctx)
@@ -244,12 +252,9 @@ static void __blk_mq_unregister_dev(struct device *dev, struct request_queue *q)
 	struct blk_mq_hw_ctx *hctx;
 	int i;
 
-	queue_for_each_hw_ctx(q, hctx, i) {
+	queue_for_each_hw_ctx(q, hctx, i)
 		blk_mq_unregister_hctx(hctx);
 
-		kobject_put(&hctx->kobj);
-	}
-
 	blk_mq_debugfs_unregister_hctxs(q);
 
 	kobject_uevent(&q->mq_kobj, KOBJ_REMOVE);
diff --git a/block/blk-mq.c b/block/blk-mq.c
index bc45736d70ba..993bb4d4d909 100644
--- a/block/blk-mq.c
+++ b/block/blk-mq.c
@@ -2152,8 +2152,7 @@ void blk_mq_release(struct request_queue *q)
 	queue_for_each_hw_ctx(q, hctx, i) {
 		if (!hctx)
 			continue;
-		kfree(hctx->ctxs);
-		kfree(hctx);
+		kobject_put(&hctx->kobj);
 	}
 
 	q->mq_map = NULL;
@@ -2232,8 +2231,6 @@ static void blk_mq_realloc_hw_ctxs(struct blk_mq_tag_set *set,
 			blk_mq_exit_hctx(q, set, hctx, j);
 			free_cpumask_var(hctx->cpumask);
 			kobject_put(&hctx->kobj);
-			kfree(hctx->ctxs);
-			kfree(hctx);
 			hctxs[j] = NULL;
 
 		}
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 4/4] blk-mq: free hctx->cpumask in release handler of hctx's kobject
  2017-02-22 10:13 [PATCH 0/4] blk-mq: cleanup on all kinds of kobjects Ming Lei
                   ` (2 preceding siblings ...)
  2017-02-22 10:14 ` [PATCH 3/4] blk-mq: make lifetime consistent between hctx " Ming Lei
@ 2017-02-22 10:14 ` Ming Lei
  2017-02-28  9:46 ` [PATCH 0/4] blk-mq: cleanup on all kinds of kobjects Peter Zijlstra
  2017-03-03 15:34   ` Jens Axboe
  5 siblings, 0 replies; 8+ messages in thread
From: Ming Lei @ 2017-02-22 10:14 UTC (permalink / raw)
  To: Jens Axboe, linux-kernel, linux-block, Christoph Hellwig, Omar Sandoval
  Cc: Ming Lei

It is obviously that hctx->cpumask is per hctx, and both
share same lifetime, so this patch moves freeing of hctx->cpumask
into release handler of hctx's kobject.

Signed-off-by: Ming Lei <tom.leiming@gmail.com>
---
 block/blk-mq-sysfs.c |  1 +
 block/blk-mq.c       | 12 ------------
 2 files changed, 1 insertion(+), 12 deletions(-)

diff --git a/block/blk-mq-sysfs.c b/block/blk-mq-sysfs.c
index cb19ec16a7fc..d745ab81033a 100644
--- a/block/blk-mq-sysfs.c
+++ b/block/blk-mq-sysfs.c
@@ -21,6 +21,7 @@ static void blk_mq_hw_sysfs_release(struct kobject *kobj)
 {
 	struct blk_mq_hw_ctx *hctx = container_of(kobj, struct blk_mq_hw_ctx,
 						  kobj);
+	free_cpumask_var(hctx->cpumask);
 	kfree(hctx->ctxs);
 	kfree(hctx);
 }
diff --git a/block/blk-mq.c b/block/blk-mq.c
index 993bb4d4d909..db97f53e99d0 100644
--- a/block/blk-mq.c
+++ b/block/blk-mq.c
@@ -1851,16 +1851,6 @@ static void blk_mq_exit_hw_queues(struct request_queue *q,
 	}
 }
 
-static void blk_mq_free_hw_queues(struct request_queue *q,
-		struct blk_mq_tag_set *set)
-{
-	struct blk_mq_hw_ctx *hctx;
-	unsigned int i;
-
-	queue_for_each_hw_ctx(q, hctx, i)
-		free_cpumask_var(hctx->cpumask);
-}
-
 static int blk_mq_init_hctx(struct request_queue *q,
 		struct blk_mq_tag_set *set,
 		struct blk_mq_hw_ctx *hctx, unsigned hctx_idx)
@@ -2229,7 +2219,6 @@ static void blk_mq_realloc_hw_ctxs(struct blk_mq_tag_set *set,
 			if (hctx->tags)
 				blk_mq_free_map_and_requests(set, j);
 			blk_mq_exit_hctx(q, set, hctx, j);
-			free_cpumask_var(hctx->cpumask);
 			kobject_put(&hctx->kobj);
 			hctxs[j] = NULL;
 
@@ -2342,7 +2331,6 @@ void blk_mq_free_queue(struct request_queue *q)
 	blk_mq_del_queue_tag_set(q);
 
 	blk_mq_exit_hw_queues(q, set, set->nr_hw_queues);
-	blk_mq_free_hw_queues(q, set);
 }
 
 /* Basically redo blk_mq_init_queue with queue frozen */
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH 0/4] blk-mq: cleanup on all kinds of kobjects
  2017-02-22 10:13 [PATCH 0/4] blk-mq: cleanup on all kinds of kobjects Ming Lei
                   ` (3 preceding siblings ...)
  2017-02-22 10:14 ` [PATCH 4/4] blk-mq: free hctx->cpumask in release handler of hctx's kobject Ming Lei
@ 2017-02-28  9:46 ` Peter Zijlstra
  2017-03-03 15:34   ` Jens Axboe
  5 siblings, 0 replies; 8+ messages in thread
From: Peter Zijlstra @ 2017-02-28  9:46 UTC (permalink / raw)
  To: Ming Lei
  Cc: Jens Axboe, linux-kernel, linux-block, Christoph Hellwig, Omar Sandoval

On Wed, Feb 22, 2017 at 06:13:58PM +0800, Ming Lei wrote:
> This patchset cleans up on kojects of request_queue.mq_kobj,
> sw queue's kobject and hw queue's kobject.
> 
> The 1st patch initialized kobject of request_queue and sw queue
> in blk_mq_init_allocated_queue(), so we can avoid to initialize
> these kobjects several times, and this patch fixes one kerne
> warning reported from Omar Sandoval.
> 
> The 2nd patch makes lifetime consitent between mq request queue/sw
> queue and their kobjects.
> 
> The 3rd patch makes lifetime consitent between hw queue and their
> kobjects.
> 
> The last patch is a followup of 3rd patch.

These do indeed make the kobject warnings, and the resulting refcount
warning, go away.

Tested-by: Peter Zijlstra (Intel) <peterz@infradead.org>

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 0/4] blk-mq: cleanup on all kinds of kobjects
  2017-02-22 10:13 [PATCH 0/4] blk-mq: cleanup on all kinds of kobjects Ming Lei
@ 2017-03-03 15:34   ` Jens Axboe
  2017-02-22 10:14 ` [PATCH 2/4] blk-mq: make lifetime consitent between q/ctx and its kobject Ming Lei
                     ` (4 subsequent siblings)
  5 siblings, 0 replies; 8+ messages in thread
From: Jens Axboe @ 2017-03-03 15:34 UTC (permalink / raw)
  To: Ming Lei, linux-kernel, linux-block, Christoph Hellwig, Omar Sandoval

On 02/22/2017 03:13 AM, Ming Lei wrote:
> This patchset cleans up on kojects of request_queue.mq_kobj,
> sw queue's kobject and hw queue's kobject.
> 
> The 1st patch initialized kobject of request_queue and sw queue
> in blk_mq_init_allocated_queue(), so we can avoid to initialize
> these kobjects several times, and this patch fixes one kerne
> warning reported from Omar Sandoval.
> 
> The 2nd patch makes lifetime consitent between mq request queue/sw
> queue and their kobjects.
> 
> The 3rd patch makes lifetime consitent between hw queue and their
> kobjects.
> 
> The last patch is a followup of 3rd patch.

Thanks for looking into this, Ming. From a quick look, looks good
to me. I'm going to queue it up for some testing, and hope that
we can funnel this into 4.11 for the next pull request.

-- 
Jens Axboe

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 0/4] blk-mq: cleanup on all kinds of kobjects
@ 2017-03-03 15:34   ` Jens Axboe
  0 siblings, 0 replies; 8+ messages in thread
From: Jens Axboe @ 2017-03-03 15:34 UTC (permalink / raw)
  To: Ming Lei, linux-kernel, linux-block, Christoph Hellwig, Omar Sandoval

On 02/22/2017 03:13 AM, Ming Lei wrote:
> This patchset cleans up on kojects of request_queue.mq_kobj,
> sw queue's kobject and hw queue's kobject.
> 
> The 1st patch initialized kobject of request_queue and sw queue
> in blk_mq_init_allocated_queue(), so we can avoid to initialize
> these kobjects several times, and this patch fixes one kerne
> warning reported from Omar Sandoval.
> 
> The 2nd patch makes lifetime consitent between mq request queue/sw
> queue and their kobjects.
> 
> The 3rd patch makes lifetime consitent between hw queue and their
> kobjects.
> 
> The last patch is a followup of 3rd patch.

Thanks for looking into this, Ming. From a quick look, looks good
to me. I'm going to queue it up for some testing, and hope that
we can funnel this into 4.11 for the next pull request.

-- 
Jens Axboe

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2017-03-03 15:39 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-02-22 10:13 [PATCH 0/4] blk-mq: cleanup on all kinds of kobjects Ming Lei
2017-02-22 10:13 ` [PATCH 1/4] blk-mq: initialize mq kobjects in blk_mq_init_allocated_queue() Ming Lei
2017-02-22 10:14 ` [PATCH 2/4] blk-mq: make lifetime consitent between q/ctx and its kobject Ming Lei
2017-02-22 10:14 ` [PATCH 3/4] blk-mq: make lifetime consistent between hctx " Ming Lei
2017-02-22 10:14 ` [PATCH 4/4] blk-mq: free hctx->cpumask in release handler of hctx's kobject Ming Lei
2017-02-28  9:46 ` [PATCH 0/4] blk-mq: cleanup on all kinds of kobjects Peter Zijlstra
2017-03-03 15:34 ` Jens Axboe
2017-03-03 15:34   ` Jens Axboe

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.