Changeset 9c2c7d2 in mainline for uspace/lib
- Timestamp:
- 2017-07-06T15:52:15Z (8 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 5cd1eb9a
- Parents:
- d858a660
- Location:
- uspace/lib
- Files:
-
- 7 edited
-
c/generic/vol.c (modified) (2 diffs)
-
c/include/ipc/vol.h (modified) (1 diff)
-
c/include/types/vol.h (modified) (2 diffs)
-
c/include/vol.h (modified) (1 diff)
-
fdisk/include/fdisk.h (modified) (2 diffs)
-
fdisk/include/types/fdisk.h (modified) (2 diffs)
-
fdisk/src/fdisk.c (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/c/generic/vol.c
rd858a660 r9c2c7d2 39 39 #include <loc.h> 40 40 #include <stdlib.h> 41 #include <str.h> 41 42 #include <vol.h> 42 43 … … 251 252 } 252 253 254 /** Get volume label support. */ 255 int vol_part_get_lsupp(vol_t *vol, vol_fstype_t fstype, 256 vol_label_supp_t *vlsupp) 257 { 258 async_exch_t *exch; 259 sysarg_t retval; 260 ipc_call_t answer; 261 262 exch = async_exchange_begin(vol->sess); 263 aid_t req = async_send_1(exch, VOL_PART_LSUPP, fstype, &answer); 264 int rc = async_data_read_start(exch, vlsupp, sizeof(vol_label_supp_t)); 265 async_exchange_end(exch); 266 267 if (rc != EOK) { 268 async_forget(req); 269 return EIO; 270 } 271 272 async_wait_for(req, &retval); 273 if (retval != EOK) 274 return EIO; 275 276 return EOK; 277 } 278 253 279 /** Create file system. */ 254 int vol_part_mkfs(vol_t *vol, service_id_t sid, vol_fstype_t fstype) 255 { 256 async_exch_t *exch; 257 int retval; 258 259 exch = async_exchange_begin(vol->sess); 260 retval = async_req_2_0(exch, VOL_PART_MKFS, sid, fstype); 261 async_exchange_end(exch); 280 int vol_part_mkfs(vol_t *vol, service_id_t sid, vol_fstype_t fstype, 281 const char *label) 282 { 283 async_exch_t *exch; 284 ipc_call_t answer; 285 sysarg_t retval; 286 287 exch = async_exchange_begin(vol->sess); 288 aid_t req = async_send_2(exch, VOL_PART_MKFS, sid, fstype, &answer); 289 retval = async_data_write_start(exch, label, str_size(label)); 290 async_exchange_end(exch); 291 292 if (retval != EOK) { 293 async_forget(req); 294 return retval; 295 } 296 297 async_wait_for(req, &retval); 262 298 263 299 if (retval != EOK) -
uspace/lib/c/include/ipc/vol.h
rd858a660 r9c2c7d2 43 43 VOL_PART_INFO, 44 44 VOL_PART_EMPTY, 45 VOL_PART_MKFS 45 VOL_PART_LSUPP, 46 VOL_PART_MKFS, 46 47 } vol_request_t; 47 48 -
uspace/lib/c/include/types/vol.h
rd858a660 r9c2c7d2 38 38 #include <async.h> 39 39 #include <ipc/vol.h> 40 #include <stdbool.h> 40 41 41 42 typedef enum { … … 76 77 } vol_part_info_t; 77 78 79 /** Volume label support */ 80 typedef struct { 81 /** Volume labels are supported */ 82 bool supported; 83 } vol_label_supp_t; 84 78 85 #endif 79 86 -
uspace/lib/c/include/vol.h
rd858a660 r9c2c7d2 48 48 extern int vol_part_info(vol_t *, service_id_t, vol_part_info_t *); 49 49 extern int vol_part_empty(vol_t *, service_id_t); 50 extern int vol_part_mkfs(vol_t *, service_id_t, vol_fstype_t); 50 extern int vol_part_get_lsupp(vol_t *, vol_fstype_t, vol_label_supp_t *); 51 extern int vol_part_mkfs(vol_t *, service_id_t, vol_fstype_t, const char *); 51 52 52 53 #endif -
uspace/lib/fdisk/include/fdisk.h
rd858a660 r9c2c7d2 39 39 #include <loc.h> 40 40 #include <types/fdisk.h> 41 #include <types/vol.h> 41 42 42 43 extern int fdisk_create(fdisk_t **); … … 81 82 extern int fdisk_pkind_format(label_pkind_t, char **); 82 83 84 extern int fdisk_get_vollabel_support(fdisk_dev_t *, vol_fstype_t, 85 vol_label_supp_t *); 86 83 87 #endif 84 88 -
uspace/lib/fdisk/include/types/fdisk.h
rd858a660 r9c2c7d2 43 43 #include <types/vol.h> 44 44 #include <vbd.h> 45 #include <vol.h>46 45 47 46 /** Capacity unit */ … … 199 198 /** File system type */ 200 199 vol_fstype_t fstype; 200 /** Volume label */ 201 char *label; 201 202 } fdisk_part_spec_t; 202 203 -
uspace/lib/fdisk/src/fdisk.c
rd858a660 r9c2c7d2 731 731 fdisk_part_t **rpart) 732 732 { 733 fdisk_part_t *part ;733 fdisk_part_t *part = NULL; 734 734 vbd_part_spec_t vpspec; 735 vbd_part_id_t partid; 736 int rc; 735 vbd_part_id_t partid = 0; 736 vol_part_info_t vpinfo; 737 char *label; 738 int rc; 739 740 label = str_dup(pspec->label); 741 if (label == NULL) 742 return ENOMEM; 737 743 738 744 rc = fdisk_part_spec_prepare(dev, pspec, &vpspec); 739 if (rc != EOK) 740 return EIO; 745 if (rc != EOK) { 746 rc = EIO; 747 goto error; 748 } 741 749 742 750 rc = vbd_part_create(dev->fdisk->vbd, dev->sid, &vpspec, &partid); 743 if (rc != EOK) 744 return EIO; 751 if (rc != EOK) { 752 rc = EIO; 753 goto error; 754 } 745 755 746 756 rc = fdisk_part_add(dev, partid, &part); 747 757 if (rc != EOK) { 748 /* Try rolling back */ 749 (void) vbd_part_delete(dev->fdisk->vbd, partid); 750 return EIO; 758 rc = EIO; 759 goto error; 751 760 } 752 761 753 762 if (part->svc_id != 0) { 754 rc = vol_part_mkfs(dev->fdisk->vol, part->svc_id, pspec->fstype); 763 rc = vol_part_mkfs(dev->fdisk->vol, part->svc_id, pspec->fstype, 764 pspec->label); 755 765 if (rc != EOK && rc != ENOTSUP) { 756 fdisk_part_remove(part); 757 (void) vbd_part_delete(dev->fdisk->vbd, partid); 758 return EIO; 759 } 760 761 part->pcnt = vpc_fs; 762 part->fstype = pspec->fstype; 766 rc = EIO; 767 goto error; 768 } 769 770 /* Get the real label value */ 771 rc = vol_part_info(dev->fdisk->vol, part->svc_id, &vpinfo); 772 if (rc != EOK) { 773 rc = EIO; 774 goto error; 775 } 776 777 part->pcnt = vpinfo.pcnt; 778 part->fstype = vpinfo.fstype; 779 part->label = str_dup(vpinfo.label); 780 781 if (part->label == NULL) { 782 rc = EIO; 783 goto error; 784 } 763 785 } 764 786 … … 766 788 *rpart = part; 767 789 return EOK; 790 error: 791 /* Try rolling back */ 792 if (part != NULL) 793 fdisk_part_remove(part); 794 if (partid != 0) 795 (void) vbd_part_delete(dev->fdisk->vbd, partid); 796 return rc; 768 797 } 769 798 … … 1194 1223 } 1195 1224 1225 /** Get volume label support. */ 1226 int fdisk_get_vollabel_support(fdisk_dev_t *dev, vol_fstype_t fstype, 1227 vol_label_supp_t *vlsupp) 1228 { 1229 return vol_part_get_lsupp(dev->fdisk->vol, fstype, vlsupp); 1230 } 1231 1196 1232 /** @} 1197 1233 */
Note:
See TracChangeset
for help on using the changeset viewer.
