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

Commit ed9e1982 authored by Tejun Heo's avatar Tejun Heo Committed by Jens Axboe
Browse files

block: implement and use {disk|part}_to_dev()



Implement {disk|part}_to_dev() and use them to access generic device
instead of directly dereferencing {disk|part}->dev.  To make sure no
user is left behind, rename generic devices fields to __dev.

This is in preparation of unifying partition 0 handling with other
partitions.

Signed-off-by: default avatarTejun Heo <tj@kernel.org>
Signed-off-by: default avatarJens Axboe <jens.axboe@oracle.com>
parent 870d6656
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -331,7 +331,8 @@ int blk_integrity_register(struct gendisk *disk, struct blk_integrity *template)
			return -1;

		if (kobject_init_and_add(&bi->kobj, &integrity_ktype,
					 &disk->dev.kobj, "%s", "integrity")) {
					 &disk_to_dev(disk)->kobj,
					 "%s", "integrity")) {
			kmem_cache_free(integrity_cachep, bi);
			return -1;
		}
@@ -375,7 +376,7 @@ void blk_integrity_unregister(struct gendisk *disk)

	kobject_uevent(&bi->kobj, KOBJ_REMOVE);
	kobject_del(&bi->kobj);
	kobject_put(&disk->dev.kobj);
	kobject_put(&disk_to_dev(disk)->kobj);
	kmem_cache_free(integrity_cachep, bi);
}
EXPORT_SYMBOL(blk_integrity_unregister);
+2 −2
Original line number Diff line number Diff line
@@ -310,7 +310,7 @@ int blk_register_queue(struct gendisk *disk)
	if (!q->request_fn)
		return 0;

	ret = kobject_add(&q->kobj, kobject_get(&disk->dev.kobj),
	ret = kobject_add(&q->kobj, kobject_get(&disk_to_dev(disk)->kobj),
			  "%s", "queue");
	if (ret < 0)
		return ret;
@@ -339,6 +339,6 @@ void blk_unregister_queue(struct gendisk *disk)

		kobject_uevent(&q->kobj, KOBJ_REMOVE);
		kobject_del(&q->kobj);
		kobject_put(&disk->dev.kobj);
		kobject_put(&disk_to_dev(disk)->kobj);
	}
}
+14 −13
Original line number Diff line number Diff line
@@ -59,7 +59,7 @@ struct hd_struct *disk_get_part(struct gendisk *disk, int partno)
	rcu_read_lock();
	part = rcu_dereference(disk->__part[partno - 1]);
	if (part)
		get_device(&part->dev);
		get_device(part_to_dev(part));
	rcu_read_unlock();

	return part;
@@ -130,7 +130,7 @@ struct hd_struct *disk_part_iter_next(struct disk_part_iter *piter)
		if (!(piter->flags & DISK_PITER_INCL_EMPTY) && !part->nr_sects)
			continue;

		get_device(&part->dev);
		get_device(part_to_dev(part));
		piter->part = part;
		piter->idx += inc;
		break;
@@ -435,7 +435,7 @@ static struct kobject *exact_match(dev_t devt, int *partno, void *data)
{
	struct gendisk *p = data;

	return &p->dev.kobj;
	return &disk_to_dev(p)->kobj;
}

static int exact_lock(dev_t devt, void *data)
@@ -460,7 +460,7 @@ void add_disk(struct gendisk *disk)
	int retval;

	disk->flags |= GENHD_FL_UP;
	disk->dev.devt = MKDEV(disk->major, disk->first_minor);
	disk_to_dev(disk)->devt = MKDEV(disk->major, disk->first_minor);
	blk_register_region(disk_devt(disk), disk->minors, NULL,
			    exact_match, exact_lock, disk);
	register_disk(disk);
@@ -468,7 +468,8 @@ void add_disk(struct gendisk *disk)

	bdi = &disk->queue->backing_dev_info;
	bdi_register_dev(bdi, disk_devt(disk));
	retval = sysfs_create_link(&disk->dev.kobj, &bdi->dev->kobj, "bdi");
	retval = sysfs_create_link(&disk_to_dev(disk)->kobj, &bdi->dev->kobj,
				   "bdi");
	WARN_ON(retval);
}

