Changeset 22fb7ab in mainline for uspace/srv/volsrv/disk.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/disk.c
r1356f85a r22fb7ab 42 42 #include <stdlib.h> 43 43 #include <str.h> 44 #include <vbd.h> 44 45 45 46 #include "disk.h" … … 48 49 static int vol_disk_add(service_id_t); 49 50 50 static LIST_INITIALIZE(vol_disks); 51 static LIST_INITIALIZE(vol_disks); /* of vol_disk_t */ 51 52 static FIBRIL_MUTEX_INITIALIZE(vol_disks_lock); 53 static vbd_t *vbd; 52 54 53 55 /** Check for new disk devices */ … … 113 115 114 116 link_initialize(&disk->ldisks); 117 disk->dcnt = dc_empty; 115 118 116 119 return disk; … … 129 132 { 130 133 vol_disk_t *disk; 134 vbd_disk_info_t dinfo; 131 135 int rc; 132 136 … … 147 151 148 152 log_msg(LOG_DEFAULT, LVL_NOTE, "Probe disk %s", disk->svc_name); 149 /* rc = inetcfg_link_add(sid); 150 if (rc != EOK) { 151 log_msg(LOG_DEFAULT, LVL_ERROR, "Failed configuring link " 152 "'%s'.\n", nlink->svc_name); 153 goto error; 154 } 155 */ 153 154 rc = vbd_disk_add(vbd, sid); 155 if (rc == EOK) { 156 log_msg(LOG_DEFAULT, LVL_NOTE, "Disk %s accepted by VBD.", 157 disk->svc_name); 158 159 rc = vbd_disk_info(vbd, sid, &dinfo); 160 if (rc != EOK) { 161 log_msg(LOG_DEFAULT, LVL_NOTE, "Cannot get disk label " 162 "information."); 163 rc = EIO; 164 goto error; 165 } 166 167 disk->dcnt = dc_label; 168 disk->ltype = dinfo.ltype; 169 } else { 170 log_msg(LOG_DEFAULT, LVL_NOTE, "Disk %s not accepted by VBD.", 171 disk->svc_name); 172 disk->dcnt = dc_unknown; 173 } 174 156 175 list_append(&disk->ldisks, &vol_disks); 157 176 … … 168 187 } 169 188 189 int vol_disk_init(void) 190 { 191 int rc; 192 193 rc = vbd_create(&vbd); 194 if (rc != EOK) { 195 log_msg(LOG_DEFAULT, LVL_ERROR, "Failed initializing VBD."); 196 return EIO; 197 } 198 199 return EOK; 200 } 201 170 202 int vol_disk_discovery_start(void) 171 203 { … … 182 214 } 183 215 216 /** Get list of disks as array of service IDs. */ 217 int vol_disk_get_ids(service_id_t *id_buf, size_t buf_size, size_t *act_size) 218 { 219 size_t act_cnt; 220 size_t buf_cnt; 221 222 fibril_mutex_lock(&vol_disks_lock); 223 224 buf_cnt = buf_size / sizeof(service_id_t); 225 226 act_cnt = list_count(&vol_disks); 227 *act_size = act_cnt * sizeof(service_id_t); 228 229 if (buf_size % sizeof(service_id_t) != 0) { 230 fibril_mutex_unlock(&vol_disks_lock); 231 return EINVAL; 232 } 233 234 size_t pos = 0; 235 list_foreach(vol_disks, ldisks, vol_disk_t, disk) { 236 if (pos < buf_cnt) 237 id_buf[pos] = disk->svc_id; 238 pos++; 239 } 240 241 fibril_mutex_unlock(&vol_disks_lock); 242 return EOK; 243 } 244 245 int vol_disk_find_by_id(service_id_t sid, vol_disk_t **rdisk) 246 { 247 list_foreach(vol_disks, ldisks, vol_disk_t, disk) { 248 if (disk->svc_id == sid) { 249 *rdisk = disk; 250 /* XXX Add reference */ 251 return EOK; 252 } 253 } 254 255 return ENOENT; 256 } 257 184 258 /** @} 185 259 */
Note:
See TracChangeset
for help on using the changeset viewer.