Commit 0be7966e authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Jens Axboe
Browse files

rsxx: convert to blk_alloc_disk/blk_cleanup_disk



Convert the rsxx driver to use the blk_alloc_disk and blk_cleanup_disk
helpers to simplify gendisk and request_queue allocation.

Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Reviewed-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
Link: https://lore.kernel.org/r/20210521055116.1053587-10-hch@lst.de


Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent 44413484
Loading
Loading
Loading
Loading
+15 −24
Original line number Diff line number Diff line
@@ -236,47 +236,40 @@ int rsxx_setup_dev(struct rsxx_cardinfo *card)
		return -ENOMEM;
	}

	card->queue = blk_alloc_queue(NUMA_NO_NODE);
	if (!card->queue) {
		dev_err(CARD_TO_DEV(card), "Failed queue alloc\n");
		unregister_blkdev(card->major, DRIVER_NAME);
		return -ENOMEM;
	}

	card->gendisk = alloc_disk(blkdev_minors);
	card->gendisk = blk_alloc_disk(blkdev_minors);
	if (!card->gendisk) {
		dev_err(CARD_TO_DEV(card), "Failed disk alloc\n");
		blk_cleanup_queue(card->queue);
		unregister_blkdev(card->major, DRIVER_NAME);
		return -ENOMEM;
	}

	if (card->config_valid) {
		blk_size = card->config.data.block_size;
		blk_queue_dma_alignment(card->queue, blk_size - 1);
		blk_queue_logical_block_size(card->queue, blk_size);
		blk_queue_dma_alignment(card->gendisk->queue, blk_size - 1);
		blk_queue_logical_block_size(card->gendisk->queue, blk_size);
	}

	blk_queue_max_hw_sectors(card->queue, blkdev_max_hw_sectors);
	blk_queue_physical_block_size(card->queue, RSXX_HW_BLK_SIZE);
	blk_queue_max_hw_sectors(card->gendisk->queue, blkdev_max_hw_sectors);
	blk_queue_physical_block_size(card->gendisk->queue, RSXX_HW_BLK_SIZE);

	blk_queue_flag_set(QUEUE_FLAG_NONROT, card->queue);
	blk_queue_flag_clear(QUEUE_FLAG_ADD_RANDOM, card->queue);
	blk_queue_flag_set(QUEUE_FLAG_NONROT, card->gendisk->queue);
	blk_queue_flag_clear(QUEUE_FLAG_ADD_RANDOM, card->gendisk->queue);
	if (rsxx_discard_supported(card)) {
		blk_queue_flag_set(QUEUE_FLAG_DISCARD, card->queue);
		blk_queue_max_discard_sectors(card->queue,
		blk_queue_flag_set(QUEUE_FLAG_DISCARD, card->gendisk->queue);
		blk_queue_max_discard_sectors(card->gendisk->queue,
						RSXX_HW_BLK_SIZE >> 9);
		card->queue->limits.discard_granularity = RSXX_HW_BLK_SIZE;
		card->queue->limits.discard_alignment   = RSXX_HW_BLK_SIZE;
		card->gendisk->queue->limits.discard_granularity =
			RSXX_HW_BLK_SIZE;
		card->gendisk->queue->limits.discard_alignment =
			RSXX_HW_BLK_SIZE;
	}

	snprintf(card->gendisk->disk_name, sizeof(card->gendisk->disk_name),
		 "rsxx%d", card->disk_id);
	card->gendisk->major = card->major;
	card->gendisk->first_minor = 0;
	card->gendisk->minors = blkdev_minors;
	card->gendisk->fops = &rsxx_fops;
	card->gendisk->private_data = card;
	card->gendisk->queue = card->queue;

	return 0;
}
@@ -286,10 +279,8 @@ void rsxx_destroy_dev(struct rsxx_cardinfo *card)
	if (!enable_blkdev)
		return;

	put_disk(card->gendisk);
	blk_cleanup_disk(card->gendisk);
	card->gendisk = NULL;

	blk_cleanup_queue(card->queue);
	unregister_blkdev(card->major, DRIVER_NAME);
}

+0 −1
Original line number Diff line number Diff line
@@ -154,7 +154,6 @@ struct rsxx_cardinfo {
	bool			bdev_attached;
	int			disk_id;
	int			major;
	struct request_queue	*queue;
	struct gendisk		*gendisk;
	struct {
		/* Used to convert a byte address to a device address. */