@@ -477,7 +478,7 @@ EXPORT_SYMBOL(del_gendisk); /* in partitions/check.c */

void unlink_gendisk(struct gendisk *disk)
{
	sysfs_remove_link(&disk->dev.kobj, "bdi");
	sysfs_remove_link(&disk_to_dev(disk)->kobj, "bdi");
	bdi_unregister(&disk->queue->backing_dev_info);
	blk_unregister_queue(disk);
	blk_unregister_region(disk_devt(disk), disk->minors);
@@ -903,7 +904,7 @@ static int diskstats_show(struct seq_file *seqf, void *v)
	int cpu;

	/*
	if (&gp->dev.kobj.entry == block_class.devices.next)
	if (&disk_to_dev(gp)->kobj.entry == block_class.devices.next)
		seq_puts(seqf,	"major minor name"
				"     rio rmerge rsect ruse wio wmerge "
				"wsect wuse running use aveq"
@@ -972,7 +973,7 @@ static void media_change_notify_thread(struct work_struct *work)
	 * set enviroment vars to indicate which event this is for
	 * so that user space will know to go check the media status.
	 */
	kobject_uevent_env(&gd->dev.kobj, KOBJ_CHANGE, envp);
	kobject_uevent_env(&disk_to_dev(gd)->kobj, KOBJ_CHANGE, envp);
	put_device(gd->driverfs_dev);
}

@@ -1062,9 +1063,9 @@ struct gendisk *alloc_disk_ext_node(int minors, int ext_minors, int node_id)
		disk->minors = minors;
		disk->ext_minors = ext_minors;
		rand_initialize_disk(disk);
		disk->dev.class = &block_class;
		disk->dev.type = &disk_type;
		device_initialize(&disk->dev);
		disk_to_dev(disk)->class = &block_class;
		disk_to_dev(disk)->type = &disk_type;
		device_initialize(disk_to_dev(disk));
		INIT_WORK(&disk->async_notify,
			media_change_notify_thread);
	}
@@ -1086,7 +1087,7 @@ struct kobject *get_disk(struct gendisk *disk)
	owner = disk->fops->owner;
	if (owner && !try_module_get(owner))
		return NULL;
	kobj = kobject_get(&disk->dev.kobj);
	kobj = kobject_get(&disk_to_dev(disk)->kobj);
	if (kobj == NULL) {
		module_put(owner);
		return NULL;
@@ -1100,7 +1101,7 @@ EXPORT_SYMBOL(get_disk);
void put_disk(struct gendisk *disk)
{
	if (disk)
		kobject_put(&disk->dev.kobj);
		kobject_put(&disk_to_dev(disk)->kobj);
}

EXPORT_SYMBOL(put_disk);
+2 −2
Original line number Diff line number Diff line
@@ -109,12 +109,12 @@ static const struct attribute_group attr_group = {
static int
aoedisk_add_sysfs(struct aoedev *d)
{
	return sysfs_create_group(&d->gd->dev.kobj, &attr_group);
	return sysfs_create_group(&disk_to_dev(d->gd)->kobj, &attr_group);
}
void
aoedisk_rm_sysfs(struct aoedev *d)
{
	sysfs_remove_group(&d->gd->dev.kobj, &attr_group);
	sysfs_remove_group(&disk_to_dev(d->gd)->kobj, &attr_group);
}

static int
+2 −2
Original line number Diff line number Diff line
@@ -403,7 +403,7 @@ static int nbd_do_it(struct nbd_device *lo)
	BUG_ON(lo->magic != LO_MAGIC);

	lo->pid = current->pid;
	ret = sysfs_create_file(&lo->disk->dev.kobj, &pid_attr.attr);
	ret = sysfs_create_file(&disk_to_dev(lo->disk)->kobj, &pid_attr.attr);
	if (ret) {
		printk(KERN_ERR "nbd: sysfs_create_file failed!");
		return ret;
@@ -412,7 +412,7 @@ static int nbd_do_it(struct nbd_device *lo)
	while ((req = nbd_read_stat(lo)) != NULL)
		nbd_end_request(req);

	sysfs_remove_file(&lo->disk->dev.kobj, &pid_attr.attr);
	sysfs_remove_file(&disk_to_dev(lo->disk)->kobj, &pid_attr.attr);
	return 0;
}

Loading