diff mbox series

[33/44] block: move holder_dir to struct block_device

Message ID 20201126130422.92945-34-hch@lst.de (mailing list archive)
State New
Headers show
Series [01/44] blk-cgroup: fix a hd_struct leak in blkcg_fill_root_iostats | expand

Commit Message

Christoph Hellwig Nov. 26, 2020, 1:04 p.m. UTC
Move the holder_dir field to struct block_device in preparation for
kill struct hd_struct.

Signed-off-by: Christoph Hellwig <hch@lst.de>
---
 block/genhd.c             |  5 +++--
 block/partitions/core.c   |  8 ++++----
 fs/block_dev.c            | 11 +++++------
 include/linux/blk_types.h |  1 +
 include/linux/genhd.h     |  1 -
 5 files changed, 13 insertions(+), 13 deletions(-)

Comments

Jan Kara Nov. 26, 2020, 5 p.m. UTC | #1
On Thu 26-11-20 14:04:11, Christoph Hellwig wrote:
> Move the holder_dir field to struct block_device in preparation for
> kill struct hd_struct.
> 
> Signed-off-by: Christoph Hellwig <hch@lst.de>

Looks good. You can add:

Reviewed-by: Jan Kara <jack@suse.cz>

								Honza

> ---
>  block/genhd.c             |  5 +++--
>  block/partitions/core.c   |  8 ++++----
>  fs/block_dev.c            | 11 +++++------
>  include/linux/blk_types.h |  1 +
>  include/linux/genhd.h     |  1 -
>  5 files changed, 13 insertions(+), 13 deletions(-)
> 
> diff --git a/block/genhd.c b/block/genhd.c
> index fe202a12eec096..a964e7532fedd5 100644
> --- a/block/genhd.c
> +++ b/block/genhd.c
> @@ -673,7 +673,8 @@ static void register_disk(struct device *parent, struct gendisk *disk,
>  	 */
>  	pm_runtime_set_memalloc_noio(ddev, true);
>  
> -	disk->part0.holder_dir = kobject_create_and_add("holders", &ddev->kobj);
> +	disk->part0.bdev->bd_holder_dir =
> +			kobject_create_and_add("holders", &ddev->kobj);
>  	disk->slave_dir = kobject_create_and_add("slaves", &ddev->kobj);
>  
>  	if (disk->flags & GENHD_FL_HIDDEN) {
> @@ -879,7 +880,7 @@ void del_gendisk(struct gendisk *disk)
>  
>  	blk_unregister_queue(disk);
>  
> -	kobject_put(disk->part0.holder_dir);
> +	kobject_put(disk->part0.bdev->bd_holder_dir);
>  	kobject_put(disk->slave_dir);
>  
>  	part_stat_set_all(&disk->part0, 0);
> diff --git a/block/partitions/core.c b/block/partitions/core.c
> index 224a22d82fb86f..d1093adf2570e2 100644
> --- a/block/partitions/core.c
> +++ b/block/partitions/core.c
> @@ -344,7 +344,7 @@ void delete_partition(struct hd_struct *part)
>  	 */
>  	get_device(disk_to_dev(disk));
>  	rcu_assign_pointer(ptbl->part[part->partno], NULL);
> -	kobject_put(part->holder_dir);
> +	kobject_put(part->bdev->bd_holder_dir);
>  	device_del(part_to_dev(part));
>  
>  	/*
> @@ -452,8 +452,8 @@ static struct hd_struct *add_partition(struct gendisk *disk, int partno,
>  		goto out_put;
>  
>  	err = -ENOMEM;
> -	p->holder_dir = kobject_create_and_add("holders", &pdev->kobj);
> -	if (!p->holder_dir)
> +	bdev->bd_holder_dir = kobject_create_and_add("holders", &pdev->kobj);
> +	if (!bdev->bd_holder_dir)
>  		goto out_del;
>  
>  	dev_set_uevent_suppress(pdev, 0);
> @@ -487,7 +487,7 @@ static struct hd_struct *add_partition(struct gendisk *disk, int partno,
>  out_remove_file:
>  	device_remove_file(pdev, &dev_attr_whole_disk);
>  out_del:
> -	kobject_put(p->holder_dir);
> +	kobject_put(bdev->bd_holder_dir);
>  	device_del(pdev);
>  out_put:
>  	put_device(pdev);
> diff --git a/fs/block_dev.c b/fs/block_dev.c
> index 62fae6a0e8aa56..2c91c35149787a 100644
> --- a/fs/block_dev.c
> +++ b/fs/block_dev.c
> @@ -1138,7 +1138,7 @@ int bd_link_disk_holder(struct block_device *bdev, struct gendisk *disk)
>  	WARN_ON_ONCE(!bdev->bd_holder);
>  
>  	/* FIXME: remove the following once add_disk() handles errors */
> -	if (WARN_ON(!disk->slave_dir || !bdev->bd_part->holder_dir))
> +	if (WARN_ON(!disk->slave_dir || !bdev->bd_holder_dir))
>  		goto out_unlock;
>  
>  	holder = bd_find_holder_disk(bdev, disk);
> @@ -1161,14 +1161,14 @@ int bd_link_disk_holder(struct block_device *bdev, struct gendisk *disk)
>  	if (ret)
>  		goto out_free;
>  
> -	ret = add_symlink(bdev->bd_part->holder_dir, &disk_to_dev(disk)->kobj);
> +	ret = add_symlink(bdev->bd_holder_dir, &disk_to_dev(disk)->kobj);
>  	if (ret)
>  		goto out_del;
>  	/*
>  	 * bdev could be deleted beneath us which would implicitly destroy
>  	 * the holder directory.  Hold on to it.
>  	 */
> -	kobject_get(bdev->bd_part->holder_dir);
> +	kobject_get(bdev->bd_holder_dir);
>  
>  	list_add(&holder->list, &bdev->bd_holder_disks);
>  	goto out_unlock;
> @@ -1203,9 +1203,8 @@ void bd_unlink_disk_holder(struct block_device *bdev, struct gendisk *disk)
>  
>  	if (!WARN_ON_ONCE(holder == NULL) && !--holder->refcnt) {
>  		del_symlink(disk->slave_dir, bdev_kobj(bdev));
> -		del_symlink(bdev->bd_part->holder_dir,
> -			    &disk_to_dev(disk)->kobj);
> -		kobject_put(bdev->bd_part->holder_dir);
> +		del_symlink(bdev->bd_holder_dir, &disk_to_dev(disk)->kobj);
> +		kobject_put(bdev->bd_holder_dir);
>  		list_del_init(&holder->list);
>  		kfree(holder);
>  	}
> diff --git a/include/linux/blk_types.h b/include/linux/blk_types.h
> index 2f8ede04e5a94c..c0591e52d7d7ce 100644
> --- a/include/linux/blk_types.h
> +++ b/include/linux/blk_types.h
> @@ -35,6 +35,7 @@ struct block_device {
>  #ifdef CONFIG_SYSFS
>  	struct list_head	bd_holder_disks;
>  #endif
> +	struct kobject		*bd_holder_dir;
>  	u8			bd_partno;
>  	struct hd_struct *	bd_part;
>  	/* number of times partitions within this device have been opened. */
> diff --git a/include/linux/genhd.h b/include/linux/genhd.h
> index 30d7076155b4d2..b4a5c05593b99c 100644
> --- a/include/linux/genhd.h
> +++ b/include/linux/genhd.h
> @@ -55,7 +55,6 @@ struct hd_struct {
>  
>  	struct block_device *bdev;
>  	struct device __dev;
> -	struct kobject *holder_dir;
>  	int policy, partno;
>  #ifdef CONFIG_FAIL_MAKE_REQUEST
>  	int make_it_fail;
> -- 
> 2.29.2
>
diff mbox series

Patch

diff --git a/block/genhd.c b/block/genhd.c
index fe202a12eec096..a964e7532fedd5 100644
--- a/block/genhd.c
+++ b/block/genhd.c
@@ -673,7 +673,8 @@  static void register_disk(struct device *parent, struct gendisk *disk,
 	 */
 	pm_runtime_set_memalloc_noio(ddev, true);
 
-	disk->part0.holder_dir = kobject_create_and_add("holders", &ddev->kobj);
+	disk->part0.bdev->bd_holder_dir =
+			kobject_create_and_add("holders", &ddev->kobj);
 	disk->slave_dir = kobject_create_and_add("slaves", &ddev->kobj);
 
 	if (disk->flags & GENHD_FL_HIDDEN) {
@@ -879,7 +880,7 @@  void del_gendisk(struct gendisk *disk)
 
 	blk_unregister_queue(disk);
 
-	kobject_put(disk->part0.holder_dir);
+	kobject_put(disk->part0.bdev->bd_holder_dir);
 	kobject_put(disk->slave_dir);
 
 	part_stat_set_all(&disk->part0, 0);
diff --git a/block/partitions/core.c b/block/partitions/core.c
index 224a22d82fb86f..d1093adf2570e2 100644
--- a/block/partitions/core.c
+++ b/block/partitions/core.c
@@ -344,7 +344,7 @@  void delete_partition(struct hd_struct *part)
 	 */
 	get_device(disk_to_dev(disk));
 	rcu_assign_pointer(ptbl->part[part->partno], NULL);
-	kobject_put(part->holder_dir);
+	kobject_put(part->bdev->bd_holder_dir);
 	device_del(part_to_dev(part));
 
 	/*
@@ -452,8 +452,8 @@  static struct hd_struct *add_partition(struct gendisk *disk, int partno,
 		goto out_put;
 
 	err = -ENOMEM;
-	p->holder_dir = kobject_create_and_add("holders", &pdev->kobj);
-	if (!p->holder_dir)
+	bdev->bd_holder_dir = kobject_create_and_add("holders", &pdev->kobj);
+	if (!bdev->bd_holder_dir)
 		goto out_del;
 
 	dev_set_uevent_suppress(pdev, 0);
@@ -487,7 +487,7 @@  static struct hd_struct *add_partition(struct gendisk *disk, int partno,
 out_remove_file:
 	device_remove_file(pdev, &dev_attr_whole_disk);
 out_del:
-	kobject_put(p->holder_dir);
+	kobject_put(bdev->bd_holder_dir);
 	device_del(pdev);
 out_put:
 	put_device(pdev);
diff --git a/fs/block_dev.c b/fs/block_dev.c
index 62fae6a0e8aa56..2c91c35149787a 100644
--- a/fs/block_dev.c
+++ b/fs/block_dev.c
@@ -1138,7 +1138,7 @@  int bd_link_disk_holder(struct block_device *bdev, struct gendisk *disk)
 	WARN_ON_ONCE(!bdev->bd_holder);
 
 	/* FIXME: remove the following once add_disk() handles errors */
-	if (WARN_ON(!disk->slave_dir || !bdev->bd_part->holder_dir))
+	if (WARN_ON(!disk->slave_dir || !bdev->bd_holder_dir))
 		goto out_unlock;
 
 	holder = bd_find_holder_disk(bdev, disk);
@@ -1161,14 +1161,14 @@  int bd_link_disk_holder(struct block_device *bdev, struct gendisk *disk)
 	if (ret)
 		goto out_free;
 
-	ret = add_symlink(bdev->bd_part->holder_dir, &disk_to_dev(disk)->kobj);
+	ret = add_symlink(bdev->bd_holder_dir, &disk_to_dev(disk)->kobj);
 	if (ret)
 		goto out_del;
 	/*
 	 * bdev could be deleted beneath us which would implicitly destroy
 	 * the holder directory.  Hold on to it.
 	 */
-	kobject_get(bdev->bd_part->holder_dir);
+	kobject_get(bdev->bd_holder_dir);
 
 	list_add(&holder->list, &bdev->bd_holder_disks);
 	goto out_unlock;
@@ -1203,9 +1203,8 @@  void bd_unlink_disk_holder(struct block_device *bdev, struct gendisk *disk)
 
 	if (!WARN_ON_ONCE(holder == NULL) && !--holder->refcnt) {
 		del_symlink(disk->slave_dir, bdev_kobj(bdev));
-		del_symlink(bdev->bd_part->holder_dir,
-			    &disk_to_dev(disk)->kobj);
-		kobject_put(bdev->bd_part->holder_dir);
+		del_symlink(bdev->bd_holder_dir, &disk_to_dev(disk)->kobj);
+		kobject_put(bdev->bd_holder_dir);
 		list_del_init(&holder->list);
 		kfree(holder);
 	}
diff --git a/include/linux/blk_types.h b/include/linux/blk_types.h
index 2f8ede04e5a94c..c0591e52d7d7ce 100644
--- a/include/linux/blk_types.h
+++ b/include/linux/blk_types.h
@@ -35,6 +35,7 @@  struct block_device {
 #ifdef CONFIG_SYSFS
 	struct list_head	bd_holder_disks;
 #endif
+	struct kobject		*bd_holder_dir;
 	u8			bd_partno;
 	struct hd_struct *	bd_part;
 	/* number of times partitions within this device have been opened. */
diff --git a/include/linux/genhd.h b/include/linux/genhd.h
index 30d7076155b4d2..b4a5c05593b99c 100644
--- a/include/linux/genhd.h
+++ b/include/linux/genhd.h
@@ -55,7 +55,6 @@  struct hd_struct {
 
 	struct block_device *bdev;
 	struct device __dev;
-	struct kobject *holder_dir;
 	int policy, partno;
 #ifdef CONFIG_FAIL_MAKE_REQUEST
 	int make_it_fail;