Changeset 1626cd4 in mainline for uspace/srv
- Timestamp:
- 2015-07-02T19:01:37Z (10 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 6a0d4ce2
- Parents:
- 3faa03d
- Location:
- uspace/srv
- Files:
-
- 5 edited
-
bd/vbd/disk.c (modified) (3 diffs)
-
bd/vbd/disk.h (modified) (1 diff)
-
bd/vbd/types/vbd.h (modified) (3 diffs)
-
bd/vbd/vbd.c (modified) (4 diffs)
-
volsrv/disk.c (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/bd/vbd/disk.c
r3faa03d r1626cd4 268 268 int vbds_disk_info(service_id_t sid, vbds_disk_info_t *info) 269 269 { 270 vbds_disk_t *disk; 271 label_info_t linfo; 272 int rc; 273 270 274 log_msg(LOG_DEFAULT, LVL_NOTE, "vbds_disk_info(%zu)", sid); 271 info->ltype = lt_mbr; 272 return EOK; 273 } 275 276 rc = vbds_disk_by_svcid(sid, &disk); 277 if (rc != EOK) 278 return rc; 279 280 rc = label_get_info(disk->label, &linfo); 281 282 info->ltype = linfo.ltype; 283 info->ablock0 = linfo.ablock0; 284 info->anblocks = linfo.anblocks; 285 info->block_size = disk->block_size; 286 return EOK; 287 } 288 289 int vbds_get_parts(service_id_t sid, service_id_t *id_buf, size_t buf_size, 290 size_t *act_size) 291 { 292 vbds_disk_t *disk; 293 size_t act_cnt; 294 size_t buf_cnt; 295 int rc; 296 297 rc = vbds_disk_by_svcid(sid, &disk); 298 if (rc != EOK) 299 return rc; 300 301 buf_cnt = buf_size / sizeof(service_id_t); 302 303 act_cnt = list_count(&disk->parts); 304 *act_size = act_cnt * sizeof(service_id_t); 305 306 if (buf_size % sizeof(service_id_t) != 0) 307 return EINVAL; 308 309 size_t pos = 0; 310 list_foreach(disk->parts, ldisk, vbds_part_t, part) { 311 if (pos < buf_cnt) 312 id_buf[pos] = part->id; 313 pos++; 314 } 315 316 return EOK; 317 } 318 274 319 275 320 int vbds_label_create(service_id_t sid, label_type_t ltype) … … 328 373 { 329 374 vbds_part_t *part; 375 label_part_info_t lpinfo; 330 376 int rc; 331 377 … … 334 380 return rc; 335 381 382 label_part_get_info(part->lpart, &lpinfo); 383 384 pinfo->index = lpinfo.index; 385 pinfo->block0 = lpinfo.block0; 386 pinfo->nblocks = lpinfo.nblocks; 336 387 return EOK; 337 388 } -
uspace/srv/bd/vbd/disk.h
r3faa03d r1626cd4 45 45 extern int vbds_disk_remove(service_id_t); 46 46 extern int vbds_disk_info(service_id_t, vbds_disk_info_t *); 47 extern int vbds_get_parts(service_id_t, service_id_t *, size_t, size_t *); 47 48 extern int vbds_label_create(service_id_t, label_type_t); 48 49 extern int vbds_label_delete(service_id_t); -
uspace/srv/bd/vbd/types/vbd.h
r3faa03d r1626cd4 42 42 #include <label.h> 43 43 #include <loc.h> 44 #include <sys/types.h> 44 45 #include <types/label.h> 45 46 … … 48 49 /** Disk info */ 49 50 typedef struct { 50 /** Label */51 label_t *label;52 51 /** Label type */ 53 52 label_type_t ltype; 53 /** First block that can be allocated */ 54 aoff64_t ablock0; 55 /** Number of blocks that can be allocated */ 56 aoff64_t anblocks; 57 /** Block size */ 58 size_t block_size; 54 59 } vbds_disk_info_t; 55 60 … … 92 97 } vbds_disk_t; 93 98 99 /** Partition info */ 94 100 typedef struct { 101 /** Partition index */ 102 int index; 103 /** First block */ 104 aoff64_t block0; 105 /** Number of blocks */ 106 aoff64_t nblocks; 95 107 } vbds_part_info_t; 96 108 -
uspace/srv/bd/vbd/vbd.c
r3faa03d r1626cd4 40 40 #include <ipc/vbd.h> 41 41 #include <loc.h> 42 #include <macros.h> 42 43 #include <stdio.h> 43 44 #include <stdlib.h> … … 112 113 disk_sid = IPC_GET_ARG1(*icall); 113 114 rc = vbds_disk_info(disk_sid, &dinfo); 114 async_answer_1(iid, (sysarg_t)rc, (sysarg_t)dinfo.ltype); 115 if (rc != EOK) { 116 log_msg(LOG_DEFAULT, LVL_NOTE, "vbd_disk_info() call failed"); 117 async_answer_0(iid, rc); 118 return; 119 } 120 121 log_msg(LOG_DEFAULT, LVL_NOTE, "vbd_disk_info() data_read_receive"); 122 ipc_callid_t callid; 123 size_t size; 124 if (!async_data_read_receive(&callid, &size)) { 125 log_msg(LOG_DEFAULT, LVL_NOTE, "vbd_disk_info() failed"); 126 async_answer_0(callid, EREFUSED); 127 async_answer_0(iid, EREFUSED); 128 return; 129 } 130 131 log_msg(LOG_DEFAULT, LVL_NOTE, "vbd_disk_info() check size"); 132 if (size != sizeof(vbds_disk_info_t)) { 133 log_msg(LOG_DEFAULT, LVL_NOTE, "vbd_disk_info() wrong size"); 134 async_answer_0(callid, EINVAL); 135 async_answer_0(iid, EINVAL); 136 return; 137 } 138 139 log_msg(LOG_DEFAULT, LVL_NOTE, "vbd_disk_info() data_read_finalize"); 140 rc = async_data_read_finalize(callid, &dinfo, 141 min(size, sizeof(dinfo))); 142 if (rc != EOK) { 143 async_answer_0(callid, rc); 144 async_answer_0(iid, rc); 145 return; 146 } 147 148 log_msg(LOG_DEFAULT, LVL_NOTE, "vbd_disk_info() reply EOK"); 149 async_answer_0(iid, EOK); 115 150 } 116 151 … … 143 178 static void vbds_label_get_parts_srv(ipc_callid_t iid, ipc_call_t *icall) 144 179 { 145 // service_id_t disk_sid; 146 // int rc; 180 ipc_callid_t callid; 181 size_t size; 182 size_t act_size; 183 service_id_t sid; 184 int rc; 147 185 148 186 log_msg(LOG_DEFAULT, LVL_NOTE, "vbds_label_get_parts_srv()"); 149 187 150 // disk_sid = IPC_GET_ARG1(*icall); 151 // rc = vbds_label_delete(disk_sid); 152 // async_answer_0(iid, (sysarg_t) rc); 153 async_answer_0(iid, ENOTSUP); 154 } 188 if (!async_data_read_receive(&callid, &size)) { 189 async_answer_0(callid, EREFUSED); 190 async_answer_0(iid, EREFUSED); 191 return; 192 } 193 194 sid = IPC_GET_ARG1(*icall); 195 196 category_id_t *id_buf = (category_id_t *) malloc(size); 197 if (id_buf == NULL) { 198 async_answer_0(callid, ENOMEM); 199 async_answer_0(iid, ENOMEM); 200 return; 201 } 202 203 rc = vbds_get_parts(sid, id_buf, size, &act_size); 204 if (rc != EOK) { 205 async_answer_0(callid, rc); 206 async_answer_0(iid, rc); 207 return; 208 } 209 210 sysarg_t retval = async_data_read_finalize(callid, id_buf, size); 211 free(id_buf); 212 213 async_answer_1(iid, retval, act_size); 214 } 215 155 216 156 217 static void vbds_part_get_info_srv(ipc_callid_t iid, ipc_call_t *icall) … … 164 225 part = IPC_GET_ARG1(*icall); 165 226 rc = vbds_part_get_info(part, &pinfo); 166 async_answer_0(iid, (sysarg_t)rc); 227 async_answer_5(iid, (sysarg_t)rc, pinfo.index, 228 LOWER32(pinfo.block0), UPPER32(pinfo.block0), 229 LOWER32(pinfo.nblocks), UPPER32(pinfo.nblocks)); 167 230 } 168 231 -
uspace/srv/volsrv/disk.c
r3faa03d r1626cd4 137 137 assert(fibril_mutex_is_locked(&vol_disks_lock)); 138 138 139 log_msg(LOG_DEFAULT, LVL_ DEBUG, "vol_disk_add()");139 log_msg(LOG_DEFAULT, LVL_NOTE, "vol_disk_add()"); 140 140 disk = vol_disk_new(); 141 141 if (disk == NULL) … … 158 158 159 159 rc = vbd_disk_info(vbd, sid, &dinfo); 160 log_msg(LOG_DEFAULT, LVL_NOTE, "Got disk info."); 160 161 if (rc != EOK) { 161 162 log_msg(LOG_DEFAULT, LVL_NOTE, "Cannot get disk label "
Note:
See TracChangeset
for help on using the changeset viewer.
