Changeset 99c23405 in mainline for uspace/srv/bd/vbd/disk.c
- Timestamp:
- 2015-07-04T15:18:06Z (10 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 603c1d1f
- Parents:
- 6bc542b
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/bd/vbd/disk.c
r6bc542b r99c23405 112 112 } 113 113 114 /** Add partition to our inventory based on liblabel partition structure */ 114 115 static int vbds_part_add(vbds_disk_t *disk, label_part_t *lpart, 115 116 vbds_part_t **rpart) … … 119 120 label_part_info_t lpinfo; 120 121 char *name; 121 int pno;122 122 int rc; 123 123 … … 132 132 133 133 /* XXX Proper service name */ 134 pno = list_count(&disk->parts); 135 rc = asprintf(&name, "%sp%u", disk->svc_name, pno); 134 rc = asprintf(&name, "%sp%u", disk->svc_name, lpart->index); 136 135 if (rc < 0) { 137 136 log_msg(LOG_DEFAULT, LVL_ERROR, "Out of memory."); … … 166 165 if (rpart != NULL) 167 166 *rpart = part; 167 return EOK; 168 } 169 170 /** Remove partition from our inventory leaving only the underlying liblabel 171 * partition structure. 172 */ 173 static int vbds_part_remove(vbds_part_t *part, label_part_t **rlpart) 174 { 175 label_part_t *lpart; 176 int rc; 177 178 log_msg(LOG_DEFAULT, LVL_NOTE, "vbds_part_remove(%p)", part); 179 180 lpart = part->lpart; 181 182 if (part->open_cnt > 0) 183 return EBUSY; 184 185 rc = loc_service_unregister((service_id_t)part->id); 186 if (rc != EOK) 187 return EIO; 188 189 list_remove(&part->ldisk); 190 list_remove(&part->lparts); 191 free(part); 192 193 if (rlpart != NULL) 194 *rlpart = lpart; 168 195 return EOK; 169 196 } … … 442 469 { 443 470 vbds_part_t *part; 471 vbds_disk_t *disk; 472 label_part_t *lpart; 444 473 int rc; 445 474 … … 448 477 return rc; 449 478 450 rc = label_part_destroy(part->lpart); 451 if (rc != EOK) 452 return rc; 453 454 list_remove(&part->ldisk); 455 list_remove(&part->lparts); 456 free(part); 479 disk = part->disk; 480 481 rc = vbds_part_remove(part, &lpart); 482 if (rc != EOK) 483 return rc; 484 485 rc = label_part_destroy(lpart); 486 if (rc != EOK) { 487 log_msg(LOG_DEFAULT, LVL_ERROR, "Failed deleting partition"); 488 489 /* Try rolling back */ 490 rc = vbds_part_add(disk, lpart, NULL); 491 if (rc != EOK) 492 log_msg(LOG_DEFAULT, LVL_ERROR, "Failed rolling back."); 493 494 return EIO; 495 } 496 457 497 return EOK; 458 498 }
Note:
See TracChangeset
for help on using the changeset viewer.