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


Ignore:
Timestamp:
2015-07-02T21:53:12Z (9 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
99c23405
Parents:
6a0d4ce2
Message:

Allocate and create partition with libfdisk (except actual modification of on-disk label).

File:
1 edited

Legend:

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

    r6a0d4ce2 r6bc542b  
    112112}
    113113
    114 static int vbds_part_add(vbds_disk_t *disk, label_part_t *lpart)
     114static int vbds_part_add(vbds_disk_t *disk, label_part_t *lpart,
     115    vbds_part_t **rpart)
    115116{
    116117        vbds_part_t *part;
     
    163164        list_append(&part->lparts, &vbds_parts);
    164165
     166        if (rpart != NULL)
     167                *rpart = part;
    165168        return EOK;
    166169}
     
    230233        part = label_part_first(label);
    231234        while (part != NULL) {
    232                 rc = vbds_part_add(disk, part);
     235                rc = vbds_part_add(disk, part, NULL);
    233236                if (rc != EOK) {
    234237                        log_msg(LOG_DEFAULT, LVL_ERROR, "Failed adding partitio "
     
    389392}
    390393
    391 int vbds_part_create(service_id_t sid, vbds_part_id_t *rpart)
     394int vbds_part_create(service_id_t sid, vbd_part_spec_t *pspec,
     395    vbds_part_id_t *rpart)
    392396{
    393397        vbds_disk_t *disk;
    394398        vbds_part_t *part;
    395         label_part_spec_t pspec;
     399        label_part_spec_t lpspec;
    396400        label_part_t *lpart;
    397401        int rc;
    398 
    399         part = calloc(1, sizeof(vbds_part_t));
    400         if (part == NULL)
    401                 return ENOMEM;
    402402
    403403        rc = vbds_disk_by_svcid(sid, &disk);
     
    408408        }
    409409
    410         label_pspec_init(&pspec);
    411         rc = label_part_create(disk->label, &pspec, &lpart);
     410        label_pspec_init(&lpspec);
     411        lpspec.index = pspec->index;
     412        lpspec.block0 = pspec->block0;
     413        lpspec.nblocks = pspec->nblocks;
     414        lpspec.ptype = pspec->ptype;
     415
     416        rc = label_part_create(disk->label, &lpspec, &lpart);
    412417        if (rc != EOK) {
    413418                log_msg(LOG_DEFAULT, LVL_ERROR, "Error creating partition.");
     
    415420        }
    416421
    417         rc = vbds_part_add(disk, lpart);
     422        rc = vbds_part_add(disk, lpart, &part);
    418423        if (rc != EOK) {
    419424                log_msg(LOG_DEFAULT, LVL_ERROR, "Failed while creating "
     
    427432        }
    428433
     434        if (rpart != NULL)
     435                *rpart = part->id;
    429436        return EOK;
    430437error:
    431         free(part);
    432438        return rc;
    433439}
Note: See TracChangeset for help on using the changeset viewer.