md: use bdev_nr_sectors instead of open coding it
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>
This commit is contained in:
parent
6dcbb52cdd
commit
0fe80347fd
@ -888,8 +888,7 @@ static struct md_personality *find_pers(int level, char *clevel)
|
|||||||
/* return the offset of the super block in 512byte sectors */
|
/* return the offset of the super block in 512byte sectors */
|
||||||
static inline sector_t calc_dev_sboffset(struct md_rdev *rdev)
|
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(bdev_nr_sectors(rdev->bdev));
|
||||||
return MD_NEW_SIZE_SECTORS(num_sectors);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int alloc_disk_sb(struct md_rdev *rdev)
|
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) {
|
switch(minor_version) {
|
||||||
case 0:
|
case 0:
|
||||||
sb_start = i_size_read(rdev->bdev->bd_inode) >> 9;
|
sb_start = bdev_nr_sectors(rdev->bdev) - 8 * 2;
|
||||||
sb_start -= 8*2;
|
|
||||||
sb_start &= ~(sector_t)(4*2-1);
|
sb_start &= ~(sector_t)(4*2-1);
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
@ -1787,10 +1785,9 @@ static int super_1_load(struct md_rdev *rdev, struct md_rdev *refdev, int minor_
|
|||||||
else
|
else
|
||||||
ret = 0;
|
ret = 0;
|
||||||
}
|
}
|
||||||
if (minor_version) {
|
if (minor_version)
|
||||||
sectors = (i_size_read(rdev->bdev->bd_inode) >> 9);
|
sectors = bdev_nr_sectors(rdev->bdev) - rdev->data_offset;
|
||||||
sectors -= rdev->data_offset;
|
else
|
||||||
} else
|
|
||||||
sectors = rdev->sb_start;
|
sectors = rdev->sb_start;
|
||||||
if (sectors < le64_to_cpu(sb->data_size))
|
if (sectors < le64_to_cpu(sb->data_size))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
@ -2168,8 +2165,7 @@ super_1_rdev_size_change(struct md_rdev *rdev, sector_t num_sectors)
|
|||||||
return 0; /* too confusing */
|
return 0; /* too confusing */
|
||||||
if (rdev->sb_start < rdev->data_offset) {
|
if (rdev->sb_start < rdev->data_offset) {
|
||||||
/* minor versions 1 and 2; superblock before data */
|
/* minor versions 1 and 2; superblock before data */
|
||||||
max_sectors = i_size_read(rdev->bdev->bd_inode) >> 9;
|
max_sectors = bdev_nr_sectors(rdev->bdev) - rdev->data_offset;
|
||||||
max_sectors -= rdev->data_offset;
|
|
||||||
if (!num_sectors || num_sectors > max_sectors)
|
if (!num_sectors || num_sectors > max_sectors)
|
||||||
num_sectors = max_sectors;
|
num_sectors = max_sectors;
|
||||||
} else if (rdev->mddev->bitmap_info.offset) {
|
} 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 {
|
} else {
|
||||||
/* minor version 0; superblock after data */
|
/* minor version 0; superblock after data */
|
||||||
sector_t sb_start, bm_space;
|
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 */
|
/* 8K is for superblock */
|
||||||
sb_start = dev_size - 8*2;
|
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)
|
if (!sectors)
|
||||||
return -EBUSY;
|
return -EBUSY;
|
||||||
} else if (!sectors)
|
} else if (!sectors)
|
||||||
sectors = (i_size_read(rdev->bdev->bd_inode) >> 9) -
|
sectors = bdev_nr_sectors(rdev->bdev) -
|
||||||
rdev->data_offset;
|
rdev->data_offset;
|
||||||
if (!my_mddev->pers->resize)
|
if (!my_mddev->pers->resize)
|
||||||
/* Cannot change size for RAID0 or Linear etc */
|
/* 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);
|
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) {
|
if (!size) {
|
||||||
pr_warn("md: %s has zero or unknown size, marking faulty!\n",
|
pr_warn("md: %s has zero or unknown size, marking faulty!\n",
|
||||||
bdevname(rdev->bdev,b));
|
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) {
|
if (!mddev->persistent) {
|
||||||
pr_debug("md: nonpersistent superblock ...\n");
|
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
|
} else
|
||||||
rdev->sb_start = calc_dev_sboffset(rdev);
|
rdev->sb_start = calc_dev_sboffset(rdev);
|
||||||
rdev->sectors = rdev->sb_start;
|
rdev->sectors = rdev->sb_start;
|
||||||
@ -6967,7 +6963,7 @@ static int hot_add_disk(struct mddev *mddev, dev_t dev)
|
|||||||
if (mddev->persistent)
|
if (mddev->persistent)
|
||||||
rdev->sb_start = calc_dev_sboffset(rdev);
|
rdev->sb_start = calc_dev_sboffset(rdev);
|
||||||
else
|
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;
|
rdev->sectors = rdev->sb_start;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user