Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

md: Make calc_dev_sboffset() return a sector count.

As BLOCK_SIZE_BITS is 10 and

MD_NEW_SIZE_SECTORS(2 * x) = 2 * NEW_SIZE_BLOCKS(x),

the return value of calc_dev_sboffset() doubles. Fix up all three
callers accordingly.

Signed-off-by: Andre Noll <maan@systemlinux.org>
Signed-off-by: Neil Brown <neilb@suse.de>

authored by

Andre Noll and committed by
Neil Brown
b73df2d3 e7debaa4

+7 -6
+7 -6
drivers/md/md.c
··· 347 347 return NULL; 348 348 } 349 349 350 + /* return the offset of the super block in 512byte sectors */ 350 351 static inline sector_t calc_dev_sboffset(struct block_device *bdev) 351 352 { 352 - sector_t size = bdev->bd_inode->i_size >> BLOCK_SIZE_BITS; 353 - return MD_NEW_SIZE_BLOCKS(size); 353 + sector_t num_sectors = bdev->bd_inode->i_size / 512; 354 + return MD_NEW_SIZE_SECTORS(num_sectors); 354 355 } 355 356 356 357 static sector_t calc_num_sectors(mdk_rdev_t *rdev, unsigned chunk_size) ··· 674 673 * 675 674 * It also happens to be a multiple of 4Kb. 676 675 */ 677 - sb_offset = calc_dev_sboffset(rdev->bdev); 676 + sb_offset = calc_dev_sboffset(rdev->bdev) / 2; 678 677 rdev->sb_offset = sb_offset; 679 678 680 679 ret = read_disk_sb(rdev, MD_SB_BYTES); ··· 1007 1006 size *= 2; /* convert to sectors */ 1008 1007 if (rdev->mddev->bitmap_offset) 1009 1008 return 0; /* can't move bitmap */ 1010 - rdev->sb_offset = calc_dev_sboffset(rdev->bdev); 1009 + rdev->sb_offset = calc_dev_sboffset(rdev->bdev) / 2; 1011 1010 if (!size || size > rdev->sb_offset*2) 1012 1011 size = rdev->sb_offset*2; 1013 1012 md_super_write(rdev->mddev, rdev, rdev->sb_offset << 1, rdev->sb_size, ··· 4357 4356 printk(KERN_INFO "md: nonpersistent superblock ...\n"); 4358 4357 rdev->sb_offset = rdev->bdev->bd_inode->i_size >> BLOCK_SIZE_BITS; 4359 4358 } else 4360 - rdev->sb_offset = calc_dev_sboffset(rdev->bdev); 4359 + rdev->sb_offset = calc_dev_sboffset(rdev->bdev) / 2; 4361 4360 rdev->size = calc_num_sectors(rdev, mddev->chunk_size) / 2; 4362 4361 4363 4362 err = bind_rdev_to_array(rdev, mddev); ··· 4424 4423 } 4425 4424 4426 4425 if (mddev->persistent) 4427 - rdev->sb_offset = calc_dev_sboffset(rdev->bdev); 4426 + rdev->sb_offset = calc_dev_sboffset(rdev->bdev) / 2; 4428 4427 else 4429 4428 rdev->sb_offset = 4430 4429 rdev->bdev->bd_inode->i_size >> BLOCK_SIZE_BITS;