Changeset deacc58d in mainline for uspace/srv/bd/vbd/disk.c


Ignore:
Timestamp:
2017-06-20T17:34:02Z (7 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
80da8f70
Parents:
63e27ef
Message:

Break liblabel dependency on libblock.

File:
1 edited

Legend:

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

    r63e27ef rdeacc58d  
    7575static vbd_part_id_t vbds_part_id = 1;
    7676
     77static int vbds_label_get_bsize(void *, size_t *);
     78static int vbds_label_get_nblocks(void *, aoff64_t *);
     79static int vbds_label_read(void *, aoff64_t, size_t, void *);
     80static int vbds_label_write(void *, aoff64_t, size_t, const void *);
     81
     82/** Block device operations provided by VBD */
    7783static bd_ops_t vbds_bd_ops = {
    7884        .open = vbds_bd_open,
     
    8389        .get_block_size = vbds_bd_get_block_size,
    8490        .get_num_blocks = vbds_bd_get_num_blocks
     91};
     92
     93/** Provide disk access to liblabel */
     94static label_bd_ops_t vbds_label_bd_ops = {
     95        .get_bsize = vbds_label_get_bsize,
     96        .get_nblocks = vbds_label_get_nblocks,
     97        .read = vbds_label_read,
     98        .write = vbds_label_write
    8599};
    86100
     
    450464{
    451465        label_t *label = NULL;
     466        label_bd_t lbd;
    452467        vbds_disk_t *disk = NULL;
    453468        bool block_inited = false;
     
    467482                return ENOMEM;
    468483
     484        /* Must be set before calling label_open */
     485        disk->svc_id = sid;
     486
    469487        rc = loc_service_get_name(sid, &disk->svc_name);
    470488        if (rc != EOK) {
     
    501519        block_inited = true;
    502520
    503         rc = label_open(sid, &label);
     521        lbd.ops = &vbds_label_bd_ops;
     522        lbd.arg = (void *) disk;
     523
     524        rc = label_open(&lbd, &label);
    504525        if (rc != EOK) {
    505526                log_msg(LOG_DEFAULT, LVL_ERROR, "Failed to open label in disk %s.",
     
    509530        }
    510531
    511         disk->svc_id = sid;
    512532        disk->label = label;
    513533        disk->block_size = block_size;
     
    648668{
    649669        label_t *label;
     670        label_bd_t lbd;
    650671        label_info_t linfo;
    651672        vbds_disk_t *disk;
     
    683704        log_msg(LOG_DEFAULT, LVL_DEBUG, "vbds_label_create(%zu) - label_create", sid);
    684705
    685         rc = label_create(sid, ltype, &label);
     706        lbd.ops = &vbds_label_bd_ops;
     707        lbd.arg = (void *) disk;
     708
     709        rc = label_create(&lbd, ltype, &label);
    686710        if (rc != EOK)
    687711                goto error;
     
    695719        log_msg(LOG_DEFAULT, LVL_DEBUG, "vbds_label_create(%zu) - failure", sid);
    696720        if (disk->label == NULL) {
    697                 rc2 = label_open(sid, &label);
     721                lbd.ops = &vbds_label_bd_ops;
     722                lbd.arg = (void *) disk;
     723
     724                rc2 = label_open(&lbd, &label);
    698725                if (rc2 != EOK) {
    699726                        log_msg(LOG_DEFAULT, LVL_ERROR, "Failed to open label in disk %s.",
     
    713740        vbds_disk_t *disk;
    714741        label_t *label;
     742        label_bd_t lbd;
    715743        int rc;
    716744
     
    735763        disk->label = NULL;
    736764
    737         rc = label_open(disk->svc_id, &label);
     765        lbd.ops = &vbds_label_bd_ops;
     766        lbd.arg = (void *) disk;
     767
     768        rc = label_open(&lbd, &label);
    738769        if (rc != EOK) {
    739770                log_msg(LOG_DEFAULT, LVL_ERROR, "Failed to open label in disk %s.",
     
    11791210}
    11801211
     1212/** Get block size wrapper for liblabel */
     1213static int vbds_label_get_bsize(void *arg, size_t *bsize)
     1214{
     1215        vbds_disk_t *disk = (vbds_disk_t *)arg;
     1216        return block_get_bsize(disk->svc_id, bsize);
     1217}
     1218
     1219/** Get number of blocks wrapper for liblabel */
     1220static int vbds_label_get_nblocks(void *arg, aoff64_t *nblocks)
     1221{
     1222        vbds_disk_t *disk = (vbds_disk_t *)arg;
     1223        return block_get_nblocks(disk->svc_id, nblocks);
     1224}
     1225
     1226/** Read blocks wrapper for liblabel */
     1227static int vbds_label_read(void *arg, aoff64_t ba, size_t cnt, void *buf)
     1228{
     1229        vbds_disk_t *disk = (vbds_disk_t *)arg;
     1230        return block_read_direct(disk->svc_id, ba, cnt, buf);
     1231}
     1232
     1233/** Write blocks wrapper for liblabel */
     1234static int vbds_label_write(void *arg, aoff64_t ba, size_t cnt, const void *data)
     1235{
     1236        vbds_disk_t *disk = (vbds_disk_t *)arg;
     1237        return block_write_direct(disk->svc_id, ba, cnt, data);
     1238}
     1239
    11811240/** @}
    11821241 */
Note: See TracChangeset for help on using the changeset viewer.