md: use bdev_nr_sectors instead of open coding it
authorChristoph Hellwig <hch@lst.de>
Mon, 18 Oct 2021 10:11:06 +0000 (12:11 +0200)
committerJens Axboe <axboe@kernel.dk>
Mon, 18 Oct 2021 20:43:22 +0000 (14:43 -0600)
Use the proper helper to read the block device size.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Kees Cook <keescook@chromium.org>
Acked-by: Song Liu <song@kernel.org>
Link: https://lore.kernel.org/r/20211018101130.1838532-7-hch@lst.de
Signed-off-by: Jens Axboe <axboe@kernel.dk>
drivers/md/md.c

index 22310d5d8d418c3162624ac7b6d1b4358610d5a0..d964da4363830a0f98d6b82918367bc514661468 100644 (file)
@@ -888,8 +888,7 @@ static struct md_personality *find_pers(int level, char *clevel)
 /* return the offset of the super block in 512byte sectors */
 static inline sector_t calc_dev_sboffset(struct md_rdev *rdev)
 {
-       sector_t num_sectors = i_size_read(rdev->bdev->bd_inode) / 512;
-       return MD_NEW_SIZE_SECTORS(num_sectors);
+       return MD_NEW_SIZE_SECTORS(bdev_nr_sectors(rdev->bdev));
 }
 
 static int alloc_disk_sb(struct md_rdev *rdev)
@@ -1631,8 +1630,7 @@ static int super_1_load(struct md_rdev *rdev, struct md_rdev *refdev, int minor_
         */
        switch(minor_version) {
        case 0:
-               sb_start = i_size_read(rdev->bdev->bd_inode) >> 9;
-               sb_start -= 8*2;
+               sb_start = bdev_nr_sectors(rdev->bdev) - 8 * 2;
                sb_start &= ~(sector_t)(4*2-1);
                break;
        case 1:
@@ -1787,10 +1785,9 @@ static int super_1_load(struct md_rdev *rdev, struct md_rdev *refdev, int minor_
                else
                        ret = 0;
        }
-       if (minor_version) {
-               sectors = (i_size_read(rdev->bdev->bd_inode) >> 9);
-               sectors -= rdev->data_offset;
-       } else
+       if (minor_version)
+               sectors = bdev_nr_sectors(rdev->bdev) - rdev->data_offset;
+       else
                sectors = rdev->sb_start;
        if (sectors < le64_to_cpu(sb->data_size))
                return -EINVAL;
@@ -2168,8 +2165,7 @@ super_1_rdev_size_change(struct md_rdev *rdev, sector_t num_sectors)
                return 0; /* too confusing */
        if (rdev->sb_start < rdev->data_offset) {
                /* minor versions 1 and 2; superblock before data */
-               max_sectors = i_size_read(rdev->bdev->bd_inode) >> 9;
-               max_sectors -= rdev->data_offset;
+               max_sectors = bdev_nr_sectors(rdev->bdev) - rdev->data_offset;
                if (!num_sectors || num_sectors > max_sectors)
                        num_sectors = max_sectors;
        } else if (rdev->mddev->bitmap_info.offset) {
@@ -2178,7 +2174,7 @@ super_1_rdev_size_change(struct md_rdev *rdev, sector_t num_sectors)
        } else {
                /* minor version 0; superblock after data */
                sector_t sb_start, bm_space;
-               sector_t dev_size = i_size_read(rdev->bdev->bd_inode) >> 9;
+               sector_t dev_size = bdev_nr_sectors(rdev->bdev);
 
                /* 8K is for superblock */
                sb_start = dev_size - 8*2;
@@ -3382,7 +3378,7 @@ rdev_size_store(struct md_rdev *rdev, const char *buf, size_t len)
                        if (!sectors)
                                return -EBUSY;
                } else if (!sectors)
-                       sectors = (i_size_read(rdev->bdev->bd_inode) >> 9) -
+                       sectors = bdev_nr_sectors(rdev->bdev) -
                                rdev->data_offset;
                if (!my_mddev->pers->resize)
                        /* Cannot change size for RAID0 or Linear etc */
@@ -3709,7 +3705,7 @@ static struct md_rdev *md_import_device(dev_t newdev, int super_format, int supe
 
        kobject_init(&rdev->kobj, &rdev_ktype);
 
-       size = i_size_read(rdev->bdev->bd_inode) >> BLOCK_SIZE_BITS;
+       size = bdev_nr_bytes(rdev->bdev) >> BLOCK_SIZE_BITS;
        if (!size) {
                pr_warn("md: %s has zero or unknown size, marking faulty!\n",
                        bdevname(rdev->bdev,b));
@@ -6880,7 +6876,7 @@ int md_add_new_disk(struct mddev *mddev, struct mdu_disk_info_s *info)
 
                if (!mddev->persistent) {
                        pr_debug("md: nonpersistent superblock ...\n");
-                       rdev->sb_start = i_size_read(rdev->bdev->bd_inode) / 512;
+                       rdev->sb_start = bdev_nr_sectors(rdev->bdev);
                } else
                        rdev->sb_start = calc_dev_sboffset(rdev);
                rdev->sectors = rdev->sb_start;
@@ -6967,7 +6963,7 @@ static int hot_add_disk(struct mddev *mddev, dev_t dev)
        if (mddev->persistent)
                rdev->sb_start = calc_dev_sboffset(rdev);
        else
-               rdev->sb_start = i_size_read(rdev->bdev->bd_inode) / 512;
+               rdev->sb_start = bdev_nr_sectors(rdev->bdev);
 
        rdev->sectors = rdev->sb_start;