Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/fdisk/src/fdisk.c

    r395df52 rfe8961d  
    3535
    3636#include <adt/list.h>
     37#include <cap.h>
    3738#include <errno.h>
    3839#include <fdisk.h>
     
    218219}
    219220
    220 int fdisk_dev_info_capacity(fdisk_dev_info_t *info, fdisk_cap_t *cap)
     221int fdisk_dev_info_capacity(fdisk_dev_info_t *info, cap_spec_t *cap)
    221222{
    222223        vbd_disk_info_t vinfo;
     
    227228                return EIO;
    228229
    229         fdisk_cap_from_blocks(vinfo.nblocks, vinfo.block_size, cap);
     230        cap_from_blocks(vinfo.nblocks, vinfo.block_size, cap);
    230231        return EOK;
    231232}
     
    269270                part->pcnt = vpinfo.pcnt;
    270271                part->fstype = vpinfo.fstype;
     272                part->label = str_dup(vpinfo.label);
    271273        }
    272274
     
    293295                dev->ext_part = part;
    294296
    295         fdisk_cap_from_blocks(part->nblocks, dev->dinfo.block_size,
     297        cap_from_blocks(part->nblocks, dev->dinfo.block_size,
    296298            &part->capacity);
    297299        part->part_id = partid;
     
    301303        return EOK;
    302304error:
     305        if (part != NULL)
     306                free(part->label);
    303307        free(part);
    304308        return rc;
     
    315319        if (link_used(&part->llog_ba))
    316320                list_remove(&part->llog_ba);
     321
     322        free(part->label);
    317323        free(part);
    318324}
     
    530536}
    531537
    532 int fdisk_dev_capacity(fdisk_dev_t *dev, fdisk_cap_t *cap)
    533 {
    534         fdisk_cap_from_blocks(dev->dinfo.nblocks, dev->dinfo.block_size, cap);
     538int fdisk_dev_capacity(fdisk_dev_t *dev, cap_spec_t *cap)
     539{
     540        cap_from_blocks(dev->dinfo.nblocks, dev->dinfo.block_size, cap);
    535541        return EOK;
    536542}
     
    667673        info->fstype = part->fstype;
    668674        info->pkind = part->pkind;
     675        info->label = part->label;
    669676        return EOK;
    670677}
    671678
    672679/** Get size of largest free block. */
    673 int fdisk_part_get_max_avail(fdisk_dev_t *dev, fdisk_spc_t spc, fdisk_cap_t *cap)
     680int fdisk_part_get_max_avail(fdisk_dev_t *dev, fdisk_spc_t spc, cap_spec_t *cap)
    674681{
    675682        int rc;
     
    690697        }
    691698
    692         fdisk_cap_from_blocks(nb, dev->dinfo.block_size, cap);
     699        cap_from_blocks(nb, dev->dinfo.block_size, cap);
    693700        return EOK;
    694701}
     
    696703/** Get total free space capacity. */
    697704int fdisk_part_get_tot_avail(fdisk_dev_t *dev, fdisk_spc_t spc,
    698     fdisk_cap_t *cap)
     705    cap_spec_t *cap)
    699706{
    700707        fdisk_free_range_t fr;
     
    718725        } while (fdisk_free_range_next(&fr));
    719726
    720         fdisk_cap_from_blocks(totb, dev->dinfo.block_size, cap);
     727        cap_from_blocks(totb, dev->dinfo.block_size, cap);
    721728        return EOK;
    722729}
     
    725732    fdisk_part_t **rpart)
    726733{
    727         fdisk_part_t *part;
     734        fdisk_part_t *part = NULL;
    728735        vbd_part_spec_t vpspec;
    729         vbd_part_id_t partid;
    730         int rc;
     736        vbd_part_id_t partid = 0;
     737        vol_part_info_t vpinfo;
     738        const char *label;
     739        int rc;
     740
     741        label = pspec->label != NULL ? pspec->label : "";
    731742
    732743        rc = fdisk_part_spec_prepare(dev, pspec, &vpspec);
    733         if (rc != EOK)
    734                 return EIO;
     744        if (rc != EOK) {
     745                rc = EIO;
     746                goto error;
     747        }
    735748
    736749        rc = vbd_part_create(dev->fdisk->vbd, dev->sid, &vpspec, &partid);
    737         if (rc != EOK)
    738                 return EIO;
     750        if (rc != EOK) {
     751                rc = EIO;
     752                goto error;
     753        }
    739754
    740755        rc = fdisk_part_add(dev, partid, &part);
    741756        if (rc != EOK) {
    742                 /* Try rolling back */
    743                 (void) vbd_part_delete(dev->fdisk->vbd, partid);
    744                 return EIO;
     757                rc = EIO;
     758                goto error;
    745759        }
    746760
    747761        if (part->svc_id != 0) {
    748                 rc = vol_part_mkfs(dev->fdisk->vol, part->svc_id, pspec->fstype);
     762                rc = vol_part_mkfs(dev->fdisk->vol, part->svc_id, pspec->fstype,
     763                    label);
    749764                if (rc != EOK && rc != ENOTSUP) {
    750                         fdisk_part_remove(part);
    751                         (void) vbd_part_delete(dev->fdisk->vbd, partid);
    752                         return EIO;
    753                 }
    754 
    755                 part->pcnt = vpc_fs;
    756                 part->fstype = pspec->fstype;
     765                        rc = EIO;
     766                        goto error;
     767                }
     768
     769                /* Get the real label value */
     770                rc = vol_part_info(dev->fdisk->vol, part->svc_id, &vpinfo);
     771                if (rc != EOK) {
     772                        rc = EIO;
     773                        goto error;
     774                }
     775
     776                part->pcnt = vpinfo.pcnt;
     777                part->fstype = vpinfo.fstype;
     778                part->label = str_dup(vpinfo.label);
     779
     780                if (part->label == NULL) {
     781                        rc = EIO;
     782                        goto error;
     783                }
    757784        }
    758785
     
    760787                *rpart = part;
    761788        return EOK;
     789error:
     790        /* Try rolling back */
     791        if (part != NULL)
     792                fdisk_part_remove(part);
     793        if (partid != 0)
     794                (void) vbd_part_delete(dev->fdisk->vbd, partid);
     795        return rc;
    762796}
    763797
     
    962996        int rc;
    963997
    964         rc = fdisk_cap_to_blocks(&pspec->capacity, fcv_nom, dev->dinfo.block_size,
     998        rc = cap_to_blocks(&pspec->capacity, cv_nom, dev->dinfo.block_size,
    965999            &nom_blocks);
    9661000        if (rc != EOK)
    9671001                return rc;
    9681002
    969         rc = fdisk_cap_to_blocks(&pspec->capacity, fcv_min, dev->dinfo.block_size,
     1003        rc = cap_to_blocks(&pspec->capacity, cv_min, dev->dinfo.block_size,
    9701004            &min_blocks);
    9711005        if (rc != EOK)
    9721006                return rc;
    9731007
    974         rc = fdisk_cap_to_blocks(&pspec->capacity, fcv_max, dev->dinfo.block_size,
     1008        rc = cap_to_blocks(&pspec->capacity, cv_max, dev->dinfo.block_size,
    9751009            &max_blocks);
    9761010        if (rc != EOK)
     
    9811015        max_blocks = fdisk_ba_align_up(dev, max_blocks);
    9821016
    983         pcnt = -1;
     1017        pcnt = LPC_LIMIT;
    9841018
    9851019        switch (pspec->fstype) {
     
    10001034        }
    10011035
    1002         if (pcnt < 0)
     1036        if (pcnt == LPC_LIMIT)
    10031037                return EINVAL;
    10041038
     
    11881222}
    11891223
     1224/** Get volume label support. */
     1225int fdisk_get_vollabel_support(fdisk_dev_t *dev, vol_fstype_t fstype,
     1226    vol_label_supp_t *vlsupp)
     1227{
     1228        return vol_part_get_lsupp(dev->fdisk->vol, fstype, vlsupp);
     1229}
     1230
    11901231/** @}
    11911232 */
Note: See TracChangeset for help on using the changeset viewer.