Changes in uspace/lib/fdisk/src/fdisk.c [395df52:fe8961d] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/fdisk/src/fdisk.c
r395df52 rfe8961d 35 35 36 36 #include <adt/list.h> 37 #include <cap.h> 37 38 #include <errno.h> 38 39 #include <fdisk.h> … … 218 219 } 219 220 220 int fdisk_dev_info_capacity(fdisk_dev_info_t *info, fdisk_cap_t *cap)221 int fdisk_dev_info_capacity(fdisk_dev_info_t *info, cap_spec_t *cap) 221 222 { 222 223 vbd_disk_info_t vinfo; … … 227 228 return EIO; 228 229 229 fdisk_cap_from_blocks(vinfo.nblocks, vinfo.block_size, cap);230 cap_from_blocks(vinfo.nblocks, vinfo.block_size, cap); 230 231 return EOK; 231 232 } … … 269 270 part->pcnt = vpinfo.pcnt; 270 271 part->fstype = vpinfo.fstype; 272 part->label = str_dup(vpinfo.label); 271 273 } 272 274 … … 293 295 dev->ext_part = part; 294 296 295 fdisk_cap_from_blocks(part->nblocks, dev->dinfo.block_size,297 cap_from_blocks(part->nblocks, dev->dinfo.block_size, 296 298 &part->capacity); 297 299 part->part_id = partid; … … 301 303 return EOK; 302 304 error: 305 if (part != NULL) 306 free(part->label); 303 307 free(part); 304 308 return rc; … … 315 319 if (link_used(&part->llog_ba)) 316 320 list_remove(&part->llog_ba); 321 322 free(part->label); 317 323 free(part); 318 324 } … … 530 536 } 531 537 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);538 int fdisk_dev_capacity(fdisk_dev_t *dev, cap_spec_t *cap) 539 { 540 cap_from_blocks(dev->dinfo.nblocks, dev->dinfo.block_size, cap); 535 541 return EOK; 536 542 } … … 667 673 info->fstype = part->fstype; 668 674 info->pkind = part->pkind; 675 info->label = part->label; 669 676 return EOK; 670 677 } 671 678 672 679 /** 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)680 int fdisk_part_get_max_avail(fdisk_dev_t *dev, fdisk_spc_t spc, cap_spec_t *cap) 674 681 { 675 682 int rc; … … 690 697 } 691 698 692 fdisk_cap_from_blocks(nb, dev->dinfo.block_size, cap);699 cap_from_blocks(nb, dev->dinfo.block_size, cap); 693 700 return EOK; 694 701 } … … 696 703 /** Get total free space capacity. */ 697 704 int fdisk_part_get_tot_avail(fdisk_dev_t *dev, fdisk_spc_t spc, 698 fdisk_cap_t *cap)705 cap_spec_t *cap) 699 706 { 700 707 fdisk_free_range_t fr; … … 718 725 } while (fdisk_free_range_next(&fr)); 719 726 720 fdisk_cap_from_blocks(totb, dev->dinfo.block_size, cap);727 cap_from_blocks(totb, dev->dinfo.block_size, cap); 721 728 return EOK; 722 729 } … … 725 732 fdisk_part_t **rpart) 726 733 { 727 fdisk_part_t *part ;734 fdisk_part_t *part = NULL; 728 735 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 : ""; 731 742 732 743 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 } 735 748 736 749 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 } 739 754 740 755 rc = fdisk_part_add(dev, partid, &part); 741 756 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; 745 759 } 746 760 747 761 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); 749 764 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 } 757 784 } 758 785 … … 760 787 *rpart = part; 761 788 return EOK; 789 error: 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; 762 796 } 763 797 … … 962 996 int rc; 963 997 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, 965 999 &nom_blocks); 966 1000 if (rc != EOK) 967 1001 return rc; 968 1002 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, 970 1004 &min_blocks); 971 1005 if (rc != EOK) 972 1006 return rc; 973 1007 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, 975 1009 &max_blocks); 976 1010 if (rc != EOK) … … 981 1015 max_blocks = fdisk_ba_align_up(dev, max_blocks); 982 1016 983 pcnt = -1;1017 pcnt = LPC_LIMIT; 984 1018 985 1019 switch (pspec->fstype) { … … 1000 1034 } 1001 1035 1002 if (pcnt < 0)1036 if (pcnt == LPC_LIMIT) 1003 1037 return EINVAL; 1004 1038 … … 1188 1222 } 1189 1223 1224 /** Get volume label support. */ 1225 int 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 1190 1231 /** @} 1191 1232 */
Note:
See TracChangeset
for help on using the changeset viewer.