Changeset 066fed9 in mainline


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

hr: refactor metadata reading

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

Legend:

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

    rb422718 r066fed9  
    168168                        goto error;
    169169
    170                 rc = hr_get_vol_from_meta(cfg, new_volume);
     170                rc = hr_fill_vol_from_meta(new_volume);
    171171                if (rc != EOK)
    172172                        goto error;
  • 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:
  • uspace/srv/bd/hr/superblock.h

    rb422718 r066fed9  
    6161
    6262extern errno_t hr_write_meta_to_vol(hr_volume_t *);
    63 extern errno_t hr_get_vol_from_meta(hr_config_t *, hr_volume_t *);
     63extern errno_t hr_fill_vol_from_meta(hr_volume_t *);
    6464
    6565#endif
Note: See TracChangeset for help on using the changeset viewer.