Changeset 5b320ac in mainline for uspace/lib/device
- Timestamp:
- 2024-11-22T18:38:49Z (14 months ago)
- Children:
- d0f0744
- Parents:
- 06f2762
- Location:
- uspace/lib/device
- Files:
-
- 3 edited
-
include/hr.h (modified) (5 diffs)
-
include/ipc/hr.h (modified) (1 diff)
-
src/hr.c (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/device/include/hr.h
r06f2762 r5b320ac 43 43 /* for now */ 44 44 #define HR_MAX_EXTENTS 4 45 #define HR_MAX_HOTSPARES HR_MAX_EXTENTS 45 46 46 47 #define HR_DEVNAME_LEN 32 … … 57 58 HR_VOL_ONLINE, /* OK, OPTIMAL */ 58 59 HR_VOL_FAULTY, 59 HR_VOL_DEGRADED /* also used for partial, but usable mirror */ 60 HR_VOL_DEGRADED, /* also used for partial, but usable mirror */ 61 HR_VOL_REBUILD 60 62 } hr_vol_status_t; 61 63 … … 63 65 HR_EXT_ONLINE, /* OK */ 64 66 HR_EXT_MISSING, 65 HR_EXT_FAILED 67 HR_EXT_FAILED, 68 HR_EXT_REBUILD, 69 HR_EXT_HOTSPARE 66 70 } hr_ext_status_t; 67 71 … … 84 88 typedef struct hr_vol_info { 85 89 hr_extent_t extents[HR_MAX_EXTENTS]; 90 hr_extent_t hotspares[HR_MAX_HOTSPARES]; 86 91 size_t extent_no; 92 size_t hotspare_no; 87 93 service_id_t svc_id; 88 94 hr_level_t level; … … 98 104 extern errno_t hr_create(hr_t *, hr_config_t *, bool); 99 105 extern errno_t hr_stop(const char *, long); 106 extern errno_t hr_add_hotspare(service_id_t, service_id_t); 100 107 extern errno_t hr_print_status(void); 101 108 -
uspace/lib/device/include/ipc/hr.h
r06f2762 r5b320ac 42 42 HR_ASSEMBLE, 43 43 HR_STOP, 44 HR_ADD_HOTSPARE, 44 45 HR_STATUS 45 46 } hr_request_t; -
uspace/lib/device/src/hr.c
r06f2762 r5b320ac 166 166 printf(" %s %zu %s\n", hr_get_ext_status_msg(ext->status), i, devname); 167 167 } 168 169 if (vol_info->hotspare_no == 0) 170 return EOK; 171 172 printf("hotspares: [status] [index] [devname]\n"); 173 for (i = 0; i < vol_info->hotspare_no; i++) { 174 ext = &vol_info->hotspares[i]; 175 if (ext->status == HR_EXT_MISSING) { 176 devname = (char *) "MISSING-devname"; 177 } else { 178 rc = loc_service_get_name(ext->svc_id, &devname); 179 if (rc != EOK) 180 return rc; 181 } 182 printf(" %s %zu %s\n", 183 hr_get_ext_status_msg(ext->status), i, devname); 184 } 185 168 186 return EOK; 169 187 } … … 194 212 if (rc != EOK) 195 213 goto error; 214 error: 215 hr_sess_destroy(hr); 216 return rc; 217 } 218 219 errno_t hr_add_hotspare(service_id_t vol_svc_id, service_id_t hs_svc_id) 220 { 221 hr_t *hr; 222 errno_t rc; 223 async_exch_t *exch; 224 225 rc = hr_sess_init(&hr); 226 if (rc != EOK) 227 return rc; 228 229 exch = async_exchange_begin(hr->sess); 230 if (exch == NULL) { 231 rc = EINVAL; 232 goto error; 233 } 234 235 rc = async_req_2_0(exch, HR_ADD_HOTSPARE, vol_svc_id, hs_svc_id); 236 async_exchange_end(exch); 196 237 error: 197 238 hr_sess_destroy(hr); … … 277 318 case HR_VOL_DEGRADED: 278 319 return "DEGRADED"; 320 case HR_VOL_REBUILD: 321 return "REBUILD"; 279 322 default: 280 323 return "UNKNOWN"; … … 291 334 case HR_EXT_FAILED: 292 335 return "FAILED"; 336 case HR_EXT_REBUILD: 337 return "REBUILD"; 338 case HR_EXT_HOTSPARE: 339 return "HOTSPARE"; 293 340 default: 294 341 return "UNKNOWN";
Note:
See TracChangeset
for help on using the changeset viewer.
