Changeset e47a032 in mainline for uspace/srv/bd/hr/util.c


Ignore:
Timestamp:
2024-10-28T20:02:39Z (7 months ago)
Author:
Miroslav Cimerman <mc@…>
Children:
9fc1d36d
Parents:
066fed9
Message:

hr: base for status handling

File:
1 edited

Legend:

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

    r066fed9 re47a032  
    5656
    5757        for (i = 0; i < vol->dev_no; i++) {
     58                if (vol->extents[i].svc_id == 0) {
     59                        vol->extents[i].status = HR_EXT_MISSING;
     60                        continue;
     61                }
    5862                rc = block_init(vol->extents[i].svc_id);
     63                vol->extents[i].status = HR_EXT_ONLINE;
    5964                log_msg(LOG_DEFAULT, LVL_DEBUG,
    60                     "hr_init_devs(): initing (%" PRIun ")", vol->extents[i].svc_id);
     65                    "hr_init_devs(): initing (%" PRIun ")",
     66                    vol->extents[i].svc_id);
    6167                if (rc != EOK) {
    6268                        log_msg(LOG_DEFAULT, LVL_ERROR,
     
    7783
    7884        for (i = 0; i < vol->dev_no; i++)
    79                 block_fini(vol->extents[i].svc_id);
     85                if (vol->extents[i].status != HR_EXT_MISSING)
     86                        block_fini(vol->extents[i].svc_id);
    8087}
    8188
     
    127134
    128135        errno_t rc;
    129         size_t i, bsize, last_bsize;
    130         uint64_t nblocks, last_nblocks;
     136        size_t i, bsize;
     137        uint64_t nblocks;
     138        size_t last_bsize = 0;
     139        uint64_t last_nblocks = 0;
    131140        uint64_t total_blocks = 0;
    132141
    133142        for (i = 0; i < vol->dev_no; i++) {
     143                if (vol->extents[i].status == HR_EXT_MISSING)
     144                        continue;
    134145                rc = block_get_nblocks(vol->extents[i].svc_id, &nblocks);
    135146                if (rc != EOK)
    136147                        goto error;
    137                 if (i != 0 && nblocks != last_nblocks) {
     148                if (last_nblocks != 0 && nblocks != last_nblocks) {
    138149                        log_msg(LOG_DEFAULT, LVL_ERROR,
    139150                            "number of blocks differs");
     
    146157
    147158        for (i = 0; i < vol->dev_no; i++) {
     159                if (vol->extents[i].status == HR_EXT_MISSING)
     160                        continue;
    148161                rc = block_get_bsize(vol->extents[i].svc_id, &bsize);
    149162                if (rc != EOK)
    150163                        goto error;
    151                 if (i != 0 && bsize != last_bsize) {
     164                if (last_bsize != 0 && bsize != last_bsize) {
    152165                        log_msg(LOG_DEFAULT, LVL_ERROR, "block sizes differ");
    153166                        rc = EINVAL;
     
    177190}
    178191
     192void hr_update_ext_status(hr_volume_t *vol, uint64_t extent, hr_ext_status_t s)
     193{
     194        log_msg(LOG_DEFAULT, LVL_WARN,
     195            "vol %s, changing extent: %lu, to status: %s",
     196            vol->devname, extent, hr_get_ext_status_msg(s));
     197        vol->extents[extent].status = s;
     198}
     199
    179200/** @}
    180201 */
Note: See TracChangeset for help on using the changeset viewer.