Changeset 6aafb48 in mainline
- Timestamp:
- 2025-07-04T10:14:23Z (2 weeks ago)
- Children:
- 974f9ba
- Parents:
- b247c714
- Location:
- uspace/srv/bd/hr
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/bd/hr/hr.c
rb247c714 r6aafb48 358 358 } 359 359 360 fibril_rwlock_ read_lock(&vol->extents_lock);360 fibril_rwlock_write_lock(&vol->extents_lock); 361 361 fibril_rwlock_write_lock(&vol->states_lock); 362 362 … … 368 368 case HR_EXT_FAILED: 369 369 fibril_rwlock_write_unlock(&vol->states_lock); 370 fibril_rwlock_ read_unlock(&vol->extents_lock);370 fibril_rwlock_write_unlock(&vol->extents_lock); 371 371 async_answer_0(icall, EINVAL); 372 372 return; … … 374 374 hr_update_ext_state(vol, extent_idx_to_fail, HR_EXT_FAILED); 375 375 (void)vol->meta_ops->erase_block(ext->svc_id); 376 block_fini(ext->svc_id); 377 ext->svc_id = 0; 376 378 hr_mark_vol_state_dirty(vol); 377 379 } 378 380 379 381 fibril_rwlock_write_unlock(&vol->states_lock); 380 fibril_rwlock_ read_unlock(&vol->extents_lock);382 fibril_rwlock_write_unlock(&vol->extents_lock); 381 383 382 384 vol->hr_ops.vol_state_eval(vol); -
uspace/srv/bd/hr/raid1.c
rb247c714 r6aafb48 185 185 size_t rebuild_no = hr_count_extents(vol, HR_EXT_REBUILD); 186 186 187 fibril_rwlock_read_unlock(&vol->states_lock); 188 fibril_rwlock_read_unlock(&vol->extents_lock); 189 187 190 fibril_mutex_lock(&vol->hotspare_lock); 188 191 size_t hs_no = vol->hotspare_no; 189 192 fibril_mutex_unlock(&vol->hotspare_lock); 190 191 fibril_rwlock_read_unlock(&vol->states_lock);192 fibril_rwlock_read_unlock(&vol->extents_lock);193 193 194 194 if (healthy == 0) { … … 206 206 } 207 207 208 if (old_state != HR_VOL_REBUILD) { 209 if (hs_no > 0 || invalid_no > 0 || rebuild_no > 0) { 210 fid_t fib = fibril_create(hr_raid1_rebuild, 211 vol); 212 if (fib == 0) 213 return; 214 fibril_start(fib); 215 fibril_detach(fib); 216 } 208 if (hs_no > 0 || invalid_no > 0 || rebuild_no > 0) { 209 fid_t fib = fibril_create(hr_raid1_rebuild, vol); 210 if (fib == 0) 211 return; 212 fibril_start(fib); 213 fibril_detach(fib); 217 214 } 218 215 } else { … … 541 538 hr_mark_vol_state_dirty(vol); 542 539 540 hr_update_vol_state(vol, HR_VOL_DEGRADED); 541 543 542 fibril_rwlock_write_unlock(&vol->states_lock); 544 543 end: -
uspace/srv/bd/hr/raid5.c
rb247c714 r6aafb48 846 846 hr_mark_vol_state_dirty(vol); 847 847 848 hr_update_vol_state(vol, HR_VOL_DEGRADED); 849 848 850 fibril_rwlock_write_unlock(&vol->states_lock); 849 851 end: -
uspace/srv/bd/hr/util.c
rb247c714 r6aafb48 1110 1110 errno_t hr_init_rebuild(hr_volume_t *vol, size_t *rebuild_idx) 1111 1111 { 1112 HR_DEBUG("%s()", __func__); 1113 1112 1114 errno_t rc = EOK; 1113 1115 size_t bad = vol->extent_no; … … 1115 1117 if (vol->level == HR_LVL_0) 1116 1118 return EINVAL; 1119 1120 fibril_rwlock_read_lock(&vol->states_lock); 1121 if (vol->state != HR_VOL_DEGRADED) { 1122 fibril_rwlock_read_unlock(&vol->states_lock); 1123 return EINVAL; 1124 } 1125 fibril_rwlock_read_unlock(&vol->states_lock); 1117 1126 1118 1127 fibril_rwlock_write_lock(&vol->extents_lock); 1119 1128 fibril_rwlock_write_lock(&vol->states_lock); 1120 1129 fibril_mutex_lock(&vol->hotspare_lock); 1121 1122 if (vol->state != HR_VOL_DEGRADED) {1123 rc = EINVAL;1124 goto error;1125 }1126 1130 1127 1131 size_t rebuild = vol->extent_no;
Note:
See TracChangeset
for help on using the changeset viewer.