Changeset 6a8c1569 in mainline


Ignore:
Timestamp:
2025-06-23T18:31:18Z (4 months ago)
Author:
Miroslav Cimerman <mc@…>
Children:
62a8756
Parents:
e0695ce
Message:

hr: add option to save metadata on single extent

Location:
uspace/srv/bd/hr
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/bd/hr/metadata/foreign/geom/hr_g_mirror.c

    re0695ce r6a8c1569  
    6464static void meta_gmirror_inc_counter(hr_volume_t *);
    6565static errno_t meta_gmirror_save(hr_volume_t *, bool);
     66static errno_t meta_gmirror_save_ext(hr_volume_t *, size_t, bool);
    6667static const char *meta_gmirror_get_devname(const void *);
    6768static hr_level_t meta_gmirror_get_level(const void *);
     
    8485        .inc_counter = meta_gmirror_inc_counter,
    8586        .save = meta_gmirror_save,
     87        .save_ext = meta_gmirror_save_ext,
    8688        .get_devname = meta_gmirror_get_devname,
    8789        .get_level = meta_gmirror_get_level,
     
    312314}
    313315
     316static errno_t meta_gmirror_save_ext(hr_volume_t *vol, size_t ext_idx,
     317    bool with_state_callback)
     318{
     319        HR_DEBUG("%s()", __func__);
     320
     321        return ENOTSUP;
     322}
     323
    314324static const char *meta_gmirror_get_devname(const void *md_v)
    315325{
  • uspace/srv/bd/hr/metadata/foreign/geom/hr_g_stripe.c

    re0695ce r6a8c1569  
    6464static void meta_gstripe_inc_counter(hr_volume_t *);
    6565static errno_t meta_gstripe_save(hr_volume_t *, bool);
     66static errno_t meta_gstripe_save_ext(hr_volume_t *, size_t, bool);
    6667static const char *meta_gstripe_get_devname(const void *);
    6768static hr_level_t meta_gstripe_get_level(const void *);
     
    8485        .inc_counter = meta_gstripe_inc_counter,
    8586        .save = meta_gstripe_save,
     87        .save_ext = meta_gstripe_save_ext,
    8688        .get_devname = meta_gstripe_get_devname,
    8789        .get_level = meta_gstripe_get_level,
     
    298300}
    299301
     302static errno_t meta_gstripe_save_ext(hr_volume_t *vol, size_t ext_idx,
     303    bool with_state_callback)
     304{
     305        HR_DEBUG("%s()", __func__);
     306
     307        return ENOTSUP;
     308}
     309
    300310static const char *meta_gstripe_get_devname(const void *md_v)
    301311{
  • uspace/srv/bd/hr/metadata/foreign/softraid/hr_softraid.c

    re0695ce r6a8c1569  
    6464static void meta_softraid_inc_counter(hr_volume_t *);
    6565static errno_t meta_softraid_save(hr_volume_t *, bool);
     66static errno_t meta_softraid_save_ext(hr_volume_t *, size_t, bool);
    6667static const char *meta_softraid_get_devname(const void *);
    6768static hr_level_t meta_softraid_get_level(const void *);
     
    8485        .inc_counter = meta_softraid_inc_counter,
    8586        .save = meta_softraid_save,
     87        .save_ext = meta_softraid_save_ext,
    8688        .get_devname = meta_softraid_get_devname,
    8789        .get_level = meta_softraid_get_level,
     
    437439}
    438440
     441static errno_t meta_softraid_save_ext(hr_volume_t *vol, size_t ext_idx,
     442    bool with_state_callback)
     443{
     444        HR_DEBUG("%s()", __func__);
     445
     446        return ENOTSUP;
     447}
     448
    439449static const char *meta_softraid_get_devname(const void *md_v)
    440450{
  • uspace/srv/bd/hr/metadata/native.c

    re0695ce r6a8c1569  
    6565static void meta_native_inc_counter(hr_volume_t *);
    6666static errno_t meta_native_save(hr_volume_t *, bool);
     67static errno_t meta_native_save_ext(hr_volume_t *, size_t, bool);
    6768static const char *meta_native_get_devname(const void *);
    6869static hr_level_t meta_native_get_level(const void *);
     
    8687        .inc_counter = meta_native_inc_counter,
    8788        .save = meta_native_save,
     89        .save_ext = meta_native_save_ext,
    8890        .get_devname = meta_native_get_devname,
    8991        .get_level = meta_native_get_level,
     
    394396        HR_DEBUG("%s()", __func__);
    395397
    396         errno_t rc = EOK;
     398        fibril_rwlock_read_lock(&vol->extents_lock);
     399
     400        for (size_t i = 0; i < vol->extent_no; i++)
     401                meta_native_save_ext(vol, i, with_state_callback);
     402
     403        fibril_rwlock_read_unlock(&vol->extents_lock);
     404
     405        return EOK;
     406}
     407
     408static errno_t meta_native_save_ext(hr_volume_t *vol, size_t ext_idx,
     409    bool with_state_callback)
     410{
     411        HR_DEBUG("%s()", __func__);
     412
     413        assert(fibril_rwlock_is_locked(&vol->extents_lock));
    397414
    398415        void *md_block = hr_calloc_waitok(1, vol->bsize);
     
    400417        hr_metadata_t *md = (hr_metadata_t *)vol->in_mem_md;
    401418
    402         fibril_rwlock_read_lock(&vol->extents_lock);
     419        hr_extent_t *ext = &vol->extents[ext_idx];
     420
     421        fibril_rwlock_read_lock(&vol->states_lock);
     422        hr_ext_state_t s = ext->state;
     423        fibril_rwlock_read_unlock(&vol->states_lock);
     424
     425        if (s != HR_EXT_ONLINE && s != HR_EXT_REBUILD) {
     426                return EINVAL;
     427        }
    403428
    404429        fibril_mutex_lock(&vol->md_lock);
    405430
    406         for (size_t i = 0; i < vol->extent_no; i++) {
    407                 hr_extent_t *ext = &vol->extents[i];
    408 
    409                 fibril_rwlock_read_lock(&vol->states_lock);
    410                 hr_ext_state_t s = ext->state;
    411 
    412                 if (s != HR_EXT_ONLINE && s != HR_EXT_REBUILD) {
    413                         fibril_rwlock_read_unlock(&vol->states_lock);
    414                         continue;
    415                 }
    416 
    417                 fibril_rwlock_read_unlock(&vol->states_lock);
    418 
    419                 md->index = i;
    420                 if (s == HR_EXT_REBUILD)
    421                         md->rebuild_pos = vol->rebuild_blk;
    422                 else
    423                         md->rebuild_pos = 0;
    424                 meta_native_encode(md, md_block);
    425                 rc = meta_native_write_block(ext->svc_id, md_block);
    426                 if (rc != EOK && with_state_callback)
    427                         vol->hr_ops.ext_state_cb(vol, i, rc);
    428         }
     431        md->index = ext_idx;
     432        if (s == HR_EXT_REBUILD)
     433                md->rebuild_pos = vol->rebuild_blk;
     434        else
     435                md->rebuild_pos = 0;
     436        meta_native_encode(md, md_block);
     437        errno_t rc = meta_native_write_block(ext->svc_id, md_block);
     438        if (rc != EOK && with_state_callback)
     439                vol->hr_ops.ext_state_cb(vol, ext_idx, rc);
    429440
    430441        fibril_mutex_unlock(&vol->md_lock);
    431 
    432         fibril_rwlock_read_unlock(&vol->extents_lock);
    433442
    434443        if (with_state_callback)
  • uspace/srv/bd/hr/raid1.c

    re0695ce r6a8c1569  
    520520
    521521                if (written * vol->bsize > HR_REBUILD_SAVE_BYTES) {
    522                         vol->meta_ops->save(vol, WITH_STATE_CALLBACK);
     522                        vol->meta_ops->save_ext(vol, rebuild_idx,
     523                            WITH_STATE_CALLBACK);
    523524                        written = 0;
    524525                }
  • uspace/srv/bd/hr/raid5.c

    re0695ce r6a8c1569  
    819819
    820820                if (written * vol->bsize > HR_REBUILD_SAVE_BYTES) {
    821                         vol->meta_ops->save(vol, WITH_STATE_CALLBACK);
     821                        vol->meta_ops->save_ext(vol, rebuild_idx,
     822                            WITH_STATE_CALLBACK);
    822823                        written = 0;
    823824                }
  • uspace/srv/bd/hr/superblock.h

    re0695ce r6a8c1569  
    5656        void (*inc_counter)(hr_volume_t *);
    5757        errno_t (*save)(hr_volume_t *, bool);
     58        errno_t (*save_ext)(hr_volume_t *, size_t, bool);
    5859        const char *(*get_devname)(const void *);
    5960        hr_level_t (*get_level)(const void *);
Note: See TracChangeset for help on using the changeset viewer.