]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
block: merge invalidate_partitions into rescan_partitions
authorChristoph Hellwig <hch@lst.de>
Thu, 14 Nov 2019 14:34:33 +0000 (15:34 +0100)
committerJens Axboe <axboe@kernel.dk>
Thu, 14 Nov 2019 14:42:41 +0000 (07:42 -0700)
A lot of the logic in invalidate_partitions and rescan_partitions is
shared.  Merge the two functions to simplify things.  There is a small
behavior change in that we now send the kevent change notice also if we
were not invalidating but no partitions were found, which seems like
the right thing to do.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Jan Kara <jack@suse.cz>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
block/ioctl.c
block/partition-generic.c
fs/block_dev.c
include/linux/genhd.h

index 8756efb1419e42027aa2ba0fe187956e5828c13e..f6576a6d577837cd90fa7802715374683f983ad5 100644 (file)
@@ -171,7 +171,7 @@ int __blkdev_reread_part(struct block_device *bdev)
 
        lockdep_assert_held(&bdev->bd_mutex);
 
-       return rescan_partitions(disk, bdev);
+       return rescan_partitions(disk, bdev, false);
 }
 EXPORT_SYMBOL(__blkdev_reread_part);
 
index 7eabb67f99b5f1ab00664576c5294ac14e6e03ea..6b9f4f5d993addfab79b9343f86ce3f3a4fe5cd0 100644 (file)
@@ -576,7 +576,8 @@ static int blk_add_partitions(struct gendisk *disk, struct block_device *bdev)
        return ret;
 }
 
-int rescan_partitions(struct gendisk *disk, struct block_device *bdev)
+int rescan_partitions(struct gendisk *disk, struct block_device *bdev,
+               bool invalidate)
 {
        int ret;
 
@@ -585,13 +586,22 @@ int rescan_partitions(struct gendisk *disk, struct block_device *bdev)
        if (ret)
                return ret;
 
-       if (disk->fops->revalidate_disk)
+       if (invalidate)
+               set_capacity(disk, 0);
+       else if (disk->fops->revalidate_disk)
                disk->fops->revalidate_disk(disk);
-       check_disk_size_change(disk, bdev, true);
+
+       check_disk_size_change(disk, bdev, !invalidate);
        bdev->bd_invalidated = 0;
 
-       if (!get_capacity(disk))
+       if (!get_capacity(disk)) {
+               /*
+                * Tell userspace that the media / partition table may have
+                * changed.
+                */
+               kobject_uevent(&disk_to_dev(disk)->kobj, KOBJ_CHANGE);
                return 0;
+       }
 
        ret = blk_add_partitions(disk, bdev);
        if (ret == -EAGAIN)
@@ -599,26 +609,6 @@ int rescan_partitions(struct gendisk *disk, struct block_device *bdev)
        return ret;
 }
 
-int invalidate_partitions(struct gendisk *disk, struct block_device *bdev)
-{
-       int res;
-
-       if (!bdev->bd_invalidated)
-               return 0;
-
-       res = drop_partitions(disk, bdev);
-       if (res)
-               return res;
-
-       set_capacity(disk, 0);
-       check_disk_size_change(disk, bdev, false);
-       bdev->bd_invalidated = 0;
-       /* tell userspace that the media / partition table may have changed */
-       kobject_uevent(&disk_to_dev(disk)->kobj, KOBJ_CHANGE);
-
-       return 0;
-}
-
 unsigned char *read_dev_sector(struct block_device *bdev, sector_t n, Sector *p)
 {
        struct address_space *mapping = bdev->bd_inode->i_mapping;
index d612468ee66bf49a12bfacc440139b17d1b97523..0af62b76d03167d24f725566aecdc5f2ac4817f2 100644 (file)
@@ -1511,10 +1511,7 @@ static void __blkdev_put(struct block_device *bdev, fmode_t mode, int for_part);
 static void bdev_disk_changed(struct block_device *bdev, bool invalidate)
 {
        if (disk_part_scan_enabled(bdev->bd_disk)) {
-               if (invalidate)
-                       invalidate_partitions(bdev->bd_disk, bdev);
-               else
-                       rescan_partitions(bdev->bd_disk, bdev);
+               rescan_partitions(bdev->bd_disk, bdev, invalidate);
        } else {
                check_disk_size_change(bdev->bd_disk, bdev, !invalidate);
                bdev->bd_invalidated = 0;
index 8b5330dd5ac094b68ffbf3922c7571e8f2998474..fd7774e64f0b291c18f9e7fc1744bfff00a5250a 100644 (file)
@@ -622,8 +622,8 @@ extern dev_t blk_lookup_devt(const char *name, int partno);
 extern char *disk_name (struct gendisk *hd, int partno, char *buf);
 
 extern int disk_expand_part_tbl(struct gendisk *disk, int target);
-extern int rescan_partitions(struct gendisk *disk, struct block_device *bdev);
-extern int invalidate_partitions(struct gendisk *disk, struct block_device *bdev);
+int rescan_partitions(struct gendisk *disk, struct block_device *bdev,
+               bool invalidate);
 extern struct hd_struct * __must_check add_partition(struct gendisk *disk,
                                                     int partno, sector_t start,
                                                     sector_t len, int flags,