Changeset 6aafb48 in mainline for uspace/srv/bd/hr/raid1.c


Ignore:
Timestamp:
2025-07-04T10:14:23Z (3 weeks ago)
Author:
Miroslav Cimerman <mc@…>
Children:
974f9ba
Parents:
b247c714
Message:

hr: rebuild: fix deadlock on extents_lock

File:
1 edited

Legend:

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

    rb247c714 r6aafb48  
    185185        size_t rebuild_no = hr_count_extents(vol, HR_EXT_REBUILD);
    186186
     187        fibril_rwlock_read_unlock(&vol->states_lock);
     188        fibril_rwlock_read_unlock(&vol->extents_lock);
     189
    187190        fibril_mutex_lock(&vol->hotspare_lock);
    188191        size_t hs_no = vol->hotspare_no;
    189192        fibril_mutex_unlock(&vol->hotspare_lock);
    190 
    191         fibril_rwlock_read_unlock(&vol->states_lock);
    192         fibril_rwlock_read_unlock(&vol->extents_lock);
    193193
    194194        if (healthy == 0) {
     
    206206                }
    207207
    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);
    217214                }
    218215        } else {
     
    541538        hr_mark_vol_state_dirty(vol);
    542539
     540        hr_update_vol_state(vol, HR_VOL_DEGRADED);
     541
    543542        fibril_rwlock_write_unlock(&vol->states_lock);
    544543end:
Note: See TracChangeset for help on using the changeset viewer.