mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-28 10:41:38 -04:00
block: allow disk to have extended device number
Now that disk and partition handlings are mostly unified, it's easy to allow disk to have extended device number. This patch makes add_disk() use extended device number if disk->minors is zero. Both sd and ide-disk are updated to use this. * sd_format_disk_name() is implemented which can generically determine the drive name. This removes disk number restriction stemming from limited device names. * If sd index goes over SD_MAX_DISKS (which can be increased now BTW), sd simply doesn't initialize minors letting block layer choose extended device number. * If CONFIG_DEBUG_EXT_DEVT is set, both sd and ide-disk always set minors to 0 and use extended device numbers. Signed-off-by: Tejun Heo <[email protected]> Signed-off-by: Jens Axboe <[email protected]>
This commit is contained in:
parent
689d6fac40
commit
3e1a7ff8a0
5 changed files with 82 additions and 23 deletions
|
|
@ -478,14 +478,37 @@ static int exact_lock(dev_t devt, void *data)
|
|||
*
|
||||
* This function registers the partitioning information in @disk
|
||||
* with the kernel.
|
||||
*
|
||||
* FIXME: error handling
|
||||
*/
|
||||
void add_disk(struct gendisk *disk)
|
||||
{
|
||||
struct backing_dev_info *bdi;
|
||||
dev_t devt;
|
||||
int retval;
|
||||
|
||||
/* minors == 0 indicates to use ext devt from part0 and should
|
||||
* be accompanied with EXT_DEVT flag. Make sure all
|
||||
* parameters make sense.
|
||||
*/
|
||||
WARN_ON(disk->minors && !(disk->major || disk->first_minor));
|
||||
WARN_ON(!disk->minors && !(disk->flags & GENHD_FL_EXT_DEVT));
|
||||
|
||||
disk->flags |= GENHD_FL_UP;
|
||||
disk_to_dev(disk)->devt = MKDEV(disk->major, disk->first_minor);
|
||||
|
||||
retval = blk_alloc_devt(&disk->part0, &devt);
|
||||
if (retval) {
|
||||
WARN_ON(1);
|
||||
return;
|
||||
}
|
||||
disk_to_dev(disk)->devt = devt;
|
||||
|
||||
/* ->major and ->first_minor aren't supposed to be
|
||||
* dereferenced from here on, but set them just in case.
|
||||
*/
|
||||
disk->major = MAJOR(devt);
|
||||
disk->first_minor = MINOR(devt);
|
||||
|
||||
blk_register_region(disk_devt(disk), disk->minors, NULL,
|
||||
exact_match, exact_lock, disk);
|
||||
register_disk(disk);
|
||||
|
|
|
|||
Loading…
Reference in a new issue