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


Ignore:
Timestamp:
2025-07-04T10:14:23Z (9 months 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/util.c

    rb247c714 r6aafb48  
    11101110errno_t hr_init_rebuild(hr_volume_t *vol, size_t *rebuild_idx)
    11111111{
     1112        HR_DEBUG("%s()", __func__);
     1113
    11121114        errno_t rc = EOK;
    11131115        size_t bad = vol->extent_no;
     
    11151117        if (vol->level == HR_LVL_0)
    11161118                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);
    11171126
    11181127        fibril_rwlock_write_lock(&vol->extents_lock);
    11191128        fibril_rwlock_write_lock(&vol->states_lock);
    11201129        fibril_mutex_lock(&vol->hotspare_lock);
    1121 
    1122         if (vol->state != HR_VOL_DEGRADED) {
    1123                 rc = EINVAL;
    1124                 goto error;
    1125         }
    11261130
    11271131        size_t rebuild = vol->extent_no;
Note: See TracChangeset for help on using the changeset viewer.