Commit 6c552cea authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Jens Axboe

nvdimm-blk: convert to blk_alloc_disk/blk_cleanup_disk

Convert the nvdimm-blk 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-16-hch@lst.deSigned-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent 0f1d2e06
...@@ -228,48 +228,34 @@ static const struct block_device_operations nd_blk_fops = { ...@@ -228,48 +228,34 @@ static const struct block_device_operations nd_blk_fops = {
.submit_bio = nd_blk_submit_bio, .submit_bio = nd_blk_submit_bio,
}; };
static void nd_blk_release_queue(void *q)
{
blk_cleanup_queue(q);
}
static void nd_blk_release_disk(void *disk) static void nd_blk_release_disk(void *disk)
{ {
del_gendisk(disk); del_gendisk(disk);
put_disk(disk); blk_cleanup_disk(disk);
} }
static int nsblk_attach_disk(struct nd_namespace_blk *nsblk) static int nsblk_attach_disk(struct nd_namespace_blk *nsblk)
{ {
struct device *dev = &nsblk->common.dev; struct device *dev = &nsblk->common.dev;
resource_size_t available_disk_size; resource_size_t available_disk_size;
struct request_queue *q;
struct gendisk *disk; struct gendisk *disk;
u64 internal_nlba; u64 internal_nlba;
internal_nlba = div_u64(nsblk->size, nsblk_internal_lbasize(nsblk)); internal_nlba = div_u64(nsblk->size, nsblk_internal_lbasize(nsblk));
available_disk_size = internal_nlba * nsblk_sector_size(nsblk); available_disk_size = internal_nlba * nsblk_sector_size(nsblk);
q = blk_alloc_queue(NUMA_NO_NODE); disk = blk_alloc_disk(NUMA_NO_NODE);
if (!q)
return -ENOMEM;
if (devm_add_action_or_reset(dev, nd_blk_release_queue, q))
return -ENOMEM;
blk_queue_max_hw_sectors(q, UINT_MAX);
blk_queue_logical_block_size(q, nsblk_sector_size(nsblk));
blk_queue_flag_set(QUEUE_FLAG_NONROT, q);
disk = alloc_disk(0);
if (!disk) if (!disk)
return -ENOMEM; return -ENOMEM;
disk->first_minor = 0;
disk->fops = &nd_blk_fops; disk->fops = &nd_blk_fops;
disk->queue = q;
disk->private_data = nsblk; disk->private_data = nsblk;
nvdimm_namespace_disk_name(&nsblk->common, disk->disk_name); nvdimm_namespace_disk_name(&nsblk->common, disk->disk_name);
blk_queue_max_hw_sectors(disk->queue, UINT_MAX);
blk_queue_logical_block_size(disk->queue, nsblk_sector_size(nsblk));
blk_queue_flag_set(QUEUE_FLAG_NONROT, disk->queue);
if (devm_add_action_or_reset(dev, nd_blk_release_disk, disk)) if (devm_add_action_or_reset(dev, nd_blk_release_disk, disk))
return -ENOMEM; return -ENOMEM;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment