On Tue, Oct 04, 2022 at 10:00:10PM -0700, Chaitanya Kulkarni wrote: > +void init_disk(struct gendisk *disk, int major, int first_minor, > + int minors, sector_t sectors, void *private_data, > + const struct block_device_operations *fops) > +{ > + disk->major = major; > + disk->first_minor = first_minor; > + disk->minors = minors; > + set_capacity(disk, sectors); > + disk->private_data = private_data; > + disk->fops = fops; I don't like this at all. For one major/first_minor/minors are optional and discouraged for new drivers. Setting the capacity is a different thing and is done by helpers also used for revalidation in many drivers. It might make sense to pass the fops (and maybe private_data) to blk_mq_alloc_disk / blk_alloc_disk, but even then I'm not quite sure it is worth the churn.