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
next prev parent reply other threads:[~2021-07-25 5:56 UTC|newest]
Thread overview: 30+ 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 ` [PATCH 1/8] block: make the block holder code optional Christoph Hellwig
2021-07-29 16:25 ` 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-29 16:27 ` Mike Snitzer
2021-07-25 5:54 ` Christoph Hellwig [this message]
2021-07-25 5:54 ` [PATCH 4/8] block: support delayed holder registration Christoph Hellwig
2021-07-27 16:06 ` Mike Snitzer
2021-07-28 6:54 ` Christoph Hellwig
2021-07-29 16:32 ` Mike Snitzer
2021-07-25 5:54 ` [PATCH 5/8] dm: cleanup cleanup_mapped_device Christoph Hellwig
2021-07-29 16:33 ` Mike Snitzer
2021-07-25 5:54 ` [PATCH 6/8] dm: move setting md->type into dm_setup_md_queue Christoph Hellwig
2021-07-29 16:34 ` Mike Snitzer
2021-07-25 5:54 ` [PATCH 7/8] dm: delay registering the gendisk Christoph Hellwig
2021-07-29 16:36 ` Mike Snitzer
2021-07-25 5:54 ` [PATCH 8/8] block: remove support for delayed queue registrations Christoph Hellwig
2021-07-29 16:37 ` Mike Snitzer
2021-07-27 15:58 ` use regular gendisk registration in device mapper Mike Snitzer
2021-07-27 16:02 ` Christoph Hellwig
2021-07-27 16:18 ` Mike Snitzer
2021-07-27 20:38 ` [dm-devel] " Milan Broz
2021-07-28 7:06 ` Christoph Hellwig
2021-07-28 8:37 ` Milan Broz
2021-07-28 11:24 ` Christoph Hellwig
2021-07-29 15:01 ` Milan Broz
2021-07-28 16:17 ` Mike Snitzer
2021-07-29 7:50 ` Milan Broz
2021-07-27 22:52 ` 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: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).