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


Ignore:
Timestamp:
2015-07-02T19:01:37Z (10 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
6a0d4ce2
Parents:
3faa03d
Message:

Propagate label and partition block ranges and other info up through the stack.

File:
1 edited

Legend:

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

    r3faa03d r1626cd4  
    268268int vbds_disk_info(service_id_t sid, vbds_disk_info_t *info)
    269269{
     270        vbds_disk_t *disk;
     271        label_info_t linfo;
     272        int rc;
     273
    270274        log_msg(LOG_DEFAULT, LVL_NOTE, "vbds_disk_info(%zu)", sid);
    271         info->ltype = lt_mbr;
    272         return EOK;
    273 }
     275
     276        rc = vbds_disk_by_svcid(sid, &disk);
     277        if (rc != EOK)
     278                return rc;
     279
     280        rc = label_get_info(disk->label, &linfo);
     281
     282        info->ltype = linfo.ltype;
     283        info->ablock0 = linfo.ablock0;
     284        info->anblocks = linfo.anblocks;
     285        info->block_size = disk->block_size;
     286        return EOK;
     287}
     288
     289int vbds_get_parts(service_id_t sid, service_id_t *id_buf, size_t buf_size,
     290    size_t *act_size)
     291{
     292        vbds_disk_t *disk;
     293        size_t act_cnt;
     294        size_t buf_cnt;
     295        int rc;
     296
     297        rc = vbds_disk_by_svcid(sid, &disk);
     298        if (rc != EOK)
     299                return rc;
     300
     301        buf_cnt = buf_size / sizeof(service_id_t);
     302
     303        act_cnt = list_count(&disk->parts);
     304        *act_size = act_cnt * sizeof(service_id_t);
     305
     306        if (buf_size % sizeof(service_id_t) != 0)
     307                return EINVAL;
     308
     309        size_t pos = 0;
     310        list_foreach(disk->parts, ldisk, vbds_part_t, part) {
     311                if (pos < buf_cnt)
     312                        id_buf[pos] = part->id;
     313                pos++;
     314        }
     315
     316        return EOK;
     317}
     318
    274319
    275320int vbds_label_create(service_id_t sid, label_type_t ltype)
     
    328373{
    329374        vbds_part_t *part;
     375        label_part_info_t lpinfo;
    330376        int rc;
    331377
     
    334380                return rc;
    335381
     382        label_part_get_info(part->lpart, &lpinfo);
     383
     384        pinfo->index = lpinfo.index;
     385        pinfo->block0 = lpinfo.block0;
     386        pinfo->nblocks = lpinfo.nblocks;
    336387        return EOK;
    337388}
Note: See TracChangeset for help on using the changeset viewer.