History

md: Turn rdev->sb_offset into a sector-based quantity.

Rename it to sb_start to make sure all users have been converted.

Andre Noll committed 18 years ago

Commit 0f420351 parent b73df2d3 files · +44 −49Browse files

Unified · Split

3 files
  1. drivers/md/bitmap.c +5 −5
  2. drivers/md/md.c +38 −43
  3. include/linux/raid/md_k.h +1 −1
drivers/md/bitmap.c+5−5
@@ -225,7 +225,7 @@ static struct page *read_sb_page(mddev_t *mddev, long offset, unsigned long inde · 224 unmodified lines
225225 || test_bit(Faulty, &rdev->flags))
226226 continue;
227227
228− target = (rdev->sb_offset << 1) + offset + index * (PAGE_SIZE/512);
228+ target = rdev->sb_start + offset + index * (PAGE_SIZE/512);
229229
230230 if (sync_page_io(rdev->bdev, target, PAGE_SIZE, page, READ)) {
231231 page->index = index;
@@ -262,12 +262,12 @@ static int write_sb_page(struct bitmap *bitmap, struct page *page, int wait) · 30 unmodified lines
262262 /* bitmap runs in to metadata */
263263 return -EINVAL;
264264 if (rdev->data_offset + mddev->size*2
265− > rdev->sb_offset*2 + bitmap->offset)
265+ > rdev->sb_start + bitmap->offset)
266266 /* data runs in to bitmap */
267267 return -EINVAL;
268− } else if (rdev->sb_offset*2 < rdev->data_offset) {
268+ } else if (rdev->sb_start < rdev->data_offset) {
269269 /* METADATA BITMAP DATA */
270− if (rdev->sb_offset*2
270+ if (rdev->sb_start
271271 + bitmap->offset
272272 + page->index*(PAGE_SIZE/512) + size/512
273273 > rdev->data_offset)
@@ -277,7 +277,7 @@ static int write_sb_page(struct bitmap *bitmap, struct page *page, int wait) · 3 unmodified lines
277277 /* DATA METADATA BITMAP - no problems */
278278 }
279279 md_super_write(mddev, rdev,
280− (rdev->sb_offset<<1) + bitmap->offset
280+ rdev->sb_start + bitmap->offset
281281 + page->index * (PAGE_SIZE/512),
282282 size,
283283 page);
drivers/md/md.c+38−43
@@ -356,7 +356,7 @@ static inline sector_t calc_dev_sboffset(struct block_device *bdev) · 355 unmodified lines
356356
357357 static sector_t calc_num_sectors(mdk_rdev_t *rdev, unsigned chunk_size)
358358 {
359− sector_t num_sectors = rdev->sb_offset * 2;
359+ sector_t num_sectors = rdev->sb_start;
360360
361361 if (chunk_size)
362362 num_sectors &= ~((sector_t)chunk_size/512 - 1);
@@ -383,7 +383,7 @@ static void free_disk_sb(mdk_rdev_t * rdev) · 20 unmodified lines
383383 put_page(rdev->sb_page);
384384 rdev->sb_loaded = 0;
385385 rdev->sb_page = NULL;
386− rdev->sb_offset = 0;
386+ rdev->sb_start = 0;
387387 rdev->size = 0;
388388 }
389389 }
@@ -529,7 +529,7 @@ static int read_disk_sb(mdk_rdev_t * rdev, int size) · 139 unmodified lines
529529 return 0;
530530
531531
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))
533533 goto fail;
534534 rdev->sb_loaded = 1;
535535 return 0;
@@ -666,16 +666,14 @@ static int super_90_load(mdk_rdev_t *rdev, mdk_rdev_t *refdev, int minor_version · 130 unmodified lines
666666 char b[BDEVNAME_SIZE], b2[BDEVNAME_SIZE];
667667 mdp_super_t *sb;
668668 int ret;
669− sector_t sb_offset;
670669
671670 /*
672− * Calculate the position of the superblock,
671+ * Calculate the position of the superblock (512byte sectors),
673672 * it's at the end of the disk.
674673 *
675674 * It also happens to be a multiple of 4Kb.
676675 */
677− sb_offset = calc_dev_sboffset(rdev->bdev) / 2;
678− rdev->sb_offset = sb_offset;
676+ rdev->sb_start = calc_dev_sboffset(rdev->bdev);
679677
680678 ret = read_disk_sb(rdev, MD_SB_BYTES);
681679 if (ret) return ret;
@@ -1007,10 +1005,10 @@ super_90_rdev_size_change(mdk_rdev_t *rdev, unsigned long long size) · 325 unmodified lines
10071005 size *= 2; /* convert to sectors */
10081006 if (rdev->mddev->bitmap_offset)
10091007 return 0; /* can't move bitmap */
1010− rdev->sb_offset = calc_dev_sboffset(rdev->bdev) / 2;
1011− if (!size || size > rdev->sb_offset*2)
1012− size = rdev->sb_offset*2;
1013− md_super_write(rdev->mddev, rdev, rdev->sb_offset << 1, rdev->sb_size,
1008+ rdev->sb_start = calc_dev_sboffset(rdev->bdev);
1009+ if (!size || size > rdev->sb_start)
1010+ size = rdev->sb_start;
1011+ md_super_write(rdev->mddev, rdev, rdev->sb_start, rdev->sb_size,
10141012 rdev->sb_page);
10151013 md_super_wait(rdev->mddev);
10161014 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) · 31 unmodified lines
10481046 {
10491047 struct mdp_superblock_1 *sb;
10501048 int ret;
1051− sector_t sb_offset;
1049+ sector_t sb_start;
10521050 char b[BDEVNAME_SIZE], b2[BDEVNAME_SIZE];
10531051 int bmask;
10541052
10551053 /*
1056− * Calculate the position of the superblock.
1054+ * Calculate the position of the superblock in 512byte sectors.
10571055 * It is always aligned to a 4K boundary and
10581056 * depeding on minor_version, it can be:
10591057 * 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) · 2 unmodified lines
10621060 */
10631061 switch(minor_version) {
10641062 case 0:
1065− sb_offset = rdev->bdev->bd_inode->i_size >> 9;
1066− sb_offset -= 8*2;
1067− sb_offset &= ~(sector_t)(4*2-1);
1068− /* convert from sectors to K */
1069− sb_offset /= 2;
1063+ sb_start = rdev->bdev->bd_inode->i_size >> 9;
1064+ sb_start -= 8*2;
1065+ sb_start &= ~(sector_t)(4*2-1);
10701066 break;
10711067 case 1:
1072− sb_offset = 0;
1068+ sb_start = 0;
10731069 break;
10741070 case 2:
1075− sb_offset = 4;
1071+ sb_start = 8;
10761072 break;
10771073 default:
10781074 return -EINVAL;
10791075 }
1080− rdev->sb_offset = sb_offset;
1076+ rdev->sb_start = sb_start;
10811077
10821078 /* superblock is rarely larger than 1K, but it can be larger,
10831079 * 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) · 7 unmodified lines
10911087 if (sb->magic != cpu_to_le32(MD_SB_MAGIC) ||
10921088 sb->major_version != cpu_to_le32(1) ||
10931089 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 ||
10951091 (le32_to_cpu(sb->feature_map) & ~MD_FEATURE_ALL) != 0)
10961092 return -EINVAL;
10971093
@@ -1127,7 +1123,7 @@ static int super_1_load(mdk_rdev_t *rdev, mdk_rdev_t *refdev, int minor_version) · 29 unmodified lines
11271123 rdev->sb_size = (rdev->sb_size | bmask) + 1;
11281124
11291125 if (minor_version
1130− && rdev->data_offset < sb_offset + (rdev->sb_size/512))
1126+ && rdev->data_offset < sb_start + (rdev->sb_size/512))
11311127 return -EINVAL;
11321128
11331129 if (sb->level == cpu_to_le32(LEVEL_MULTIPATH))
@@ -1163,7 +1159,7 @@ static int super_1_load(mdk_rdev_t *rdev, mdk_rdev_t *refdev, int minor_version) · 29 unmodified lines
11631159 if (minor_version)
11641160 rdev->size = ((rdev->bdev->bd_inode->i_size>>9) - le64_to_cpu(sb->data_offset)) / 2;
11651161 else
1166− rdev->size = rdev->sb_offset;
1162+ rdev->size = rdev->sb_start / 2;
11671163 if (rdev->size < le64_to_cpu(sb->data_size)/2)
11681164 return -EINVAL;
11691165 rdev->size = le64_to_cpu(sb->data_size)/2;
@@ -1350,7 +1346,7 @@ super_1_rdev_size_change(mdk_rdev_t *rdev, unsigned long long size) · 180 unmodified lines
13501346 if (size && size < rdev->mddev->size)
13511347 return 0; /* component must fit device */
13521348 size *= 2; /* convert to sectors */
1353− if (rdev->sb_offset < rdev->data_offset/2) {
1349+ if (rdev->sb_start < rdev->data_offset) {
13541350 /* minor versions 1 and 2; superblock before data */
13551351 max_size = (rdev->bdev->bd_inode->i_size >> 9);
13561352 max_size -= rdev->data_offset;
@@ -1361,19 +1357,19 @@ super_1_rdev_size_change(mdk_rdev_t *rdev, unsigned long long size) · 4 unmodified lines
13611357 return 0;
13621358 } else {
13631359 /* minor version 0; superblock after data */
1364− sector_t sb_offset;
1365− sb_offset = (rdev->bdev->bd_inode->i_size >> 9) - 8*2;
1366− sb_offset &= ~(sector_t)(4*2 - 1);
1367− max_size = rdev->size*2 + sb_offset - rdev->sb_offset*2;
1360+ sector_t sb_start;
1361+ sb_start = (rdev->bdev->bd_inode->i_size >> 9) - 8*2;
1362+ sb_start &= ~(sector_t)(4*2 - 1);
1363+ max_size = rdev->size*2 + sb_start - rdev->sb_start;
13681364 if (!size || size > max_size)
13691365 size = max_size;
1370− rdev->sb_offset = sb_offset/2;
1366+ rdev->sb_start = sb_start;
13711367 }
13721368 sb = (struct mdp_superblock_1 *) page_address(rdev->sb_page);
13731369 sb->data_size = cpu_to_le64(size);
1374− sb->super_offset = rdev->sb_offset*2;
1370+ sb->super_offset = rdev->sb_start;
13751371 sb->sb_csum = calc_sb_1_csum(sb);
1376− md_super_write(rdev->mddev, rdev, rdev->sb_offset << 1, rdev->sb_size,
1372+ md_super_write(rdev->mddev, rdev, rdev->sb_start, rdev->sb_size,
13771373 rdev->sb_page);
13781374 md_super_wait(rdev->mddev);
13791375 return size/2; /* kB for sysfs */
@@ -1810,11 +1806,11 @@ repeat: · 430 unmodified lines
18101806 dprintk("%s ", bdevname(rdev->bdev,b));
18111807 if (!test_bit(Faulty, &rdev->flags)) {
18121808 md_super_write(mddev,rdev,
1813− rdev->sb_offset<<1, rdev->sb_size,
1809+ rdev->sb_start, rdev->sb_size,
18141810 rdev->sb_page);
18151811 dprintk(KERN_INFO "(write) %s's sb offset: %llu\n",
18161812 bdevname(rdev->bdev,b),
1817− (unsigned long long)rdev->sb_offset);
1813+ (unsigned long long)rdev->sb_start);
18181814 rdev->sb_events = mddev->events;
18191815
18201816 } else
@@ -3577,16 +3573,16 @@ static int do_md_run(mddev_t * mddev) · 1756 unmodified lines
35773573 * We don't want the data to overlap the metadata,
35783574 * Internal Bitmap issues has handled elsewhere.
35793575 */
3580− if (rdev->data_offset < rdev->sb_offset) {
3576+ if (rdev->data_offset < rdev->sb_start) {
35813577 if (mddev->size &&
35823578 rdev->data_offset + mddev->size*2
3583− > rdev->sb_offset*2) {
3579+ > rdev->sb_start) {
35843580 printk("md: %s: data overlaps metadata\n",
35853581 mdname(mddev));
35863582 return -EINVAL;
35873583 }
35883584 } else {
3589− if (rdev->sb_offset*2 + rdev->sb_size/512
3585+ if (rdev->sb_start + rdev->sb_size/512
35903586 > rdev->data_offset) {
35913587 printk("md: %s: metadata overlaps data\n",
35923588 mdname(mddev));
@@ -4355,9 +4351,9 @@ static int add_new_disk(mddev_t * mddev, mdu_disk_info_t *info) · 762 unmodified lines
43554351
43564352 if (!mddev->persistent) {
43574353 printk(KERN_INFO "md: nonpersistent superblock ...\n");
4358− rdev->sb_offset = rdev->bdev->bd_inode->i_size >> BLOCK_SIZE_BITS;
4354+ rdev->sb_start = rdev->bdev->bd_inode->i_size / 512;
43594355 } else
4360− rdev->sb_offset = calc_dev_sboffset(rdev->bdev) / 2;
4356+ rdev->sb_start = calc_dev_sboffset(rdev->bdev);
43614357 rdev->size = calc_num_sectors(rdev, mddev->chunk_size) / 2;
43624358
43634359 err = bind_rdev_to_array(rdev, mddev);
@@ -4424,10 +4420,9 @@ static int hot_add_disk(mddev_t * mddev, dev_t dev) · 60 unmodified lines
44244420 }
44254421
44264422 if (mddev->persistent)
4427− rdev->sb_offset = calc_dev_sboffset(rdev->bdev) / 2;
4423+ rdev->sb_start = calc_dev_sboffset(rdev->bdev);
44284424 else
4429− rdev->sb_offset =
4430− rdev->bdev->bd_inode->i_size >> BLOCK_SIZE_BITS;
4425+ rdev->sb_start = rdev->bdev->bd_inode->i_size / 512;
44314426
44324427 rdev->size = calc_num_sectors(rdev, mddev->chunk_size) / 2;
44334428
@@ -4628,7 +4623,7 @@ static int update_size(mddev_t *mddev, sector_t num_sectors) · 194 unmodified lines
46284623 * linear and raid0 always use whatever space is available. We can only
46294624 * consider changing this number if no resync or reconstruction is
46304625 * happening, and if the new size is acceptable. It must fit before the
4631− * sb_offset or, if that is <data_offset, it must fit before the size
4626+ * sb_start or, if that is <data_offset, it must fit before the size
46324627 * of each device. If num_sectors is zero, we find the largest size
46334628 * that fits.
46344629
include/linux/raid/md_k.h+1−1
@@ -59,7 +59,7 @@ struct mdk_rdev_s · 58 unmodified lines
5959 int sb_loaded;
6060 __u64 sb_events;
6161 sector_t data_offset; /* start of data in array */
62− sector_t sb_offset;
62+ sector_t sb_start; /* offset of the super block (in 512byte sectors) */
6363 int sb_size; /* bytes in the superblock */
6464 int preferred_minor; /* autorun support */
6565

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t