Changeset 65706f1 in mainline for uspace/srv/bd/hr/raid5.c
- Timestamp:
- 2024-11-27T14:06:41Z (8 months ago)
- Children:
- a0c3080
- Parents:
- 40bf2c6
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/bd/hr/raid5.c
r40bf2c6 r65706f1 97 97 assert(new_volume->level == HR_LVL_5); 98 98 99 if (new_volume-> dev_no < 3) {99 if (new_volume->extent_no < 3) { 100 100 HR_ERROR("RAID 5 array needs at least 3 devices\n"); 101 101 return EINVAL; … … 130 130 vol->bsize = bsize; 131 131 vol->data_offset = HR_DATA_OFF; 132 vol->data_blkno = vol->nblocks - (vol->data_offset * vol-> dev_no) -133 (vol->nblocks / vol-> dev_no);132 vol->data_blkno = vol->nblocks - (vol->data_offset * vol->extent_no) - 133 (vol->nblocks / vol->extent_no); 134 134 vol->strip_size = HR_STRIP_SIZE; 135 135 … … 239 239 static ssize_t hr_raid5_get_bad_ext(hr_volume_t *vol) 240 240 { 241 for (size_t i = 0; i < vol-> dev_no; i++)241 for (size_t i = 0; i < vol->extent_no; i++) 242 242 if (vol->extents[i].status != HR_EXT_ONLINE) 243 243 return i; … … 249 249 hr_vol_status_t old_state = vol->status; 250 250 size_t bad = 0; 251 for (size_t i = 0; i < vol-> dev_no; i++)251 for (size_t i = 0; i < vol->extent_no; i++) 252 252 if (vol->extents[i].status != HR_EXT_ONLINE) 253 253 bad++; … … 331 331 /* read all other extents in the stripe */ 332 332 bool first = true; 333 for (i = 0; i < vol-> dev_no; i++) {333 for (i = 0; i < vol->extent_no; i++) { 334 334 if (i == bad) 335 335 continue; … … 401 401 */ 402 402 bool first = true; 403 for (i = 1; i < vol-> dev_no; i++) {403 for (i = 1; i < vol->extent_no; i++) { 404 404 if (i == (size_t)bad) 405 405 continue; … … 478 478 479 479 bool first = true; 480 for (i = 0; i < vol-> dev_no; i++) {480 for (i = 0; i < vol->extent_no; i++) { 481 481 if (i == p_extent) 482 482 continue; … … 542 542 uint64_t strip_size = vol->strip_size / vol->bsize; /* in blocks */ 543 543 uint64_t stripe = (ba / strip_size); /* stripe number */ 544 uint64_t p_extent = (stripe / (vol-> dev_no - 1)) % vol->dev_no; /* parity extent */544 uint64_t p_extent = (stripe / (vol->extent_no - 1)) % vol->extent_no; /* parity extent */ 545 545 uint64_t extent; 546 if ((stripe % (vol-> dev_no - 1)) < p_extent)547 extent = (stripe % (vol-> dev_no - 1));546 if ((stripe % (vol->extent_no - 1)) < p_extent) 547 extent = (stripe % (vol->extent_no - 1)); 548 548 else 549 extent = ((stripe % (vol-> dev_no - 1)) + 1);550 uint64_t ext_stripe = stripe / (vol-> dev_no - 1); /* stripe level */549 extent = ((stripe % (vol->extent_no - 1)) + 1); 550 uint64_t ext_stripe = stripe / (vol->extent_no - 1); /* stripe level */ 551 551 uint64_t strip_off = ba % strip_size; /* strip offset */ 552 552 … … 625 625 left -= cnt; 626 626 strip_off = 0; 627 if (extent + 1 >= vol-> dev_no ||628 (extent + 1 == p_extent && p_extent + 1 >= vol-> dev_no))627 if (extent + 1 >= vol->extent_no || 628 (extent + 1 == p_extent && p_extent + 1 >= vol->extent_no)) 629 629 ext_stripe++; 630 630 stripe++; 631 p_extent = (stripe / (vol-> dev_no - 1)) % vol->dev_no; /* parity extent */632 if ((stripe % (vol-> dev_no - 1)) < p_extent)633 extent = (stripe % (vol-> dev_no - 1));631 p_extent = (stripe / (vol->extent_no - 1)) % vol->extent_no; /* parity extent */ 632 if ((stripe % (vol->extent_no - 1)) < p_extent) 633 extent = (stripe % (vol->extent_no - 1)); 634 634 else 635 extent = ((stripe % (vol-> dev_no - 1)) + 1);635 extent = ((stripe % (vol->extent_no - 1)) + 1); 636 636 } 637 637 … … 659 659 } 660 660 661 size_t bad = vol-> dev_no;662 for (size_t i = 0; i < vol-> dev_no; i++) {661 size_t bad = vol->extent_no; 662 for (size_t i = 0; i < vol->extent_no; i++) { 663 663 if (vol->extents[i].status == HR_EXT_FAILED) { 664 664 bad = i; … … 667 667 } 668 668 669 if (bad == vol-> dev_no) {669 if (bad == vol->extent_no) { 670 670 HR_WARN("hr_raid5_rebuild(): no bad extent on \"%s\", " 671 671 "aborting rebuild\n", vol->devname); … … 703 703 704 704 uint64_t max_blks = DATA_XFER_LIMIT / vol->bsize; 705 uint64_t left = vol->data_blkno / (vol-> dev_no - 1);705 uint64_t left = vol->data_blkno / (vol->extent_no - 1); 706 706 buf = malloc(max_blks * vol->bsize); 707 707 xorbuf = malloc(max_blks * vol->bsize); … … 718 718 */ 719 719 bool first = true; 720 for (size_t i = 0; i < vol-> dev_no; i++) {720 for (size_t i = 0; i < vol->extent_no; i++) { 721 721 if (i == bad) 722 722 continue;
Note:
See TracChangeset
for help on using the changeset viewer.