Message ID | 20210602065345.355274-28-hch@lst.de |
---|---|
State | New |
Headers | show |
Series | None | expand |
On Wed, 2021-06-02 at 09:53 +0300, Christoph Hellwig wrote: > Use blk_mq_alloc_disk and blk_cleanup_disk to simplify the gendisk and > request_queue allocation. > > Signed-off-by: Christoph Hellwig <hch@lst.de> > --- > drivers/s390/block/scm_blk.c | 21 ++++++--------------- > 1 file changed, 6 insertions(+), 15 deletions(-) > > diff --git a/drivers/s390/block/scm_blk.c b/drivers/s390/block/scm_blk.c > index a4f6f2e62b1d..88cba6212ee2 100644 > --- a/drivers/s390/block/scm_blk.c > +++ b/drivers/s390/block/scm_blk.c > @@ -462,12 +462,12 @@ int scm_blk_dev_setup(struct scm_blk_dev *bdev, struct scm_device *scmdev) > if (ret) > goto out; > > - rq = blk_mq_init_queue(&bdev->tag_set); > - if (IS_ERR(rq)) { > - ret = PTR_ERR(rq); > + bdev->gendisk = blk_mq_alloc_disk(&bdev->tag_set, scmdev); > + if (IS_ERR(bdev->gendisk)) { > + ret = PTR_ERR(bdev->gendisk); > goto out_tag; > } > - bdev->rq = rq; > + rq = bdev->rq = bdev->gendisk->queue; > nr_max_blk = min(scmdev->nr_max_block, > (unsigned int) (PAGE_SIZE / sizeof(struct aidaw))); > > @@ -477,17 +477,11 @@ int scm_blk_dev_setup(struct scm_blk_dev *bdev, struct scm_device *scmdev) > blk_queue_flag_set(QUEUE_FLAG_NONROT, rq); > blk_queue_flag_clear(QUEUE_FLAG_ADD_RANDOM, rq); > > - bdev->gendisk = alloc_disk(SCM_NR_PARTS); > - if (!bdev->gendisk) { > - ret = -ENOMEM; > - goto out_queue; > - } > - rq->queuedata = scmdev; > bdev->gendisk->private_data = scmdev; > bdev->gendisk->fops = &scm_blk_devops; > - bdev->gendisk->queue = rq; > bdev->gendisk->major = scm_major; > bdev->gendisk->first_minor = devindex * SCM_NR_PARTS; > + bdev->gendisk->minors = SCM_NR_PARTS; > > len = snprintf(bdev->gendisk->disk_name, DISK_NAME_LEN, "scm"); > if (devindex > 25) { > @@ -504,8 +498,6 @@ int scm_blk_dev_setup(struct scm_blk_dev *bdev, struct scm_device *scmdev) > device_add_disk(&scmdev->dev, bdev->gendisk, NULL); > return 0; > > -out_queue: > - blk_cleanup_queue(rq); > out_tag: > blk_mq_free_tag_set(&bdev->tag_set); > out: > @@ -516,9 +508,8 @@ int scm_blk_dev_setup(struct scm_blk_dev *bdev, struct scm_device *scmdev) > void scm_blk_dev_cleanup(struct scm_blk_dev *bdev) > { > del_gendisk(bdev->gendisk); > - blk_cleanup_queue(bdev->gendisk->queue); > + blk_cleanup_disk(bdev->gendisk); > blk_mq_free_tag_set(&bdev->tag_set); > - put_disk(bdev->gendisk); > } > > void scm_blk_set_available(struct scm_blk_dev *bdev) Not an expert on SCM or this code but I gave this a quick test and it seems to work fine. Tested-by: Niklas Schnelle <schnelle@linux.ibm.com>
diff --git a/drivers/s390/block/scm_blk.c b/drivers/s390/block/scm_blk.c index a4f6f2e62b1d..88cba6212ee2 100644 --- a/drivers/s390/block/scm_blk.c +++ b/drivers/s390/block/scm_blk.c @@ -462,12 +462,12 @@ int scm_blk_dev_setup(struct scm_blk_dev *bdev, struct scm_device *scmdev) if (ret) goto out; - rq = blk_mq_init_queue(&bdev->tag_set); - if (IS_ERR(rq)) { - ret = PTR_ERR(rq); + bdev->gendisk = blk_mq_alloc_disk(&bdev->tag_set, scmdev); + if (IS_ERR(bdev->gendisk)) { + ret = PTR_ERR(bdev->gendisk); goto out_tag; } - bdev->rq = rq; + rq = bdev->rq = bdev->gendisk->queue; nr_max_blk = min(scmdev->nr_max_block, (unsigned int) (PAGE_SIZE / sizeof(struct aidaw))); @@ -477,17 +477,11 @@ int scm_blk_dev_setup(struct scm_blk_dev *bdev, struct scm_device *scmdev) blk_queue_flag_set(QUEUE_FLAG_NONROT, rq); blk_queue_flag_clear(QUEUE_FLAG_ADD_RANDOM, rq); - bdev->gendisk = alloc_disk(SCM_NR_PARTS); - if (!bdev->gendisk) { - ret = -ENOMEM; - goto out_queue; - } - rq->queuedata = scmdev; bdev->gendisk->private_data = scmdev; bdev->gendisk->fops = &scm_blk_devops; - bdev->gendisk->queue = rq; bdev->gendisk->major = scm_major; bdev->gendisk->first_minor = devindex * SCM_NR_PARTS; + bdev->gendisk->minors = SCM_NR_PARTS; len = snprintf(bdev->gendisk->disk_name, DISK_NAME_LEN, "scm"); if (devindex > 25) { @@ -504,8 +498,6 @@ int scm_blk_dev_setup(struct scm_blk_dev *bdev, struct scm_device *scmdev) device_add_disk(&scmdev->dev, bdev->gendisk, NULL); return 0; -out_queue: - blk_cleanup_queue(rq); out_tag: blk_mq_free_tag_set(&bdev->tag_set); out: @@ -516,9 +508,8 @@ int scm_blk_dev_setup(struct scm_blk_dev *bdev, struct scm_device *scmdev) void scm_blk_dev_cleanup(struct scm_blk_dev *bdev) { del_gendisk(bdev->gendisk); - blk_cleanup_queue(bdev->gendisk->queue); + blk_cleanup_disk(bdev->gendisk); blk_mq_free_tag_set(&bdev->tag_set); - put_disk(bdev->gendisk); } void scm_blk_set_available(struct scm_blk_dev *bdev)
Use blk_mq_alloc_disk and blk_cleanup_disk to simplify the gendisk and request_queue allocation. Signed-off-by: Christoph Hellwig <hch@lst.de> --- drivers/s390/block/scm_blk.c | 21 ++++++--------------- 1 file changed, 6 insertions(+), 15 deletions(-)