diff options
| author | Andre Noll <maan@systemlinux.org> | 2008-07-11 08:02:23 -0400 |
|---|---|---|
| committer | Neil Brown <neilb@suse.de> | 2008-07-11 08:02:23 -0400 |
| commit | 0f420358e3a2abc028320ace7783e2e38cae77bf (patch) | |
| tree | 99b068212ad1dd8c5e97b151d796d66f53d1f3bb | |
| parent | b73df2d3d629aefa187a0a3574fd81455e026bc8 (diff) | |
md: Turn rdev->sb_offset into a sector-based quantity.
Rename it to sb_start to make sure all users have been converted.
Signed-off-by: Andre Noll <maan@systemlinux.org>
Signed-off-by: Neil Brown <neilb@suse.de>
| -rw-r--r-- | drivers/md/bitmap.c | 10 | ||||
| -rw-r--r-- | drivers/md/md.c | 81 | ||||
| -rw-r--r-- | include/linux/raid/md_k.h | 2 |
3 files changed, 44 insertions, 49 deletions
diff --git a/drivers/md/bitmap.c b/drivers/md/bitmap.c index dedba16d42f7..eba83e25b678 100644 --- a/drivers/md/bitmap.c +++ b/drivers/md/bitmap.c | |||
| @@ -225,7 +225,7 @@ static struct page *read_sb_page(mddev_t *mddev, long offset, unsigned long inde | |||
| 225 | || test_bit(Faulty, &rdev->flags)) | 225 | || test_bit(Faulty, &rdev->flags)) |
| 226 | continue; | 226 | continue; |
| 227 | 227 | ||
| 228 | target = (rdev->sb_offset << 1) + offset + index * (PAGE_SIZE/512); | 228 | target = rdev->sb_start + offset + index * (PAGE_SIZE/512); |
| 229 | 229 | ||
| 230 | if (sync_page_io(rdev->bdev, target, PAGE_SIZE, page, READ)) { | 230 | if (sync_page_io(rdev->bdev, target, PAGE_SIZE, page, READ)) { |
| 231 | page->index = index; | 231 | page->index = index; |
| @@ -262,12 +262,12 @@ static int write_sb_page(struct bitmap *bitmap, struct page *page, int wait) | |||
| 262 | /* bitmap runs in to metadata */ | 262 | /* bitmap runs in to metadata */ |
| 263 | return -EINVAL; | 263 | return -EINVAL; |
| 264 | if (rdev->data_offset + mddev->size*2 | 264 | if (rdev->data_offset + mddev->size*2 |
| 265 | > rdev->sb_offset*2 + bitmap->offset) | 265 | > rdev->sb_start + bitmap->offset) |
| 266 | /* data runs in to bitmap */ | 266 | /* data runs in to bitmap */ |
| 267 | return -EINVAL; | 267 | return -EINVAL; |
| 268 | } else if (rdev->sb_offset*2 < rdev->data_offset) { | 268 | } else if (rdev->sb_start < rdev->data_offset) { |
| 269 | /* METADATA BITMAP DATA */ | 269 | /* METADATA BITMAP DATA */ |
| 270 | if (rdev->sb_offset*2 | 270 | if (rdev->sb_start |
| 271 | + bitmap->offset | 271 | + bitmap->offset |
| 272 | + page->index*(PAGE_SIZE/512) + size/512 | 272 | + page->index*(PAGE_SIZE/512) + size/512 |
| 273 | > rdev->data_offset) | 273 | > rdev->data_offset) |
| @@ -277,7 +277,7 @@ static int write_sb_page(struct bitmap *bitmap, struct page *page, int wait) | |||
| 277 | /* DATA METADATA BITMAP - no problems */ | 277 | /* DATA METADATA BITMAP - no problems */ |
| 278 | } | 278 | } |
| 279 | md_super_write(mddev, rdev, | 279 | md_super_write(mddev, rdev, |
| 280 | (rdev->sb_offset<<1) + bitmap->offset | 280 | rdev->sb_start + bitmap->offset |
| 281 | + page->index * (PAGE_SIZE/512), | 281 | + page->index * (PAGE_SIZE/512), |
| 282 | size, | 282 | size, |
| 283 | page); | 283 | page); |
diff --git a/drivers/md/md.c b/drivers/md/md.c index 3276edde7576..5590cb54b584 100644 --- a/drivers/md/md.c +++ b/drivers/md/md.c | |||
| @@ -356,7 +356,7 @@ static inline sector_t calc_dev_sboffset(struct block_device *bdev) | |||
| 356 | 356 | ||
| 357 | static sector_t calc_num_sectors(mdk_rdev_t *rdev, unsigned chunk_size) | 357 | static sector_t calc_num_sectors(mdk_rdev_t *rdev, unsigned chunk_size) |
| 358 | { | 358 | { |
| 359 | sector_t num_sectors = rdev->sb_offset * 2; | 359 | sector_t num_sectors = rdev->sb_start; |
| 360 | 360 | ||
| 361 | if (chunk_size) | 361 | if (chunk_size) |
| 362 | num_sectors &= ~((sector_t)chunk_size/512 - 1); | 362 | num_sectors &= ~((sector_t)chunk_size/512 - 1); |
| @@ -383,7 +383,7 @@ static void free_disk_sb(mdk_rdev_t * rdev) | |||
| 383 | put_page(rdev->sb_page); | 383 | put_page(rdev->sb_page); |
| 384 | rdev->sb_loaded = 0; | 384 | rdev->sb_loaded = 0; |
| 385 | rdev->sb_page = NULL; | 385 | rdev->sb_page = NULL; |
| 386 | rdev->sb_offset = 0; | 386 | rdev->sb_start = 0; |
| 387 | rdev->size = 0; | 387 | rdev->size = 0; |
| 388 | } | 388 | } |
| 389 | } | 389 | } |
| @@ -529,7 +529,7 @@ static int read_disk_sb(mdk_rdev_t * rdev, int size) | |||
| 529 | return 0; | 529 | return 0; |
| 530 | 530 | ||
| 531 | 531 | ||
| 532 | if (!sync_page_io(rdev->bdev, rdev->sb_offset<<1, size, rdev->sb_page, READ)) | 532 | if (!sync_page_io(rdev->bdev, rdev->sb_start, size, rdev->sb_page, READ)) |
| 533 | goto fail; | 533 | goto fail; |
| 534 | rdev->sb_loaded = 1; | 534 | rdev->sb_loaded = 1; |
| 535 | return 0; | 535 | return 0; |
| @@ -666,16 +666,14 @@ static int super_90_load(mdk_rdev_t *rdev, mdk_rdev_t *refdev, int minor_version | |||
| 666 | char b[BDEVNAME_SIZE], b2[BDEVNAME_SIZE]; | 666 | char b[BDEVNAME_SIZE], b2[BDEVNAME_SIZE]; |
| 667 | mdp_super_t *sb; | 667 | mdp_super_t *sb; |
| 668 | int ret; | 668 | int ret; |
| 669 | sector_t sb_offset; | ||
| 670 | 669 | ||
| 671 | /* | 670 | /* |
| 672 | * Calculate the position of the superblock, | 671 | * Calculate the position of the superblock (512byte sectors), |
| 673 | * it's at the end of the disk. | 672 | * it's at the end of the disk. |
| 674 | * | 673 | * |
| 675 | * It also happens to be a multiple of 4Kb. | 674 | * It also happens to be a multiple of 4Kb. |
| 676 | */ | 675 | */ |
| 677 | sb_offset = calc_dev_sboffset(rdev->bdev) / 2; | 676 | rdev->sb_start = calc_dev_sboffset(rdev->bdev); |
| 678 | rdev->sb_offset = sb_offset; | ||
| 679 | 677 | ||
| 680 | ret = read_disk_sb(rdev, MD_SB_BYTES); | 678 | ret = read_disk_sb(rdev, MD_SB_BYTES); |
| 681 | if (ret) return ret; | 679 | if (ret) return ret; |
| @@ -1007,10 +1005,10 @@ super_90_rdev_size_change(mdk_rdev_t *rdev, unsigned long long size) | |||
| 1007 | size *= 2; /* convert to sectors */ | 1005 | size *= 2; /* convert to sectors */ |
| 1008 | if (rdev->mddev->bitmap_offset) | 1006 | if (rdev->mddev->bitmap_offset) |
| 1009 | return 0; /* can't move bitmap */ | 1007 | return 0; /* can't move bitmap */ |
| 1010 | rdev->sb_offset = calc_dev_sboffset(rdev->bdev) / 2; | 1008 | rdev->sb_start = calc_dev_sboffset(rdev->bdev); |
| 1011 | if (!size || size > rdev->sb_offset*2) | 1009 | if (!size || size > rdev->sb_start) |
| 1012 | size = rdev->sb_offset*2; | 1010 | size = rdev->sb_start; |
| 1013 | md_super_write(rdev->mddev, rdev, rdev->sb_offset << 1, rdev->sb_size, | 1011 | md_super_write(rdev->mddev, rdev, rdev->sb_start, rdev->sb_size, |
| 1014 | rdev->sb_page); | 1012 | rdev->sb_page); |
| 1015 | md_super_wait(rdev->mddev); | 1013 | md_super_wait(rdev->mddev); |
| 1016 | return size/2; /* kB for sysfs */ | 1014 | return size/2; /* kB for sysfs */ |
| @@ -1048,12 +1046,12 @@ static int super_1_load(mdk_rdev_t *rdev, mdk_rdev_t *refdev, int minor_version) | |||
| 1048 | { | 1046 | { |
| 1049 | struct mdp_superblock_1 *sb; | 1047 | struct mdp_superblock_1 *sb; |
| 1050 | int ret; | 1048 | int ret; |
| 1051 | sector_t sb_offset; | 1049 | sector_t sb_start; |
| 1052 | char b[BDEVNAME_SIZE], b2[BDEVNAME_SIZE]; | 1050 | char b[BDEVNAME_SIZE], b2[BDEVNAME_SIZE]; |
| 1053 | int bmask; | 1051 | int bmask; |
| 1054 | 1052 | ||
| 1055 | /* | 1053 | /* |
| 1056 | * Calculate the position of the superblock. | 1054 | * Calculate the position of the superblock in 512byte sectors. |
| 1057 | * It is always aligned to a 4K boundary and | 1055 | * It is always aligned to a 4K boundary and |
| 1058 | * depeding on minor_version, it can be: | 1056 | * depeding on minor_version, it can be: |
| 1059 | * 0: At least 8K, but less than 12K, from end of device | 1057 | * 0: At least 8K, but less than 12K, from end of device |
| @@ -1062,22 +1060,20 @@ static int super_1_load(mdk_rdev_t *rdev, mdk_rdev_t *refdev, int minor_version) | |||
| 1062 | */ | 1060 | */ |
| 1063 | switch(minor_version) { | 1061 | switch(minor_version) { |
| 1064 | case 0: | 1062 | case 0: |
| 1065 | sb_offset = rdev->bdev->bd_inode->i_size >> 9; | 1063 | sb_start = rdev->bdev->bd_inode->i_size >> 9; |
| 1066 | sb_offset -= 8*2; | 1064 | sb_start -= 8*2; |
| 1067 | sb_offset &= ~(sector_t)(4*2-1); | 1065 | sb_start &= ~(sector_t)(4*2-1); |
| 1068 | /* convert from sectors to K */ | ||
| 1069 | sb_offset /= 2; | ||
| 1070 | break; | 1066 | break; |
| 1071 | case 1: | 1067 | case 1: |
| 1072 | sb_offset = 0; | 1068 | sb_start = 0; |
| 1073 | break; | 1069 | break; |
| 1074 | case 2: | 1070 | case 2: |
| 1075 | sb_offset = 4; | 1071 | sb_start = 8; |
| 1076 | break; | 1072 | break; |
| 1077 | default: | 1073 | default: |
| 1078 | return -EINVAL; | 1074 | return -EINVAL; |
| 1079 | } | 1075 | } |
| 1080 | rdev->sb_offset = sb_offset; | 1076 | rdev->sb_start = sb_start; |
| 1081 | 1077 | ||
| 1082 | /* superblock is rarely larger than 1K, but it can be larger, | 1078 | /* superblock is rarely larger than 1K, but it can be larger, |
| 1083 | * and it is safe to read 4k, so we do that | 1079 | * and it is safe to read 4k, so we do that |
| @@ -1091,7 +1087,7 @@ static int super_1_load(mdk_rdev_t *rdev, mdk_rdev_t *refdev, int minor_version) | |||
| 1091 | if (sb->magic != cpu_to_le32(MD_SB_MAGIC) || | 1087 | if (sb->magic != cpu_to_le32(MD_SB_MAGIC) || |
| 1092 | sb->major_version != cpu_to_le32(1) || | 1088 | sb->major_version != cpu_to_le32(1) || |
| 1093 | le32_to_cpu(sb->max_dev) > (4096-256)/2 || | 1089 | le32_to_cpu(sb->max_dev) > (4096-256)/2 || |
| 1094 | le64_to_cpu(sb->super_offset) != (rdev->sb_offset<<1) || | 1090 | le64_to_cpu(sb->super_offset) != rdev->sb_start || |
| 1095 | (le32_to_cpu(sb->feature_map) & ~MD_FEATURE_ALL) != 0) | 1091 | (le32_to_cpu(sb->feature_map) & ~MD_FEATURE_ALL) != 0) |
| 1096 | return -EINVAL; | 1092 | return -EINVAL; |
| 1097 | 1093 | ||
| @@ -1127,7 +1123,7 @@ static int super_1_load(mdk_rdev_t *rdev, mdk_rdev_t *refdev, int minor_version) | |||
| 1127 | rdev->sb_size = (rdev->sb_size | bmask) + 1; | 1123 | rdev->sb_size = (rdev->sb_size | bmask) + 1; |
| 1128 | 1124 | ||
