Changeset b422718 in mainline


Ignore:
Timestamp:
2024-10-28T17:44:11Z (7 months ago)
Author:
Miroslav Cimerman <mc@…>
Children:
066fed9
Parents:
4dd650a
git-author:
Miroslav Cimerman <mc@…> (2024-10-28 17:42:31)
git-committer:
Miroslav Cimerman <mc@…> (2024-10-28 17:44:11)
Message:

hr: sort extents based on metadata index

File:
1 edited

Legend:

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

    r4dd650a rb422718  
    112112}
    113113
     114static errno_t validate_meta(hr_metadata_t *md)
     115{
     116        if (uint64_t_le2host(md->magic) != HR_MAGIC) {
     117                printf("invalid magic\n");
     118                return EINVAL;
     119        }
     120        return EOK;
     121}
     122
     123
    114124errno_t hr_get_vol_from_meta(hr_config_t *cfg, hr_volume_t *new_volume)
    115125{
     
    123133                return ENOMEM;
    124134
    125         /* for now assume metadata are in sync across extents */
    126         rc = read_metadata(cfg->devs[0], metadata);
    127         if (rc != EOK)
    128                 goto end;
    129 
    130         /* TODO: sort new_volume->extents according to metadata extent index */
    131 
    132         if (uint64_t_le2host(metadata->magic) != HR_MAGIC) {
    133                 printf("invalid magic\n");
    134                 rc = EINVAL;
    135                 goto end;
    136         }
     135        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);
     138                if (rc != EOK)
     139                        goto end;
     140                rc = validate_meta(metadata);
     141                if (rc != EOK)
     142                        goto end;
     143                md_order[i] = uint32_t_le2host(metadata->index);
     144        }
     145
     146        for (size_t i = 0; i < cfg->dev_no; i++)
     147                for (size_t j = 0; j < cfg->dev_no; j++)
     148                        if (i == md_order[j])
     149                                new_volume->extents[i].svc_id = cfg->devs[j];
     150
     151        /*
     152         * still assume metadata are in sync across extents
     153         */
    137154
    138155        new_volume->level = uint32_t_le2host(metadata->level);
Note: See TracChangeset for help on using the changeset viewer.