Changeset 23df41b in mainline
- Timestamp:
- 2025-01-13T22:18:22Z (5 months ago)
- Children:
- a6fb937
- Parents:
- 35f2a877
- Location:
- uspace/srv/bd/hr
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/bd/hr/raid1.c
r35f2a877 r23df41b 67 67 static errno_t hr_raid1_restore_blocks(hr_volume_t *, size_t, uint64_t, size_t, 68 68 void *); 69 static void hr_process_deferred_invalidations(hr_volume_t *);70 69 71 70 /* bdops */ … … 108 107 atomic_store(&new_volume->state_changed, true); 109 108 hr_raid1_update_vol_status(new_volume); 110 if (new_volume->status == HR_VOL_FAULTY) 109 110 fibril_rwlock_read_lock(&new_volume->states_lock); 111 hr_vol_status_t state = new_volume->status; 112 fibril_rwlock_read_unlock(&new_volume->states_lock); 113 if (state == HR_VOL_FAULTY || state == HR_VOL_INVALID) 111 114 return EINVAL; 112 115 … … 359 362 fibril_rwlock_read_unlock(&vol->states_lock); 360 363 361 if (vol_state == HR_VOL_FAULTY )364 if (vol_state == HR_VOL_FAULTY || vol_state == HR_VOL_INVALID) 362 365 return EIO; 363 366 … … 779 782 } 780 783 781 static void hr_process_deferred_invalidations(hr_volume_t *vol)782 {783 HR_DEBUG("hr_raid1_update_vol_status(): deferred invalidations\n");784 785 fibril_mutex_lock(&vol->halt_lock);786 vol->halt_please = true;787 fibril_rwlock_write_lock(&vol->extents_lock);788 fibril_rwlock_write_lock(&vol->states_lock);789 fibril_mutex_lock(&vol->hotspare_lock);790 791 list_foreach(vol->deferred_invalidations_list, link,792 hr_deferred_invalidation_t, di) {793 assert(vol->extents[di->index].status == HR_EXT_INVALID);794 795 HR_DEBUG("moving invalidated extent no. %lu to hotspares\n",796 di->index);797 798 block_fini(di->svc_id);799 800 size_t hs_idx = vol->hotspare_no;801 802 vol->hotspare_no++;803 804 hr_update_hotspare_svc_id(vol, hs_idx, di->svc_id);805 hr_update_hotspare_status(vol, hs_idx, HR_EXT_HOTSPARE);806 807 hr_update_ext_svc_id(vol, di->index, 0);808 hr_update_ext_status(vol, di->index, HR_EXT_MISSING);809 810 assert(vol->hotspare_no < HR_MAX_HOTSPARES + HR_MAX_EXTENTS);811 }812 813 for (size_t i = 0; i < HR_MAX_EXTENTS; i++) {814 hr_deferred_invalidation_t *di = &vol->deferred_inval[i];815 if (di->svc_id != 0) {816 list_remove(&di->link);817 di->svc_id = 0;818 }819 }820 821 fibril_mutex_unlock(&vol->hotspare_lock);822 fibril_rwlock_write_unlock(&vol->states_lock);823 fibril_rwlock_write_unlock(&vol->extents_lock);824 vol->halt_please = false;825 fibril_mutex_unlock(&vol->halt_lock);826 }827 828 784 /** @} 829 785 */ -
uspace/srv/bd/hr/util.c
r35f2a877 r23df41b 410 410 } 411 411 412 void hr_process_deferred_invalidations(hr_volume_t *vol) 413 { 414 HR_DEBUG("hr_raid1_update_vol_status(): deferred invalidations\n"); 415 416 fibril_mutex_lock(&vol->halt_lock); 417 vol->halt_please = true; 418 fibril_rwlock_write_lock(&vol->extents_lock); 419 fibril_rwlock_write_lock(&vol->states_lock); 420 fibril_mutex_lock(&vol->hotspare_lock); 421 422 list_foreach(vol->deferred_invalidations_list, link, 423 hr_deferred_invalidation_t, di) { 424 assert(vol->extents[di->index].status == HR_EXT_INVALID); 425 426 HR_DEBUG("moving invalidated extent no. %lu to hotspares\n", 427 di->index); 428 429 block_fini(di->svc_id); 430 431 size_t hs_idx = vol->hotspare_no; 432 433 vol->hotspare_no++; 434 435 hr_update_hotspare_svc_id(vol, hs_idx, di->svc_id); 436 hr_update_hotspare_status(vol, hs_idx, HR_EXT_HOTSPARE); 437 438 hr_update_ext_svc_id(vol, di->index, 0); 439 hr_update_ext_status(vol, di->index, HR_EXT_MISSING); 440 441 assert(vol->hotspare_no < HR_MAX_HOTSPARES + HR_MAX_EXTENTS); 442 } 443 444 for (size_t i = 0; i < HR_MAX_EXTENTS; i++) { 445 hr_deferred_invalidation_t *di = &vol->deferred_inval[i]; 446 if (di->svc_id != 0) { 447 list_remove(&di->link); 448 di->svc_id = 0; 449 } 450 } 451 452 fibril_mutex_unlock(&vol->hotspare_lock); 453 fibril_rwlock_write_unlock(&vol->states_lock); 454 fibril_rwlock_write_unlock(&vol->extents_lock); 455 vol->halt_please = false; 456 fibril_mutex_unlock(&vol->halt_lock); 457 } 458 412 459 /** @} 413 460 */ -
uspace/srv/bd/hr/util.h
r35f2a877 r23df41b 67 67 uint64_t); 68 68 extern void hr_range_lock_release(hr_range_lock_t *rl); 69 extern void hr_process_deferred_invalidations(hr_volume_t *); 69 70 70 71 #endif
Note:
See TracChangeset
for help on using the changeset viewer.