Changeset deacc58d in mainline for uspace/srv/bd/vbd/disk.c
- Timestamp:
- 2017-06-20T17:34:02Z (8 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 80da8f70
- Parents:
- 63e27ef
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/bd/vbd/disk.c
r63e27ef rdeacc58d 75 75 static vbd_part_id_t vbds_part_id = 1; 76 76 77 static int vbds_label_get_bsize(void *, size_t *); 78 static int vbds_label_get_nblocks(void *, aoff64_t *); 79 static int vbds_label_read(void *, aoff64_t, size_t, void *); 80 static int vbds_label_write(void *, aoff64_t, size_t, const void *); 81 82 /** Block device operations provided by VBD */ 77 83 static bd_ops_t vbds_bd_ops = { 78 84 .open = vbds_bd_open, … … 83 89 .get_block_size = vbds_bd_get_block_size, 84 90 .get_num_blocks = vbds_bd_get_num_blocks 91 }; 92 93 /** Provide disk access to liblabel */ 94 static label_bd_ops_t vbds_label_bd_ops = { 95 .get_bsize = vbds_label_get_bsize, 96 .get_nblocks = vbds_label_get_nblocks, 97 .read = vbds_label_read, 98 .write = vbds_label_write 85 99 }; 86 100 … … 450 464 { 451 465 label_t *label = NULL; 466 label_bd_t lbd; 452 467 vbds_disk_t *disk = NULL; 453 468 bool block_inited = false; … … 467 482 return ENOMEM; 468 483 484 /* Must be set before calling label_open */ 485 disk->svc_id = sid; 486 469 487 rc = loc_service_get_name(sid, &disk->svc_name); 470 488 if (rc != EOK) { … … 501 519 block_inited = true; 502 520 503 rc = label_open(sid, &label); 521 lbd.ops = &vbds_label_bd_ops; 522 lbd.arg = (void *) disk; 523 524 rc = label_open(&lbd, &label); 504 525 if (rc != EOK) { 505 526 log_msg(LOG_DEFAULT, LVL_ERROR, "Failed to open label in disk %s.", … … 509 530 } 510 531 511 disk->svc_id = sid;512 532 disk->label = label; 513 533 disk->block_size = block_size; … … 648 668 { 649 669 label_t *label; 670 label_bd_t lbd; 650 671 label_info_t linfo; 651 672 vbds_disk_t *disk; … … 683 704 log_msg(LOG_DEFAULT, LVL_DEBUG, "vbds_label_create(%zu) - label_create", sid); 684 705 685 rc = label_create(sid, ltype, &label); 706 lbd.ops = &vbds_label_bd_ops; 707 lbd.arg = (void *) disk; 708 709 rc = label_create(&lbd, ltype, &label); 686 710 if (rc != EOK) 687 711 goto error; … … 695 719 log_msg(LOG_DEFAULT, LVL_DEBUG, "vbds_label_create(%zu) - failure", sid); 696 720 if (disk->label == NULL) { 697 rc2 = label_open(sid, &label); 721 lbd.ops = &vbds_label_bd_ops; 722 lbd.arg = (void *) disk; 723 724 rc2 = label_open(&lbd, &label); 698 725 if (rc2 != EOK) { 699 726 log_msg(LOG_DEFAULT, LVL_ERROR, "Failed to open label in disk %s.", … … 713 740 vbds_disk_t *disk; 714 741 label_t *label; 742 label_bd_t lbd; 715 743 int rc; 716 744 … … 735 763 disk->label = NULL; 736 764 737 rc = label_open(disk->svc_id, &label); 765 lbd.ops = &vbds_label_bd_ops; 766 lbd.arg = (void *) disk; 767 768 rc = label_open(&lbd, &label); 738 769 if (rc != EOK) { 739 770 log_msg(LOG_DEFAULT, LVL_ERROR, "Failed to open label in disk %s.", … … 1179 1210 } 1180 1211 1212 /** Get block size wrapper for liblabel */ 1213 static int vbds_label_get_bsize(void *arg, size_t *bsize) 1214 { 1215 vbds_disk_t *disk = (vbds_disk_t *)arg; 1216 return block_get_bsize(disk->svc_id, bsize); 1217 } 1218 1219 /** Get number of blocks wrapper for liblabel */ 1220 static int vbds_label_get_nblocks(void *arg, aoff64_t *nblocks) 1221 { 1222 vbds_disk_t *disk = (vbds_disk_t *)arg; 1223 return block_get_nblocks(disk->svc_id, nblocks); 1224 } 1225 1226 /** Read blocks wrapper for liblabel */ 1227 static int vbds_label_read(void *arg, aoff64_t ba, size_t cnt, void *buf) 1228 { 1229 vbds_disk_t *disk = (vbds_disk_t *)arg; 1230 return block_read_direct(disk->svc_id, ba, cnt, buf); 1231 } 1232 1233 /** Write blocks wrapper for liblabel */ 1234 static int vbds_label_write(void *arg, aoff64_t ba, size_t cnt, const void *data) 1235 { 1236 vbds_disk_t *disk = (vbds_disk_t *)arg; 1237 return block_write_direct(disk->svc_id, ba, cnt, data); 1238 } 1239 1181 1240 /** @} 1182 1241 */
Note:
See TracChangeset
for help on using the changeset viewer.