From: Marek Szyprowski <m.szyprowski@samsung.com>
To: Christoph Hellwig <hch@lst.de>, Jens Axboe <axboe@kernel.dk>
Cc: "Justin Sanders" <justin@coraid.com>,
"Denis Efremov" <efremov@linux.com>,
"Josef Bacik" <josef@toxicpanda.com>,
"Tim Waugh" <tim@cyberelk.net>,
"Geoff Levand" <geoff@infradead.org>,
"Ilya Dryomov" <idryomov@gmail.com>,
"Md. Haris Iqbal" <haris.iqbal@ionos.com>,
"Jack Wang" <jinpu.wang@ionos.com>,
"Michael S. Tsirkin" <mst@redhat.com>,
"Jason Wang" <jasowang@redhat.com>,
"Konrad Rzeszutek Wilk" <konrad.wilk@oracle.com>,
"Roger Pau Monné" <roger.pau@citrix.com>,
"Mike Snitzer" <snitzer@redhat.com>,
"Maxim Levitsky" <maximlevitsky@gmail.com>,
"Alex Dubov" <oakad@yahoo.com>,
"Miquel Raynal" <miquel.raynal@bootlin.com>,
"Richard Weinberger" <richard@nod.at>,
"Vignesh Raghavendra" <vigneshr@ti.com>,
"Heiko Carstens" <hca@linux.ibm.com>,
"Vasily Gorbik" <gor@linux.ibm.com>,
"Christian Borntraeger" <borntraeger@de.ibm.com>,
dm-devel@redhat.com, linux-block@vger.kernel.org,
nbd@other.debian.org, linuxppc-dev@lists.ozlabs.org,
ceph-devel@vger.kernel.org,
virtualization@lists.linux-foundation.org,
xen-devel@lists.xenproject.org, linux-mmc@vger.kernel.org,
linux-mtd@lists.infradead.org, linux-s390@vger.kernel.org,
"Bartlomiej Zolnierkiewicz" <b.zolnierkie@samsung.com>
Subject: Re: [PATCH 09/30] mtd_blkdevs: use blk_mq_alloc_disk
Date: Tue, 15 Jun 2021 17:47:44 +0200 [thread overview]
Message-ID: <13b21a07-b7c7-37db-fdc9-77bf174b6f8f@samsung.com> (raw)
In-Reply-To: <20210602065345.355274-10-hch@lst.de>
Hi,
On 02.06.2021 08:53, Christoph Hellwig wrote:
> Use the blk_mq_alloc_disk API to simplify the gendisk and request_queue
> allocation.
>
> Signed-off-by: Christoph Hellwig <hch@lst.de>
This patch landed in linux-next as commit 6966bb921def ("mtd_blkdevs:
use blk_mq_alloc_disk"). It causes the following regression on my QEMU
arm64 setup:
Using buffer write method
Concatenating MTD devices:
(0): "0.flash"
(1): "0.flash"
into device "0.flash"
Unable to handle kernel NULL pointer dereference at virtual address
0000000000000068
Mem abort info:
ESR = 0x96000004
EC = 0x25: DABT (current EL), IL = 32 bits
SET = 0, FnV = 0
EA = 0, S1PTW = 0
Data abort info:
ISV = 0, ISS = 0x00000004
CM = 0, WnR = 0
[0000000000000068] user address but active_mm is swapper
Internal error: Oops: 96000004 [#1] PREEMPT SMP
Modules linked in:
CPU: 0 PID: 1 Comm: swapper/0 Not tainted 5.13.0-rc3+ #10492
Hardware name: linux,dummy-virt (DT)
pstate: 00000005 (nzcv daif -PAN -UAO -TCO BTYPE=--)
pc : blk_finish_plug+0x5c/0x268
lr : blk_queue_write_cache+0x28/0x70
...
Call trace:
blk_finish_plug+0x5c/0x268
add_mtd_blktrans_dev+0x270/0x420
mtdblock_add_mtd+0x68/0x98
blktrans_notify_add+0x44/0x70
add_mtd_device+0x41c/0x490
mtd_device_parse_register+0xf4/0x1c8
physmap_flash_probe+0x44c/0x780
platform_probe+0x90/0xd8
really_probe+0x108/0x3c0
driver_probe_device+0x60/0xc0
device_driver_attach+0x6c/0x78
__driver_attach+0xc0/0x100
bus_for_each_dev+0x68/0xc8
driver_attach+0x20/0x28
bus_add_driver+0x168/0x1f8
driver_register+0x60/0x110
__platform_driver_register+0x24/0x30
physmap_init+0x18/0x20
do_one_initcall+0x84/0x450
kernel_init_freeable+0x2dc/0x334
kernel_init+0x10/0x110
ret_from_fork+0x10/0x18
Code: 88027c01 35ffffa2 17fff079 f9800031 (c85f7c22)
---[ end trace b774518e0766cc92 ]---
Kernel panic - not syncing: Attempted to kill init! exitcode=0x0000000b
SMP: stopping secondary CPUs
Kernel Offset: 0x594d1fa00000 from 0xffff800010000000
PHYS_OFFSET: 0xffffea7300000000
CPU features: 0x11000671,00000846
Memory Limit: none
---[ end Kernel panic - not syncing: Attempted to kill init!
exitcode=0x0000000b ]---
> ---
> drivers/mtd/mtd_blkdevs.c | 48 ++++++++++++++++++---------------------
> 1 file changed, 22 insertions(+), 26 deletions(-)
>
> diff --git a/drivers/mtd/mtd_blkdevs.c b/drivers/mtd/mtd_blkdevs.c
> index fb8e12d590a1..5dc4c966ea73 100644
> --- a/drivers/mtd/mtd_blkdevs.c
> +++ b/drivers/mtd/mtd_blkdevs.c
> @@ -30,11 +30,9 @@ static void blktrans_dev_release(struct kref *kref)
> struct mtd_blktrans_dev *dev =
> container_of(kref, struct mtd_blktrans_dev, ref);
>
> - dev->disk->private_data = NULL;
> - blk_cleanup_queue(dev->rq);
> + blk_cleanup_disk(dev->disk);
> blk_mq_free_tag_set(dev->tag_set);
> kfree(dev->tag_set);
> - put_disk(dev->disk);
> list_del(&dev->list);
> kfree(dev);
> }
> @@ -354,7 +352,7 @@ int add_mtd_blktrans_dev(struct mtd_blktrans_dev *new)
> if (new->devnum > (MINORMASK >> tr->part_bits) ||
> (tr->part_bits && new->devnum >= 27 * 26)) {
> mutex_unlock(&blktrans_ref_mutex);
> - goto error1;
> + return ret;
> }
>
> list_add_tail(&new->list, &tr->devs);
> @@ -366,17 +364,28 @@ int add_mtd_blktrans_dev(struct mtd_blktrans_dev *new)
> if (!tr->writesect)
> new->readonly = 1;
>
> - /* Create gendisk */
> ret = -ENOMEM;
> - gd = alloc_disk(1 << tr->part_bits);
> + new->tag_set = kzalloc(sizeof(*new->tag_set), GFP_KERNEL);
> + if (!new->tag_set)
> + goto out_list_del;
>
> - if (!gd)
> - goto error2;
> + ret = blk_mq_alloc_sq_tag_set(new->tag_set, &mtd_mq_ops, 2,
> + BLK_MQ_F_SHOULD_MERGE | BLK_MQ_F_BLOCKING);
> + if (ret)
> + goto out_kfree_tag_set;
> +
> + /* Create gendisk */
> + gd = blk_mq_alloc_disk(new->tag_set, new);
> + if (IS_ERR(gd)) {
> + ret = PTR_ERR(gd);
> + goto out_free_tag_set;
> + }
>
> new->disk = gd;
> gd->private_data = new;
> gd->major = tr->major;
> gd->first_minor = (new->devnum) << tr->part_bits;
> + gd->minors = 1 << tr->part_bits;
> gd->fops = &mtd_block_ops;
>
> if (tr->part_bits)
> @@ -398,22 +407,9 @@ int add_mtd_blktrans_dev(struct mtd_blktrans_dev *new)
> spin_lock_init(&new->queue_lock);
> INIT_LIST_HEAD(&new->rq_list);
>
> - new->tag_set = kzalloc(sizeof(*new->tag_set), GFP_KERNEL);
> - if (!new->tag_set)
> - goto error3;
> -
> - new->rq = blk_mq_init_sq_queue(new->tag_set, &mtd_mq_ops, 2,
> - BLK_MQ_F_SHOULD_MERGE | BLK_MQ_F_BLOCKING);
> - if (IS_ERR(new->rq)) {
> - ret = PTR_ERR(new->rq);
> - new->rq = NULL;
> - goto error4;
> - }
> -
> if (tr->flush)
> blk_queue_write_cache(new->rq, true, false);
>
> - new->rq->queuedata = new;
> blk_queue_logical_block_size(new->rq, tr->blksize);
>
> blk_queue_flag_set(QUEUE_FLAG_NONROT, new->rq);
> @@ -437,13 +433,13 @@ int add_mtd_blktrans_dev(struct mtd_blktrans_dev *new)
> WARN_ON(ret);
> }
> return 0;
> -error4:
> +
> +out_free_tag_set:
> + blk_mq_free_tag_set(new->tag_set);
> +out_kfree_tag_set:
> kfree(new->tag_set);
> -error3:
> - put_disk(new->disk);
> -error2:
> +out_list_del:
> list_del(&new->list);
> -error1:
> return ret;
> }
>
Best regards
--
Marek Szyprowski, PhD
Samsung R&D Institute Poland
next prev parent reply other threads:[~2021-06-15 15:48 UTC|newest]
Thread overview: 47+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-06-02 6:53 simplify gendisk and request_queue allocation for blk-mq based drivers Christoph Hellwig
2021-06-02 6:53 ` [PATCH 01/30] blk-mq: factor out a blk_mq_alloc_sq_tag_set helper Christoph Hellwig
2021-06-02 6:53 ` [PATCH 02/30] blk-mq: improve the blk_mq_init_allocated_queue interface Christoph Hellwig
2021-06-02 6:53 ` [PATCH 03/30] blk-mq: add the blk_mq_alloc_disk APIs Christoph Hellwig
2021-06-03 0:03 ` Chaitanya Kulkarni
2021-06-02 6:53 ` [PATCH 04/30] virtio-blk: use blk_mq_alloc_disk Christoph Hellwig
2021-06-02 6:53 ` [PATCH 05/30] pcd: " Christoph Hellwig
2021-06-02 6:53 ` [PATCH 06/30] pf: " Christoph Hellwig
2021-06-02 6:53 ` [PATCH 07/30] ms_block: " Christoph Hellwig
2021-06-03 15:36 ` Ulf Hansson
2021-06-02 6:53 ` [PATCH 08/30] mspro: " Christoph Hellwig
2021-06-03 15:36 ` Ulf Hansson
2021-06-02 6:53 ` [PATCH 09/30] mtd_blkdevs: " Christoph Hellwig
[not found] ` <CGME20210615154746eucas1p1321b6f1cf38d21899632e132cf025e61@eucas1p1.samsung.com>
2021-06-15 15:47 ` Marek Szyprowski [this message]
2021-06-15 15:58 ` Christoph Hellwig
2021-06-15 16:28 ` Marek Szyprowski
2021-06-02 6:53 ` [PATCH 10/30] ps3disk: " Christoph Hellwig
2021-06-06 15:58 ` Geoff Levand
2021-06-02 6:53 ` [PATCH 11/30] swim3: " Christoph Hellwig
2021-06-02 6:53 ` [PATCH 12/30] swim: " Christoph Hellwig
2021-06-02 6:53 ` [PATCH 13/30] sunvdc: " Christoph Hellwig
2021-06-02 6:53 ` [PATCH 14/30] gdrom: " Christoph Hellwig
2021-06-02 6:53 ` [PATCH 15/30] blk-mq: remove blk_mq_init_sq_queue Christoph Hellwig
2021-06-03 0:04 ` Chaitanya Kulkarni
2021-06-02 6:53 ` [PATCH 16/30] aoe: use blk_mq_alloc_disk and blk_cleanup_disk Christoph Hellwig
2021-06-02 6:53 ` [PATCH 17/30] floppy: " Christoph Hellwig
2021-06-02 6:53 ` [PATCH 18/30] loop: " Christoph Hellwig
2021-06-03 0:05 ` Chaitanya Kulkarni
2021-06-02 6:53 ` [PATCH 19/30] nbd: " Christoph Hellwig
2021-06-02 6:53 ` [PATCH 20/30] nullb: use blk_mq_alloc_disk Christoph Hellwig
2021-06-03 0:10 ` Chaitanya Kulkarni
2021-06-08 5:39 ` Christoph Hellwig
2021-06-02 6:53 ` [PATCH 21/30] pd: use blk_mq_alloc_disk and blk_cleanup_disk Christoph Hellwig
2021-06-02 6:53 ` [PATCH 22/30] rbd: " Christoph Hellwig
2021-06-02 6:53 ` [PATCH 23/30] rnbd: " Christoph Hellwig
2021-06-02 7:49 ` Jinpu Wang
2021-06-02 6:53 ` [PATCH 24/30] sx8: " Christoph Hellwig
2021-06-02 6:53 ` [PATCH 25/30] xen-blkfront: " Christoph Hellwig
2021-06-02 6:53 ` [PATCH 26/30] ubi: " Christoph Hellwig
2021-06-02 6:53 ` [PATCH 27/30] scm_blk: " Christoph Hellwig
2021-06-02 12:02 ` Niklas Schnelle
2021-06-02 6:53 ` [PATCH 28/30] amiflop: " Christoph Hellwig
2021-06-02 6:53 ` [PATCH 29/30] ataflop: " Christoph Hellwig
2021-06-02 6:53 ` [PATCH 30/30] z2ram: " Christoph Hellwig
2021-06-04 15:58 ` simplify gendisk and request_queue allocation for blk-mq based drivers Konrad Rzeszutek Wilk
2021-06-05 14:02 ` Christoph Hellwig
2021-06-11 17:55 ` Jens Axboe
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=13b21a07-b7c7-37db-fdc9-77bf174b6f8f@samsung.com \
--to=m.szyprowski@samsung.com \
--cc=axboe@kernel.dk \
--cc=b.zolnierkie@samsung.com \
--cc=borntraeger@de.ibm.com \
--cc=ceph-devel@vger.kernel.org \
--cc=dm-devel@redhat.com \
--cc=efremov@linux.com \
--cc=geoff@infradead.org \
--cc=gor@linux.ibm.com \
--cc=haris.iqbal@ionos.com \
--cc=hca@linux.ibm.com \
--cc=hch@lst.de \
--cc=idryomov@gmail.com \
--cc=jasowang@redhat.com \
--cc=jinpu.wang@ionos.com \
--cc=josef@toxicpanda.com \
--cc=justin@coraid.com \
--cc=konrad.wilk@oracle.com \
--cc=linux-block@vger.kernel.org \
--cc=linux-mmc@vger.kernel.org \
--cc=linux-mtd@lists.infradead.org \
--cc=linux-s390@vger.kernel.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=maximlevitsky@gmail.com \
--cc=miquel.raynal@bootlin.com \
--cc=mst@redhat.com \
--cc=nbd@other.debian.org \
--cc=oakad@yahoo.com \
--cc=richard@nod.at \
--cc=roger.pau@citrix.com \
--cc=snitzer@redhat.com \
--cc=tim@cyberelk.net \
--cc=vigneshr@ti.com \
--cc=virtualization@lists.linux-foundation.org \
--cc=xen-devel@lists.xenproject.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).