Changeset 68e357e in mainline for uspace/srv/bd


Ignore:
Timestamp:
2024-09-05T20:54:51Z (18 months ago)
Author:
Miroslav Cimerman <mc@…>
Children:
44ea48e
Parents:
680e8c8
Message:

hr: use array for devname and devices for now

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

Legend:

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

    r680e8c8 r68e357e  
    4646#include <stdio.h>
    4747#include <stdlib.h>
     48#include <str.h>
    4849#include <str_error.h>
    4950
     
    6465        errno_t rc;
    6566        size_t size;
    66         hr_config_t *hr_config;
    67 
    68         hr_config = calloc(1, sizeof(hr_config_t));
    69         if (hr_config == NULL) {
     67        hr_config_t *cfg;
     68        hr_volume_t *new_volume;
     69        ipc_call_t call;
     70
     71        if (!async_data_write_receive(&call, &size)) {
     72                async_answer_0(&call, EREFUSED);
     73                async_answer_0(icall, EREFUSED);
     74                return;
     75        }
     76
     77        if (size != sizeof(hr_config_t)) {
     78                async_answer_0(&call, EINVAL);
     79                async_answer_0(icall, EINVAL);
     80                return;
     81        }
     82
     83        cfg = calloc(1, sizeof(hr_config_t));
     84        if (cfg == NULL) {
     85                async_answer_0(&call, ENOMEM);
    7086                async_answer_0(icall, ENOMEM);
    7187                return;
    7288        }
    7389
    74         hr_config->level = ipc_get_arg1(icall);
    75 
    76         rc = async_data_write_accept((void **) &hr_config->name, true, 0, 0, 0,
    77             NULL);
    78         if (rc != EOK) {
    79                 async_answer_0(icall, EREFUSED);
    80                 return;
    81         }
    82 
    83         rc = async_data_write_accept((void **) &hr_config->devs, false,
    84             sizeof(service_id_t), 0, 0, &size);
    85         if (rc != EOK) {
    86                 async_answer_0(icall, EREFUSED);
    87                 return;
    88         }
    89 
    90         hr_config->dev_no = size / sizeof(service_id_t);
    91 
    92         hr_volume_t *new_volume = calloc(1, sizeof(hr_volume_t));
     90        rc = async_data_write_finalize(&call, cfg, size);
     91        if (rc != EOK) {
     92                async_answer_0(&call, rc);
     93                async_answer_0(icall, rc);
     94        }
     95
     96        new_volume = calloc(1, sizeof(hr_volume_t));
    9397        if (new_volume == NULL) {
    9498                rc = ENOMEM;
    9599                goto end;
    96100        }
    97         new_volume->devname = hr_config->name;
    98         new_volume->level = hr_config->level;
    99         new_volume->dev_no = hr_config->dev_no;
    100         new_volume->devs = hr_config->devs;
    101 
    102         switch (hr_config->level) {
     101
     102        str_cpy(new_volume->devname, 32, cfg->devname);
     103        memcpy(new_volume->devs, cfg->devs, sizeof(service_id_t) * HR_MAXDEVS);
     104        new_volume->level = cfg->level;
     105        new_volume->dev_no = cfg->dev_no;
     106
     107        switch (new_volume->level) {
    103108        case hr_l_1:
    104109                new_volume->hr_ops.create = hr_raid1_create;
     
    115120
    116121        rc = new_volume->hr_ops.create(new_volume);
    117         if (rc != EOK)
     122        if (rc != EOK) {
    118123                goto end;
     124        }
    119125
    120126        fibril_mutex_lock(&hr_volumes_lock);
     
    126132
    127133end:
    128         free(hr_config);
     134        free(cfg);
    129135        async_answer_0(icall, rc);
    130136}
  • uspace/srv/bd/hr/var.h

    r680e8c8 r68e357e  
    5353        bd_srvs_t hr_bds;
    5454        link_t lvolumes;
    55         char *devname;
    56         service_id_t *devs;
     55        char devname[32];
     56        service_id_t devs[HR_MAXDEVS];
    5757        uint64_t nblocks;
    5858        size_t bsize;
Note: See TracChangeset for help on using the changeset viewer.