Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a142be85 authored by Greg Kroah-Hartman's avatar Greg Kroah-Hartman
Browse files

block: make blk_lookup_devt use the class iterator function



Use the proper class iterator function instead of mucking around in the
internals of the class structures.

Cc: Kay Sievers <kay.sievers@vrfy.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent 5c6f35c5
Loading
Loading
Loading
Loading
+26 −12
Original line number Original line Diff line number Diff line
@@ -677,24 +677,38 @@ void genhd_media_change_notify(struct gendisk *disk)
EXPORT_SYMBOL_GPL(genhd_media_change_notify);
EXPORT_SYMBOL_GPL(genhd_media_change_notify);
#endif  /*  0  */
#endif  /*  0  */


struct find_block {
	const char *name;
	int part;
};

static int match_id(struct device *dev, void *data)
{
	struct find_block *find = data;

	if (dev->type != &disk_type)
		return 0;
	if (strcmp(dev->bus_id, find->name) == 0) {
		struct gendisk *disk = dev_to_disk(dev);
		if (find->part < disk->minors)
			return 1;
	}
	return 0;
}

dev_t blk_lookup_devt(const char *name, int part)
dev_t blk_lookup_devt(const char *name, int part)
{
{
	struct device *dev;
	struct device *dev;
	dev_t devt = MKDEV(0, 0);
	dev_t devt = MKDEV(0, 0);
	struct find_block find;


	mutex_lock(&block_class_lock);
	mutex_lock(&block_class_lock);
	list_for_each_entry(dev, &block_class.devices, node) {
	find.name = name;
		if (dev->type != &disk_type)
	find.part = part;
			continue;
	dev = class_find_device(&block_class, NULL, (void *)&find, match_id);
		if (strcmp(dev->bus_id, name) == 0) {
	if (dev)
			struct gendisk *disk = dev_to_disk(dev);

			if (part < disk->minors)
		devt = MKDEV(MAJOR(dev->devt),
		devt = MKDEV(MAJOR(dev->devt),
			     MINOR(dev->devt) + part);
			     MINOR(dev->devt) + part);
			break;
		}
	}
	mutex_unlock(&block_class_lock);
	mutex_unlock(&block_class_lock);


	return devt;
	return devt;