return NULL;
}
+/* return the offset of the super block in 512byte sectors */
static inline sector_t calc_dev_sboffset(struct block_device *bdev)
{
- sector_t size = bdev->bd_inode->i_size >> BLOCK_SIZE_BITS;
- return MD_NEW_SIZE_BLOCKS(size);
+ sector_t num_sectors = bdev->bd_inode->i_size / 512;
+ return MD_NEW_SIZE_SECTORS(num_sectors);
}
static sector_t calc_num_sectors(mdk_rdev_t *rdev, unsigned chunk_size)
*
* It also happens to be a multiple of 4Kb.
*/
- sb_offset = calc_dev_sboffset(rdev->bdev);
+ sb_offset = calc_dev_sboffset(rdev->bdev) / 2;
rdev->sb_offset = sb_offset;
ret = read_disk_sb(rdev, MD_SB_BYTES);
size *= 2; /* convert to sectors */
if (rdev->mddev->bitmap_offset)
return 0; /* can't move bitmap */
- rdev->sb_offset = calc_dev_sboffset(rdev->bdev);
+ rdev->sb_offset = calc_dev_sboffset(rdev->bdev) / 2;
if (!size || size > rdev->sb_offset*2)
size = rdev->sb_offset*2;
md_super_write(rdev->mddev, rdev, rdev->sb_offset << 1, rdev->sb_size,
printk(KERN_INFO "md: nonpersistent superblock ...\n");
rdev->sb_offset = rdev->bdev->bd_inode->i_size >> BLOCK_SIZE_BITS;
} else
- rdev->sb_offset = calc_dev_sboffset(rdev->bdev);
+ rdev->sb_offset = calc_dev_sboffset(rdev->bdev) / 2;
rdev->size = calc_num_sectors(rdev, mddev->chunk_size) / 2;
err = bind_rdev_to_array(rdev, mddev);
}
if (mddev->persistent)
- rdev->sb_offset = calc_dev_sboffset(rdev->bdev);
+ rdev->sb_offset = calc_dev_sboffset(rdev->bdev) / 2;
else
rdev->sb_offset =
rdev->bdev->bd_inode->i_size >> BLOCK_SIZE_BITS;