Changeset ee47537 in mainline


Ignore:
Timestamp:
2025-01-12T16:12:38Z (5 months ago)
Author:
Miroslav Cimerman <mc@…>
Children:
58d82fa
Parents:
4660649
Message:

hr: RAID0: refactor hr_raid0_update_vol_status()

File:
1 edited

Legend:

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

    r4660649 ree47537  
    5555extern loc_srv_t *hr_srv;
    5656
    57 static errno_t hr_raid0_update_vol_status(hr_volume_t *);
     57static void hr_raid0_update_vol_status(hr_volume_t *);
    5858static errno_t hr_raid0_bd_op(hr_bd_op_type_t, bd_srv_t *, aoff64_t, size_t,
    5959    void *, const void *, size_t);
     
    9191        }
    9292
    93         rc = hr_raid0_update_vol_status(new_volume);
    94         if (rc != EOK)
    95                 return rc;
    96 
    97         hr_update_vol_status(new_volume, HR_VOL_ONLINE);
     93        hr_raid0_update_vol_status(new_volume);
     94        if (new_volume->status != HR_VOL_ONLINE)
     95                return EINVAL;
    9896
    9997        bd_srvs_init(&new_volume->hr_bds);
     
    129127void hr_raid0_status_event(hr_volume_t *vol)
    130128{
    131         (void)hr_raid0_update_vol_status(vol);
     129        hr_raid0_update_vol_status(vol);
    132130}
    133131
     
    177175}
    178176
    179 /*
    180  * Update vol->status and return EOK if volume
    181  * is usable
    182  */
    183 static errno_t hr_raid0_update_vol_status(hr_volume_t *vol)
     177static void hr_raid0_update_vol_status(hr_volume_t *vol)
    184178{
    185179        fibril_rwlock_read_lock(&vol->states_lock);
     180
    186181        hr_vol_status_t old_state = vol->status;
    187182
     
    189184                if (vol->extents[i].status != HR_EXT_ONLINE) {
    190185                        fibril_rwlock_read_unlock(&vol->states_lock);
    191                         fibril_rwlock_write_lock(&vol->states_lock);
    192                         if (old_state != HR_VOL_FAULTY)
     186
     187                        if (old_state != HR_VOL_FAULTY) {
     188                                fibril_rwlock_write_lock(&vol->states_lock);
    193189                                hr_update_vol_status(vol, HR_VOL_FAULTY);
    194                         fibril_rwlock_write_unlock(&vol->states_lock);
    195                         return EIO;
     190                                fibril_rwlock_write_unlock(&vol->states_lock);
     191                        }
     192                        return;
    196193                }
    197194        }
    198195        fibril_rwlock_read_unlock(&vol->states_lock);
    199196
    200         return EOK;
     197        if (old_state != HR_VOL_ONLINE) {
     198                fibril_rwlock_write_lock(&vol->states_lock);
     199                hr_update_vol_status(vol, HR_VOL_ONLINE);
     200                fibril_rwlock_write_unlock(&vol->states_lock);
     201        }
    201202}
    202203
Note: See TracChangeset for help on using the changeset viewer.