Changeset 066fed9 in mainline for uspace/srv/bd/hr/superblock.c


Ignore:
Timestamp:
2024-10-28T18:10:45Z (7 months ago)
Author:
Miroslav Cimerman <mc@…>
Children:
e47a032
Parents:
b422718
Message:

hr: refactor metadata reading

File:
1 edited

Legend:

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

    rb422718 r066fed9  
    122122
    123123
    124 errno_t hr_get_vol_from_meta(hr_config_t *cfg, hr_volume_t *new_volume)
     124errno_t hr_fill_vol_from_meta(hr_volume_t *vol)
    125125{
    126126        log_msg(LOG_DEFAULT, LVL_NOTE, "hr_get_vol_from_meta()");
     
    129129        hr_metadata_t *metadata;
    130130
    131         metadata = calloc(1, HR_META_SIZE * new_volume->bsize);
     131        metadata = calloc(1, HR_META_SIZE * vol->bsize);
    132132        if (metadata == NULL)
    133133                return ENOMEM;
    134134
     135        service_id_t cfg_svc_id_order[HR_MAXDEVS] = { 0 };
     136        for (size_t i = 0; i < vol->dev_no; i++)
     137                cfg_svc_id_order[i] = vol->extents[i].svc_id;
     138
     139
    135140        uint32_t md_order[HR_MAXDEVS] = { 0 };
    136         for (size_t i = 0; i < cfg->dev_no; i++) {
    137                 rc = read_metadata(cfg->devs[i], metadata);
     141        for (size_t i = 0; i < vol->dev_no; i++) {
     142                rc = read_metadata(cfg_svc_id_order[i], metadata);
    138143                if (rc != EOK)
    139144                        goto end;
     
    144149        }
    145150
    146         for (size_t i = 0; i < cfg->dev_no; i++)
    147                 for (size_t j = 0; j < cfg->dev_no; j++)
     151        for (size_t i = 0; i < vol->dev_no; i++)
     152                for (size_t j = 0; j < vol->dev_no; j++)
    148153                        if (i == md_order[j])
    149                                 new_volume->extents[i].svc_id = cfg->devs[j];
     154                                vol->extents[i].svc_id = cfg_svc_id_order[j];
    150155
    151156        /*
     
    153158         */
    154159
    155         new_volume->level = uint32_t_le2host(metadata->level);
    156         new_volume->dev_no = uint32_t_le2host(metadata->extent_no);
    157         new_volume->nblocks = uint64_t_le2host(metadata->nblocks);
    158         new_volume->data_blkno = uint64_t_le2host(metadata->data_blkno);
    159         new_volume->data_offset = uint32_t_le2host(metadata->data_offset);
    160         new_volume->strip_size = uint32_t_le2host(metadata->strip_size);
    161 
    162         if (new_volume->dev_no != cfg->dev_no) {
     160        if (vol->dev_no != uint32_t_le2host(metadata->extent_no)) {
    163161                log_msg(LOG_DEFAULT, LVL_ERROR,
    164                     "number of divices in array differ: specified %zu, metadata states %zu",
    165                     cfg->dev_no, new_volume->dev_no);
     162                    "number of divices in array differ: specified %zu, metadata states %u",
     163                    vol->dev_no, uint32_t_le2host(metadata->extent_no));
    166164                rc = EINVAL;
    167165                goto end;
    168166        }
    169167
    170         if (str_cmp(metadata->devname, new_volume->devname) != 0) {
     168        vol->level = uint32_t_le2host(metadata->level);
     169        vol->nblocks = uint64_t_le2host(metadata->nblocks);
     170        vol->data_blkno = uint64_t_le2host(metadata->data_blkno);
     171        vol->data_offset = uint32_t_le2host(metadata->data_offset);
     172        vol->strip_size = uint32_t_le2host(metadata->strip_size);
     173
     174        if (str_cmp(metadata->devname, vol->devname) != 0) {
    171175                log_msg(LOG_DEFAULT, LVL_NOTE,
    172176                    "devname on metadata (%s) and config (%s) differ, using config",
    173                     metadata->devname, new_volume->devname);
     177                    metadata->devname, vol->devname);
    174178        }
    175179end:
Note: See TracChangeset for help on using the changeset viewer.