Changeset 95c675b in mainline for uspace/srv/bd/vbd/disk.c
- Timestamp:
- 2017-10-17T13:11:35Z (8 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 60af4cdb
- Parents:
- dbf32b1 (diff), a416d070 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)links above to see all the changes relative to each parent. - File:
-
- 1 edited
-
uspace/srv/bd/vbd/disk.c (modified) (14 diffs)
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/bd/vbd/disk.c
rdbf32b1 r95c675b 39 39 #include <errno.h> 40 40 #include <io/log.h> 41 #include <label/empty.h> 42 #include <label/label.h> 41 43 #include <loc.h> 42 44 #include <stdio.h> … … 75 77 static vbd_part_id_t vbds_part_id = 1; 76 78 79 static int vbds_label_get_bsize(void *, size_t *); 80 static int vbds_label_get_nblocks(void *, aoff64_t *); 81 static int vbds_label_read(void *, aoff64_t, size_t, void *); 82 static int vbds_label_write(void *, aoff64_t, size_t, const void *); 83 84 /** Block device operations provided by VBD */ 77 85 static bd_ops_t vbds_bd_ops = { 78 86 .open = vbds_bd_open, … … 83 91 .get_block_size = vbds_bd_get_block_size, 84 92 .get_num_blocks = vbds_bd_get_num_blocks 93 }; 94 95 /** Provide disk access to liblabel */ 96 static label_bd_ops_t vbds_label_bd_ops = { 97 .get_bsize = vbds_label_get_bsize, 98 .get_nblocks = vbds_label_get_nblocks, 99 .read = vbds_label_read, 100 .write = vbds_label_write 85 101 }; 86 102 … … 450 466 { 451 467 label_t *label = NULL; 468 label_bd_t lbd; 452 469 vbds_disk_t *disk = NULL; 453 470 bool block_inited = false; … … 467 484 return ENOMEM; 468 485 486 /* Must be set before calling label_open */ 487 disk->svc_id = sid; 488 469 489 rc = loc_service_get_name(sid, &disk->svc_name); 470 490 if (rc != EOK) { … … 501 521 block_inited = true; 502 522 503 rc = label_open(sid, &label); 523 lbd.ops = &vbds_label_bd_ops; 524 lbd.arg = (void *) disk; 525 526 rc = label_open(&lbd, &label); 504 527 if (rc != EOK) { 505 528 log_msg(LOG_DEFAULT, LVL_ERROR, "Failed to open label in disk %s.", … … 509 532 } 510 533 511 disk->svc_id = sid;512 534 disk->label = label; 513 535 disk->block_size = block_size; … … 648 670 { 649 671 label_t *label; 672 label_bd_t lbd; 650 673 label_info_t linfo; 651 674 vbds_disk_t *disk; … … 683 706 log_msg(LOG_DEFAULT, LVL_DEBUG, "vbds_label_create(%zu) - label_create", sid); 684 707 685 rc = label_create(sid, ltype, &label); 708 lbd.ops = &vbds_label_bd_ops; 709 lbd.arg = (void *) disk; 710 711 rc = label_create(&lbd, ltype, &label); 686 712 if (rc != EOK) 687 713 goto error; … … 695 721 log_msg(LOG_DEFAULT, LVL_DEBUG, "vbds_label_create(%zu) - failure", sid); 696 722 if (disk->label == NULL) { 697 rc2 = label_open(sid, &label); 723 lbd.ops = &vbds_label_bd_ops; 724 lbd.arg = (void *) disk; 725 726 rc2 = label_open(&lbd, &label); 698 727 if (rc2 != EOK) { 699 728 log_msg(LOG_DEFAULT, LVL_ERROR, "Failed to open label in disk %s.", … … 713 742 vbds_disk_t *disk; 714 743 label_t *label; 744 label_bd_t lbd; 715 745 int rc; 716 746 … … 735 765 disk->label = NULL; 736 766 737 rc = label_open(disk->svc_id, &label); 767 lbd.ops = &vbds_label_bd_ops; 768 lbd.arg = (void *) disk; 769 770 rc = label_open(&lbd, &label); 738 771 if (rc != EOK) { 739 772 log_msg(LOG_DEFAULT, LVL_ERROR, "Failed to open label in disk %s.", … … 811 844 if (rc != EOK) { 812 845 log_msg(LOG_DEFAULT, LVL_ERROR, "Error creating partition."); 846 goto error; 847 } 848 849 rc = label_part_empty(lpart); 850 if (rc != EOK) { 851 log_msg(LOG_DEFAULT, LVL_ERROR, "Error emptying partition."); 813 852 goto error; 814 853 } … … 1179 1218 } 1180 1219 1220 /** Get block size wrapper for liblabel */ 1221 static int vbds_label_get_bsize(void *arg, size_t *bsize) 1222 { 1223 vbds_disk_t *disk = (vbds_disk_t *)arg; 1224 return block_get_bsize(disk->svc_id, bsize); 1225 } 1226 1227 /** Get number of blocks wrapper for liblabel */ 1228 static int vbds_label_get_nblocks(void *arg, aoff64_t *nblocks) 1229 { 1230 vbds_disk_t *disk = (vbds_disk_t *)arg; 1231 return block_get_nblocks(disk->svc_id, nblocks); 1232 } 1233 1234 /** Read blocks wrapper for liblabel */ 1235 static int vbds_label_read(void *arg, aoff64_t ba, size_t cnt, void *buf) 1236 { 1237 vbds_disk_t *disk = (vbds_disk_t *)arg; 1238 return block_read_direct(disk->svc_id, ba, cnt, buf); 1239 } 1240 1241 /** Write blocks wrapper for liblabel */ 1242 static int vbds_label_write(void *arg, aoff64_t ba, size_t cnt, const void *data) 1243 { 1244 vbds_disk_t *disk = (vbds_disk_t *)arg; 1245 return block_write_direct(disk->svc_id, ba, cnt, data); 1246 } 1247 1181 1248 /** @} 1182 1249 */
Note:
See TracChangeset
for help on using the changeset viewer.
