From: Omar Sandoval <osandov@osandov.com>
To: Ming Lei <tom.leiming@gmail.com>
Cc: linux-block@vger.kernel.org, kernel-team@fb.com
Subject: Re: [PATCH 2/2] block: fix leak of q->rq_wb
Date: Mon, 27 Mar 2017 20:45:12 -0700 [thread overview]
Message-ID: <20170328034512.GA3800@vader> (raw)
In-Reply-To: <20170328033850.GB23217@ming.t460p>
On Tue, Mar 28, 2017 at 11:43:04AM +0800, Ming Lei wrote:
> On Mon, Mar 27, 2017 at 10:43:59AM -0700, Omar Sandoval wrote:
> > From: Omar Sandoval <osandov@fb.com>
> >
> > CONFIG_DEBUG_TEST_DRIVER_REMOVE found a possible leak of q->rq_wb in a
> > couple of cases: when a request queue is reregistered and when gendisks
> > share a request_queue. This has been a problem since wbt was introduced,
> > but the WARN_ON(!list_empty(&stats->callbacks)) in the blk-stat rework
> > exposed it. The fix is unfortunately a hack until we fix all of the
> > drivers sharing a request_queue.
> >
> > Fixes: 87760e5eef35 ("block: hook up writeback throttling")
> > Signed-off-by: Omar Sandoval <osandov@fb.com>
> > ---
> > block/blk-sysfs.c | 16 +++++++++++++++-
> > 1 file changed, 15 insertions(+), 1 deletion(-)
> >
> > diff --git a/block/blk-sysfs.c b/block/blk-sysfs.c
> > index fa831cb2fc30..a187e3f70028 100644
> > --- a/block/blk-sysfs.c
> > +++ b/block/blk-sysfs.c
> > @@ -893,7 +893,21 @@ int blk_register_queue(struct gendisk *disk)
> >
> > kobject_uevent(&q->kobj, KOBJ_ADD);
> >
> > - blk_wb_init(q);
> > + /*
> > + * There are two cases where wbt may have already been initialized:
> > + * 1. A call sequence of blk_register_queue(); blk_unregister_queue();
> > + * blk_register_queue().
> > + * 2. Multiple gendisks sharing a request_queue.
> > + *
> > + * To fix case 1, we'd like to call wbt_exit() in
> > + * blk_unregister_queue(). However, that's unsafe for case 2. So, we're
> > + * forced to do this and call wbt_exit() in blk_release_queue() instead.
> > + *
> > + * Note that in case 2, wbt will account across disks until those legacy
> > + * drivers are fixed.
> > + */
> > + if (!q->rq_wb)
> > + blk_wb_init(q);
>
> Since 'rq_wb' is per-queue and its life time is same with queue's, I
> am wondering why blk_wb_init() isn't put into blk_alloc_queue_node() or
> queue's initialization api(blk_init_allocated_queue(), or
> blk_mq_init_allocated_queue())?
Doing it at queue init time might be cleaner, I'll try that.
next prev parent reply other threads:[~2017-03-28 3:46 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-03-27 17:43 [PATCH 1/2] blk-mq: fix leak of q->stats Omar Sandoval
2017-03-27 17:43 ` [PATCH 2/2] block: fix leak of q->rq_wb Omar Sandoval
2017-03-28 2:52 ` Omar Sandoval
2017-03-28 3:43 ` Ming Lei
2017-03-28 3:45 ` Omar Sandoval [this message]
2017-03-28 2:43 ` [PATCH 1/2] blk-mq: fix leak of q->stats Ming Lei
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=20170328034512.GA3800@vader \
--to=osandov@osandov.com \
--cc=kernel-team@fb.com \
--cc=linux-block@vger.kernel.org \
--cc=tom.leiming@gmail.com \
/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.