Changeset 65706f1 in mainline for uspace/srv/bd/hr/raid4.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/raid4.c
r40bf2c6 r65706f1 100 100 assert(new_volume->level == HR_LVL_4); 101 101 102 if (new_volume-> dev_no < 3) {102 if (new_volume->extent_no < 3) { 103 103 HR_ERROR("RAID 4 array needs at least 3 devices\n"); 104 104 return EINVAL; … … 133 133 vol->bsize = bsize; 134 134 vol->data_offset = HR_DATA_OFF; 135 vol->data_blkno = vol->nblocks - (vol->data_offset * vol-> dev_no) -136 (vol->nblocks / vol-> dev_no);135 vol->data_blkno = vol->nblocks - (vol->data_offset * vol->extent_no) - 136 (vol->nblocks / vol->extent_no); 137 137 vol->strip_size = HR_STRIP_SIZE; 138 138 … … 242 242 static ssize_t hr_raid4_get_bad_ext(hr_volume_t *vol) 243 243 { 244 for (size_t i = 0; i < vol-> dev_no; i++)244 for (size_t i = 0; i < vol->extent_no; i++) 245 245 if (vol->extents[i].status != HR_EXT_ONLINE) 246 246 return i; … … 252 252 hr_vol_status_t old_state = vol->status; 253 253 size_t bad = 0; 254 for (size_t i = 0; i < vol-> dev_no; i++)254 for (size_t i = 0; i < vol->extent_no; i++) 255 255 if (vol->extents[i].status != HR_EXT_ONLINE) 256 256 bad++; … … 334 334 /* read all other extents in the stripe */ 335 335 bool first = true; 336 for (i = 0; i < vol-> dev_no; i++) {336 for (i = 0; i < vol->extent_no; i++) { 337 337 if (i == bad) 338 338 continue; … … 404 404 */ 405 405 bool first = true; 406 for (i = 1; i < vol-> dev_no; i++) {406 for (i = 1; i < vol->extent_no; i++) { 407 407 if (i == (size_t)bad) 408 408 continue; … … 487 487 */ 488 488 bool first = true; 489 for (i = 1; i < vol-> dev_no; i++) {489 for (i = 1; i < vol->extent_no; i++) { 490 490 if (first) { 491 491 if (i == extent) { … … 547 547 uint64_t strip_size = vol->strip_size / vol->bsize; /* in blocks */ 548 548 uint64_t stripe = (ba / strip_size); /* stripe number */ 549 uint64_t extent = (stripe % (vol-> dev_no - 1)) + 1;550 uint64_t ext_stripe = stripe / (vol-> dev_no - 1); /* stripe level */549 uint64_t 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 … … 626 626 strip_off = 0; 627 627 extent++; 628 if (extent >= vol-> dev_no) {628 if (extent >= vol->extent_no) { 629 629 ext_stripe++; 630 630 extent = 1; … … 655 655 } 656 656 657 size_t bad = vol-> dev_no;658 for (size_t i = 0; i < vol-> dev_no; i++) {657 size_t bad = vol->extent_no; 658 for (size_t i = 0; i < vol->extent_no; i++) { 659 659 if (vol->extents[i].status == HR_EXT_FAILED) { 660 660 bad = i; … … 663 663 } 664 664 665 if (bad == vol-> dev_no) {665 if (bad == vol->extent_no) { 666 666 HR_WARN("hr_raid4_rebuild(): no bad extent on \"%s\", " 667 667 "aborting rebuild\n", vol->devname); … … 699 699 700 700 uint64_t max_blks = DATA_XFER_LIMIT / vol->bsize; 701 uint64_t left = vol->data_blkno / (vol-> dev_no - 1);701 uint64_t left = vol->data_blkno / (vol->extent_no - 1); 702 702 buf = malloc(max_blks * vol->bsize); 703 703 xorbuf = malloc(max_blks * vol->bsize); … … 714 714 */ 715 715 bool first = true; 716 for (size_t i = 0; i < vol-> dev_no; i++) {716 for (size_t i = 0; i < vol->extent_no; i++) { 717 717 if (i == bad) 718 718 continue;
Note:
See TracChangeset
for help on using the changeset viewer.