Changeset 9323bb8 in mainline
- Timestamp:
- 2025-07-07T16:04:02Z (3 months ago)
- Children:
- f7169a6
- Parents:
- 15e51b05
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/bd/hr/raid5.c
r15e51b05 r9323bb8 98 98 } 99 99 100 bd_srvs_init(&new_volume->hr_bds);101 new_volume->hr_bds.ops = &hr_raid5_bd_ops;102 new_volume->hr_bds.sarg = new_volume;103 104 100 hr_raid5_vol_state_eval_forced(new_volume); 105 101 … … 113 109 } 114 110 111 bd_srvs_init(&new_volume->hr_bds); 112 new_volume->hr_bds.ops = &hr_raid5_bd_ops; 113 new_volume->hr_bds.sarg = new_volume; 114 115 115 return EOK; 116 116 } … … 241 241 stripes_cnt, false); 242 242 243 uint64_t phys_block, len; 244 size_t left; 245 246 hr_layout_t layout = vol->layout; 247 hr_level_t level = vol->level; 248 249 /* parity extent */ 250 size_t p_extent = hr_raid5_parity_extent(level, layout, 251 vol->extent_no, strip_no); 252 253 uint64_t strip_off = ba % strip_size; 254 255 left = cnt; 256 257 while (left != 0) { 258 if (level == HR_LVL_5) { 259 p_extent = hr_raid5_parity_extent(level, layout, 260 vol->extent_no, strip_no); 261 } 262 263 size_t extent = hr_raid5_data_extent(level, layout, 264 vol->extent_no, strip_no, p_extent); 265 266 uint64_t stripe_no = strip_no / (vol->extent_no - 1); 267 size_t relative_si = stripe_no - start_stripe; /* relative stripe index */ 268 hr_stripe_t *stripe = &stripes[relative_si]; 269 stripe->p_extent = p_extent; 270 271 stripe->strips_touched++; 272 273 phys_block = stripe_no * strip_size + strip_off; 274 cnt = min(left, strip_size - strip_off); 275 len = vol->bsize * cnt; 276 hr_add_data_offset(vol, &phys_block); 277 278 stripe->extent_span[extent].range.start = phys_block; 279 stripe->extent_span[extent].range.end = phys_block + cnt - 1; 280 stripe->extent_span[extent].cnt = cnt; 281 stripe->extent_span[extent].data_read = data_read; 282 stripe->extent_span[extent].strip_off = strip_off; 283 284 data_read += len; 285 left -= cnt; 286 strip_off = 0; 287 strip_no++; 288 } 289 243 290 hr_range_lock_t **rlps = hr_malloc_waitok(stripes_cnt * sizeof(*rlps)); 244 291 … … 252 299 uint64_t relative = s - start_stripe; 253 300 rlps[relative] = hr_range_lock_acquire(vol, s, 1); 254 }255 256 uint64_t phys_block, len;257 size_t left;258 259 hr_layout_t layout = vol->layout;260 hr_level_t level = vol->level;261 262 /* parity extent */263 size_t p_extent = hr_raid5_parity_extent(level, layout,264 vol->extent_no, strip_no);265 266 uint64_t strip_off = ba % strip_size;267 268 left = cnt;269 270 while (left != 0) {271 if (level == HR_LVL_5) {272 p_extent = hr_raid5_parity_extent(level, layout,273 vol->extent_no, strip_no);274 }275 276 size_t extent = hr_raid5_data_extent(level, layout,277 vol->extent_no, strip_no, p_extent);278 279 uint64_t stripe_no = strip_no / (vol->extent_no - 1);280 size_t relative_si = stripe_no - start_stripe; /* relative stripe index */281 hr_stripe_t *stripe = &stripes[relative_si];282 stripe->p_extent = p_extent;283 284 stripe->strips_touched++;285 286 phys_block = stripe_no * strip_size + strip_off;287 cnt = min(left, strip_size - strip_off);288 len = vol->bsize * cnt;289 hr_add_data_offset(vol, &phys_block);290 291 stripe->extent_span[extent].range.start = phys_block;292 stripe->extent_span[extent].range.end = phys_block + cnt - 1;293 stripe->extent_span[extent].cnt = cnt;294 stripe->extent_span[extent].data_read = data_read;295 stripe->extent_span[extent].strip_off = strip_off;296 297 data_read += len;298 left -= cnt;299 strip_off = 0;300 strip_no++;301 301 } 302 302 … … 452 452 } 453 453 454 uint64_t phys_block, len; 455 size_t left; 456 457 hr_layout_t layout = vol->layout; 458 hr_level_t level = vol->level; 459 460 /* parity extent */ 461 size_t p_extent = hr_raid5_parity_extent(level, layout, 462 vol->extent_no, strip_no); 463 464 uint64_t strip_off = ba % strip_size; 465 466 left = cnt; 467 468 while (left != 0) { 469 if (level == HR_LVL_5) { 470 p_extent = hr_raid5_parity_extent(level, layout, 471 vol->extent_no, strip_no); 472 } 473 474 size_t extent = hr_raid5_data_extent(level, layout, 475 vol->extent_no, strip_no, p_extent); 476 477 uint64_t stripe_no = strip_no / (vol->extent_no - 1); 478 size_t relative_si = stripe_no - start_stripe; /* relative stripe index */ 479 hr_stripe_t *stripe = &stripes[relative_si]; 480 stripe->p_extent = p_extent; 481 482 phys_block = stripe_no * strip_size + strip_off; 483 cnt = min(left, strip_size - strip_off); 484 len = vol->bsize * cnt; 485 hr_add_data_offset(vol, &phys_block); 486 487 stripe->extent_span[extent].range.start = phys_block; 488 stripe->extent_span[extent].range.end = phys_block + cnt - 1; 489 stripe->extent_span[extent].cnt = cnt; 490 stripe->extent_span[extent].data_write = data_write; 491 stripe->extent_span[extent].strip_off = strip_off; 492 493 data_write += len; 494 left -= cnt; 495 strip_off = 0; 496 strip_no++; 497 } 498 454 499 hr_range_lock_t **rlps = hr_malloc_waitok(stripes_cnt * sizeof(*rlps)); 455 500 … … 463 508 uint64_t relative = s - start_stripe; 464 509 rlps[relative] = hr_range_lock_acquire(vol, s, 1); 465 }466 467 uint64_t phys_block, len;468 size_t left;469 470 hr_layout_t layout = vol->layout;471 hr_level_t level = vol->level;472 473 /* parity extent */474 size_t p_extent = hr_raid5_parity_extent(level, layout,475 vol->extent_no, strip_no);476 477 uint64_t strip_off = ba % strip_size;478 479 left = cnt;480 481 while (left != 0) {482 if (level == HR_LVL_5) {483 p_extent = hr_raid5_parity_extent(level, layout,484 vol->extent_no, strip_no);485 }486 487 size_t extent = hr_raid5_data_extent(level, layout,488 vol->extent_no, strip_no, p_extent);489 490 uint64_t stripe_no = strip_no / (vol->extent_no - 1);491 size_t relative_si = stripe_no - start_stripe; /* relative stripe index */492 hr_stripe_t *stripe = &stripes[relative_si];493 stripe->p_extent = p_extent;494 495 phys_block = stripe_no * strip_size + strip_off;496 cnt = min(left, strip_size - strip_off);497 len = vol->bsize * cnt;498 hr_add_data_offset(vol, &phys_block);499 500 stripe->extent_span[extent].range.start = phys_block;501 stripe->extent_span[extent].range.end = phys_block + cnt - 1;502 stripe->extent_span[extent].cnt = cnt;503 stripe->extent_span[extent].data_write = data_write;504 stripe->extent_span[extent].strip_off = strip_off;505 506 data_write += len;507 left -= cnt;508 strip_off = 0;509 strip_no++;510 510 } 511 511
Note:
See TracChangeset
for help on using the changeset viewer.