[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH 10/30] ps3disk: use blk_mq_alloc_disk



Use the blk_mq_alloc_disk API to simplify the gendisk and request_queue
allocation.

Signed-off-by: Christoph Hellwig <hch@xxxxxx>
---
 drivers/block/ps3disk.c | 36 ++++++++++++++----------------------
 1 file changed, 14 insertions(+), 22 deletions(-)

diff --git a/drivers/block/ps3disk.c b/drivers/block/ps3disk.c
index ba3ece56cbb3..f374ea2c67ce 100644
--- a/drivers/block/ps3disk.c
+++ b/drivers/block/ps3disk.c
@@ -29,7 +29,6 @@
 
 struct ps3disk_private {
        spinlock_t lock;                /* Request queue spinlock */
-       struct request_queue *queue;
        struct blk_mq_tag_set tag_set;
        struct gendisk *gendisk;
        unsigned int blocking_factor;
@@ -267,7 +266,7 @@ static irqreturn_t ps3disk_interrupt(int irq, void *data)
        blk_mq_end_request(req, error);
        spin_unlock(&priv->lock);
 
-       blk_mq_run_hw_queues(priv->queue, true);
+       blk_mq_run_hw_queues(priv->gendisk->queue, true);
        return IRQ_HANDLED;
 }
 
@@ -441,17 +440,20 @@ static int ps3disk_probe(struct ps3_system_bus_device 
*_dev)
 
        ps3disk_identify(dev);
 
-       queue = blk_mq_init_sq_queue(&priv->tag_set, &ps3disk_mq_ops, 1,
+       error = blk_mq_alloc_sq_tag_set(&priv->tag_set, &ps3disk_mq_ops, 1,
                                        BLK_MQ_F_SHOULD_MERGE);
-       if (IS_ERR(queue)) {
-               dev_err(&dev->sbd.core, "%s:%u: blk_mq_init_queue failed\n",
-                       __func__, __LINE__);
-               error = PTR_ERR(queue);
+       if (error)
                goto fail_teardown;
+
+       gendisk = blk_mq_alloc_disk(&priv->tag_set, dev);
+       if (IS_ERR(gendisk)) {
+               dev_err(&dev->sbd.core, "%s:%u: blk_mq_alloc_disk failed\n",
+                       __func__, __LINE__);
+               error = PTR_ERR(gendisk);
+               goto fail_free_tag_set;
        }
 
-       priv->queue = queue;
-       queue->queuedata = dev;
+       queue = gendisk->queue;
 
        blk_queue_max_hw_sectors(queue, dev->bounce_size >> 9);
        blk_queue_dma_alignment(queue, dev->blk_size-1);
@@ -462,19 +464,11 @@ static int ps3disk_probe(struct ps3_system_bus_device 
*_dev)
        blk_queue_max_segments(queue, -1);
        blk_queue_max_segment_size(queue, dev->bounce_size);
 
-       gendisk = alloc_disk(PS3DISK_MINORS);
-       if (!gendisk) {
-               dev_err(&dev->sbd.core, "%s:%u: alloc_disk failed\n", __func__,
-                       __LINE__);
-               error = -ENOMEM;
-               goto fail_cleanup_queue;
-       }
-
        priv->gendisk = gendisk;
        gendisk->major = ps3disk_major;
        gendisk->first_minor = devidx * PS3DISK_MINORS;
+       gendisk->minors = PS3DISK_MINORS;
        gendisk->fops = &ps3disk_fops;
-       gendisk->queue = queue;
        gendisk->private_data = dev;
        snprintf(gendisk->disk_name, sizeof(gendisk->disk_name), PS3DISK_NAME,
                 devidx+'a');
@@ -490,8 +484,7 @@ static int ps3disk_probe(struct ps3_system_bus_device *_dev)
        device_add_disk(&dev->sbd.core, gendisk, NULL);
        return 0;
 
-fail_cleanup_queue:
-       blk_cleanup_queue(queue);
+fail_free_tag_set:
        blk_mq_free_tag_set(&priv->tag_set);
 fail_teardown:
        ps3stor_teardown(dev);
@@ -517,9 +510,8 @@ static void ps3disk_remove(struct ps3_system_bus_device 
*_dev)
                    &ps3disk_mask);
        mutex_unlock(&ps3disk_mask_mutex);
        del_gendisk(priv->gendisk);
-       blk_cleanup_queue(priv->queue);
+       blk_cleanup_disk(priv->gendisk);
        blk_mq_free_tag_set(&priv->tag_set);
-       put_disk(priv->gendisk);
        dev_notice(&dev->sbd.core, "Synchronizing disk cache\n");
        ps3disk_sync_cache(dev);
        ps3stor_teardown(dev);
-- 
2.30.2




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.