Changeset 23df41b in mainline for uspace/srv/bd/hr/util.c


Ignore:
Timestamp:
2025-01-13T22:18:22Z (5 months ago)
Author:
Miroslav Cimerman <mc@…>
Children:
a6fb937
Parents:
35f2a877
Message:

hr: move hr_process_deferred_invalidations() to util

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/bd/hr/util.c

    r35f2a877 r23df41b  
    410410}
    411411
     412void 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
    412459/** @}
    413460 */
Note: See TracChangeset for help on using the changeset viewer.