Changeset 22fb7ab in mainline for uspace/srv/volsrv/volsrv.c
- Timestamp:
- 2015-06-26T16:15:31Z (9 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 28ed0d9
- Parents:
- 1356f85a
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/volsrv/volsrv.c
r1356f85a r22fb7ab 38 38 #include <io/log.h> 39 39 #include <ipc/services.h> 40 #include <ipc/vol.h> 40 41 #include <loc.h> 41 42 #include <stdio.h> … … 54 55 log_msg(LOG_DEFAULT, LVL_DEBUG, "vol_init()"); 55 56 57 rc = vol_disk_init(); 58 if (rc != EOK) 59 return rc; 60 56 61 rc = vol_disk_discovery_start(); 57 62 if (rc != EOK) … … 76 81 } 77 82 83 static void vol_get_disks_srv(ipc_callid_t iid, ipc_call_t *icall) 84 { 85 ipc_callid_t callid; 86 size_t size; 87 size_t act_size; 88 int rc; 89 90 if (!async_data_read_receive(&callid, &size)) { 91 async_answer_0(callid, EREFUSED); 92 async_answer_0(iid, EREFUSED); 93 return; 94 } 95 96 service_id_t *id_buf = (service_id_t *) malloc(size); 97 if (id_buf == NULL) { 98 async_answer_0(callid, ENOMEM); 99 async_answer_0(iid, ENOMEM); 100 return; 101 } 102 103 rc = vol_disk_get_ids(id_buf, size, &act_size); 104 if (rc != EOK) { 105 async_answer_0(callid, rc); 106 async_answer_0(iid, rc); 107 return; 108 } 109 110 sysarg_t retval = async_data_read_finalize(callid, id_buf, size); 111 free(id_buf); 112 113 async_answer_1(iid, retval, act_size); 114 } 115 116 static void vol_disk_info_srv(ipc_callid_t iid, ipc_call_t *icall) 117 { 118 service_id_t sid; 119 vol_disk_t *disk; 120 int rc; 121 122 sid = IPC_GET_ARG1(*icall); 123 rc = vol_disk_find_by_id(sid, &disk); 124 if (rc != EOK) { 125 async_answer_0(iid, ENOENT); 126 return; 127 } 128 129 async_answer_2(iid, rc, disk->dcnt, disk->ltype); 130 } 131 132 static void vol_label_create_srv(ipc_callid_t iid, ipc_call_t *icall) 133 { 134 service_id_t sid; 135 vol_disk_t *disk; 136 label_type_t ltype; 137 int rc; 138 139 sid = IPC_GET_ARG1(*icall); 140 ltype = IPC_GET_ARG2(*icall); 141 142 rc = vol_disk_find_by_id(sid, &disk); 143 if (rc != EOK) { 144 async_answer_0(iid, ENOENT); 145 return; 146 } 147 148 disk->dcnt = dc_label; 149 disk->ltype = ltype; 150 151 async_answer_0(iid, EOK); 152 } 153 154 static void vol_disk_empty_srv(ipc_callid_t iid, ipc_call_t *icall) 155 { 156 service_id_t sid; 157 vol_disk_t *disk; 158 int rc; 159 160 sid = IPC_GET_ARG1(*icall); 161 162 rc = vol_disk_find_by_id(sid, &disk); 163 if (rc != EOK) { 164 async_answer_0(iid, ENOENT); 165 return; 166 } 167 168 disk->dcnt = dc_empty; 169 170 async_answer_0(iid, EOK); 171 } 78 172 79 173 static void vol_client_conn(ipc_callid_t iid, ipc_call_t *icall, void *arg) … … 96 190 97 191 switch (method) { 192 case VOL_GET_DISKS: 193 vol_get_disks_srv(callid, &call); 194 break; 195 case VOL_DISK_INFO: 196 vol_disk_info_srv(callid, &call); 197 break; 198 case VOL_LABEL_CREATE: 199 vol_label_create_srv(callid, &call); 200 break; 201 case VOL_DISK_EMPTY: 202 vol_disk_empty_srv(callid, &call); 203 break; 98 204 default: 99 205 async_answer_0(callid, EINVAL);
Note:
See TracChangeset
for help on using the changeset viewer.