Changeset 28ed0d9 in mainline
- Timestamp:
- 2015-06-27T19:50:12Z (10 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 78d50bd
- Parents:
- 22fb7ab
- Location:
- uspace
- Files:
-
- 4 added
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/Makefile.common
r22fb7ab r28ed0d9 123 123 LIBBLOCK_PREFIX = $(LIB_PREFIX)/block 124 124 LIBFDISK_PREFIX = $(LIB_PREFIX)/fdisk 125 LIBLABEL_PREFIX = $(LIB_PREFIX)/label 125 126 LIBFS_PREFIX = $(LIB_PREFIX)/fs 126 127 LIBCLUI_PREFIX = $(LIB_PREFIX)/clui -
uspace/lib/c/generic/vbd.c
r22fb7ab r28ed0d9 37 37 #include <ipc/vbd.h> 38 38 #include <loc.h> 39 #include <mem.h> 39 40 #include <stdlib.h> 40 41 #include <types/label.h> … … 153 154 } 154 155 156 /** Get list of IDs into a buffer of fixed size. 157 * 158 * @param vbd Virtual Block Device 159 * @param method IPC method 160 * @param arg1 First argument 161 * @param id_buf Buffer to store IDs 162 * @param buf_size Buffer size 163 * @param act_size Place to store actual size of complete data. 164 * 165 * @return EOK on success or negative error code. 166 */ 167 static int vbd_get_ids_once(vbd_t *vbd, sysarg_t method, sysarg_t arg1, 168 sysarg_t *id_buf, size_t buf_size, size_t *act_size) 169 { 170 async_exch_t *exch = async_exchange_begin(vbd->sess); 171 172 ipc_call_t answer; 173 aid_t req = async_send_1(exch, method, arg1, &answer); 174 int rc = async_data_read_start(exch, id_buf, buf_size); 175 176 async_exchange_end(exch); 177 178 if (rc != EOK) { 179 async_forget(req); 180 return rc; 181 } 182 183 sysarg_t retval; 184 async_wait_for(req, &retval); 185 186 if (retval != EOK) { 187 return retval; 188 } 189 190 *act_size = IPC_GET_ARG1(answer); 191 return EOK; 192 } 193 194 /** Get list of IDs. 195 * 196 * Returns an allocated array of service IDs. 197 * 198 * @param vbd Virtual Block Device 199 * @param method IPC method 200 * @param arg1 IPC argument 1 201 * @param data Place to store pointer to array of IDs 202 * @param count Place to store number of IDs 203 * @return EOK on success or negative error code 204 */ 205 static int vbd_get_ids_internal(vbd_t *vbd, sysarg_t method, sysarg_t arg1, 206 sysarg_t **data, size_t *count) 207 { 208 *data = NULL; 209 *count = 0; 210 211 size_t act_size = 0; 212 int rc = vbd_get_ids_once(vbd, method, arg1, NULL, 0, &act_size); 213 if (rc != EOK) 214 return rc; 215 216 size_t alloc_size = act_size; 217 service_id_t *ids = malloc(alloc_size); 218 if (ids == NULL) 219 return ENOMEM; 220 221 while (true) { 222 rc = vbd_get_ids_once(vbd, method, arg1, ids, alloc_size, 223 &act_size); 224 if (rc != EOK) 225 return rc; 226 227 if (act_size <= alloc_size) 228 break; 229 230 alloc_size = act_size; 231 ids = realloc(ids, alloc_size); 232 if (ids == NULL) 233 return ENOMEM; 234 } 235 236 *count = act_size / sizeof(service_id_t); 237 *data = ids; 238 return EOK; 239 } 240 241 /** Get list of disks as array of service IDs. 242 * 243 * @param vbd Virtual Block Device 244 * @param data Place to store pointer to array 245 * @param count Place to store length of array (number of entries) 246 * 247 * @return EOK on success or negative error code 248 */ 249 int vbd_label_get_parts(vbd_t *vbd, service_id_t disk, 250 service_id_t **data, size_t *count) 251 { 252 return vbd_get_ids_internal(vbd, VBD_LABEL_GET_PARTS, disk, 253 data, count); 254 } 255 256 int vbd_part_get_info(vbd_t *vbd, vbd_part_id_t part, vbd_part_info_t *pinfo) 257 { 258 async_exch_t *exch; 259 int retval; 260 261 exch = async_exchange_begin(vbd->sess); 262 retval = async_req_1_0(exch, VBD_PART_GET_INFO, part); 263 async_exchange_end(exch); 264 265 if (retval != EOK) 266 return EIO; 267 268 return EOK; 269 } 270 271 int vbd_part_create(vbd_t *vbd, service_id_t disk, vbd_part_spec_t *pspec, 272 vbd_part_id_t *rpart) 273 { 274 async_exch_t *exch; 275 sysarg_t part; 276 int retval; 277 278 exch = async_exchange_begin(vbd->sess); 279 retval = async_req_1_1(exch, VBD_PART_CREATE, disk, &part); 280 async_exchange_end(exch); 281 282 if (retval != EOK) 283 return EIO; 284 285 *rpart = (vbd_part_id_t)part; 286 return EOK; 287 } 288 289 int vbd_part_delete(vbd_t *vbd, vbd_part_id_t part) 290 { 291 async_exch_t *exch; 292 int retval; 293 294 exch = async_exchange_begin(vbd->sess); 295 retval = async_req_1_0(exch, VBD_PART_DELETE, part); 296 async_exchange_end(exch); 297 298 if (retval != EOK) 299 return EIO; 300 301 return EOK; 302 } 303 304 void vbd_pspec_init(vbd_part_spec_t *pspec) 305 { 306 memset(pspec, 0, sizeof(vbd_part_spec_t)); 307 } 308 155 309 /** @} 156 310 */ -
uspace/lib/c/include/ipc/vbd.h
r22fb7ab r28ed0d9 41 41 VBD_DISK_INFO, 42 42 VBD_LABEL_CREATE, 43 VBD_LABEL_DELETE 43 VBD_LABEL_DELETE, 44 VBD_LABEL_GET_PARTS, 45 VBD_PART_GET_INFO, 46 VBD_PART_CREATE, 47 VBD_PART_DELETE, 44 48 } vbd_request_t; 45 49 -
uspace/lib/c/include/vbd.h
r22fb7ab r28ed0d9 52 52 } vbd_disk_info_t; 53 53 54 typedef struct { 55 } vbd_part_spec_t; 56 57 typedef struct { 58 } vbd_part_info_t; 59 60 typedef sysarg_t vbd_part_id_t; 61 54 62 extern int vbd_create(vbd_t **); 55 63 extern void vbd_destroy(vbd_t *); … … 59 67 extern int vbd_label_create(vbd_t *, service_id_t, label_type_t); 60 68 extern int vbd_label_delete(vbd_t *, service_id_t); 69 extern int vbd_label_get_parts(vbd_t *, service_id_t, service_id_t **, 70 size_t *); 71 extern int vbd_part_get_info(vbd_t *, vbd_part_id_t, vbd_part_info_t *); 72 extern int vbd_part_create(vbd_t *, service_id_t, vbd_part_spec_t *, 73 vbd_part_id_t *); 74 extern int vbd_part_delete(vbd_t *, vbd_part_id_t); 75 extern void vbd_pspec_init(vbd_part_spec_t *); 61 76 62 77 #endif -
uspace/lib/fdisk/include/types/fdisk.h
r22fb7ab r28ed0d9 41 41 #include <stdint.h> 42 42 #include <types/label.h> 43 #include <vbd.h> 43 44 #include <vol.h> 44 45 … … 126 127 /** File system type */ 127 128 fdisk_fstype_t fstype; 129 /** Partition ID */ 130 vbd_part_id_t part_id; 128 131 } fdisk_part_t; 129 132 … … 147 150 /** Volume service */ 148 151 vol_t *vol; 152 /** Virtual Block Device */ 153 vbd_t *vbd; 149 154 } fdisk_t; 150 155 -
uspace/lib/fdisk/src/fdisk.c
r22fb7ab r28ed0d9 43 43 #include <stdlib.h> 44 44 #include <str.h> 45 #include <vbd.h> 45 46 #include <vol.h> 46 47 … … 71 72 int fdisk_create(fdisk_t **rfdisk) 72 73 { 73 fdisk_t *fdisk ;74 fdisk_t *fdisk = NULL; 74 75 int rc; 75 76 76 77 fdisk = calloc(1, sizeof(fdisk_t)); 77 if (fdisk == NULL) 78 return ENOMEM; 78 if (fdisk == NULL) { 79 rc = ENOMEM; 80 goto error; 81 } 79 82 80 83 rc = vol_create(&fdisk->vol); 81 84 if (rc != EOK) { 82 free(fdisk); 83 return EIO; 85 rc = EIO; 86 goto error; 87 } 88 89 rc = vbd_create(&fdisk->vbd); 90 if (rc != EOK) { 91 rc = EIO; 92 goto error; 84 93 } 85 94 86 95 *rfdisk = fdisk; 87 96 return EOK; 97 error: 98 fdisk_destroy(fdisk); 99 100 return rc; 88 101 } 89 102 90 103 void fdisk_destroy(fdisk_t *fdisk) 91 104 { 105 if (fdisk == NULL) 106 return; 107 92 108 vol_destroy(fdisk->vol); 109 vbd_destroy(fdisk->vbd); 93 110 free(fdisk); 94 111 } … … 368 385 { 369 386 fdisk_part_t *part; 387 vbd_part_spec_t vpspec; 388 vbd_part_id_t partid; 389 int rc; 370 390 371 391 part = calloc(1, sizeof(fdisk_part_t)); 372 392 if (part == NULL) 373 393 return ENOMEM; 394 395 rc = vbd_part_create(dev->fdisk->vbd, dev->sid, &vpspec, &partid); 396 if (rc != EOK) { 397 free(part); 398 return EIO; 399 } 374 400 375 401 part->dev = dev; … … 377 403 part->capacity = pspec->capacity; 378 404 part->fstype = pspec->fstype; 405 part->part_id = partid; 379 406 380 407 if (rpart != NULL) … … 385 412 int fdisk_part_destroy(fdisk_part_t *part) 386 413 { 414 int rc; 415 416 rc = vbd_part_delete(part->dev->fdisk->vbd, part->part_id); 417 if (rc != EOK) 418 return EIO; 419 387 420 list_remove(&part->ldev); 388 421 free(part); -
uspace/lib/label/src/label.c
r22fb7ab r28ed0d9 34 34 */ 35 35 36 #include <errno.h> 37 #include <label.h> 38 #include <mem.h> 39 #include <stdlib.h> 40 41 int label_open(service_id_t sid, label_t **rlabel) 42 { 43 label_t *label; 44 45 label = calloc(1, sizeof(label_t)); 46 if (label == NULL) 47 return ENOMEM; 48 49 *rlabel = label; 50 return EOK; 51 } 52 53 int label_create(service_id_t sid, label_type_t ltype, label_t **rlabel) 54 { 55 label_t *label; 56 57 label = calloc(1, sizeof(label_t)); 58 if (label == NULL) 59 return ENOMEM; 60 61 *rlabel = label; 62 return EOK; 63 } 64 65 void label_close(label_t *label) 66 { 67 free(label); 68 } 69 70 int label_destroy(label_t *label) 71 { 72 free(label); 73 return EOK; 74 } 75 76 int label_get_info(label_t *label, label_info_t *linfo) 77 { 78 memset(linfo, 0, sizeof(label_info_t)); 79 linfo->dcnt = dc_empty; 80 return EOK; 81 } 82 83 label_part_t *label_part_first(label_t *label) 84 { 85 return NULL; 86 } 87 88 label_part_t *label_part_next(label_part_t *oart) 89 { 90 return NULL; 91 } 92 93 94 int label_part_create(label_t *label, label_part_spec_t *pspec, 95 label_part_t **rpart) 96 { 97 return ENOTSUP; 98 } 99 100 int label_part_destroy(label_part_t *part) 101 { 102 return EOK; 103 } 104 105 void label_pspec_init(label_part_spec_t *pspec) 106 { 107 memset(pspec, 0, sizeof(label_part_spec_t)); 108 } 109 36 110 /** @} 37 111 */ -
uspace/srv/bd/vbd/Makefile
r22fb7ab r28ed0d9 28 28 29 29 USPACE_PREFIX = ../../.. 30 31 LIBS = \ 32 $(LIBLABEL_PREFIX)/liblabel.a \ 33 $(LIBBLOCK_PREFIX)/libblock.a 34 35 EXTRA_CFLAGS = \ 36 -I$(LIBLABEL_PREFIX)/include 37 30 38 BINARY = vbd 31 39 32 40 SOURCES = \ 41 disk.c \ 33 42 vbd.c 34 43 -
uspace/srv/bd/vbd/types/vbd.h
r22fb7ab r28ed0d9 35 35 */ 36 36 37 #ifndef TYPES_VBD _H_38 #define TYPES_VBD _H_37 #ifndef TYPES_VBDS_H_ 38 #define TYPES_VBDS_H_ 39 39 40 #include <adt/list.h> 41 #include <label.h> 42 #include <loc.h> 40 43 #include <types/label.h> 41 44 42 45 /** Disk info */ 43 46 typedef struct { 47 /** Label */ 48 label_t *label; 44 49 /** Label type */ 45 50 label_type_t ltype; 46 } vbd_disk_info_t; 51 } vbds_disk_info_t; 52 53 /** Partition */ 54 typedef struct { 55 /** Disk this partition belongs to */ 56 struct vbds_disk *disk; 57 /** Link to vbds_disk_t.parts */ 58 link_t ldisk; 59 /** Label partition */ 60 label_part_t *lpart; 61 } vbds_part_t; 62 63 /** Disk */ 64 typedef struct vbds_disk { 65 /** Link to vbds_disks */ 66 link_t ldisks; 67 /** Service ID */ 68 service_id_t svc_id; 69 /** Label */ 70 label_t *label; 71 /** Partitions */ 72 list_t parts; /* of vbds_part_t */ 73 } vbds_disk_t; 74 75 typedef struct { 76 } vbds_part_info_t; 77 78 typedef sysarg_t vbds_part_id_t; 47 79 48 80 #endif -
uspace/srv/bd/vbd/vbd.c
r22fb7ab r28ed0d9 44 44 #include <task.h> 45 45 46 #include "disk.h" 46 47 #include "types/vbd.h" 47 48 48 49 #define NAME "vbd" 49 50 50 static void vbd_client_conn(ipc_callid_t, ipc_call_t *, void *); 51 52 static int vbd_init(void) 53 { 54 int rc; 55 log_msg(LOG_DEFAULT, LVL_NOTE, "vbd_init()"); 56 57 async_set_client_connection(vbd_client_conn); 51 static void vbds_client_conn(ipc_callid_t, ipc_call_t *, void *); 52 53 static int vbds_init(void) 54 { 55 int rc; 56 log_msg(LOG_DEFAULT, LVL_NOTE, "vbds_init()"); 57 58 vbds_disks_init(); 59 60 async_set_client_connection(vbds_client_conn); 58 61 59 62 rc = loc_server_register(NAME); … … 73 76 } 74 77 75 static int vbd_disk_add(service_id_t sid) 76 { 77 log_msg(LOG_DEFAULT, LVL_NOTE, "vbd_disk_add(%zu)", sid); 78 return EOK; 79 } 80 81 static int vbd_disk_remove(service_id_t sid) 82 { 83 log_msg(LOG_DEFAULT, LVL_NOTE, "vbd_disk_remove(%zu)", sid); 84 return EOK; 85 } 86 87 static int vbd_disk_info(service_id_t sid, vbd_disk_info_t *info) 88 { 89 log_msg(LOG_DEFAULT, LVL_NOTE, "vbd_disk_info(%zu)", sid); 90 info->ltype = lt_mbr; 91 return EOK; 92 } 93 94 static int vbd_label_create(service_id_t sid, label_type_t ltype) 95 { 96 log_msg(LOG_DEFAULT, LVL_NOTE, "vbd_label_create(%zu, %d)", sid, 97 ltype); 98 return EOK; 99 } 100 101 static int vbd_label_delete(service_id_t sid, label_type_t ltype) 102 { 103 log_msg(LOG_DEFAULT, LVL_NOTE, "vbd_label_delete(%zu, %d)", sid, 104 ltype); 105 return EOK; 106 } 107 108 static void vbd_disk_add_srv(ipc_callid_t iid, ipc_call_t *icall) 109 { 110 service_id_t disk_sid; 111 int rc; 112 113 log_msg(LOG_DEFAULT, LVL_NOTE, "vbd_disk_add_srv()"); 114 115 disk_sid = IPC_GET_ARG1(*icall); 116 rc = vbd_disk_add(disk_sid); 117 async_answer_0(iid, (sysarg_t) rc); 118 } 119 120 static void vbd_disk_remove_srv(ipc_callid_t iid, ipc_call_t *icall) 121 { 122 service_id_t disk_sid; 123 int rc; 124 125 log_msg(LOG_DEFAULT, LVL_NOTE, "vbd_disk_remove_srv()"); 126 127 disk_sid = IPC_GET_ARG1(*icall); 128 rc = vbd_disk_remove(disk_sid); 129 async_answer_0(iid, (sysarg_t) rc); 130 } 131 132 static void vbd_disk_info_srv(ipc_callid_t iid, ipc_call_t *icall) 133 { 134 service_id_t disk_sid; 135 vbd_disk_info_t dinfo; 136 int rc; 137 138 log_msg(LOG_DEFAULT, LVL_NOTE, "vbd_disk_info_srv()"); 139 140 disk_sid = IPC_GET_ARG1(*icall); 141 rc = vbd_disk_info(disk_sid, &dinfo); 78 79 static void vbds_disk_add_srv(ipc_callid_t iid, ipc_call_t *icall) 80 { 81 service_id_t disk_sid; 82 int rc; 83 84 log_msg(LOG_DEFAULT, LVL_NOTE, "vbds_disk_add_srv()"); 85 86 disk_sid = IPC_GET_ARG1(*icall); 87 rc = vbds_disk_add(disk_sid); 88 async_answer_0(iid, (sysarg_t) rc); 89 } 90 91 static void vbds_disk_remove_srv(ipc_callid_t iid, ipc_call_t *icall) 92 { 93 service_id_t disk_sid; 94 int rc; 95 96 log_msg(LOG_DEFAULT, LVL_NOTE, "vbds_disk_remove_srv()"); 97 98 disk_sid = IPC_GET_ARG1(*icall); 99 rc = vbds_disk_remove(disk_sid); 100 async_answer_0(iid, (sysarg_t) rc); 101 } 102 103 static void vbds_disk_info_srv(ipc_callid_t iid, ipc_call_t *icall) 104 { 105 service_id_t disk_sid; 106 vbds_disk_info_t dinfo; 107 int rc; 108 109 log_msg(LOG_DEFAULT, LVL_NOTE, "vbds_disk_info_srv()"); 110 111 disk_sid = IPC_GET_ARG1(*icall); 112 rc = vbds_disk_info(disk_sid, &dinfo); 142 113 async_answer_1(iid, (sysarg_t)rc, (sysarg_t)dinfo.ltype); 143 114 } 144 115 145 static void vbd _label_create_srv(ipc_callid_t iid, ipc_call_t *icall)116 static void vbds_label_create_srv(ipc_callid_t iid, ipc_call_t *icall) 146 117 { 147 118 service_id_t disk_sid; … … 149 120 int rc; 150 121 151 log_msg(LOG_DEFAULT, LVL_NOTE, "vbd _label_create_srv()");122 log_msg(LOG_DEFAULT, LVL_NOTE, "vbds_label_create_srv()"); 152 123 153 124 disk_sid = IPC_GET_ARG1(*icall); 154 125 ltype = IPC_GET_ARG2(*icall); 155 rc = vbd_label_create(disk_sid, ltype); 156 async_answer_0(iid, (sysarg_t) rc); 157 } 158 159 static void vbd_label_delete_srv(ipc_callid_t iid, ipc_call_t *icall) 160 { 161 service_id_t disk_sid; 162 label_type_t ltype; 163 int rc; 164 165 log_msg(LOG_DEFAULT, LVL_NOTE, "vbd_label_delete_srv()"); 166 167 disk_sid = IPC_GET_ARG1(*icall); 168 ltype = IPC_GET_ARG2(*icall); 169 rc = vbd_label_delete(disk_sid, ltype); 170 async_answer_0(iid, (sysarg_t) rc); 171 } 172 173 static void vbd_client_conn(ipc_callid_t iid, ipc_call_t *icall, void *arg) 174 { 175 log_msg(LOG_DEFAULT, LVL_NOTE, "vbd_client_conn()"); 126 rc = vbds_label_create(disk_sid, ltype); 127 async_answer_0(iid, (sysarg_t) rc); 128 } 129 130 static void vbds_label_delete_srv(ipc_callid_t iid, ipc_call_t *icall) 131 { 132 service_id_t disk_sid; 133 int rc; 134 135 log_msg(LOG_DEFAULT, LVL_NOTE, "vbds_label_delete_srv()"); 136 137 disk_sid = IPC_GET_ARG1(*icall); 138 rc = vbds_label_delete(disk_sid); 139 async_answer_0(iid, (sysarg_t) rc); 140 } 141 142 static void vbds_label_get_parts_srv(ipc_callid_t iid, ipc_call_t *icall) 143 { 144 // service_id_t disk_sid; 145 // int rc; 146 147 log_msg(LOG_DEFAULT, LVL_NOTE, "vbds_label_get_parts_srv()"); 148 149 // disk_sid = IPC_GET_ARG1(*icall); 150 // rc = vbds_label_delete(disk_sid); 151 // async_answer_0(iid, (sysarg_t) rc); 152 async_answer_0(iid, ENOTSUP); 153 } 154 155 static void vbds_part_get_info_srv(ipc_callid_t iid, ipc_call_t *icall) 156 { 157 vbds_part_id_t part; 158 vbds_part_info_t pinfo; 159 int rc; 160 161 log_msg(LOG_DEFAULT, LVL_NOTE, "vbds_part_get_info_srv()"); 162 163 part = IPC_GET_ARG1(*icall); 164 rc = vbds_part_get_info(part, &pinfo); 165 async_answer_0(iid, (sysarg_t)rc); 166 } 167 168 static void vbds_part_create_srv(ipc_callid_t iid, ipc_call_t *icall) 169 { 170 service_id_t disk_sid; 171 vbds_part_id_t part; 172 int rc; 173 174 log_msg(LOG_DEFAULT, LVL_NOTE, "vbds_part_create_srv()"); 175 176 disk_sid = IPC_GET_ARG1(*icall); 177 rc = vbds_part_create(disk_sid, &part); 178 async_answer_1(iid, (sysarg_t)rc, (sysarg_t)part); 179 } 180 181 static void vbds_part_delete_srv(ipc_callid_t iid, ipc_call_t *icall) 182 { 183 vbds_part_id_t part; 184 int rc; 185 186 log_msg(LOG_DEFAULT, LVL_NOTE, "vbds_part_delete_srv()"); 187 188 part = IPC_GET_ARG1(*icall); 189 rc = vbds_part_delete(part); 190 async_answer_0(iid, (sysarg_t) rc); 191 } 192 193 static void vbds_client_conn(ipc_callid_t iid, ipc_call_t *icall, void *arg) 194 { 195 log_msg(LOG_DEFAULT, LVL_NOTE, "vbds_client_conn()"); 176 196 177 197 /* Accept the connection */ … … 191 211 switch (method) { 192 212 case VBD_DISK_ADD: 193 vbd _disk_add_srv(callid, &call);213 vbds_disk_add_srv(callid, &call); 194 214 break; 195 215 case VBD_DISK_REMOVE: 196 vbd _disk_remove_srv(callid, &call);216 vbds_disk_remove_srv(callid, &call); 197 217 break; 198 218 case VBD_DISK_INFO: 199 vbd _disk_info_srv(callid, &call);219 vbds_disk_info_srv(callid, &call); 200 220 break; 201 221 case VBD_LABEL_CREATE: 202 vbd _label_create_srv(callid, &call);222 vbds_label_create_srv(callid, &call); 203 223 break; 204 224 case VBD_LABEL_DELETE: 205 vbd_label_delete_srv(callid, &call); 225 vbds_label_delete_srv(callid, &call); 226 break; 227 case VBD_LABEL_GET_PARTS: 228 vbds_label_get_parts_srv(callid, &call); 229 break; 230 case VBD_PART_GET_INFO: 231 vbds_part_get_info_srv(callid, &call); 232 break; 233 case VBD_PART_CREATE: 234 vbds_part_create_srv(callid, &call); 235 break; 236 case VBD_PART_DELETE: 237 vbds_part_delete_srv(callid, &call); 206 238 break; 207 239 default: … … 222 254 } 223 255 224 rc = vbd _init();256 rc = vbds_init(); 225 257 if (rc != EOK) 226 258 return 1;
Note:
See TracChangeset
for help on using the changeset viewer.