Commit 607d968a authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Jens Axboe
Browse files

mmc: switch to blk_mq_alloc_disk



Use the blk_mq_alloc_disk to allocate the request_queue and gendisk
together.

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


Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent 249cda33
Loading
Loading
Loading
Loading
+3 −11
Original line number Diff line number Diff line
@@ -2319,27 +2319,21 @@ static struct mmc_blk_data *mmc_blk_alloc_req(struct mmc_card *card,
	 */
	md->read_only = mmc_blk_readonly(card);

	md->disk = alloc_disk(perdev_minors);
	if (md->disk == NULL) {
		ret = -ENOMEM;
	md->disk = mmc_init_queue(&md->queue, card);
	if (IS_ERR(md->disk)) {
		ret = PTR_ERR(md->disk);
		goto err_kfree;
	}

	INIT_LIST_HEAD(&md->part);
	INIT_LIST_HEAD(&md->rpmbs);
	md->usage = 1;

	ret = mmc_init_queue(&md->queue, card);
	if (ret)
		goto err_putdisk;

	md->queue.blkdata = md;

	md->disk->major	= MMC_BLOCK_MAJOR;
	md->disk->first_minor = devidx * perdev_minors;
	md->disk->fops = &mmc_bdops;
	md->disk->private_data = md;
	md->disk->queue = md->queue.queue;
	md->parent = parent;
	set_disk_ro(md->disk, md->read_only || default_ro);
	md->disk->flags = GENHD_FL_EXT_DEVT;
@@ -2388,8 +2382,6 @@ static struct mmc_blk_data *mmc_blk_alloc_req(struct mmc_card *card,

	return md;

 err_putdisk:
	put_disk(md->disk);
 err_kfree:
	kfree(md);
 out:
+10 −13
Original line number Diff line number Diff line
@@ -424,9 +424,10 @@ static inline bool mmc_merge_capable(struct mmc_host *host)
 *
 * Initialise a MMC card request queue.
 */
int mmc_init_queue(struct mmc_queue *mq, struct mmc_card *card)
struct gendisk *mmc_init_queue(struct mmc_queue *mq, struct mmc_card *card)
{
	struct mmc_host *host = card->host;
	struct gendisk *disk;
	int ret;

	mq->card = card;
@@ -464,26 +465,22 @@ int mmc_init_queue(struct mmc_queue *mq, struct mmc_card *card)

	ret = blk_mq_alloc_tag_set(&mq->tag_set);
	if (ret)
		return ret;
		return ERR_PTR(ret);
		

	mq->queue = blk_mq_init_queue(&mq->tag_set);
	if (IS_ERR(mq->queue)) {
		ret = PTR_ERR(mq->queue);
		goto free_tag_set;
	disk = blk_mq_alloc_disk(&mq->tag_set, mq);
	if (IS_ERR(disk)) {
		blk_mq_free_tag_set(&mq->tag_set);
		return disk;
	}
	mq->queue = disk->queue;

	if (mmc_host_is_spi(host) && host->use_spi_crc)
		blk_queue_flag_set(QUEUE_FLAG_STABLE_WRITES, mq->queue);

	mq->queue->queuedata = mq;
	blk_queue_rq_timeout(mq->queue, 60 * HZ);

	mmc_setup_queue(mq, card);
	return 0;

free_tag_set:
	blk_mq_free_tag_set(&mq->tag_set);
	return ret;
	return disk;
}

void mmc_queue_suspend(struct mmc_queue *mq)
+1 −1
Original line number Diff line number Diff line
@@ -94,7 +94,7 @@ struct mmc_queue {
	struct work_struct	complete_work;
};

extern int mmc_init_queue(struct mmc_queue *, struct mmc_card *);
struct gendisk *mmc_init_queue(struct mmc_queue *mq, struct mmc_card *card);
extern void mmc_cleanup_queue(struct mmc_queue *);
extern void mmc_queue_suspend(struct mmc_queue *);
extern void mmc_queue_resume(struct mmc_queue *);