From: Ming Lei <ming.lei@redhat.com>
To: Christoph Hellwig <hch@lst.de>
Cc: Jens Axboe <axboe@kernel.dk>,
linux-block@vger.kernel.org, Hannes Reinecke <hare@suse.com>,
Keith Busch <keith.busch@intel.com>,
linux-nvme@lists.infradead.org, Sagi Grimberg <sagi@grimberg.me>,
James Smart <james.smart@broadcom.com>,
Dongli Zhang <dongli.zhang@oracle.com>,
Bart Van Assche <bart.vanassche@wdc.com>,
linux-scsi@vger.kernel.org,
"Martin K . Petersen" <martin.petersen@oracle.com>,
"James E . J . Bottomley" <jejb@linux.vnet.ibm.com>
Subject: Re: [PATCH V7 9/9] nvme: hold request queue's refcount in ns's whole lifetime
Date: Thu, 25 Apr 2019 09:00:31 +0800 [thread overview]
Message-ID: <20190425010030.GD22636@ming.t460p> (raw)
In-Reply-To: <20190424162746.GE23854@lst.de>
On Wed, Apr 24, 2019 at 06:27:46PM +0200, Christoph Hellwig wrote:
> On Wed, Apr 24, 2019 at 07:02:21PM +0800, Ming Lei wrote:
> > Hennes reported the following kernel oops:
>
> Hannes?
>
> > + if (!blk_get_queue(ns->queue)) {
> > + ret = -ENXIO;
> > + goto out_free_queue;
> > + }
>
> If we always need to hold a reference, shouldn't blk_mq_init_queue
> return with that reference held (and yes, that means changes to
> every driver, but it seems like we need to audit all of them anyway..)
The issue is driver(NVMe) specific, the race window is just between
between blk_cleanup_queue() and removing the ns from the controller namspace
list in nvme_ns_remove()
blk_mq_init_queue() does hold one refcount, and its counter-part is
blk_cleanup_queue().
It is simply ugly to ask blk_mq_init_queue() to grab a refcnt for driver,
then who is the counter-part for releasing the extra refcount?
>
> It seems like the queue lifetimes are a bit of a mess, and I'm not sure
> if this just papers over the problem.
Could you explain a bit what the mess is?
Thanks,
Ming
WARNING: multiple messages have this Message-ID (diff)
From: ming.lei@redhat.com (Ming Lei)
Subject: [PATCH V7 9/9] nvme: hold request queue's refcount in ns's whole lifetime
Date: Thu, 25 Apr 2019 09:00:31 +0800 [thread overview]
Message-ID: <20190425010030.GD22636@ming.t460p> (raw)
In-Reply-To: <20190424162746.GE23854@lst.de>
On Wed, Apr 24, 2019@06:27:46PM +0200, Christoph Hellwig wrote:
> On Wed, Apr 24, 2019@07:02:21PM +0800, Ming Lei wrote:
> > Hennes reported the following kernel oops:
>
> Hannes?
>
> > + if (!blk_get_queue(ns->queue)) {
> > + ret = -ENXIO;
> > + goto out_free_queue;
> > + }
>
> If we always need to hold a reference, shouldn't blk_mq_init_queue
> return with that reference held (and yes, that means changes to
> every driver, but it seems like we need to audit all of them anyway..)
The issue is driver(NVMe) specific, the race window is just between
between blk_cleanup_queue() and removing the ns from the controller namspace
list in nvme_ns_remove()
blk_mq_init_queue() does hold one refcount, and its counter-part is
blk_cleanup_queue().
It is simply ugly to ask blk_mq_init_queue() to grab a refcnt for driver,
then who is the counter-part for releasing the extra refcount?
>
> It seems like the queue lifetimes are a bit of a mess, and I'm not sure
> if this just papers over the problem.
Could you explain a bit what the mess is?
Thanks,
Ming
next prev parent reply other threads:[~2019-04-25 1:00 UTC|newest]
Thread overview: 56+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-04-24 11:02 [PATCH V7 0/9] blk-mq: fix races related with freeing queue Ming Lei
2019-04-24 11:02 ` Ming Lei
2019-04-24 11:02 ` [PATCH V7 1/9] blk-mq: grab .q_usage_counter when queuing request from plug code path Ming Lei
2019-04-24 11:02 ` Ming Lei
2019-04-24 16:18 ` Christoph Hellwig
2019-04-24 16:18 ` Christoph Hellwig
2019-04-25 0:53 ` Ming Lei
2019-04-25 0:53 ` Ming Lei
2019-04-25 5:32 ` Christoph Hellwig
2019-04-25 5:32 ` Christoph Hellwig
2019-04-25 7:35 ` Ming Lei
2019-04-25 7:35 ` Ming Lei
2019-04-24 11:02 ` [PATCH V7 2/9] blk-mq: move cancel of requeue_work into blk_mq_release Ming Lei
2019-04-24 11:02 ` Ming Lei
2019-04-24 16:18 ` Christoph Hellwig
2019-04-24 16:18 ` Christoph Hellwig
2019-04-24 11:02 ` [PATCH V7 3/9] blk-mq: free hw queue's resource in hctx's release handler Ming Lei
2019-04-24 11:02 ` Ming Lei
2019-04-24 16:19 ` Christoph Hellwig
2019-04-24 16:19 ` Christoph Hellwig
2019-04-24 11:02 ` [PATCH V7 4/9] blk-mq: move all hctx alloction & initialization into __blk_mq_alloc_and_init_hctx Ming Lei
2019-04-24 11:02 ` Ming Lei
2019-04-24 16:22 ` Christoph Hellwig
2019-04-24 16:22 ` Christoph Hellwig
2019-04-25 0:55 ` Ming Lei
2019-04-25 0:55 ` Ming Lei
2019-04-26 15:09 ` Christoph Hellwig
2019-04-26 15:09 ` Christoph Hellwig
2019-04-25 1:02 ` Ming Lei
2019-04-25 1:02 ` Ming Lei
2019-04-24 11:02 ` [PATCH V7 5/9] blk-mq: split blk_mq_alloc_and_init_hctx into two parts Ming Lei
2019-04-24 11:02 ` Ming Lei
2019-04-24 11:02 ` [PATCH V7 6/9] blk-mq: always free hctx after request queue is freed Ming Lei
2019-04-24 11:02 ` Ming Lei
2019-04-24 11:15 ` Hannes Reinecke
2019-04-24 11:15 ` Hannes Reinecke
2019-04-24 11:02 ` [PATCH V7 7/9] blk-mq: move cancel of hctx->run_work into blk_mq_hw_sysfs_release Ming Lei
2019-04-24 11:02 ` Ming Lei
2019-04-24 11:02 ` [PATCH V7 8/9] block: don't drain in-progress dispatch in blk_cleanup_queue() Ming Lei
2019-04-24 11:02 ` Ming Lei
2019-04-24 11:02 ` [PATCH V7 9/9] nvme: hold request queue's refcount in ns's whole lifetime Ming Lei
2019-04-24 11:02 ` Ming Lei
2019-04-24 16:27 ` Christoph Hellwig
2019-04-24 16:27 ` Christoph Hellwig
2019-04-25 1:00 ` Ming Lei [this message]
2019-04-25 1:00 ` Ming Lei
2019-04-26 15:11 ` Christoph Hellwig
2019-04-26 15:11 ` Christoph Hellwig
2019-04-26 17:04 ` Bart Van Assche
2019-04-26 17:04 ` Bart Van Assche
2019-04-26 22:49 ` Ming Lei
2019-04-26 22:49 ` Ming Lei
2019-04-26 22:45 ` Ming Lei
2019-04-26 22:45 ` Ming Lei
2019-04-27 5:54 ` Christoph Hellwig
2019-04-27 5:54 ` Christoph Hellwig
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=20190425010030.GD22636@ming.t460p \
--to=ming.lei@redhat.com \
--cc=axboe@kernel.dk \
--cc=bart.vanassche@wdc.com \
--cc=dongli.zhang@oracle.com \
--cc=hare@suse.com \
--cc=hch@lst.de \
--cc=james.smart@broadcom.com \
--cc=jejb@linux.vnet.ibm.com \
--cc=keith.busch@intel.com \
--cc=linux-block@vger.kernel.org \
--cc=linux-nvme@lists.infradead.org \
--cc=linux-scsi@vger.kernel.org \
--cc=martin.petersen@oracle.com \
--cc=sagi@grimberg.me \
/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.