From: Christoph Hellwig <hch@lst.de> To: Jens Axboe <axboe@kernel.dk>, Mike Snitzer <snitzer@redhat.com> Cc: dm-devel@redhat.com, linux-block@vger.kernel.org Subject: [PATCH 3/8] block: look up holders by bdev Date: Sun, 25 Jul 2021 07:54:53 +0200 [thread overview] Message-ID: <20210725055458.29008-4-hch@lst.de> (raw) In-Reply-To: <20210725055458.29008-1-hch@lst.de> Invert they way the holder relations are tracked. This very slightly reduces the memory overhead for partitioned devices. Signed-off-by: Christoph Hellwig <hch@lst.de> --- block/genhd.c | 3 +++ block/holder.c | 18 +++++++++--------- fs/block_dev.c | 3 --- include/linux/blk_types.h | 3 --- include/linux/genhd.h | 4 +++- 5 files changed, 15 insertions(+), 16 deletions(-) diff --git a/block/genhd.c b/block/genhd.c index af4d2ab4a633..e2708a4a7a47 100644 --- a/block/genhd.c +++ b/block/genhd.c @@ -1263,6 +1263,9 @@ struct gendisk *__alloc_disk_node(int minors, int node_id) disk_to_dev(disk)->class = &block_class; disk_to_dev(disk)->type = &disk_type; device_initialize(disk_to_dev(disk)); +#ifdef CONFIG_BLOCK_HOLDER_DEPRECATED + INIT_LIST_HEAD(&disk->slave_bdevs); +#endif return disk; out_destroy_part_tbl: diff --git a/block/holder.c b/block/holder.c index 960654a71342..11e65d99a9fb 100644 --- a/block/holder.c +++ b/block/holder.c @@ -3,7 +3,7 @@ struct bd_holder_disk { struct list_head list; - struct gendisk *disk; + struct block_device *bdev; int refcnt; }; @@ -12,8 +12,8 @@ static struct bd_holder_disk *bd_find_holder_disk(struct block_device *bdev, { struct bd_holder_disk *holder; - list_for_each_entry(holder, &bdev->bd_holder_disks, list) - if (holder->disk == disk) + list_for_each_entry(holder, &disk->slave_bdevs, list) + if (holder->bdev == bdev) return holder; return NULL; } @@ -61,7 +61,7 @@ int bd_link_disk_holder(struct block_device *bdev, struct gendisk *disk) struct bd_holder_disk *holder; int ret = 0; - mutex_lock(&bdev->bd_disk->open_mutex); + mutex_lock(&disk->open_mutex); WARN_ON_ONCE(!bdev->bd_holder); @@ -82,7 +82,7 @@ int bd_link_disk_holder(struct block_device *bdev, struct gendisk *disk) } INIT_LIST_HEAD(&holder->list); - holder->disk = disk; + holder->bdev = bdev; holder->refcnt = 1; ret = add_symlink(disk->slave_dir, bdev_kobj(bdev)); @@ -93,7 +93,7 @@ int bd_link_disk_holder(struct block_device *bdev, struct gendisk *disk) if (ret) goto out_del; - list_add(&holder->list, &bdev->bd_holder_disks); + list_add(&holder->list, &disk->slave_bdevs); goto out_unlock; out_del: @@ -101,7 +101,7 @@ int bd_link_disk_holder(struct block_device *bdev, struct gendisk *disk) out_free: kfree(holder); out_unlock: - mutex_unlock(&bdev->bd_disk->open_mutex); + mutex_unlock(&disk->open_mutex); return ret; } EXPORT_SYMBOL_GPL(bd_link_disk_holder); @@ -120,7 +120,7 @@ void bd_unlink_disk_holder(struct block_device *bdev, struct gendisk *disk) { struct bd_holder_disk *holder; - mutex_lock(&bdev->bd_disk->open_mutex); + mutex_lock(&disk->open_mutex); holder = bd_find_holder_disk(bdev, disk); if (!WARN_ON_ONCE(holder == NULL) && !--holder->refcnt) { del_symlink(disk->slave_dir, bdev_kobj(bdev)); @@ -128,6 +128,6 @@ void bd_unlink_disk_holder(struct block_device *bdev, struct gendisk *disk) list_del_init(&holder->list); kfree(holder); } - mutex_unlock(&bdev->bd_disk->open_mutex); + mutex_unlock(&disk->open_mutex); } EXPORT_SYMBOL_GPL(bd_unlink_disk_holder); diff --git a/fs/block_dev.c b/fs/block_dev.c index 7825d152634e..22646906ddaa 100644 --- a/fs/block_dev.c +++ b/fs/block_dev.c @@ -900,9 +900,6 @@ struct block_device *bdev_alloc(struct gendisk *disk, u8 partno) bdev->bd_disk = disk; bdev->bd_partno = partno; bdev->bd_inode = inode; -#ifdef CONFIG_BLOCK_HOLDER_DEPRECATED - INIT_LIST_HEAD(&bdev->bd_holder_disks); -#endif bdev->bd_stats = alloc_percpu(struct disk_stats); if (!bdev->bd_stats) { iput(inode); diff --git a/include/linux/blk_types.h b/include/linux/blk_types.h index 7a4e139d24ef..e92735655684 100644 --- a/include/linux/blk_types.h +++ b/include/linux/blk_types.h @@ -34,9 +34,6 @@ struct block_device { void * bd_holder; int bd_holders; bool bd_write_holder; -#ifdef CONFIG_BLOCK_HOLDER_DEPRECATED - struct list_head bd_holder_disks; -#endif struct kobject *bd_holder_dir; u8 bd_partno; spinlock_t bd_size_lock; /* for bd_inode->i_size updates */ diff --git a/include/linux/genhd.h b/include/linux/genhd.h index 6831d74f2002..26c8557e2714 100644 --- a/include/linux/genhd.h +++ b/include/linux/genhd.h @@ -159,7 +159,9 @@ struct gendisk { unsigned open_partitions; /* number of open partitions */ struct kobject *slave_dir; - +#ifdef CONFIG_BLOCK_HOLDER_DEPRECATED + struct list_head slave_bdevs; +#endif struct timer_rand_state *random; atomic_t sync_io; /* RAID */ struct disk_events *ev; -- 2.30.2
WARNING: multiple messages have this Message-ID (diff)
From: Christoph Hellwig <hch@lst.de> To: Jens Axboe <axboe@kernel.dk>, Mike Snitzer <snitzer@redhat.com> Cc: linux-block@vger.kernel.org, dm-devel@redhat.com Subject: [dm-devel] [PATCH 3/8] block: look up holders by bdev Date: Sun, 25 Jul 2021 07:54:53 +0200 [thread overview] Message-ID: <20210725055458.29008-4-hch@lst.de> (raw) In-Reply-To: <20210725055458.29008-1-hch@lst.de> Invert they way the holder relations are tracked. This very slightly reduces the memory overhead for partitioned devices. Signed-off-by: Christoph Hellwig <hch@lst.de> --- block/genhd.c | 3 +++ block/holder.c | 18 +++++++++--------- fs/block_dev.c | 3 --- include/linux/blk_types.h | 3 --- include/linux/genhd.h | 4 +++- 5 files changed, 15 insertions(+), 16 deletions(-) diff --git a/block/genhd.c b/block/genhd.c index af4d2ab4a633..e2708a4a7a47 100644 --- a/block/genhd.c +++ b/block/genhd.c @@ -1263,6 +1263,9 @@ struct gendisk *__alloc_disk_node(int minors, int node_id) disk_to_dev(disk)->class = &block_class; disk_to_dev(disk)->type = &disk_type; device_initialize(disk_to_dev(disk)); +#ifdef CONFIG_BLOCK_HOLDER_DEPRECATED + INIT_LIST_HEAD(&disk->slave_bdevs); +#endif return disk; out_destroy_part_tbl: diff --git a/block/holder.c b/block/holder.c index 960654a71342..11e65d99a9fb 100644 --- a/block/holder.c +++ b/block/holder.c @@ -3,7 +3,7 @@ struct bd_holder_disk { struct list_head list; - struct gendisk *disk; + struct block_device *bdev; int refcnt; }; @@ -12,8 +12,8 @@ static struct bd_holder_disk *bd_find_holder_disk(struct block_device *bdev, { struct bd_holder_disk *holder; - list_for_each_entry(holder, &bdev->bd_holder_disks, list) - if (holder->disk == disk) + list_for_each_entry(holder, &disk->slave_bdevs, list) + if (holder->bdev == bdev) return holder; return NULL; } @@ -61,7 +61,7 @@ int bd_link_disk_holder(struct block_device *bdev, struct gendisk *disk) struct bd_holder_disk *holder; int ret = 0; - mutex_lock(&bdev->bd_disk->open_mutex); + mutex_lock(&disk->open_mutex); WARN_ON_ONCE(!bdev->bd_holder); @@ -82,7 +82,7 @@ int bd_link_disk_holder(struct block_device *bdev, struct gendisk *disk) } INIT_LIST_HEAD(&holder->list); - holder->disk = disk; + holder->bdev = bdev; holder->refcnt = 1; ret = add_symlink(disk->slave_dir, bdev_kobj(bdev)); @@ -93,7 +93,7 @@ int bd_link_disk_holder(struct block_device *bdev, struct gendisk *disk) if (ret) goto out_del; - list_add(&holder->list, &bdev->bd_holder_disks); + list_add(&holder->list, &disk->slave_bdevs); goto out_unlock; out_del: @@ -101,7 +101,7 @@ int bd_link_disk_holder(struct block_device *bdev, struct gendisk *disk) out_free: kfree(holder); out_unlock: - mutex_unlock(&bdev->bd_disk->open_mutex); + mutex_unlock(&disk->open_mutex); return ret; } EXPORT_SYMBOL_GPL(bd_link_disk_holder); @@ -120,7 +120,7 @@ void bd_unlink_disk_holder(struct block_device *bdev, struct gendisk *disk) { struct bd_holder_disk *holder; - mutex_lock(&bdev->bd_disk->open_mutex); + mutex_lock(&disk->open_mutex); holder = bd_find_holder_disk(bdev, disk); if (!WARN_ON_ONCE(holder == NULL) && !--holder->refcnt) { del_symlink(disk->slave_dir, bdev_kobj(bdev)); @@ -128,6 +128,6 @@ void bd_unlink_disk_holder(struct block_device *bdev, struct gendisk *disk) list_del_init(&holder->list); kfree(holder); } - mutex_unlock(&bdev->bd_disk->open_mutex); + mutex_unlock(&disk->open_mutex); } EXPORT_SYMBOL_GPL(bd_unlink_disk_holder); diff --git a/fs/block_dev.c b/fs/block_dev.c index 7825d152634e..22646906ddaa 100644 --- a/fs/block_dev.c +++ b/fs/block_dev.c @@ -900,9 +900,6 @@ struct block_device *bdev_alloc(struct gendisk *disk, u8 partno) bdev->bd_disk = disk; bdev->bd_partno = partno; bdev->bd_inode = inode; -#ifdef CONFIG_BLOCK_HOLDER_DEPRECATED - INIT_LIST_HEAD(&bdev->bd_holder_disks); -#endif bdev->bd_stats = alloc_percpu(struct disk_stats); if (!bdev->bd_stats) { iput(inode); diff --git a/include/linux/blk_types.h b/include/linux/blk_types.h index 7a4e139d24ef..e92735655684 100644 --- a/include/linux/blk_types.h +++ b/include/linux/blk_types.h @@ -34,9 +34,6 @@ struct block_device { void * bd_holder; int bd_holders; bool bd_write_holder; -#ifdef CONFIG_BLOCK_HOLDER_DEPRECATED - struct list_head bd_holder_disks; -#endif struct kobject *bd_holder_dir; u8 bd_partno; spinlock_t bd_size_lock; /* for bd_inode->i_size updates */ diff --git a/include/linux/genhd.h b/include/linux/genhd.h index 6831d74f2002..26c8557e2714 100644 --- a/include/linux/genhd.h +++ b/include/linux/genhd.h @@ -159,7 +159,9 @@ struct gendisk { unsigned open_partitions; /* number of open partitions */ struct kobject *slave_dir; - +#ifdef CONFIG_BLOCK_HOLDER_DEPRECATED + struct list_head slave_bdevs; +#endif struct timer_rand_state *random; atomic_t sync_io; /* RAID */ struct disk_events *ev; -- 2.30.2 -- dm-devel mailing list dm-devel@redhat.com https://listman.redhat.com/mailman/listinfo/dm-devel
next prev parent reply other threads:[~2021-07-25 5:56 UTC|newest] Thread overview: 59+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-07-25 5:54 use regular gendisk registration in device mapper Christoph Hellwig 2021-07-25 5:54 ` [dm-devel] " Christoph Hellwig 2021-07-25 5:54 ` [PATCH 1/8] block: make the block holder code optional Christoph Hellwig 2021-07-25 5:54 ` [dm-devel] " Christoph Hellwig 2021-07-29 16:25 ` Mike Snitzer 2021-07-29 16:25 ` [dm-devel] " Mike Snitzer 2021-07-25 5:54 ` [PATCH 2/8] block: remove the extra kobject reference in bd_link_disk_holder Christoph Hellwig 2021-07-25 5:54 ` [dm-devel] " Christoph Hellwig 2021-07-29 16:27 ` Mike Snitzer 2021-07-29 16:27 ` [dm-devel] " Mike Snitzer 2021-07-25 5:54 ` Christoph Hellwig [this message] 2021-07-25 5:54 ` [dm-devel] [PATCH 3/8] block: look up holders by bdev Christoph Hellwig 2021-07-25 5:54 ` [PATCH 4/8] block: support delayed holder registration Christoph Hellwig 2021-07-25 5:54 ` [dm-devel] " Christoph Hellwig 2021-07-27 16:06 ` Mike Snitzer 2021-07-27 16:06 ` [dm-devel] " Mike Snitzer 2021-07-28 6:54 ` Christoph Hellwig 2021-07-28 6:54 ` [dm-devel] " Christoph Hellwig 2021-07-29 16:32 ` Mike Snitzer 2021-07-29 16:32 ` [dm-devel] " Mike Snitzer 2021-07-25 5:54 ` [PATCH 5/8] dm: cleanup cleanup_mapped_device Christoph Hellwig 2021-07-25 5:54 ` [dm-devel] " Christoph Hellwig 2021-07-29 16:33 ` Mike Snitzer 2021-07-29 16:33 ` [dm-devel] " Mike Snitzer 2021-07-25 5:54 ` [PATCH 6/8] dm: move setting md->type into dm_setup_md_queue Christoph Hellwig 2021-07-25 5:54 ` [dm-devel] " Christoph Hellwig 2021-07-29 16:34 ` Mike Snitzer 2021-07-29 16:34 ` [dm-devel] " Mike Snitzer 2021-07-25 5:54 ` [PATCH 7/8] dm: delay registering the gendisk Christoph Hellwig 2021-07-25 5:54 ` [dm-devel] " Christoph Hellwig 2021-07-29 16:36 ` Mike Snitzer 2021-07-29 16:36 ` [dm-devel] " Mike Snitzer 2021-07-25 5:54 ` [PATCH 8/8] block: remove support for delayed queue registrations Christoph Hellwig 2021-07-25 5:54 ` [dm-devel] " Christoph Hellwig 2021-07-29 16:37 ` Mike Snitzer 2021-07-29 16:37 ` [dm-devel] " Mike Snitzer 2021-07-27 15:58 ` use regular gendisk registration in device mapper Mike Snitzer 2021-07-27 15:58 ` [dm-devel] " Mike Snitzer 2021-07-27 16:02 ` Christoph Hellwig 2021-07-27 16:02 ` [dm-devel] " Christoph Hellwig 2021-07-27 16:18 ` Mike Snitzer 2021-07-27 16:18 ` [dm-devel] " Mike Snitzer 2021-07-27 20:38 ` Milan Broz 2021-07-27 20:38 ` Milan Broz 2021-07-28 7:06 ` Christoph Hellwig 2021-07-28 7:06 ` Christoph Hellwig 2021-07-28 8:37 ` Milan Broz 2021-07-28 8:37 ` Milan Broz 2021-07-28 11:24 ` Christoph Hellwig 2021-07-28 11:24 ` Christoph Hellwig 2021-07-29 15:01 ` Milan Broz 2021-07-29 15:01 ` Milan Broz 2021-07-28 16:17 ` Mike Snitzer 2021-07-28 16:17 ` [dm-devel] " Mike Snitzer 2021-07-29 7:50 ` Milan Broz 2021-07-29 7:50 ` [dm-devel] " Milan Broz 2021-07-27 22:52 ` Mike Snitzer 2021-07-27 22:52 ` [dm-devel] " Mike Snitzer 2021-08-04 9:41 use regular gendisk registration in device mapper v2 Christoph Hellwig 2021-08-04 9:41 ` [PATCH 3/8] block: look up holders by bdev Christoph Hellwig
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20210725055458.29008-4-hch@lst.de \ --to=hch@lst.de \ --cc=axboe@kernel.dk \ --cc=dm-devel@redhat.com \ --cc=linux-block@vger.kernel.org \ --cc=snitzer@redhat.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.