Use the proper helper to read the block device size.

Signed-off-by: Christoph Hellwig <h...@lst.de>
Reviewed-by: Kees Cook <keesc...@chromium.org>
Acked-by: Song Liu <s...@kernel.org>
---
 drivers/md/md.c | 26 +++++++++++---------------
 1 file changed, 11 insertions(+), 15 deletions(-)

diff --git a/drivers/md/md.c b/drivers/md/md.c
index ec09083ff0eff..0c75ba047ef60 100644
--- a/drivers/md/md.c
+++ b/drivers/md/md.c
@@ -890,8 +890,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)
@@ -1633,8 +1632,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:
@@ -1789,10 +1787,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;
@@ -2170,8 +2167,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) {
@@ -2180,7 +2176,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;
@@ -3384,7 +3380,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 */
@@ -3711,7 +3707,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));
@@ -6882,7 +6878,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;
@@ -6969,7 +6965,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;
 
-- 
2.30.2

--
dm-devel mailing list
dm-devel@redhat.com
https://listman.redhat.com/mailman/listinfo/dm-devel

Reply via email to