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

ide: switch to __register_blkdev for command set probing



ide is the last user of the blk_register_region framework except for the
tracking of allocated gendisk.  Switch to __register_blkdev, even if that
doesn't allow us to trivially find out which command set to probe for.
That means we now always request all modules when a user tries to access
an unclaimed ide device node, but except for a few potentially loaded
modules for a fringe use case of a deprecated and soon to be removed
driver that doesn't make a difference.

Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Reviewed-by: default avatarHannes Reinecke <hare@suse.de>
Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent 28144f99
Loading
Loading
Loading
Loading
+6 −28
Original line number Diff line number Diff line
@@ -902,31 +902,12 @@ static int init_irq (ide_hwif_t *hwif)
	return 1;
}

static int ata_lock(dev_t dev, void *data)
static void ata_probe(dev_t dev)
{
	/* FIXME: we want to pin hwif down */
	return 0;
}

static struct kobject *ata_probe(dev_t dev, int *part, void *data)
{
	ide_hwif_t *hwif = data;
	int unit = *part >> PARTN_BITS;
	ide_drive_t *drive = hwif->devices[unit];

	if ((drive->dev_flags & IDE_DFLAG_PRESENT) == 0)
		return NULL;

	if (drive->media == ide_disk)
	request_module("ide-disk");
	if (drive->media == ide_cdrom || drive->media == ide_optical)
	request_module("ide-cd");
	if (drive->media == ide_tape)
	request_module("ide-tape");
	if (drive->media == ide_floppy)
	request_module("ide-floppy");

	return NULL;
}

void ide_init_disk(struct gendisk *disk, ide_drive_t *drive)
@@ -967,7 +948,7 @@ static int hwif_init(ide_hwif_t *hwif)
		return 0;
	}

	if (register_blkdev(hwif->major, hwif->name))
	if (__register_blkdev(hwif->major, hwif->name, ata_probe))
		return 0;

	if (!hwif->sg_max_nents)
@@ -989,8 +970,6 @@ static int hwif_init(ide_hwif_t *hwif)
		goto out;
	}

	blk_register_region(MKDEV(hwif->major, 0), MAX_DRIVES << PARTN_BITS,
			    THIS_MODULE, ata_probe, ata_lock, hwif);
	return 1;

out:
@@ -1582,7 +1561,6 @@ static void ide_unregister(ide_hwif_t *hwif)
	/*
	 * Remove us from the kernel's knowledge
	 */
	blk_unregister_region(MKDEV(hwif->major, 0), MAX_DRIVES<<PARTN_BITS);
	kfree(hwif->sg_table);
	unregister_blkdev(hwif->major, hwif->name);