diff options
author | Christoph Hellwig <hch@lst.de> | 2021-04-06 08:22:59 +0200 |
---|---|---|
committer | Jens Axboe <axboe@kernel.dk> | 2021-04-08 10:24:36 -0600 |
commit | e559f58d20dbcc0b541552ac6b5cbab29c964d6a (patch) | |
tree | 99ea4441baefd169288083814ca04e9bb6362b37 | |
parent | e30691237bc1e055c55b0fe256ed7fc1a4ee1122 (diff) |
block: simplify printk_all_partitions
Just use xa_for_each to iterate over the partitions as there is no need
to grab a reference to each partition.
Signed-off-by: Christoph Hellwig <hch@lst.de>
Link: https://lore.kernel.org/r/20210406062303.811835-9-hch@lst.de
Signed-off-by: Jens Axboe <axboe@kernel.dk>
-rw-r--r-- | block/genhd.c | 33 |
1 files changed, 16 insertions, 17 deletions
diff --git a/block/genhd.c b/block/genhd.c index e3f3c2321773..409ff4710f92 100644 --- a/block/genhd.c +++ b/block/genhd.c @@ -806,10 +806,10 @@ void __init printk_all_partitions(void) class_dev_iter_init(&iter, &block_class, NULL, &disk_type); while ((dev = class_dev_iter_next(&iter))) { struct gendisk *disk = dev_to_disk(dev); - struct disk_part_iter piter; struct block_device *part; char name_buf[BDEVNAME_SIZE]; char devt_buf[BDEVT_SIZE]; + unsigned long idx; /* * Don't show empty devices or things that have been @@ -820,30 +820,29 @@ void __init printk_all_partitions(void) continue; /* - * Note, unlike /proc/partitions, I am showing the - * numbers in hex - the same format as the root= - * option takes. + * Note, unlike /proc/partitions, I am showing the numbers in + * hex - the same format as the root= option takes. */ - disk_part_iter_init(&piter, disk, DISK_PITER_INCL_PART0); - while ((part = disk_part_iter_next(&piter))) { - bool is_part0 = part == disk->part0; - - printk("%s%s %10llu %s %s", is_part0 ? "" : " ", + rcu_read_lock(); + xa_for_each(&disk->part_tbl, idx, part) { + if (!bdev_nr_sectors(part)) + continue; + printk("%s%s %10llu %s %s", + bdev_is_partition(part) ? " " : "", bdevt_str(part->bd_dev, devt_buf), bdev_nr_sectors(part) >> 1, disk_name(disk, part->bd_partno, name_buf), part->bd_meta_info ? part->bd_meta_info->uuid : ""); - if (is_part0) { - if (dev->parent && dev->parent->driver) - printk(" driver: %s\n", - dev->parent->driver->name); - else - printk(" (driver?)\n"); - } else + if (bdev_is_partition(part)) printk("\n"); + else if (dev->parent && dev->parent->driver) + printk(" driver: %s\n", + dev->parent->driver->name); + else + printk(" (driver?)\n"); } - disk_part_iter_exit(&piter); + rcu_read_unlock(); } class_dev_iter_exit(&iter); } |