Changeset 23df41b in mainline for uspace/srv/bd/hr/raid1.c
- Timestamp:
- 2025-01-13T22:18:22Z (5 months ago)
- Children:
- a6fb937
- Parents:
- 35f2a877
- File:
-
- 1 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 */
Note:
See TracChangeset
for help on using the changeset viewer.