Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/bd/vbd/disk.c

    r5772aa1 rb7fd2a0  
    3838#include <block.h>
    3939#include <errno.h>
     40#include <str_error.h>
    4041#include <io/log.h>
    4142#include <label/empty.h>
     
    5758static category_id_t part_cid;
    5859
    59 static int vbds_disk_parts_add(vbds_disk_t *, label_t *);
    60 static int vbds_disk_parts_remove(vbds_disk_t *, vbds_rem_flag_t);
    61 
    62 static int vbds_bd_open(bd_srvs_t *, bd_srv_t *);
    63 static int vbds_bd_close(bd_srv_t *);
    64 static int vbds_bd_read_blocks(bd_srv_t *, aoff64_t, size_t, void *, size_t);
    65 static int vbds_bd_sync_cache(bd_srv_t *, aoff64_t, size_t);
    66 static int vbds_bd_write_blocks(bd_srv_t *, aoff64_t, size_t, const void *,
     60static errno_t vbds_disk_parts_add(vbds_disk_t *, label_t *);
     61static errno_t vbds_disk_parts_remove(vbds_disk_t *, vbds_rem_flag_t);
     62
     63static errno_t vbds_bd_open(bd_srvs_t *, bd_srv_t *);
     64static errno_t vbds_bd_close(bd_srv_t *);
     65static errno_t vbds_bd_read_blocks(bd_srv_t *, aoff64_t, size_t, void *, size_t);
     66static errno_t vbds_bd_sync_cache(bd_srv_t *, aoff64_t, size_t);
     67static errno_t vbds_bd_write_blocks(bd_srv_t *, aoff64_t, size_t, const void *,
    6768    size_t);
    68 static int vbds_bd_get_block_size(bd_srv_t *, size_t *);
    69 static int vbds_bd_get_num_blocks(bd_srv_t *, aoff64_t *);
    70 
    71 static int vbds_bsa_translate(vbds_part_t *, aoff64_t, size_t, aoff64_t *);
    72 
    73 static int vbds_part_svc_register(vbds_part_t *);
    74 static int vbds_part_svc_unregister(vbds_part_t *);
    75 static int vbds_part_indices_update(vbds_disk_t *);
     69static errno_t vbds_bd_get_block_size(bd_srv_t *, size_t *);
     70static errno_t vbds_bd_get_num_blocks(bd_srv_t *, aoff64_t *);
     71
     72static errno_t vbds_bsa_translate(vbds_part_t *, aoff64_t, size_t, aoff64_t *);
     73
     74static errno_t vbds_part_svc_register(vbds_part_t *);
     75static errno_t vbds_part_svc_unregister(vbds_part_t *);
     76static errno_t vbds_part_indices_update(vbds_disk_t *);
    7677
    7778static vbd_part_id_t vbds_part_id = 1;
    7879
    79 static int vbds_label_get_bsize(void *, size_t *);
    80 static int vbds_label_get_nblocks(void *, aoff64_t *);
    81 static int vbds_label_read(void *, aoff64_t, size_t, void *);
    82 static int vbds_label_write(void *, aoff64_t, size_t, const void *);
     80static errno_t vbds_label_get_bsize(void *, size_t *);
     81static errno_t vbds_label_get_nblocks(void *, aoff64_t *);
     82static errno_t vbds_label_read(void *, aoff64_t, size_t, void *);
     83static errno_t vbds_label_write(void *, aoff64_t, size_t, const void *);
    8384
    8485/** Block device operations provided by VBD */
     
    131132}
    132133
    133 int vbds_disks_init(void)
    134 {
    135         int rc;
     134errno_t vbds_disks_init(void)
     135{
     136        errno_t rc;
    136137
    137138        fibril_mutex_initialize(&vbds_disks_lock);
     
    151152
    152153/** Check for new/removed disk devices */
    153 static int vbds_disks_check_new(void)
     154static errno_t vbds_disks_check_new(void)
    154155{
    155156        bool already_known;
     
    158159        size_t count, i;
    159160        vbds_disk_t *cur, *next;
    160         int rc;
     161        errno_t rc;
    161162
    162163        log_msg(LOG_DEFAULT, LVL_DEBUG, "vbds_disks_check_new()");
     
    228229
    229230
    230 static int vbds_disk_by_svcid(service_id_t sid, vbds_disk_t **rdisk)
     231static errno_t vbds_disk_by_svcid(service_id_t sid, vbds_disk_t **rdisk)
    231232{
    232233        list_foreach(vbds_disks, ldisks, vbds_disk_t, disk) {
     
    255256}
    256257
    257 static int vbds_part_by_pid(vbds_part_id_t partid, vbds_part_t **rpart)
     258static errno_t vbds_part_by_pid(vbds_part_id_t partid, vbds_part_t **rpart)
    258259{
    259260        log_msg(LOG_DEFAULT, LVL_DEBUG, "vbds_part_by_pid(%zu)", partid);
     
    277278}
    278279
    279 static int vbds_part_by_svcid(service_id_t svcid, vbds_part_t **rpart)
     280static errno_t vbds_part_by_svcid(service_id_t svcid, vbds_part_t **rpart)
    280281{
    281282        log_msg(LOG_DEFAULT, LVL_DEBUG, "vbds_part_by_svcid(%zu)", svcid);
     
    300301
    301302/** Add partition to our inventory based on liblabel partition structure */
    302 static int vbds_part_add(vbds_disk_t *disk, label_part_t *lpart,
     303static errno_t vbds_part_add(vbds_disk_t *disk, label_part_t *lpart,
    303304    vbds_part_t **rpart)
    304305{
     
    306307        service_id_t psid = 0;
    307308        label_part_info_t lpinfo;
    308         int rc;
     309        errno_t rc;
    309310
    310311        log_msg(LOG_DEFAULT, LVL_DEBUG, "vbds_part_add(%s, %p)",
     
    361362 *
    362363 */
    363 static int vbds_part_remove(vbds_part_t *part, vbds_rem_flag_t flag,
     364static errno_t vbds_part_remove(vbds_part_t *part, vbds_rem_flag_t flag,
    364365    label_part_t **rlpart)
    365366{
    366367        label_part_t *lpart;
    367         int rc;
     368        errno_t rc;
    368369
    369370        log_msg(LOG_DEFAULT, LVL_DEBUG, "vbds_part_remove(%p)", part);
     
    403404/** Remove all disk partitions from our inventory leaving only the underlying
    404405 * liblabel partition structures. */
    405 static int vbds_disk_parts_add(vbds_disk_t *disk, label_t *label)
     406static errno_t vbds_disk_parts_add(vbds_disk_t *disk, label_t *label)
    406407{
    407408        label_part_t *part;
    408         int rc;
     409        errno_t rc;
    409410
    410411        part = label_part_first(label);
     
    425426/** Remove all disk partitions from our inventory leaving only the underlying
    426427 * liblabel partition structures. */
    427 static int vbds_disk_parts_remove(vbds_disk_t *disk, vbds_rem_flag_t flag)
     428static errno_t vbds_disk_parts_remove(vbds_disk_t *disk, vbds_rem_flag_t flag)
    428429{
    429430        link_t *link;
    430431        vbds_part_t *part;
    431         int rc;
     432        errno_t rc;
    432433
    433434        link = list_first(&disk->parts);
     
    449450}
    450451
    451 int vbds_disk_discovery_start(void)
    452 {
    453         int rc;
     452errno_t vbds_disk_discovery_start(void)
     453{
     454        errno_t rc;
    454455
    455456        rc = loc_register_cat_change_cb(vbds_disk_cat_change_cb);
    456457        if (rc != EOK) {
    457458                log_msg(LOG_DEFAULT, LVL_ERROR, "Failed registering callback "
    458                     "for disk discovery (%d).", rc);
     459                    "for disk discovery: %s.", str_error(rc));
    459460                return rc;
    460461        }
     
    463464}
    464465
    465 int vbds_disk_add(service_id_t sid)
     466errno_t vbds_disk_add(service_id_t sid)
    466467{
    467468        label_t *label = NULL;
     
    471472        size_t block_size;
    472473        aoff64_t nblocks;
    473         int rc;
     474        errno_t rc;
    474475
    475476        log_msg(LOG_DEFAULT, LVL_DEBUG, "vbds_disk_add(%zu)", sid);
     
    556557}
    557558
    558 int vbds_disk_remove(service_id_t sid)
     559errno_t vbds_disk_remove(service_id_t sid)
    559560{
    560561        vbds_disk_t *disk;
    561         int rc;
     562        errno_t rc;
    562563
    563564        log_msg(LOG_DEFAULT, LVL_DEBUG, "vbds_disk_remove(%zu)", sid);
     
    582583
    583584/** Get list of disks as array of service IDs. */
    584 int vbds_disk_get_ids(service_id_t *id_buf, size_t buf_size, size_t *act_size)
     585errno_t vbds_disk_get_ids(service_id_t *id_buf, size_t buf_size, size_t *act_size)
    585586{
    586587        size_t act_cnt;
     
    610611}
    611612
    612 int vbds_disk_info(service_id_t sid, vbd_disk_info_t *info)
     613errno_t vbds_disk_info(service_id_t sid, vbd_disk_info_t *info)
    613614{
    614615        vbds_disk_t *disk;
    615616        label_info_t linfo;
    616         int rc;
     617        errno_t rc;
    617618
    618619        log_msg(LOG_DEFAULT, LVL_DEBUG, "vbds_disk_info(%zu)", sid);
     
    637638}
    638639
    639 int vbds_get_parts(service_id_t sid, service_id_t *id_buf, size_t buf_size,
     640errno_t vbds_get_parts(service_id_t sid, service_id_t *id_buf, size_t buf_size,
    640641    size_t *act_size)
    641642{
     
    643644        size_t act_cnt;
    644645        size_t buf_cnt;
    645         int rc;
     646        errno_t rc;
    646647
    647648        rc = vbds_disk_by_svcid(sid, &disk);
     
    667668}
    668669
    669 int vbds_label_create(service_id_t sid, label_type_t ltype)
     670errno_t vbds_label_create(service_id_t sid, label_type_t ltype)
    670671{
    671672        label_t *label;
     
    673674        label_info_t linfo;
    674675        vbds_disk_t *disk;
    675         int rc, rc2;
     676        errno_t rc, rc2;
    676677
    677678        log_msg(LOG_DEFAULT, LVL_DEBUG, "vbds_label_create(%zu)", sid);
     
    738739}
    739740
    740 int vbds_label_delete(service_id_t sid)
     741errno_t vbds_label_delete(service_id_t sid)
    741742{
    742743        vbds_disk_t *disk;
    743744        label_t *label;
    744745        label_bd_t lbd;
    745         int rc;
     746        errno_t rc;
    746747
    747748        log_msg(LOG_DEFAULT, LVL_DEBUG, "vbds_label_delete(%zu)", sid);
     
    780781}
    781782
    782 int vbds_part_get_info(vbds_part_id_t partid, vbd_part_info_t *pinfo)
     783errno_t vbds_part_get_info(vbds_part_id_t partid, vbd_part_info_t *pinfo)
    783784{
    784785        vbds_part_t *part;
    785786        label_part_info_t lpinfo;
    786         int rc;
     787        errno_t rc;
    787788
    788789        rc = vbds_part_by_pid(partid, &part);
     
    809810}
    810811
    811 int vbds_part_create(service_id_t sid, vbd_part_spec_t *pspec,
     812errno_t vbds_part_create(service_id_t sid, vbd_part_spec_t *pspec,
    812813    vbds_part_id_t *rpart)
    813814{
     
    816817        label_part_spec_t lpspec;
    817818        label_part_t *lpart;
    818         int rc;
     819        errno_t rc;
    819820
    820821        log_msg(LOG_DEFAULT, LVL_DEBUG, "vbds_part_create(%zu)", sid);
     
    878879}
    879880
    880 int vbds_part_delete(vbds_part_id_t partid)
     881errno_t vbds_part_delete(vbds_part_id_t partid)
    881882{
    882883        vbds_part_t *part;
    883884        vbds_disk_t *disk;
    884885        label_part_t *lpart;
    885         int rc;
     886        errno_t rc;
    886887
    887888        rc = vbds_part_by_pid(partid, &part);
     
    917918}
    918919
    919 int vbds_suggest_ptype(service_id_t sid, label_pcnt_t pcnt,
     920errno_t vbds_suggest_ptype(service_id_t sid, label_pcnt_t pcnt,
    920921    label_ptype_t *ptype)
    921922{
    922923        vbds_disk_t *disk;
    923         int rc;
     924        errno_t rc;
    924925
    925926        rc = vbds_disk_by_svcid(sid, &disk);
     
    941942}
    942943
    943 static int vbds_bd_open(bd_srvs_t *bds, bd_srv_t *bd)
     944static errno_t vbds_bd_open(bd_srvs_t *bds, bd_srv_t *bd)
    944945{
    945946        vbds_part_t *part = bd_srv_part(bd);
     
    952953}
    953954
    954 static int vbds_bd_close(bd_srv_t *bd)
     955static errno_t vbds_bd_close(bd_srv_t *bd)
    955956{
    956957        vbds_part_t *part = bd_srv_part(bd);
     
    966967}
    967968
    968 static int vbds_bd_read_blocks(bd_srv_t *bd, aoff64_t ba, size_t cnt,
     969static errno_t vbds_bd_read_blocks(bd_srv_t *bd, aoff64_t ba, size_t cnt,
    969970    void *buf, size_t size)
    970971{
    971972        vbds_part_t *part = bd_srv_part(bd);
    972973        aoff64_t gba;
    973         int rc;
     974        errno_t rc;
    974975
    975976        log_msg(LOG_DEFAULT, LVL_DEBUG2, "vbds_bd_read_blocks()");
     
    992993}
    993994
    994 static int vbds_bd_sync_cache(bd_srv_t *bd, aoff64_t ba, size_t cnt)
     995static errno_t vbds_bd_sync_cache(bd_srv_t *bd, aoff64_t ba, size_t cnt)
    995996{
    996997        vbds_part_t *part = bd_srv_part(bd);
    997998        aoff64_t gba;
    998         int rc;
     999        errno_t rc;
    9991000
    10001001        log_msg(LOG_DEFAULT, LVL_DEBUG2, "vbds_bd_sync_cache()");
     
    10161017}
    10171018
    1018 static int vbds_bd_write_blocks(bd_srv_t *bd, aoff64_t ba, size_t cnt,
     1019static errno_t vbds_bd_write_blocks(bd_srv_t *bd, aoff64_t ba, size_t cnt,
    10191020    const void *buf, size_t size)
    10201021{
    10211022        vbds_part_t *part = bd_srv_part(bd);
    10221023        aoff64_t gba;
    1023         int rc;
     1024        errno_t rc;
    10241025
    10251026        log_msg(LOG_DEFAULT, LVL_DEBUG2, "vbds_bd_write_blocks()");
     
    10411042}
    10421043
    1043 static int vbds_bd_get_block_size(bd_srv_t *bd, size_t *rsize)
     1044static errno_t vbds_bd_get_block_size(bd_srv_t *bd, size_t *rsize)
    10441045{
    10451046        vbds_part_t *part = bd_srv_part(bd);
     
    10541055}
    10551056
    1056 static int vbds_bd_get_num_blocks(bd_srv_t *bd, aoff64_t *rnb)
     1057static errno_t vbds_bd_get_num_blocks(bd_srv_t *bd, aoff64_t *rnb)
    10571058{
    10581059        vbds_part_t *part = bd_srv_part(bd);
     
    10701071{
    10711072        vbds_part_t *part;
    1072         int rc;
     1073        errno_t rc;
    10731074        service_id_t svcid;
    10741075
     
    10931094
    10941095/** Translate block segment address with range checking. */
    1095 static int vbds_bsa_translate(vbds_part_t *part, aoff64_t ba, size_t cnt,
     1096static errno_t vbds_bsa_translate(vbds_part_t *part, aoff64_t ba, size_t cnt,
    10961097    aoff64_t *gba)
    10971098{
     
    11041105
    11051106/** Register service for partition */
    1106 static int vbds_part_svc_register(vbds_part_t *part)
     1107static errno_t vbds_part_svc_register(vbds_part_t *part)
    11071108{
    11081109        char *name;
    11091110        service_id_t psid;
    11101111        int idx;
    1111         int rc;
     1112        errno_t rc;
    11121113
    11131114        idx = part->lpart->index;
    11141115
    1115         rc = asprintf(&name, "%sp%u", part->disk->svc_name, idx);
    1116         if (rc < 0) {
     1116        if (asprintf(&name, "%sp%u", part->disk->svc_name, idx) < 0) {
    11171117                log_msg(LOG_DEFAULT, LVL_ERROR, "Out of memory.");
    11181118                return ENOMEM;
     
    11241124        if (rc != EOK) {
    11251125                log_msg(LOG_DEFAULT, LVL_ERROR, "Failed registering "
    1126                     "service %s (%d).", name, rc);
     1126                    "service %s: %s.", name, str_error(rc));
    11271127                free(name);
    11281128                free(part);
     
    11521152
    11531153/** Unregister service for partition */
    1154 static int vbds_part_svc_unregister(vbds_part_t *part)
    1155 {
    1156         int rc;
     1154static errno_t vbds_part_svc_unregister(vbds_part_t *part)
     1155{
     1156        errno_t rc;
    11571157
    11581158        log_msg(LOG_DEFAULT, LVL_DEBUG, "vbds_part_svc_unregister("
     
    11691169
    11701170/** Update service names for any partition whose index has changed. */
    1171 static int vbds_part_indices_update(vbds_disk_t *disk)
     1171static errno_t vbds_part_indices_update(vbds_disk_t *disk)
    11721172{
    11731173        label_part_info_t lpinfo;
    1174         int rc;
     1174        errno_t rc;
    11751175
    11761176        log_msg(LOG_DEFAULT, LVL_DEBUG, "vbds_part_indices_update()");
     
    12191219
    12201220/** Get block size wrapper for liblabel */
    1221 static int vbds_label_get_bsize(void *arg, size_t *bsize)
     1221static errno_t vbds_label_get_bsize(void *arg, size_t *bsize)
    12221222{
    12231223        vbds_disk_t *disk = (vbds_disk_t *)arg;
     
    12261226
    12271227/** Get number of blocks wrapper for liblabel */
    1228 static int vbds_label_get_nblocks(void *arg, aoff64_t *nblocks)
     1228static errno_t vbds_label_get_nblocks(void *arg, aoff64_t *nblocks)
    12291229{
    12301230        vbds_disk_t *disk = (vbds_disk_t *)arg;
     
    12331233
    12341234/** Read blocks wrapper for liblabel */
    1235 static int vbds_label_read(void *arg, aoff64_t ba, size_t cnt, void *buf)
     1235static errno_t vbds_label_read(void *arg, aoff64_t ba, size_t cnt, void *buf)
    12361236{
    12371237        vbds_disk_t *disk = (vbds_disk_t *)arg;
     
    12401240
    12411241/** Write blocks wrapper for liblabel */
    1242 static int vbds_label_write(void *arg, aoff64_t ba, size_t cnt, const void *data)
     1242static errno_t vbds_label_write(void *arg, aoff64_t ba, size_t cnt, const void *data)
    12431243{
    12441244        vbds_disk_t *disk = (vbds_disk_t *)arg;
Note: See TracChangeset for help on using the changeset viewer.