Changeset 65706f1 in mainline
- Timestamp:
- 2024-11-27T14:06:41Z (7 months ago)
- Children:
- a0c3080
- Parents:
- 40bf2c6
- Location:
- uspace/srv/bd/hr
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/bd/hr/hr.c
r40bf2c6 r65706f1 159 159 new_volume->extents[i].svc_id = cfg->devs[i]; 160 160 new_volume->level = cfg->level; 161 new_volume-> dev_no = cfg->dev_no;161 new_volume->extent_no = cfg->dev_no; 162 162 163 163 if (assemble) { … … 354 354 sizeof(hr_extent_t) * HR_MAX_HOTSPARES); 355 355 info.svc_id = vol->svc_id; 356 info.extent_no = vol-> dev_no;356 info.extent_no = vol->extent_no; 357 357 info.hotspare_no = vol->hotspare_no; 358 358 info.level = vol->level; -
uspace/srv/bd/hr/raid0.c
r40bf2c6 r65706f1 86 86 assert(new_volume->level == HR_LVL_0); 87 87 88 if (new_volume-> dev_no < 2) {88 if (new_volume->extent_no < 2) { 89 89 HR_ERROR("RAID 0 array needs at least 2 devices\n"); 90 90 return EINVAL; … … 119 119 vol->bsize = bsize; 120 120 vol->data_offset = HR_DATA_OFF; 121 vol->data_blkno = vol->nblocks - (vol->data_offset * vol-> dev_no);121 vol->data_blkno = vol->nblocks - (vol->data_offset * vol->extent_no); 122 122 vol->strip_size = HR_STRIP_SIZE; 123 123 … … 190 190 static errno_t hr_raid0_update_vol_status(hr_volume_t *vol) 191 191 { 192 for (size_t i = 0; i < vol-> dev_no; i++) {192 for (size_t i = 0; i < vol->extent_no; i++) { 193 193 if (vol->extents[i].status != HR_EXT_ONLINE) { 194 194 HR_WARN("RAID 0 needs all extents to be ONLINE, " … … 231 231 uint64_t strip_size = vol->strip_size / vol->bsize; /* in blocks */ 232 232 uint64_t stripe = ba / strip_size; /* stripe number */ 233 uint64_t extent = stripe % vol-> dev_no;234 uint64_t ext_stripe = stripe / vol-> dev_no; /* stripe level */233 uint64_t extent = stripe % vol->extent_no; 234 uint64_t ext_stripe = stripe / vol->extent_no; /* stripe level */ 235 235 uint64_t strip_off = ba % strip_size; /* strip offset */ 236 236 … … 284 284 strip_off = 0; 285 285 extent++; 286 if (extent >= vol-> dev_no) {286 if (extent >= vol->extent_no) { 287 287 ext_stripe++; 288 288 extent = 0; -
uspace/srv/bd/hr/raid1.c
r40bf2c6 r65706f1 87 87 assert(new_volume->level == HR_LVL_1); 88 88 89 if (new_volume-> dev_no < 2) {89 if (new_volume->extent_no < 2) { 90 90 HR_ERROR("RAID 1 array needs at least 2 devices\n"); 91 91 return EINVAL; … … 117 117 return rc; 118 118 119 vol->nblocks = total_blkno / vol-> dev_no;119 vol->nblocks = total_blkno / vol->extent_no; 120 120 vol->bsize = bsize; 121 121 vol->data_offset = HR_DATA_OFF; … … 239 239 } 240 240 return EINVAL; 241 } else if (healthy < vol-> dev_no) {241 } else if (healthy < vol->extent_no) { 242 242 if (old_state != HR_VOL_DEGRADED && 243 243 old_state != HR_VOL_REBUILD) { … … 305 305 switch (type) { 306 306 case HR_BD_SYNC: 307 for (i = 0; i < vol-> dev_no; i++) {307 for (i = 0; i < vol->extent_no; i++) { 308 308 if (vol->extents[i].status != HR_EXT_ONLINE) 309 309 continue; … … 316 316 break; 317 317 case HR_BD_READ: 318 for (i = 0; i < vol-> dev_no; i++) {318 for (i = 0; i < vol->extent_no; i++) { 319 319 if (vol->extents[i].status != HR_EXT_ONLINE) 320 320 continue; … … 330 330 break; 331 331 case HR_BD_WRITE: 332 for (i = 0; i < vol-> dev_no; i++) {332 for (i = 0; i < vol->extent_no; i++) { 333 333 if (vol->extents[i].status != HR_EXT_ONLINE || 334 334 (vol->extents[i].status == HR_EXT_REBUILD && … … 385 385 } 386 386 387 size_t bad = vol-> dev_no;388 for (size_t i = 0; i < vol-> dev_no; i++) {387 size_t bad = vol->extent_no; 388 for (size_t i = 0; i < vol->extent_no; i++) { 389 389 if (vol->extents[i].status == HR_EXT_FAILED) { 390 390 bad = i; … … 393 393 } 394 394 395 if (bad == vol-> dev_no) {395 if (bad == vol->extent_no) { 396 396 HR_WARN("hr_raid1_rebuild(): no bad extent on \"%s\", " 397 397 "aborting rebuild\n", vol->devname); … … 441 441 vol->rebuild_blk = ba; 442 442 cnt = min(max_blks, left); 443 for (size_t i = 0; i < vol-> dev_no; i++) {443 for (size_t i = 0; i < vol->extent_no; i++) { 444 444 ext = &vol->extents[i]; 445 445 if (ext->status == HR_EXT_ONLINE) { … … 448 448 if (rc != EOK) { 449 449 hr_raid1_handle_extent_error(vol, i, rc); 450 if (i + 1 < vol-> dev_no) {450 if (i + 1 < vol->extent_no) { 451 451 /* still might have one ONLINE */ 452 452 continue; -
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; -
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; -
uspace/srv/bd/hr/superblock.c
r40bf2c6 r65706f1 70 70 goto error; 71 71 72 for (i = 0; i < vol-> dev_no; i++) {72 for (i = 0; i < vol->extent_no; i++) { 73 73 metadata->index = host2uint32_t_le(i); 74 74 … … 138 138 meta_blkno = (HR_META_OFF + HR_META_SIZE); 139 139 if (vol->level != HR_LVL_1) 140 meta_blkno *= vol-> dev_no;140 meta_blkno *= vol->extent_no; 141 141 142 142 if (vol->nblocks < meta_blkno) { … … 153 153 154 154 metadata->magic = host2uint64_t_le(HR_MAGIC); 155 metadata->extent_no = host2uint32_t_le(vol-> dev_no);155 metadata->extent_no = host2uint32_t_le(vol->extent_no); 156 156 metadata->level = host2uint32_t_le(vol->level); 157 157 metadata->nblocks = host2uint64_t_le(vol->nblocks); … … 186 186 187 187 service_id_t cfg_svc_id_order[HR_MAX_EXTENTS] = { 0 }; 188 for (size_t i = 0; i < vol-> dev_no; i++)188 for (size_t i = 0; i < vol->extent_no; i++) 189 189 cfg_svc_id_order[i] = vol->extents[i].svc_id; 190 190 191 191 int32_t md_order[HR_MAX_EXTENTS] = { 0 }; 192 for (size_t i = 0; i < vol-> dev_no; i++) {192 for (size_t i = 0; i < vol->extent_no; i++) { 193 193 if (cfg_svc_id_order[i] == 0) { 194 194 md_order[i] = -1; … … 204 204 } 205 205 206 for (size_t i = 0; i < vol-> dev_no; i++) {206 for (size_t i = 0; i < vol->extent_no; i++) { 207 207 vol->extents[i].svc_id = 0; 208 208 vol->extents[i].status = HR_EXT_MISSING; … … 210 210 211 211 /* sort */ 212 for (size_t i = 0; i < vol-> dev_no; i++) {213 for (size_t j = 0; j < vol-> dev_no; j++) {212 for (size_t i = 0; i < vol->extent_no; i++) { 213 for (size_t j = 0; j < vol->extent_no; j++) { 214 214 if (i == (uint32_t)md_order[j]) { 215 215 vol->extents[i].svc_id = cfg_svc_id_order[j]; … … 223 223 */ 224 224 225 if (vol-> dev_no != uint32_t_le2host(metadata->extent_no)) {225 if (vol->extent_no != uint32_t_le2host(metadata->extent_no)) { 226 226 HR_ERROR("number of divices in array differ: specified %zu, " 227 227 "metadata states %u", 228 vol-> dev_no, uint32_t_le2host(metadata->extent_no));228 vol->extent_no, uint32_t_le2host(metadata->extent_no)); 229 229 rc = EINVAL; 230 230 goto end; -
uspace/srv/bd/hr/util.c
r40bf2c6 r65706f1 56 56 hr_extent_t *extent; 57 57 58 for (i = 0; i < vol-> dev_no; i++) {58 for (i = 0; i < vol->extent_no; i++) { 59 59 extent = &vol->extents[i]; 60 60 if (extent->svc_id == 0) { … … 84 84 size_t i; 85 85 86 for (i = 0; i < vol-> dev_no; i++) {86 for (i = 0; i < vol->extent_no; i++) { 87 87 if (vol->extents[i].status != HR_EXT_MISSING) { 88 88 HR_DEBUG("hr_fini_devs(): block_fini() on (%lu)\n", … … 146 146 hr_extent_t *extent; 147 147 148 for (i = 0; i < vol-> dev_no; i++) {148 for (i = 0; i < vol->extent_no; i++) { 149 149 extent = &vol->extents[i]; 150 150 if (extent->status == HR_EXT_MISSING) … … 163 163 } 164 164 165 for (i = 0; i < vol-> dev_no; i++) {165 for (i = 0; i < vol->extent_no; i++) { 166 166 extent = &vol->extents[i]; 167 167 if (extent->status == HR_EXT_MISSING) … … 223 223 224 224 fibril_mutex_lock(&vol->lock); 225 for (size_t i = 0; i < vol-> dev_no; i++) {225 for (size_t i = 0; i < vol->extent_no; i++) { 226 226 if (vol->extents[i].status != HR_EXT_ONLINE) 227 227 continue; … … 240 240 { 241 241 size_t count = 0; 242 for (size_t i = 0; i < vol-> dev_no; i++) {242 for (size_t i = 0; i < vol->extent_no; i++) { 243 243 if (vol->extents[i].status == status) 244 244 count++; -
uspace/srv/bd/hr/var.h
r40bf2c6 r65706f1 61 61 fibril_mutex_t lock; 62 62 63 size_t dev_no;63 size_t extent_no; 64 64 hr_extent_t extents[HR_MAX_EXTENTS]; 65 65
Note:
See TracChangeset
for help on using the changeset viewer.