Changeset dbd91da in mainline


Ignore:
Timestamp:
2024-10-05T10:32:59Z (9 months ago)
Author:
Miroslav Cimerman <mc@…>
Children:
6b8e89b0
Parents:
34abe6c5
git-author:
Miroslav Cimerman <mc@…> (2024-10-05 10:23:08)
git-committer:
Miroslav Cimerman <mc@…> (2024-10-05 10:32:59)
Message:

hr: remake structures to include extent status

Also rename .devs → .extents in hr_volume_t and when printing status,
display each extent status, and parity disk when array is of type RAID4.

Location:
uspace
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/device/include/hr.h

    r34abe6c5 rdbd91da  
    6464} hr_config_t;
    6565
     66typedef struct hr_extent {
     67        service_id_t svc_id;
     68        int status;
     69} hr_extent_t;
     70
    6671typedef struct hr_vol_info {
    67         service_id_t extents[HR_MAXDEVS];
     72        hr_extent_t extents[HR_MAXDEVS];
    6873        size_t extent_no;
    6974        service_id_t svc_id;
  • uspace/lib/device/src/hr.c

    r34abe6c5 rdbd91da  
    146146        size_t i;
    147147        char *devname;
     148        hr_extent_t *ext;
    148149
    149150        printf("--- vol %zu ---\n", index);
     
    170171        printf("block size: %zu\n", vol_info->bsize);
    171172
    172         printf("extents: [index] [devname]\n");
     173        if (vol_info->level == hr_l_4)
     174                printf("extents: [P] [status] [index] [devname]\n");
     175        else
     176                printf("extents: [status] [index] [devname]\n");
    173177        for (i = 0; i < vol_info->extent_no; i++) {
    174                 rc = loc_service_get_name(vol_info->extents[i], &devname);
     178                ext = &vol_info->extents[i];
     179                rc = loc_service_get_name(ext->svc_id, &devname);
    175180                if (rc != EOK)
    176181                        return rc;
    177                 printf("          %zu       %s\n", i, devname);
     182                if (i == 0 && vol_info->level == hr_l_4)
     183                        printf("          P   %d        %zu       %s\n", ext->status, i, devname);
     184                else if (vol_info->level == hr_l_4)
     185                        printf("              %d        %zu       %s\n", ext->status, i, devname);
     186                else
     187                        printf("          %d        %zu       %s\n", ext->status, i, devname);
    178188        }
    179189        return EOK;
  • uspace/srv/bd/hr/hr.c

    r34abe6c5 rdbd91da  
    103103
    104104        errno_t rc;
    105         size_t size;
     105        size_t i, size;
    106106        hr_config_t *cfg;
    107107        hr_volume_t *new_volume;
     
    142142
    143143        str_cpy(new_volume->devname, 32, cfg->devname);
    144         memcpy(new_volume->devs, cfg->devs, sizeof(service_id_t) * HR_MAXDEVS);
     144        for (i = 0; i < cfg->dev_no; i++)
     145                new_volume->extents[i].svc_id = cfg->devs[i];
    145146        new_volume->level = cfg->level;
    146147        new_volume->dev_no = cfg->dev_no;
     
    206207
    207208        errno_t rc;
    208         size_t size;
     209        size_t i, size;
    209210        hr_config_t *cfg;
    210211        hr_volume_t *new_volume;
     
    245246
    246247        str_cpy(new_volume->devname, 32, cfg->devname);
    247         memcpy(new_volume->devs, cfg->devs, sizeof(service_id_t) * HR_MAXDEVS);
     248        for (i = 0; i < cfg->dev_no; i++)
     249                new_volume->extents[i].svc_id = cfg->devs[i];
    248250        new_volume->dev_no = cfg->dev_no;
    249251
     
    362364
    363365        list_foreach(hr_volumes, lvolumes, hr_volume_t, volume) {
    364                 memcpy(info.extents, volume->devs,
    365                     sizeof(service_id_t) * HR_MAXDEVS);
     366                memcpy(info.extents, volume->extents,
     367                    sizeof(hr_extent_t) * HR_MAXDEVS);
    366368                info.svc_id = volume->svc_id;
    367369                info.extent_no = volume->dev_no;
  • uspace/srv/bd/hr/raid0.c

    r34abe6c5 rdbd91da  
    117117                raid0_geometry(ba, vol, &extent, &phys_block);
    118118                hr_add_ba_offset(vol, &phys_block);
    119                 rc = block_sync_cache(vol->devs[extent], phys_block, 1);
     119                rc = block_sync_cache(vol->extents[extent].svc_id, phys_block, 1);
    120120                if (rc != EOK)
    121121                        break;
     
    149149                raid0_geometry(ba, vol, &extent, &phys_block);
    150150                hr_add_ba_offset(vol, &phys_block);
    151                 rc = block_read_direct(vol->devs[extent], phys_block, 1, buf);
     151                rc = block_read_direct(vol->extents[extent].svc_id, phys_block, 1, buf);
    152152                buf = buf + vol->bsize;
    153153                if (rc != EOK)
     
    182182                raid0_geometry(ba, vol, &extent, &phys_block);
    183183                hr_add_ba_offset(vol, &phys_block);
    184                 rc = block_write_direct(vol->devs[extent], phys_block, 1, data);
     184                rc = block_write_direct(vol->extents[extent].svc_id, phys_block, 1, data);
    185185                data = data + vol->bsize;
    186186                if (rc != EOK)
  • uspace/srv/bd/hr/raid1.c

    r34abe6c5 rdbd91da  
    101101
    102102        for (i = 0; i < vol->dev_no; i++) {
    103                 rc = block_sync_cache(vol->devs[i], ba, cnt);
     103                rc = block_sync_cache(vol->extents[i].svc_id, ba, cnt);
    104104                if (rc != EOK)
    105105                        break;
     
    127127
    128128        for (i = 0; i < vol->dev_no; i++) {
    129                 rc = block_read_direct(vol->devs[i], ba, cnt, buf);
     129                rc = block_read_direct(vol->extents[i].svc_id, ba, cnt, buf);
    130130                if (rc != EOK)
    131131                        break;
     
    153153
    154154        for (i = 0; i < vol->dev_no; i++) {
    155                 rc = block_write_direct(vol->devs[i], ba, cnt, data);
     155                rc = block_write_direct(vol->extents[i].svc_id, ba, cnt, data);
    156156                if (rc != EOK)
    157157                        break;
  • uspace/srv/bd/hr/raid4.c

    r34abe6c5 rdbd91da  
    104104                        xor(xorbuf, data, vol->bsize);
    105105                } else {
    106                         rc = block_read_direct(vol->devs[i], block, 1, buf);
     106                        rc = block_read_direct(vol->extents[i].svc_id, block, 1, buf);
    107107                        if (rc != EOK)
    108108                                goto end;
     
    111111        }
    112112
    113         rc = block_write_direct(vol->devs[0], block, 1, xorbuf);
     113        rc = block_write_direct(vol->extents[0].svc_id, block, 1, xorbuf);
    114114
    115115end:
     
    162162                raid4_geometry(ba, vol, &extent, &phys_block);
    163163                hr_add_ba_offset(vol, &phys_block);
    164                 rc = block_sync_cache(vol->devs[extent], phys_block, 1);
     164                rc = block_sync_cache(vol->extents[extent].svc_id, phys_block, 1);
    165165                if (rc != EOK)
    166166                        break;
     
    194194                raid4_geometry(ba, vol, &extent, &phys_block);
    195195                hr_add_ba_offset(vol, &phys_block);
    196                 rc = block_read_direct(vol->devs[extent], phys_block, 1, buf);
     196                rc = block_read_direct(vol->extents[extent].svc_id, phys_block, 1, buf);
    197197                buf = buf + vol->bsize;
    198198                if (rc != EOK)
     
    205205        return rc;
    206206}
    207 
    208207
    209208static errno_t hr_raid4_bd_write_blocks(bd_srv_t *bd, aoff64_t ba, size_t cnt,
     
    228227                raid4_geometry(ba, vol, &extent, &phys_block);
    229228                hr_add_ba_offset(vol, &phys_block);
    230                 rc = block_write_direct(vol->devs[extent], phys_block, 1, data);
     229                rc = block_write_direct(vol->extents[extent].svc_id, phys_block, 1, data);
    231230                if (rc != EOK)
    232231                        break;
  • uspace/srv/bd/hr/superblock.c

    r34abe6c5 rdbd91da  
    103103                str_cpy(metadata->devname, 32, vol->devname);
    104104
    105                 rc = block_write_direct(vol->devs[i], HR_META_OFF, HR_META_SIZE,
     105                rc = block_write_direct(vol->extents[i].svc_id, HR_META_OFF, HR_META_SIZE,
    106106                    metadata);
    107107                if (rc != EOK)
     
    134134                goto end;
    135135
    136         /* TODO: sort new_volume->devs according to metadata extent index */
     136        /* TODO: sort new_volume->extents according to metadata extent index */
    137137
    138138        if (uint64_t_le2host(metadata->magic) != HR_MAGIC) {
  • uspace/srv/bd/hr/util.c

    r34abe6c5 rdbd91da  
    5656
    5757        for (i = 0; i < vol->dev_no; i++) {
    58                 rc = block_init(vol->devs[i]);
     58                rc = block_init(vol->extents[i].svc_id);
    5959                log_msg(LOG_DEFAULT, LVL_DEBUG,
    60                     "hr_init_devs(): initing (%" PRIun ")", vol->devs[i]);
     60                    "hr_init_devs(): initing (%" PRIun ")", vol->extents[i].svc_id);
    6161                if (rc != EOK) {
    6262                        log_msg(LOG_DEFAULT, LVL_ERROR,
    6363                            "hr_init_devs(): initing (%" PRIun ") failed, aborting",
    64                             vol->devs[i]);
     64                            vol->extents[i].svc_id);
    6565                        break;
    6666                }
     
    7777
    7878        for (i = 0; i < vol->dev_no; i++)
    79                 block_fini(vol->devs[i]);
     79                block_fini(vol->extents[i].svc_id);
    8080}
    8181
     
    132132
    133133        for (i = 0; i < vol->dev_no; i++) {
    134                 rc = block_get_nblocks(vol->devs[i], &nblocks);
     134                rc = block_get_nblocks(vol->extents[i].svc_id, &nblocks);
    135135                if (rc != EOK)
    136136                        goto error;
     
    146146
    147147        for (i = 0; i < vol->dev_no; i++) {
    148                 rc = block_get_bsize(vol->devs[i], &bsize);
     148                rc = block_get_bsize(vol->extents[i].svc_id, &bsize);
    149149                if (rc != EOK)
    150150                        goto error;
  • uspace/srv/bd/hr/var.h

    r34abe6c5 rdbd91da  
    5656        link_t lvolumes;
    5757        char devname[32];
    58         service_id_t devs[HR_MAXDEVS];
     58        hr_extent_t extents[HR_MAXDEVS];
    5959        uint64_t nblocks;
    6060        uint64_t data_blkno;
Note: See TracChangeset for help on using the changeset viewer.