Changeset f1be66bf in mainline


Ignore:
Timestamp:
2025-03-06T21:47:13Z (2 months ago)
Author:
Miroslav Cimerman <mc@…>
Children:
d2da1be
Parents:
d6fe2a1
Message:

hr: raid5.c: fast patch to make new asserts pass

File:
1 edited

Legend:

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

    rd6fe2a1 rf1be66bf  
    102102        }
    103103
     104        fibril_rwlock_write_lock(&new_volume->states_lock);
     105
    104106        rc = hr_raid5_update_vol_status(new_volume);
    105         if (rc != EOK)
     107        if (rc != EOK) {
     108                fibril_rwlock_write_unlock(&new_volume->states_lock);
    106109                return rc;
     110        }
    107111
    108112        bd_srvs_init(&new_volume->hr_bds);
     
    111115
    112116        rc = hr_register_volume(new_volume);
     117
     118        fibril_rwlock_write_unlock(&new_volume->states_lock);
    113119
    114120        return rc;
     
    140146{
    141147        fibril_mutex_lock(&vol->lock);
     148        fibril_rwlock_write_lock(&vol->states_lock);
    142149        (void)hr_raid5_update_vol_status(vol);
     150        fibril_rwlock_write_unlock(&vol->states_lock);
    143151        fibril_mutex_unlock(&vol->lock);
    144152}
     
    149157
    150158        fibril_mutex_lock(&vol->lock);
     159        fibril_mutex_lock(&vol->hotspare_lock);
    151160
    152161        if (vol->hotspare_no >= HR_MAX_HOTSPARES) {
     
    158167
    159168        vol->hotspares[vol->hotspare_no].svc_id = hotspare;
    160         hr_update_hotspare_status(vol, vol->hotspare_no, HR_EXT_HOTSPARE);
    161169
    162170        vol->hotspare_no++;
     171
     172        hr_update_hotspare_status(vol, vol->hotspare_no - 1, HR_EXT_HOTSPARE);
    163173
    164174        /*
     
    169179                    "spawning new rebuild fibril\n");
    170180                fid_t fib = fibril_create(hr_raid5_rebuild, vol);
    171                 if (fib == 0)
     181                if (fib == 0) {
     182                        fibril_mutex_unlock(&vol->hotspare_lock);
     183                        fibril_mutex_unlock(&vol->lock);
    172184                        return ENOMEM;
     185                }
    173186                fibril_start(fib);
    174187                fibril_detach(fib);
    175188        }
    176189
     190        fibril_mutex_unlock(&vol->hotspare_lock);
    177191        fibril_mutex_unlock(&vol->lock);
    178192
     
    587601        left = cnt;
    588602
     603        fibril_rwlock_write_lock(&vol->states_lock);
    589604        while (left != 0) {
    590605                phys_block = ext_stripe * strip_size + strip_off;
     
    684699error:
    685700        (void)hr_raid5_update_vol_status(vol);
     701        fibril_rwlock_write_unlock(&vol->states_lock);
    686702        fibril_mutex_unlock(&vol->lock);
    687703        return rc;
     
    697713
    698714        fibril_mutex_lock(&vol->lock);
     715        fibril_rwlock_read_lock(&vol->extents_lock);
     716        fibril_rwlock_write_lock(&vol->states_lock);
    699717
    700718        if (vol->hotspare_no == 0) {
     
    738756
    739757        vol->hotspares[hotspare_idx].svc_id = 0;
     758        fibril_mutex_lock(&vol->hotspare_lock);
    740759        hr_update_hotspare_status(vol, hotspare_idx, HR_EXT_MISSING);
     760        fibril_mutex_unlock(&vol->hotspare_lock);
    741761
    742762        vol->hotspare_no--;
     
    813833                 * during rebuild.
    814834                 */
     835                fibril_rwlock_write_unlock(&vol->states_lock);
    815836                fibril_mutex_unlock(&vol->lock);
    816837                fibril_mutex_lock(&vol->lock);
     838                fibril_rwlock_write_lock(&vol->states_lock);
    817839        }
    818840
     
    829851        (void)hr_raid5_update_vol_status(vol);
    830852
     853        fibril_rwlock_write_unlock(&vol->states_lock);
     854        fibril_rwlock_read_unlock(&vol->extents_lock);
    831855        fibril_mutex_unlock(&vol->lock);
    832856
Note: See TracChangeset for help on using the changeset viewer.