block: remove GENHD_FL_UP
authorChristoph Hellwig <hch@lst.de>
Mon, 9 Aug 2021 06:40:28 +0000 (08:40 +0200)
committerJens Axboe <axboe@kernel.dk>
Thu, 12 Aug 2021 16:29:36 +0000 (10:29 -0600)
Just check inode_unhashed on the whole device bdev inode instead,
and provide a helper to check for that information.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Link: https://lore.kernel.org/r/20210809064028.1198327-9-hch@lst.de
Signed-off-by: Jens Axboe <axboe@kernel.dk>
block/genhd.c
block/partitions/core.c
drivers/md/md.h
drivers/nvme/host/core.c
fs/block_dev.c
include/linux/genhd.h

index f8def11..9d6b3ae 100644 (file)
@@ -77,7 +77,8 @@ bool set_capacity_and_notify(struct gendisk *disk, sector_t size)
         * initial capacity during probing.
         */
        if (size == capacity ||
-           (disk->flags & (GENHD_FL_UP | GENHD_FL_HIDDEN)) != GENHD_FL_UP)
+           !disk_live(disk) ||
+           (disk->flags & GENHD_FL_HIDDEN))
                return false;
 
        pr_info("%s: detected capacity change from %lld to %lld\n",
@@ -527,8 +528,6 @@ void device_add_disk(struct device *parent, struct gendisk *disk,
                disk->flags |= GENHD_FL_EXT_DEVT;
        }
 
-       disk->flags |= GENHD_FL_UP;
-
        disk_alloc_events(disk);
 
        if (disk->flags & GENHD_FL_HIDDEN) {
@@ -597,7 +596,6 @@ void del_gendisk(struct gendisk *disk)
 
        mutex_lock(&disk->open_mutex);
        remove_inode_hash(disk->part0->bd_inode);
-       disk->flags &= ~GENHD_FL_UP;
        blk_drop_partitions(disk);
        mutex_unlock(&disk->open_mutex);
 
index fb3a556..c6738cc 100644 (file)
@@ -459,7 +459,7 @@ int bdev_add_partition(struct block_device *bdev, int partno,
        int ret;
 
        mutex_lock(&disk->open_mutex);
-       if (!(disk->flags & GENHD_FL_UP)) {
+       if (!disk_live(disk)) {
                ret = -ENXIO;
                goto out;
        }
@@ -669,7 +669,7 @@ int bdev_disk_changed(struct gendisk *disk, bool invalidate)
 
        lockdep_assert_held(&disk->open_mutex);
 
-       if (!(disk->flags & GENHD_FL_UP))
+       if (!disk_live(disk))
                return -ENXIO;
 
 rescan:
index 832547c..4c96c36 100644 (file)
@@ -764,9 +764,7 @@ struct md_rdev *md_find_rdev_rcu(struct mddev *mddev, dev_t dev);
 
 static inline bool is_mddev_broken(struct md_rdev *rdev, const char *md_type)
 {
-       int flags = rdev->bdev->bd_disk->flags;
-
-       if (!(flags & GENHD_FL_UP)) {
+       if (!disk_live(rdev->bdev->bd_disk)) {
                if (!test_and_set_bit(MD_BROKEN, &rdev->mddev->flags))
                        pr_warn("md: %s: %s array has a missing/failed member\n",
                                mdname(rdev->mddev), md_type);
index dbe7144..1478d82 100644 (file)
@@ -1822,7 +1822,7 @@ static void nvme_update_disk_info(struct gendisk *disk,
 static inline bool nvme_first_scan(struct gendisk *disk)
 {
        /* nvme_alloc_ns() scans the disk prior to adding it */
-       return !(disk->flags & GENHD_FL_UP);
+       return !disk_live(disk);
 }
 
 static void nvme_set_chunk_sectors(struct nvme_ns *ns, struct nvme_id_ns *id)
index e1c14c2..38a8b0e 100644 (file)
@@ -1218,7 +1218,7 @@ struct block_device *blkdev_get_by_dev(dev_t dev, fmode_t mode, void *holder)
 
        mutex_lock(&disk->open_mutex);
        ret = -ENXIO;
-       if (!(disk->flags & GENHD_FL_UP))
+       if (!disk_live(disk))
                goto abort_claiming;
        if (bdev_is_partition(bdev))
                ret = blkdev_get_part(bdev, mode);
index b3bab57..b47e297 100644 (file)
@@ -60,9 +60,6 @@ struct partition_meta_info {
  * device.
  * Affects responses to the ``CDROM_GET_CAPABILITY`` ioctl.
  *
- * ``GENHD_FL_UP`` (0x0010): indicates that the block device is "up",
- * with a similar meaning to network interfaces.
- *
  * ``GENHD_FL_SUPPRESS_PARTITION_INFO`` (0x0020): don't include
  * partition information in ``/proc/partitions`` or in the output of
  * printk_all_partitions().
@@ -97,7 +94,6 @@ struct partition_meta_info {
 /* 2 is unused (used to be GENHD_FL_DRIVERFS) */
 /* 4 is unused (used to be GENHD_FL_MEDIA_CHANGE_NOTIFY) */
 #define GENHD_FL_CD                            0x0008
-#define GENHD_FL_UP                            0x0010
 #define GENHD_FL_SUPPRESS_PARTITION_INFO       0x0020
 #define GENHD_FL_EXT_DEVT                      0x0040
 #define GENHD_FL_NATIVE_CAPACITY               0x0080
@@ -178,6 +174,11 @@ struct gendisk {
        u64 diskseq;
 };
 
+static inline bool disk_live(struct gendisk *disk)
+{
+       return !inode_unhashed(disk->part0->bd_inode);
+}
+
 /*
  * The gendisk is refcounted by the part0 block_device, and the bd_device
  * therein is also used for device model presentation in sysfs.