block: simplify printk_all_partitions
authorChristoph Hellwig <hch@lst.de>
Tue, 6 Apr 2021 06:22:59 +0000 (08:22 +0200)
committerJens Axboe <axboe@kernel.dk>
Thu, 8 Apr 2021 16:24:36 +0000 (10:24 -0600)
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>
block/genhd.c

index e3f3c23..409ff47 100644 (file)
@@ -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);
 }