]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
block: add a disk_has_partscan helper
authorChristoph Hellwig <hch@lst.de>
Thu, 2 May 2024 13:00:32 +0000 (15:00 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 25 May 2024 14:28:40 +0000 (16:28 +0200)
commit 140ce28dd3bee8e53acc27f123ae474d69ef66f0 upstream.

Add a helper to check if partition scanning is enabled instead of
open coding the check in a few places.  This now always checks for
the hidden flag even if all but one of the callers are never reachable
for hidden gendisks.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Link: https://lore.kernel.org/r/20240502130033.1958492-2-hch@lst.de
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
block/genhd.c
block/partitions/core.c
include/linux/blkdev.h

index d74fb5b4ae68188a9b1bd7886212e8fa2566a7a7..29e26e46b8fbf7a7f32c8262dc0949d59433af1b 100644 (file)
@@ -345,9 +345,7 @@ int disk_scan_partitions(struct gendisk *disk, blk_mode_t mode)
        struct bdev_handle *handle;
        int ret = 0;
 
-       if (disk->flags & (GENHD_FL_NO_PART | GENHD_FL_HIDDEN))
-               return -EINVAL;
-       if (test_bit(GD_SUPPRESS_PART_SCAN, &disk->state))
+       if (!disk_has_partscan(disk))
                return -EINVAL;
        if (disk->open_partitions)
                return -EBUSY;
@@ -503,8 +501,7 @@ int __must_check device_add_disk(struct device *parent, struct gendisk *disk,
                        goto out_unregister_bdi;
 
                /* Make sure the first partition scan will be proceed */
-               if (get_capacity(disk) && !(disk->flags & GENHD_FL_NO_PART) &&
-                   !test_bit(GD_SUPPRESS_PART_SCAN, &disk->state))
+               if (get_capacity(disk) && disk_has_partscan(disk))
                        set_bit(GD_NEED_PART_SCAN, &disk->state);
 
                bdev_add(disk->part0, ddev->devt);
index 5f5ed5c75f04d91d7bc8bf87ff4c9fa685c62318..eac887755f4f038acd30cc5f098253a6ea79d665 100644 (file)
@@ -584,10 +584,7 @@ static int blk_add_partitions(struct gendisk *disk)
        struct parsed_partitions *state;
        int ret = -EAGAIN, p;
 
-       if (disk->flags & GENHD_FL_NO_PART)
-               return 0;
-
-       if (test_bit(GD_SUPPRESS_PART_SCAN, &disk->state))
+       if (!disk_has_partscan(disk))
                return 0;
 
        state = check_partition(disk);
index b43ca3b9d2a2649dc6a1ac6f1403132fadf44025..6ee8e7d7383ca9228cb1257e7a3035d52b9195c8 100644 (file)
@@ -233,6 +233,19 @@ static inline unsigned int disk_openers(struct gendisk *disk)
        return atomic_read(&disk->part0->bd_openers);
 }
 
+/**
+ * disk_has_partscan - return %true if partition scanning is enabled on a disk
+ * @disk: disk to check
+ *
+ * Returns %true if partitions scanning is enabled for @disk, or %false if
+ * partition scanning is disabled either permanently or temporarily.
+ */
+static inline bool disk_has_partscan(struct gendisk *disk)
+{
+       return !(disk->flags & (GENHD_FL_NO_PART | GENHD_FL_HIDDEN)) &&
+               !test_bit(GD_SUPPRESS_PART_SCAN, &disk->state);
+}
+
 /*
  * The gendisk is refcounted by the part0 block_device, and the bd_device
  * therein is also used for device model presentation in sysfs.