Changes in uspace/srv/bd/vbd/disk.c [5772aa1:b7fd2a0] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/bd/vbd/disk.c
r5772aa1 rb7fd2a0 38 38 #include <block.h> 39 39 #include <errno.h> 40 #include <str_error.h> 40 41 #include <io/log.h> 41 42 #include <label/empty.h> … … 57 58 static category_id_t part_cid; 58 59 59 static int vbds_disk_parts_add(vbds_disk_t *, label_t *);60 static int vbds_disk_parts_remove(vbds_disk_t *, vbds_rem_flag_t);61 62 static int vbds_bd_open(bd_srvs_t *, bd_srv_t *);63 static int vbds_bd_close(bd_srv_t *);64 static int vbds_bd_read_blocks(bd_srv_t *, aoff64_t, size_t, void *, size_t);65 static int vbds_bd_sync_cache(bd_srv_t *, aoff64_t, size_t);66 static int vbds_bd_write_blocks(bd_srv_t *, aoff64_t, size_t, const void *,60 static errno_t vbds_disk_parts_add(vbds_disk_t *, label_t *); 61 static errno_t vbds_disk_parts_remove(vbds_disk_t *, vbds_rem_flag_t); 62 63 static errno_t vbds_bd_open(bd_srvs_t *, bd_srv_t *); 64 static errno_t vbds_bd_close(bd_srv_t *); 65 static errno_t vbds_bd_read_blocks(bd_srv_t *, aoff64_t, size_t, void *, size_t); 66 static errno_t vbds_bd_sync_cache(bd_srv_t *, aoff64_t, size_t); 67 static errno_t vbds_bd_write_blocks(bd_srv_t *, aoff64_t, size_t, const void *, 67 68 size_t); 68 static int vbds_bd_get_block_size(bd_srv_t *, size_t *);69 static int vbds_bd_get_num_blocks(bd_srv_t *, aoff64_t *);70 71 static int vbds_bsa_translate(vbds_part_t *, aoff64_t, size_t, aoff64_t *);72 73 static int vbds_part_svc_register(vbds_part_t *);74 static int vbds_part_svc_unregister(vbds_part_t *);75 static int vbds_part_indices_update(vbds_disk_t *);69 static errno_t vbds_bd_get_block_size(bd_srv_t *, size_t *); 70 static errno_t vbds_bd_get_num_blocks(bd_srv_t *, aoff64_t *); 71 72 static errno_t vbds_bsa_translate(vbds_part_t *, aoff64_t, size_t, aoff64_t *); 73 74 static errno_t vbds_part_svc_register(vbds_part_t *); 75 static errno_t vbds_part_svc_unregister(vbds_part_t *); 76 static errno_t vbds_part_indices_update(vbds_disk_t *); 76 77 77 78 static vbd_part_id_t vbds_part_id = 1; 78 79 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 *);80 static errno_t vbds_label_get_bsize(void *, size_t *); 81 static errno_t vbds_label_get_nblocks(void *, aoff64_t *); 82 static errno_t vbds_label_read(void *, aoff64_t, size_t, void *); 83 static errno_t vbds_label_write(void *, aoff64_t, size_t, const void *); 83 84 84 85 /** Block device operations provided by VBD */ … … 131 132 } 132 133 133 int vbds_disks_init(void)134 { 135 int rc;134 errno_t vbds_disks_init(void) 135 { 136 errno_t rc; 136 137 137 138 fibril_mutex_initialize(&vbds_disks_lock); … … 151 152 152 153 /** Check for new/removed disk devices */ 153 static int vbds_disks_check_new(void)154 static errno_t vbds_disks_check_new(void) 154 155 { 155 156 bool already_known; … … 158 159 size_t count, i; 159 160 vbds_disk_t *cur, *next; 160 int rc;161 errno_t rc; 161 162 162 163 log_msg(LOG_DEFAULT, LVL_DEBUG, "vbds_disks_check_new()"); … … 228 229 229 230 230 static int vbds_disk_by_svcid(service_id_t sid, vbds_disk_t **rdisk)231 static errno_t vbds_disk_by_svcid(service_id_t sid, vbds_disk_t **rdisk) 231 232 { 232 233 list_foreach(vbds_disks, ldisks, vbds_disk_t, disk) { … … 255 256 } 256 257 257 static int vbds_part_by_pid(vbds_part_id_t partid, vbds_part_t **rpart)258 static errno_t vbds_part_by_pid(vbds_part_id_t partid, vbds_part_t **rpart) 258 259 { 259 260 log_msg(LOG_DEFAULT, LVL_DEBUG, "vbds_part_by_pid(%zu)", partid); … … 277 278 } 278 279 279 static int vbds_part_by_svcid(service_id_t svcid, vbds_part_t **rpart)280 static errno_t vbds_part_by_svcid(service_id_t svcid, vbds_part_t **rpart) 280 281 { 281 282 log_msg(LOG_DEFAULT, LVL_DEBUG, "vbds_part_by_svcid(%zu)", svcid); … … 300 301 301 302 /** Add partition to our inventory based on liblabel partition structure */ 302 static int vbds_part_add(vbds_disk_t *disk, label_part_t *lpart,303 static errno_t vbds_part_add(vbds_disk_t *disk, label_part_t *lpart, 303 304 vbds_part_t **rpart) 304 305 { … … 306 307 service_id_t psid = 0; 307 308 label_part_info_t lpinfo; 308 int rc;309 errno_t rc; 309 310 310 311 log_msg(LOG_DEFAULT, LVL_DEBUG, "vbds_part_add(%s, %p)", … … 361 362 * 362 363 */ 363 static int vbds_part_remove(vbds_part_t *part, vbds_rem_flag_t flag,364 static errno_t vbds_part_remove(vbds_part_t *part, vbds_rem_flag_t flag, 364 365 label_part_t **rlpart) 365 366 { 366 367 label_part_t *lpart; 367 int rc;368 errno_t rc; 368 369 369 370 log_msg(LOG_DEFAULT, LVL_DEBUG, "vbds_part_remove(%p)", part); … … 403 404 /** Remove all disk partitions from our inventory leaving only the underlying 404 405 * liblabel partition structures. */ 405 static int vbds_disk_parts_add(vbds_disk_t *disk, label_t *label)406 static errno_t vbds_disk_parts_add(vbds_disk_t *disk, label_t *label) 406 407 { 407 408 label_part_t *part; 408 int rc;409 errno_t rc; 409 410 410 411 part = label_part_first(label); … … 425 426 /** Remove all disk partitions from our inventory leaving only the underlying 426 427 * liblabel partition structures. */ 427 static int vbds_disk_parts_remove(vbds_disk_t *disk, vbds_rem_flag_t flag)428 static errno_t vbds_disk_parts_remove(vbds_disk_t *disk, vbds_rem_flag_t flag) 428 429 { 429 430 link_t *link; 430 431 vbds_part_t *part; 431 int rc;432 errno_t rc; 432 433 433 434 link = list_first(&disk->parts); … … 449 450 } 450 451 451 int vbds_disk_discovery_start(void)452 { 453 int rc;452 errno_t vbds_disk_discovery_start(void) 453 { 454 errno_t rc; 454 455 455 456 rc = loc_register_cat_change_cb(vbds_disk_cat_change_cb); 456 457 if (rc != EOK) { 457 458 log_msg(LOG_DEFAULT, LVL_ERROR, "Failed registering callback " 458 "for disk discovery (%d).", rc);459 "for disk discovery: %s.", str_error(rc)); 459 460 return rc; 460 461 } … … 463 464 } 464 465 465 int vbds_disk_add(service_id_t sid)466 errno_t vbds_disk_add(service_id_t sid) 466 467 { 467 468 label_t *label = NULL; … … 471 472 size_t block_size; 472 473 aoff64_t nblocks; 473 int rc;474 errno_t rc; 474 475 475 476 log_msg(LOG_DEFAULT, LVL_DEBUG, "vbds_disk_add(%zu)", sid); … … 556 557 } 557 558 558 int vbds_disk_remove(service_id_t sid)559 errno_t vbds_disk_remove(service_id_t sid) 559 560 { 560 561 vbds_disk_t *disk; 561 int rc;562 errno_t rc; 562 563 563 564 log_msg(LOG_DEFAULT, LVL_DEBUG, "vbds_disk_remove(%zu)", sid); … … 582 583 583 584 /** Get list of disks as array of service IDs. */ 584 int vbds_disk_get_ids(service_id_t *id_buf, size_t buf_size, size_t *act_size)585 errno_t vbds_disk_get_ids(service_id_t *id_buf, size_t buf_size, size_t *act_size) 585 586 { 586 587 size_t act_cnt; … … 610 611 } 611 612 612 int vbds_disk_info(service_id_t sid, vbd_disk_info_t *info)613 errno_t vbds_disk_info(service_id_t sid, vbd_disk_info_t *info) 613 614 { 614 615 vbds_disk_t *disk; 615 616 label_info_t linfo; 616 int rc;617 errno_t rc; 617 618 618 619 log_msg(LOG_DEFAULT, LVL_DEBUG, "vbds_disk_info(%zu)", sid); … … 637 638 } 638 639 639 int vbds_get_parts(service_id_t sid, service_id_t *id_buf, size_t buf_size,640 errno_t vbds_get_parts(service_id_t sid, service_id_t *id_buf, size_t buf_size, 640 641 size_t *act_size) 641 642 { … … 643 644 size_t act_cnt; 644 645 size_t buf_cnt; 645 int rc;646 errno_t rc; 646 647 647 648 rc = vbds_disk_by_svcid(sid, &disk); … … 667 668 } 668 669 669 int vbds_label_create(service_id_t sid, label_type_t ltype)670 errno_t vbds_label_create(service_id_t sid, label_type_t ltype) 670 671 { 671 672 label_t *label; … … 673 674 label_info_t linfo; 674 675 vbds_disk_t *disk; 675 int rc, rc2;676 errno_t rc, rc2; 676 677 677 678 log_msg(LOG_DEFAULT, LVL_DEBUG, "vbds_label_create(%zu)", sid); … … 738 739 } 739 740 740 int vbds_label_delete(service_id_t sid)741 errno_t vbds_label_delete(service_id_t sid) 741 742 { 742 743 vbds_disk_t *disk; 743 744 label_t *label; 744 745 label_bd_t lbd; 745 int rc;746 errno_t rc; 746 747 747 748 log_msg(LOG_DEFAULT, LVL_DEBUG, "vbds_label_delete(%zu)", sid); … … 780 781 } 781 782 782 int vbds_part_get_info(vbds_part_id_t partid, vbd_part_info_t *pinfo)783 errno_t vbds_part_get_info(vbds_part_id_t partid, vbd_part_info_t *pinfo) 783 784 { 784 785 vbds_part_t *part; 785 786 label_part_info_t lpinfo; 786 int rc;787 errno_t rc; 787 788 788 789 rc = vbds_part_by_pid(partid, &part); … … 809 810 } 810 811 811 int vbds_part_create(service_id_t sid, vbd_part_spec_t *pspec,812 errno_t vbds_part_create(service_id_t sid, vbd_part_spec_t *pspec, 812 813 vbds_part_id_t *rpart) 813 814 { … … 816 817 label_part_spec_t lpspec; 817 818 label_part_t *lpart; 818 int rc;819 errno_t rc; 819 820 820 821 log_msg(LOG_DEFAULT, LVL_DEBUG, "vbds_part_create(%zu)", sid); … … 878 879 } 879 880 880 int vbds_part_delete(vbds_part_id_t partid)881 errno_t vbds_part_delete(vbds_part_id_t partid) 881 882 { 882 883 vbds_part_t *part; 883 884 vbds_disk_t *disk; 884 885 label_part_t *lpart; 885 int rc;886 errno_t rc; 886 887 887 888 rc = vbds_part_by_pid(partid, &part); … … 917 918 } 918 919 919 int vbds_suggest_ptype(service_id_t sid, label_pcnt_t pcnt,920 errno_t vbds_suggest_ptype(service_id_t sid, label_pcnt_t pcnt, 920 921 label_ptype_t *ptype) 921 922 { 922 923 vbds_disk_t *disk; 923 int rc;924 errno_t rc; 924 925 925 926 rc = vbds_disk_by_svcid(sid, &disk); … … 941 942 } 942 943 943 static int vbds_bd_open(bd_srvs_t *bds, bd_srv_t *bd)944 static errno_t vbds_bd_open(bd_srvs_t *bds, bd_srv_t *bd) 944 945 { 945 946 vbds_part_t *part = bd_srv_part(bd); … … 952 953 } 953 954 954 static int vbds_bd_close(bd_srv_t *bd)955 static errno_t vbds_bd_close(bd_srv_t *bd) 955 956 { 956 957 vbds_part_t *part = bd_srv_part(bd); … … 966 967 } 967 968 968 static int vbds_bd_read_blocks(bd_srv_t *bd, aoff64_t ba, size_t cnt,969 static errno_t vbds_bd_read_blocks(bd_srv_t *bd, aoff64_t ba, size_t cnt, 969 970 void *buf, size_t size) 970 971 { 971 972 vbds_part_t *part = bd_srv_part(bd); 972 973 aoff64_t gba; 973 int rc;974 errno_t rc; 974 975 975 976 log_msg(LOG_DEFAULT, LVL_DEBUG2, "vbds_bd_read_blocks()"); … … 992 993 } 993 994 994 static int vbds_bd_sync_cache(bd_srv_t *bd, aoff64_t ba, size_t cnt)995 static errno_t vbds_bd_sync_cache(bd_srv_t *bd, aoff64_t ba, size_t cnt) 995 996 { 996 997 vbds_part_t *part = bd_srv_part(bd); 997 998 aoff64_t gba; 998 int rc;999 errno_t rc; 999 1000 1000 1001 log_msg(LOG_DEFAULT, LVL_DEBUG2, "vbds_bd_sync_cache()"); … … 1016 1017 } 1017 1018 1018 static int vbds_bd_write_blocks(bd_srv_t *bd, aoff64_t ba, size_t cnt,1019 static errno_t vbds_bd_write_blocks(bd_srv_t *bd, aoff64_t ba, size_t cnt, 1019 1020 const void *buf, size_t size) 1020 1021 { 1021 1022 vbds_part_t *part = bd_srv_part(bd); 1022 1023 aoff64_t gba; 1023 int rc;1024 errno_t rc; 1024 1025 1025 1026 log_msg(LOG_DEFAULT, LVL_DEBUG2, "vbds_bd_write_blocks()"); … … 1041 1042 } 1042 1043 1043 static int vbds_bd_get_block_size(bd_srv_t *bd, size_t *rsize)1044 static errno_t vbds_bd_get_block_size(bd_srv_t *bd, size_t *rsize) 1044 1045 { 1045 1046 vbds_part_t *part = bd_srv_part(bd); … … 1054 1055 } 1055 1056 1056 static int vbds_bd_get_num_blocks(bd_srv_t *bd, aoff64_t *rnb)1057 static errno_t vbds_bd_get_num_blocks(bd_srv_t *bd, aoff64_t *rnb) 1057 1058 { 1058 1059 vbds_part_t *part = bd_srv_part(bd); … … 1070 1071 { 1071 1072 vbds_part_t *part; 1072 int rc;1073 errno_t rc; 1073 1074 service_id_t svcid; 1074 1075 … … 1093 1094 1094 1095 /** Translate block segment address with range checking. */ 1095 static int vbds_bsa_translate(vbds_part_t *part, aoff64_t ba, size_t cnt,1096 static errno_t vbds_bsa_translate(vbds_part_t *part, aoff64_t ba, size_t cnt, 1096 1097 aoff64_t *gba) 1097 1098 { … … 1104 1105 1105 1106 /** Register service for partition */ 1106 static int vbds_part_svc_register(vbds_part_t *part)1107 static errno_t vbds_part_svc_register(vbds_part_t *part) 1107 1108 { 1108 1109 char *name; 1109 1110 service_id_t psid; 1110 1111 int idx; 1111 int rc;1112 errno_t rc; 1112 1113 1113 1114 idx = part->lpart->index; 1114 1115 1115 rc = asprintf(&name, "%sp%u", part->disk->svc_name, idx); 1116 if (rc < 0) { 1116 if (asprintf(&name, "%sp%u", part->disk->svc_name, idx) < 0) { 1117 1117 log_msg(LOG_DEFAULT, LVL_ERROR, "Out of memory."); 1118 1118 return ENOMEM; … … 1124 1124 if (rc != EOK) { 1125 1125 log_msg(LOG_DEFAULT, LVL_ERROR, "Failed registering " 1126 "service %s (%d).", name, rc);1126 "service %s: %s.", name, str_error(rc)); 1127 1127 free(name); 1128 1128 free(part); … … 1152 1152 1153 1153 /** Unregister service for partition */ 1154 static int vbds_part_svc_unregister(vbds_part_t *part)1155 { 1156 int rc;1154 static errno_t vbds_part_svc_unregister(vbds_part_t *part) 1155 { 1156 errno_t rc; 1157 1157 1158 1158 log_msg(LOG_DEFAULT, LVL_DEBUG, "vbds_part_svc_unregister(" … … 1169 1169 1170 1170 /** Update service names for any partition whose index has changed. */ 1171 static int vbds_part_indices_update(vbds_disk_t *disk)1171 static errno_t vbds_part_indices_update(vbds_disk_t *disk) 1172 1172 { 1173 1173 label_part_info_t lpinfo; 1174 int rc;1174 errno_t rc; 1175 1175 1176 1176 log_msg(LOG_DEFAULT, LVL_DEBUG, "vbds_part_indices_update()"); … … 1219 1219 1220 1220 /** Get block size wrapper for liblabel */ 1221 static int vbds_label_get_bsize(void *arg, size_t *bsize)1221 static errno_t vbds_label_get_bsize(void *arg, size_t *bsize) 1222 1222 { 1223 1223 vbds_disk_t *disk = (vbds_disk_t *)arg; … … 1226 1226 1227 1227 /** Get number of blocks wrapper for liblabel */ 1228 static int vbds_label_get_nblocks(void *arg, aoff64_t *nblocks)1228 static errno_t vbds_label_get_nblocks(void *arg, aoff64_t *nblocks) 1229 1229 { 1230 1230 vbds_disk_t *disk = (vbds_disk_t *)arg; … … 1233 1233 1234 1234 /** Read blocks wrapper for liblabel */ 1235 static int vbds_label_read(void *arg, aoff64_t ba, size_t cnt, void *buf)1235 static errno_t vbds_label_read(void *arg, aoff64_t ba, size_t cnt, void *buf) 1236 1236 { 1237 1237 vbds_disk_t *disk = (vbds_disk_t *)arg; … … 1240 1240 1241 1241 /** Write blocks wrapper for liblabel */ 1242 static int vbds_label_write(void *arg, aoff64_t ba, size_t cnt, const void *data)1242 static errno_t vbds_label_write(void *arg, aoff64_t ba, size_t cnt, const void *data) 1243 1243 { 1244 1244 vbds_disk_t *disk = (vbds_disk_t *)arg;
Note:
See TracChangeset
for help on using the changeset viewer.