Changeset 56602e0 in mainline
- Timestamp:
- 2025-05-07T11:27:25Z (5 weeks ago)
- Children:
- 964e897
- Parents:
- 155d34f
- git-author:
- Miroslav Cimerman <mc@…> (2025-05-07 11:26:23)
- git-committer:
- Miroslav Cimerman <mc@…> (2025-05-07 11:27:25)
- Location:
- uspace
- Files:
-
- 14 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/app/hrctl/hrctl.c
r155d34f r56602e0 74 74 " -h, --hotspare device add hotspare.\n" 75 75 "\n" 76 " -s, --stat us Display statusof active volumes.\n"76 " -s, --state Display state of active volumes.\n" 77 77 "\n" 78 78 "Example usage:\n" … … 435 435 } 436 436 437 static int handle_stat us(hr_t *hr, int argc, char **argv)437 static int handle_state(hr_t *hr, int argc, char **argv) 438 438 { 439 439 (void)argc; 440 440 (void)argv; 441 441 442 errno_t rc = hr_print_stat us(hr);442 errno_t rc = hr_print_state(hr); 443 443 if (rc != EOK) { 444 printf(NAME ": stat usprinting failed: %s\n", str_error(rc));444 printf(NAME ": state printing failed: %s\n", str_error(rc)); 445 445 return EXIT_FAILURE; 446 446 } … … 474 474 { "disassemble", no_argument, 0, 'd' }, 475 475 { "modify", no_argument, 0, 'm' }, 476 { "stat us", no_argument, 0, 's' },476 { "state", no_argument, 0, 's' }, 477 477 { 0, 0, 0, 0 } 478 478 }; … … 496 496 goto end; 497 497 case 's': 498 rc = handle_stat us(hr, argc, argv);498 rc = handle_state(hr, argc, argv); 499 499 goto end; 500 500 default: -
uspace/lib/device/include/hr.h
r155d34f r56602e0 64 64 } hr_layout_t; 65 65 66 typedef enum hr_vol_stat us{66 typedef enum hr_vol_state { 67 67 HR_VOL_NONE = 0, /* Unknown/None */ 68 68 HR_VOL_ONLINE, /* optimal */ … … 70 70 HR_VOL_DEGRADED, /* not optimal */ 71 71 HR_VOL_REBUILD /* rebuild in progress */ 72 } hr_vol_stat us_t;72 } hr_vol_state_t; 73 73 74 typedef enum hr_ext_stat us{75 HR_EXT_NONE = 0, /* unknown/none stat us*/74 typedef enum hr_ext_state { 75 HR_EXT_NONE = 0, /* unknown/none state */ 76 76 HR_EXT_INVALID, /* working but not consistent */ 77 77 HR_EXT_ONLINE, /* ok */ … … 80 80 HR_EXT_REBUILD, 81 81 HR_EXT_HOTSPARE 82 } hr_ext_stat us_t;82 } hr_ext_state_t; 83 83 84 84 typedef struct hr { … … 95 95 typedef struct hr_extent { 96 96 service_id_t svc_id; 97 hr_ext_stat us_t status;97 hr_ext_state_t state; 98 98 } hr_extent_t; 99 99 … … 108 108 uint32_t strip_size; 109 109 size_t bsize; 110 hr_vol_stat us_t status;110 hr_vol_state_t state; 111 111 uint8_t layout; 112 112 } hr_vol_info_t; … … 129 129 extern errno_t hr_fail_extent(hr_t *, const char *, unsigned long); 130 130 extern errno_t hr_add_hotspare(hr_t *, const char *, const char *); 131 extern errno_t hr_print_stat us(hr_t *);132 extern const char *hr_get_vol_state_str(hr_vol_stat us_t);133 extern const char *hr_get_ext_state_str(hr_ext_stat us_t);131 extern errno_t hr_print_state(hr_t *); 132 extern const char *hr_get_vol_state_str(hr_vol_state_t); 133 extern const char *hr_get_ext_state_str(hr_ext_state_t); 134 134 extern const char *hr_get_layout_str(hr_layout_t); 135 135 extern const char *hr_get_metadata_type_str(hr_metadata_type_t); -
uspace/lib/device/src/hr.c
r155d34f r56602e0 225 225 printf("devname: %s\n", devname); 226 226 227 printf("stat us: %s\n", hr_get_vol_state_str(vol_info->status));227 printf("state: %s\n", hr_get_vol_state_str(vol_info->state)); 228 228 229 229 printf("level: %d\n", vol_info->level); … … 246 246 247 247 if (vol_info->level == HR_LVL_4) 248 printf("extents: [P] [stat us] [index] [devname]\n");248 printf("extents: [P] [state] [index] [devname]\n"); 249 249 else 250 printf("extents: [stat us] [index] [devname]\n");250 printf("extents: [state] [index] [devname]\n"); 251 251 for (i = 0; i < vol_info->extent_no; i++) { 252 252 ext = &vol_info->extents[i]; 253 if (ext->stat us == HR_EXT_MISSING || ext->status== HR_EXT_NONE) {253 if (ext->state == HR_EXT_MISSING || ext->state == HR_EXT_NONE) { 254 254 devname = (char *) "MISSING-devname"; 255 255 } else { … … 264 264 (i == vol_info->extent_no - 1 && 265 265 vol_info->layout == HR_RLQ_RAID4_N)) 266 printf(" P %s %zu %s\n", hr_get_ext_state_str(ext->stat us), i, devname);266 printf(" P %s %zu %s\n", hr_get_ext_state_str(ext->state), i, devname); 267 267 else 268 printf(" %s %zu %s\n", hr_get_ext_state_str(ext->stat us), i, devname);268 printf(" %s %zu %s\n", hr_get_ext_state_str(ext->state), i, devname); 269 269 } else { 270 printf(" %s %zu %s\n", hr_get_ext_state_str(ext->stat us), i, devname);270 printf(" %s %zu %s\n", hr_get_ext_state_str(ext->state), i, devname); 271 271 } 272 272 } … … 275 275 return EOK; 276 276 277 printf("hotspares: [stat us] [index] [devname]\n");277 printf("hotspares: [state] [index] [devname]\n"); 278 278 for (i = 0; i < vol_info->hotspare_no; i++) { 279 279 ext = &vol_info->hotspares[i]; 280 if (ext->stat us== HR_EXT_MISSING) {280 if (ext->state == HR_EXT_MISSING) { 281 281 devname = (char *) "MISSING-devname"; 282 282 } else { … … 286 286 } 287 287 printf(" %s %zu %s\n", 288 hr_get_ext_state_str(ext->stat us), i, devname);288 hr_get_ext_state_str(ext->state), i, devname); 289 289 } 290 290 … … 414 414 * @return EOK on success or an error code 415 415 */ 416 errno_t hr_print_stat us(hr_t *hr)416 errno_t hr_print_state(hr_t *hr) 417 417 { 418 418 errno_t rc, retval; … … 483 483 * @return State string 484 484 */ 485 const char *hr_get_vol_state_str(hr_vol_stat us_t status)486 { 487 switch (stat us) {485 const char *hr_get_vol_state_str(hr_vol_state_t state) 486 { 487 switch (state) { 488 488 case HR_VOL_NONE: 489 489 return "NONE/UNKNOWN"; … … 507 507 * @return State string 508 508 */ 509 const char *hr_get_ext_state_str(hr_ext_stat us_t status)510 { 511 switch (stat us) {509 const char *hr_get_ext_state_str(hr_ext_state_t state) 510 { 511 switch (state) { 512 512 case HR_EXT_NONE: 513 513 return "NONE/UNKNOWN"; -
uspace/srv/bd/hr/hr.c
r155d34f r56602e0 59 59 static void hr_stop_all_srv(ipc_call_t *); 60 60 static void hr_add_hotspare_srv(ipc_call_t *); 61 static void hr_print_stat us_srv(ipc_call_t *);61 static void hr_print_state_srv(ipc_call_t *); 62 62 static void hr_ctl_conn(ipc_call_t *); 63 63 static void hr_client_conn(ipc_call_t *, void *); … … 368 368 fibril_rwlock_write_lock(&vol->states_lock); 369 369 370 switch (vol->extents[fail_extent].stat us) {370 switch (vol->extents[fail_extent].state) { 371 371 case HR_EXT_NONE: 372 372 case HR_EXT_MISSING: … … 377 377 return; 378 378 default: 379 hr_update_ext_stat us(vol, fail_extent, HR_EXT_FAILED);379 hr_update_ext_state(vol, fail_extent, HR_EXT_FAILED); 380 380 hr_mark_vol_state_dirty(vol); 381 381 } … … 384 384 fibril_rwlock_read_unlock(&vol->extents_lock); 385 385 386 vol->hr_ops.stat us_event(vol);386 vol->hr_ops.state_event(vol); 387 387 388 388 async_answer_0(icall, EOK); … … 428 428 * Prints info about all active volumes. 429 429 */ 430 static void hr_print_stat us_srv(ipc_call_t *icall)430 static void hr_print_state_srv(ipc_call_t *icall) 431 431 { 432 432 HR_DEBUG("%s()", __func__); … … 470 470 info.strip_size = vol->strip_size; 471 471 info.bsize = vol->bsize; 472 info.stat us = vol->status;472 info.state = vol->state; 473 473 info.layout = vol->layout; 474 474 … … 538 538 break; 539 539 case HR_STATUS: 540 hr_print_stat us_srv(&call);540 hr_print_state_srv(&call); 541 541 break; 542 542 default: -
uspace/srv/bd/hr/metadata/foreign/geom/hr_g_mirror.c
r155d34f r56602e0 160 160 /* for now no md_sync_offset handling for saved REBUILD */ 161 161 if (iter_meta->md_genid == max_counter_val) 162 vol->extents[index].stat us= HR_EXT_ONLINE;162 vol->extents[index].state = HR_EXT_ONLINE; 163 163 else 164 vol->extents[index].stat us= HR_EXT_INVALID;164 vol->extents[index].state = HR_EXT_INVALID; 165 165 166 166 index++; … … 168 168 169 169 for (size_t i = 0; i < vol->extent_no; i++) { 170 if (vol->extents[i].stat us== HR_EXT_NONE)171 vol->extents[i].stat us= HR_EXT_MISSING;170 if (vol->extents[i].state == HR_EXT_NONE) 171 vol->extents[i].state = HR_EXT_MISSING; 172 172 } 173 173 … … 223 223 rc = block_read_direct(dev, blkno - 1, 1, block); 224 224 /* 225 * XXX: here maybe call vol stat usevent or the state callback...225 * XXX: here maybe call vol state event or the state callback... 226 226 * 227 227 * but need to pass vol pointer -
uspace/srv/bd/hr/metadata/foreign/geom/hr_g_stripe.c
r155d34f r56602e0 167 167 iter->fini = false; 168 168 169 vol->extents[index].stat us= HR_EXT_ONLINE;169 vol->extents[index].state = HR_EXT_ONLINE; 170 170 } 171 171 172 172 for (size_t i = 0; i < vol->extent_no; i++) { 173 if (vol->extents[i].stat us== HR_EXT_NONE)174 vol->extents[i].stat us= HR_EXT_MISSING;173 if (vol->extents[i].state == HR_EXT_NONE) 174 vol->extents[i].state = HR_EXT_MISSING; 175 175 } 176 176 … … 227 227 rc = block_read_direct(dev, blkno - 1, 1, block); 228 228 /* 229 * XXX: here maybe call vol stat usevent or the state callback...229 * XXX: here maybe call vol state event or the state callback... 230 230 * 231 231 * but need to pass vol pointer -
uspace/srv/bd/hr/metadata/foreign/softraid/hr_softraid.c
r155d34f r56602e0 167 167 /* for now no ssd_rebuild handling for saved REBUILD */ 168 168 if (iter_meta->ssd_ondisk == max_counter_val) 169 vol->extents[index].stat us= HR_EXT_ONLINE;169 vol->extents[index].state = HR_EXT_ONLINE; 170 170 else 171 vol->extents[index].stat us= HR_EXT_INVALID;171 vol->extents[index].state = HR_EXT_INVALID; 172 172 } 173 173 174 174 for (size_t i = 0; i < vol->extent_no; i++) { 175 if (vol->extents[i].stat us== HR_EXT_NONE)176 vol->extents[i].stat us= HR_EXT_MISSING;175 if (vol->extents[i].state == HR_EXT_NONE) 176 vol->extents[i].state = HR_EXT_MISSING; 177 177 } 178 178 -
uspace/srv/bd/hr/metadata/native.c
r155d34f r56602e0 171 171 172 172 if (iter_meta->counter == max_counter_val) 173 vol->extents[iter_meta->index].stat us= HR_EXT_ONLINE;173 vol->extents[iter_meta->index].state = HR_EXT_ONLINE; 174 174 else 175 vol->extents[iter_meta->index].stat us= HR_EXT_INVALID;175 vol->extents[iter_meta->index].state = HR_EXT_INVALID; 176 176 } 177 177 178 178 for (size_t i = 0; i < vol->extent_no; i++) { 179 if (vol->extents[i].stat us== HR_EXT_NONE)180 vol->extents[i].stat us= HR_EXT_MISSING;179 if (vol->extents[i].state == HR_EXT_NONE) 180 vol->extents[i].state = HR_EXT_MISSING; 181 181 } 182 182 … … 283 283 rc = block_read_direct(dev, blkno - 1, HR_NATIVE_META_SIZE, block); 284 284 /* 285 * XXX: here maybe call vol stat usevent or the state callback...285 * XXX: here maybe call vol state event or the state callback... 286 286 * 287 287 * but need to pass vol pointer … … 379 379 380 380 /* TODO: special case for REBUILD */ 381 if (ext->stat us!= HR_EXT_ONLINE)381 if (ext->state != HR_EXT_ONLINE) 382 382 continue; 383 383 … … 396 396 397 397 if (with_state_callback) 398 vol->hr_ops.stat us_event(vol);398 vol->hr_ops.state_event(vol); 399 399 400 400 free(md_block); -
uspace/srv/bd/hr/raid0.c
r155d34f r56602e0 53 53 #include "var.h" 54 54 55 static void hr_raid0_update_vol_stat us(hr_volume_t *);55 static void hr_raid0_update_vol_state(hr_volume_t *); 56 56 static void hr_raid0_state_callback(hr_volume_t *, size_t, errno_t); 57 57 static errno_t hr_raid0_bd_op(hr_bd_op_type_t, bd_srv_t *, aoff64_t, size_t, … … 92 92 } 93 93 94 hr_raid0_update_vol_stat us(new_volume);95 if (new_volume->stat us!= HR_VOL_ONLINE) {94 hr_raid0_update_vol_state(new_volume); 95 if (new_volume->state != HR_VOL_ONLINE) { 96 96 HR_NOTE("\"%s\": unusable state, not creating\n", 97 97 new_volume->devname); … … 130 130 } 131 131 132 void hr_raid0_stat us_event(hr_volume_t *vol)133 { 134 HR_DEBUG("%s()", __func__); 135 136 hr_raid0_update_vol_stat us(vol);132 void hr_raid0_state_event(hr_volume_t *vol) 133 { 134 HR_DEBUG("%s()", __func__); 135 136 hr_raid0_update_vol_state(vol); 137 137 } 138 138 … … 192 192 } 193 193 194 static void hr_raid0_update_vol_stat us(hr_volume_t *vol)194 static void hr_raid0_update_vol_state(hr_volume_t *vol) 195 195 { 196 196 fibril_mutex_lock(&vol->md_lock); … … 203 203 fibril_rwlock_read_lock(&vol->states_lock); 204 204 205 hr_vol_stat us_t old_state = vol->status;205 hr_vol_state_t old_state = vol->state; 206 206 207 207 for (size_t i = 0; i < vol->extent_no; i++) { 208 if (vol->extents[i].stat us!= HR_EXT_ONLINE) {208 if (vol->extents[i].state != HR_EXT_ONLINE) { 209 209 fibril_rwlock_read_unlock(&vol->states_lock); 210 210 211 211 if (old_state != HR_VOL_FAULTY) { 212 212 fibril_rwlock_write_lock(&vol->states_lock); 213 hr_update_vol_stat us(vol, HR_VOL_FAULTY);213 hr_update_vol_state(vol, HR_VOL_FAULTY); 214 214 fibril_rwlock_write_unlock(&vol->states_lock); 215 215 } … … 221 221 if (old_state != HR_VOL_ONLINE) { 222 222 fibril_rwlock_write_lock(&vol->states_lock); 223 hr_update_vol_stat us(vol, HR_VOL_ONLINE);223 hr_update_vol_state(vol, HR_VOL_ONLINE); 224 224 fibril_rwlock_write_unlock(&vol->states_lock); 225 225 } … … 235 235 switch (rc) { 236 236 case ENOENT: 237 hr_update_ext_stat us(vol, extent, HR_EXT_MISSING);237 hr_update_ext_state(vol, extent, HR_EXT_MISSING); 238 238 break; 239 239 default: 240 hr_update_ext_stat us(vol, extent, HR_EXT_FAILED);241 } 242 243 hr_update_vol_stat us(vol, HR_VOL_FAULTY);240 hr_update_ext_state(vol, extent, HR_EXT_FAILED); 241 } 242 243 hr_update_vol_state(vol, HR_VOL_FAULTY); 244 244 245 245 fibril_rwlock_write_unlock(&vol->states_lock); … … 257 257 258 258 fibril_rwlock_read_lock(&vol->states_lock); 259 if (vol->stat us!= HR_VOL_ONLINE) {259 if (vol->state != HR_VOL_ONLINE) { 260 260 fibril_rwlock_read_unlock(&vol->states_lock); 261 261 return EIO; -
uspace/srv/bd/hr/raid1.c
r155d34f r56602e0 56 56 #include "var.h" 57 57 58 static void hr_raid1_update_vol_stat us(hr_volume_t *);58 static void hr_raid1_update_vol_state(hr_volume_t *); 59 59 static void hr_raid1_ext_state_callback(hr_volume_t *, size_t, errno_t); 60 60 static size_t hr_raid1_count_good_extents(hr_volume_t *, uint64_t, size_t, … … 110 110 /* force volume state update */ 111 111 hr_mark_vol_state_dirty(new_volume); 112 hr_raid1_update_vol_stat us(new_volume);112 hr_raid1_update_vol_state(new_volume); 113 113 114 114 fibril_rwlock_read_lock(&new_volume->states_lock); 115 hr_vol_stat us_t state = new_volume->status;115 hr_vol_state_t state = new_volume->state; 116 116 fibril_rwlock_read_unlock(&new_volume->states_lock); 117 117 if (state == HR_VOL_FAULTY || state == HR_VOL_NONE) { … … 140 140 } 141 141 142 void hr_raid1_stat us_event(hr_volume_t *vol)142 void hr_raid1_state_event(hr_volume_t *vol) 143 143 { 144 144 HR_DEBUG("%s()", __func__); 145 145 146 hr_raid1_update_vol_stat us(vol);146 hr_raid1_update_vol_state(vol); 147 147 } 148 148 … … 153 153 errno_t rc = hr_util_add_hotspare(vol, hotspare); 154 154 155 hr_raid1_update_vol_stat us(vol);155 hr_raid1_update_vol_state(vol); 156 156 157 157 return rc; … … 213 213 } 214 214 215 static void hr_raid1_update_vol_stat us(hr_volume_t *vol)215 static void hr_raid1_update_vol_state(hr_volume_t *vol) 216 216 { 217 217 bool exp = true; … … 231 231 fibril_rwlock_read_lock(&vol->states_lock); 232 232 233 hr_vol_stat us_t old_state = vol->status;233 hr_vol_state_t old_state = vol->state; 234 234 size_t healthy = hr_count_extents(vol, HR_EXT_ONLINE); 235 235 … … 240 240 if (old_state != HR_VOL_FAULTY) { 241 241 fibril_rwlock_write_lock(&vol->states_lock); 242 hr_update_vol_stat us(vol, HR_VOL_FAULTY);242 hr_update_vol_state(vol, HR_VOL_FAULTY); 243 243 fibril_rwlock_write_unlock(&vol->states_lock); 244 244 } … … 247 247 old_state != HR_VOL_DEGRADED) { 248 248 fibril_rwlock_write_lock(&vol->states_lock); 249 hr_update_vol_stat us(vol, HR_VOL_DEGRADED);249 hr_update_vol_state(vol, HR_VOL_DEGRADED); 250 250 fibril_rwlock_write_unlock(&vol->states_lock); 251 251 } … … 265 265 if (old_state != HR_VOL_ONLINE) { 266 266 fibril_rwlock_write_lock(&vol->states_lock); 267 hr_update_vol_stat us(vol, HR_VOL_ONLINE);267 hr_update_vol_state(vol, HR_VOL_ONLINE); 268 268 fibril_rwlock_write_unlock(&vol->states_lock); 269 269 } … … 283 283 switch (rc) { 284 284 case ENOMEM: 285 hr_update_ext_stat us(vol, extent, HR_EXT_INVALID);285 hr_update_ext_state(vol, extent, HR_EXT_INVALID); 286 286 break; 287 287 case ENOENT: 288 hr_update_ext_stat us(vol, extent, HR_EXT_MISSING);288 hr_update_ext_state(vol, extent, HR_EXT_MISSING); 289 289 break; 290 290 default: 291 hr_update_ext_stat us(vol, extent, HR_EXT_FAILED);291 hr_update_ext_state(vol, extent, HR_EXT_FAILED); 292 292 } 293 293 … … 305 305 size_t count = 0; 306 306 for (size_t i = 0; i < vol->extent_no; i++) { 307 if (vol->extents[i].stat us== HR_EXT_ONLINE ||308 (vol->extents[i].stat us== HR_EXT_REBUILD &&307 if (vol->extents[i].state == HR_EXT_ONLINE || 308 (vol->extents[i].state == HR_EXT_REBUILD && 309 309 ba < rebuild_blk)) { 310 310 count++; … … 326 326 327 327 fibril_rwlock_read_lock(&vol->states_lock); 328 hr_vol_stat us_t vol_state = vol->status;328 hr_vol_state_t vol_state = vol->state; 329 329 fibril_rwlock_read_unlock(&vol->states_lock); 330 330 … … 358 358 for (i = 0; i < vol->extent_no; i++) { 359 359 fibril_rwlock_read_lock(&vol->states_lock); 360 hr_ext_stat us_t state = vol->extents[i].status;360 hr_ext_state_t state = vol->extents[i].state; 361 361 fibril_rwlock_read_unlock(&vol->states_lock); 362 362 … … 412 412 413 413 for (i = 0; i < vol->extent_no; i++) { 414 if (vol->extents[i].stat us!= HR_EXT_ONLINE &&415 (vol->extents[i].stat us!= HR_EXT_REBUILD ||414 if (vol->extents[i].state != HR_EXT_ONLINE && 415 (vol->extents[i].state != HR_EXT_REBUILD || 416 416 ba >= rebuild_blk)) { 417 417 /* … … 458 458 fibril_rwlock_read_unlock(&vol->extents_lock); 459 459 460 hr_raid1_update_vol_stat us(vol);460 hr_raid1_update_vol_state(vol); 461 461 462 462 return rc; … … 533 533 fibril_rwlock_write_lock(&vol->states_lock); 534 534 535 hr_update_ext_stat us(vol, rebuild_idx, HR_EXT_ONLINE);535 hr_update_ext_state(vol, rebuild_idx, HR_EXT_ONLINE); 536 536 537 537 /* … … 541 541 * state accordingly. 542 542 */ 543 hr_update_vol_stat us(vol, HR_VOL_ONLINE);543 hr_update_vol_state(vol, HR_VOL_ONLINE); 544 544 hr_mark_vol_state_dirty(vol); 545 545 … … 558 558 */ 559 559 fibril_rwlock_write_lock(&vol->states_lock); 560 hr_update_vol_stat us(vol, HR_VOL_DEGRADED);560 hr_update_vol_state(vol, HR_VOL_DEGRADED); 561 561 hr_mark_vol_state_dirty(vol); 562 562 fibril_rwlock_write_unlock(&vol->states_lock); … … 565 565 fibril_rwlock_read_unlock(&vol->extents_lock); 566 566 567 hr_raid1_update_vol_stat us(vol);567 hr_raid1_update_vol_state(vol); 568 568 569 569 if (buf != NULL) … … 591 591 size_t bad = vol->extent_no; 592 592 for (size_t i = 0; i < vol->extent_no; i++) { 593 if (vol->extents[i].stat us!= HR_EXT_ONLINE) {593 if (vol->extents[i].state != HR_EXT_ONLINE) { 594 594 bad = i; 595 595 break; … … 606 606 size_t hotspare_idx = vol->hotspare_no - 1; 607 607 608 hr_ext_stat us_t hs_state = vol->hotspares[hotspare_idx].status;608 hr_ext_state_t hs_state = vol->hotspares[hotspare_idx].state; 609 609 if (hs_state != HR_EXT_HOTSPARE) { 610 610 HR_ERROR("hr_raid1_rebuild(): invalid hotspare state \"%s\", " … … 628 628 atomic_store_explicit(&vol->rebuild_blk, 0, memory_order_relaxed); 629 629 630 hr_update_ext_stat us(vol, bad, HR_EXT_REBUILD);631 hr_update_vol_stat us(vol, HR_VOL_REBUILD);630 hr_update_ext_state(vol, bad, HR_EXT_REBUILD); 631 hr_update_vol_state(vol, HR_VOL_REBUILD); 632 632 633 633 *rebuild_idx = bad; … … 648 648 649 649 hr_update_ext_svc_id(vol, bad, hs_svc_id); 650 hr_update_ext_stat us(vol, bad, HR_EXT_HOTSPARE);650 hr_update_ext_state(vol, bad, HR_EXT_HOTSPARE); 651 651 652 652 hr_update_hotspare_svc_id(vol, hs, 0); 653 hr_update_hotspare_stat us(vol, hs, HR_EXT_MISSING);653 hr_update_hotspare_state(vol, hs, HR_EXT_MISSING); 654 654 655 655 vol->hotspare_no--; … … 670 670 671 671 fibril_rwlock_read_lock(&vol->states_lock); 672 hr_ext_stat us_t rebuild_ext_status = rebuild_ext->status;672 hr_ext_state_t rebuild_ext_state = rebuild_ext->state; 673 673 fibril_rwlock_read_unlock(&vol->states_lock); 674 674 675 if (rebuild_ext_stat us!= HR_EXT_REBUILD)675 if (rebuild_ext_state != HR_EXT_REBUILD) 676 676 return EINVAL; 677 677 … … 679 679 fibril_rwlock_read_lock(&vol->states_lock); 680 680 ext = &vol->extents[i]; 681 if (ext->stat us!= HR_EXT_ONLINE) {681 if (ext->state != HR_EXT_ONLINE) { 682 682 fibril_rwlock_read_unlock(&vol->states_lock); 683 683 continue; -
uspace/srv/bd/hr/raid5.c
r155d34f r56602e0 56 56 static errno_t hr_raid5_vol_usable(hr_volume_t *); 57 57 static ssize_t hr_raid5_get_bad_ext(hr_volume_t *); 58 static errno_t hr_raid5_update_vol_stat us(hr_volume_t *);58 static errno_t hr_raid5_update_vol_state(hr_volume_t *); 59 59 static void hr_raid5_handle_extent_error(hr_volume_t *, size_t, errno_t); 60 60 static void xor(void *, const void *, size_t); … … 105 105 fibril_rwlock_write_lock(&new_volume->states_lock); 106 106 107 errno_t rc = hr_raid5_update_vol_stat us(new_volume);107 errno_t rc = hr_raid5_update_vol_state(new_volume); 108 108 if (rc != EOK) { 109 109 HR_NOTE("\"%s\": unusable state, not creating\n", … … 145 145 } 146 146 147 void hr_raid5_stat us_event(hr_volume_t *vol)147 void hr_raid5_state_event(hr_volume_t *vol) 148 148 { 149 149 fibril_mutex_lock(&vol->lock); 150 150 fibril_rwlock_write_lock(&vol->states_lock); 151 (void)hr_raid5_update_vol_stat us(vol);151 (void)hr_raid5_update_vol_state(vol); 152 152 fibril_rwlock_write_unlock(&vol->states_lock); 153 153 fibril_mutex_unlock(&vol->lock); … … 167 167 * If the volume is degraded, start rebuild right away. 168 168 */ 169 if (vol->stat us== HR_VOL_DEGRADED) {169 if (vol->state == HR_VOL_DEGRADED) { 170 170 HR_DEBUG("hr_raid5_add_hotspare(): volume in DEGRADED state, " 171 171 "spawning new rebuild fibril\n"); … … 243 243 static errno_t hr_raid5_vol_usable(hr_volume_t *vol) 244 244 { 245 if (vol->stat us== HR_VOL_ONLINE ||246 vol->stat us== HR_VOL_DEGRADED ||247 vol->stat us== HR_VOL_REBUILD)245 if (vol->state == HR_VOL_ONLINE || 246 vol->state == HR_VOL_DEGRADED || 247 vol->state == HR_VOL_REBUILD) 248 248 return EOK; 249 249 return EIO; … … 257 257 { 258 258 for (size_t i = 0; i < vol->extent_no; i++) 259 if (vol->extents[i].stat us!= HR_EXT_ONLINE)259 if (vol->extents[i].state != HR_EXT_ONLINE) 260 260 return i; 261 261 return -1; 262 262 } 263 263 264 static errno_t hr_raid5_update_vol_stat us(hr_volume_t *vol)265 { 266 hr_vol_stat us_t old_state = vol->status;264 static errno_t hr_raid5_update_vol_state(hr_volume_t *vol) 265 { 266 hr_vol_state_t old_state = vol->state; 267 267 size_t bad = 0; 268 268 for (size_t i = 0; i < vol->extent_no; i++) 269 if (vol->extents[i].stat us!= HR_EXT_ONLINE)269 if (vol->extents[i].state != HR_EXT_ONLINE) 270 270 bad++; 271 271 … … 273 273 case 0: 274 274 if (old_state != HR_VOL_ONLINE) 275 hr_update_vol_stat us(vol, HR_VOL_ONLINE);275 hr_update_vol_state(vol, HR_VOL_ONLINE); 276 276 return EOK; 277 277 case 1: … … 279 279 old_state != HR_VOL_REBUILD) { 280 280 281 hr_update_vol_stat us(vol, HR_VOL_DEGRADED);281 hr_update_vol_state(vol, HR_VOL_DEGRADED); 282 282 283 283 if (vol->hotspare_no > 0) { … … 293 293 default: 294 294 if (old_state != HR_VOL_FAULTY) 295 hr_update_vol_stat us(vol, HR_VOL_FAULTY);295 hr_update_vol_state(vol, HR_VOL_FAULTY); 296 296 return EIO; 297 297 } … … 302 302 { 303 303 if (rc == ENOENT) 304 hr_update_ext_stat us(vol, extent, HR_EXT_MISSING);304 hr_update_ext_state(vol, extent, HR_EXT_MISSING); 305 305 else if (rc != EOK) 306 hr_update_ext_stat us(vol, extent, HR_EXT_FAILED);306 hr_update_ext_state(vol, extent, HR_EXT_FAILED); 307 307 } 308 308 … … 537 537 if (type == HR_BD_SYNC && ba == 0 && cnt == 0) { 538 538 hr_sync_all_extents(vol); 539 rc = hr_raid5_update_vol_stat us(vol);539 rc = hr_raid5_update_vol_state(vol); 540 540 return rc; 541 541 } … … 611 611 switch (type) { 612 612 case HR_BD_SYNC: 613 if (vol->extents[extent].stat us!= HR_EXT_ONLINE)613 if (vol->extents[extent].state != HR_EXT_ONLINE) 614 614 break; 615 615 rc = block_sync_cache(vol->extents[extent].svc_id, … … 648 648 649 649 if (rc != EOK) { 650 rc = hr_raid5_update_vol_stat us(vol);650 rc = hr_raid5_update_vol_state(vol); 651 651 if (rc == EOK) { 652 652 /* … … 700 700 701 701 error: 702 (void)hr_raid5_update_vol_stat us(vol);702 (void)hr_raid5_update_vol_state(vol); 703 703 fibril_rwlock_write_unlock(&vol->states_lock); 704 704 fibril_mutex_unlock(&vol->lock); … … 727 727 size_t bad = vol->extent_no; 728 728 for (size_t i = 0; i < vol->extent_no; i++) { 729 if (vol->extents[i].stat us== HR_EXT_FAILED) {729 if (vol->extents[i].state == HR_EXT_FAILED) { 730 730 bad = i; 731 731 break; … … 742 742 size_t hotspare_idx = vol->hotspare_no - 1; 743 743 744 hr_ext_stat us_t hs_state = vol->hotspares[hotspare_idx].status;744 hr_ext_state_t hs_state = vol->hotspares[hotspare_idx].state; 745 745 if (hs_state != HR_EXT_HOTSPARE) { 746 746 HR_ERROR("hr_raid5_rebuild(): invalid hotspare state \"%s\", " … … 755 755 756 756 vol->extents[bad].svc_id = vol->hotspares[hotspare_idx].svc_id; 757 hr_update_ext_stat us(vol, bad, HR_EXT_HOTSPARE);757 hr_update_ext_state(vol, bad, HR_EXT_HOTSPARE); 758 758 759 759 vol->hotspares[hotspare_idx].svc_id = 0; 760 760 fibril_mutex_lock(&vol->hotspare_lock); 761 hr_update_hotspare_stat us(vol, hotspare_idx, HR_EXT_MISSING);761 hr_update_hotspare_state(vol, hotspare_idx, HR_EXT_MISSING); 762 762 fibril_mutex_unlock(&vol->hotspare_lock); 763 763 … … 769 769 rebuild_ext->svc_id); 770 770 771 hr_update_ext_stat us(vol, bad, HR_EXT_REBUILD);772 hr_update_vol_stat us(vol, HR_VOL_REBUILD);771 hr_update_ext_state(vol, bad, HR_EXT_REBUILD); 772 hr_update_vol_state(vol, HR_VOL_REBUILD); 773 773 774 774 uint64_t max_blks = DATA_XFER_LIMIT / vol->bsize; … … 838 838 "extent number %zu\n", vol->devname, vol->svc_id, hotspare_idx); 839 839 840 hr_update_ext_stat us(vol, bad, HR_EXT_ONLINE);840 hr_update_ext_state(vol, bad, HR_EXT_ONLINE); 841 841 842 842 rc = vol->meta_ops->save(vol, WITH_STATE_CALLBACK); 843 843 844 844 end: 845 (void)hr_raid5_update_vol_stat us(vol);845 (void)hr_raid5_update_vol_state(vol); 846 846 847 847 fibril_rwlock_write_unlock(&vol->states_lock); -
uspace/srv/bd/hr/util.c
r155d34f r56602e0 98 98 vol->hr_ops.create = hr_raid0_create; 99 99 vol->hr_ops.init = hr_raid0_init; 100 vol->hr_ops.stat us_event = hr_raid0_status_event;100 vol->hr_ops.state_event = hr_raid0_state_event; 101 101 break; 102 102 case HR_LVL_1: 103 103 vol->hr_ops.create = hr_raid1_create; 104 104 vol->hr_ops.init = hr_raid1_init; 105 vol->hr_ops.stat us_event = hr_raid1_status_event;105 vol->hr_ops.state_event = hr_raid1_state_event; 106 106 if (meta_flags & HR_METADATA_HOTSPARE_SUPPORT) 107 107 vol->hr_ops.add_hotspare = hr_raid1_add_hotspare; … … 111 111 vol->hr_ops.create = hr_raid5_create; 112 112 vol->hr_ops.init = hr_raid5_init; 113 vol->hr_ops.stat us_event = hr_raid5_status_event;113 vol->hr_ops.state_event = hr_raid5_state_event; 114 114 if (meta_flags & HR_METADATA_HOTSPARE_SUPPORT) 115 115 vol->hr_ops.add_hotspare = hr_raid5_add_hotspare; … … 134 134 } 135 135 136 vol->stat us= HR_VOL_NONE;136 vol->state = HR_VOL_NONE; 137 137 138 138 fibril_mutex_initialize(&vol->lock); /* XXX: will remove this */ … … 268 268 269 269 vol->extents[i].svc_id = svc_id; 270 vol->extents[i].stat us= HR_EXT_ONLINE;270 vol->extents[i].state = HR_EXT_ONLINE; 271 271 272 272 if (blkno < smallest_blkno) … … 280 280 281 281 for (i = 0; i < HR_MAX_HOTSPARES; i++) 282 vol->hotspares[i].stat us= HR_EXT_MISSING;282 vol->hotspares[i].state = HR_EXT_MISSING; 283 283 284 284 return EOK; … … 374 374 } 375 375 376 void hr_update_ext_stat us(hr_volume_t *vol, size_t ext_idx, hr_ext_status_t s)376 void hr_update_ext_state(hr_volume_t *vol, size_t ext_idx, hr_ext_state_t s) 377 377 { 378 378 if (vol->level != HR_LVL_0) … … 383 383 assert(ext_idx < vol->extent_no); 384 384 385 hr_ext_stat us_t old = vol->extents[ext_idx].status;385 hr_ext_state_t old = vol->extents[ext_idx].state; 386 386 HR_NOTE("\"%s\": changing extent %zu state: %s -> %s\n", 387 387 vol->devname, ext_idx, hr_get_ext_state_str(old), 388 388 hr_get_ext_state_str(s)); 389 vol->extents[ext_idx].stat us= s;390 } 391 392 void hr_update_hotspare_stat us(hr_volume_t *vol, size_t hs_idx,393 hr_ext_stat us_t s)389 vol->extents[ext_idx].state = s; 390 } 391 392 void hr_update_hotspare_state(hr_volume_t *vol, size_t hs_idx, 393 hr_ext_state_t s) 394 394 { 395 395 assert(fibril_mutex_is_locked(&vol->hotspare_lock)); … … 397 397 assert(hs_idx < vol->hotspare_no); 398 398 399 hr_ext_stat us_t old = vol->hotspares[hs_idx].status;399 hr_ext_state_t old = vol->hotspares[hs_idx].state; 400 400 HR_NOTE("\"%s\": changing hotspare %zu state: %s -> %s\n", 401 401 vol->devname, hs_idx, hr_get_ext_state_str(old), 402 402 hr_get_ext_state_str(s)); 403 vol->hotspares[hs_idx].stat us= s;404 } 405 406 void hr_update_vol_stat us(hr_volume_t *vol, hr_vol_status_t new)403 vol->hotspares[hs_idx].state = s; 404 } 405 406 void hr_update_vol_state(hr_volume_t *vol, hr_vol_state_t new) 407 407 { 408 408 assert(fibril_rwlock_is_write_locked(&vol->states_lock)); 409 409 410 410 HR_NOTE("\"%s\": changing volume state: %s -> %s\n", vol->devname, 411 hr_get_vol_state_str(vol->stat us), hr_get_vol_state_str(new));412 vol->stat us= new;411 hr_get_vol_state_str(vol->state), hr_get_vol_state_str(new)); 412 vol->state = new; 413 413 } 414 414 … … 441 441 /* 442 442 * Do a whole sync (ba = 0, cnt = 0) across all extents, 443 * and update extent stat us. *For now*, the caller has to444 * update volume stat usafter the syncs.443 * and update extent state. *For now*, the caller has to 444 * update volume state after the syncs. 445 445 * 446 * TODO: add update_vol_stat usfcn ptr for each raid446 * TODO: add update_vol_state fcn ptr for each raid 447 447 */ 448 448 void hr_sync_all_extents(hr_volume_t *vol) … … 452 452 fibril_mutex_lock(&vol->lock); 453 453 for (size_t i = 0; i < vol->extent_no; i++) { 454 if (vol->extents[i].stat us!= HR_EXT_ONLINE)454 if (vol->extents[i].state != HR_EXT_ONLINE) 455 455 continue; 456 456 rc = block_sync_cache(vol->extents[i].svc_id, 0, 0); … … 459 459 if (rc != EOK) { 460 460 if (rc == ENOENT) 461 hr_update_ext_stat us(vol, i, HR_EXT_MISSING);461 hr_update_ext_state(vol, i, HR_EXT_MISSING); 462 462 else if (rc != EOK) 463 hr_update_ext_stat us(vol, i, HR_EXT_FAILED);463 hr_update_ext_state(vol, i, HR_EXT_FAILED); 464 464 } 465 465 } … … 467 467 } 468 468 469 size_t hr_count_extents(hr_volume_t *vol, hr_ext_stat us_t status)469 size_t hr_count_extents(hr_volume_t *vol, hr_ext_state_t state) 470 470 { 471 471 if (vol->level != HR_LVL_0) … … 475 475 size_t count = 0; 476 476 for (size_t i = 0; i < vol->extent_no; i++) 477 if (vol->extents[i].stat us == status)477 if (vol->extents[i].state == state) 478 478 count++; 479 479 … … 1052 1052 1053 1053 hr_update_hotspare_svc_id(vol, hs_idx, hotspare); 1054 hr_update_hotspare_stat us(vol, hs_idx, HR_EXT_HOTSPARE);1054 hr_update_hotspare_state(vol, hs_idx, HR_EXT_HOTSPARE); 1055 1055 1056 1056 hr_mark_vol_state_dirty(vol); -
uspace/srv/bd/hr/util.h
r155d34f r56602e0 77 77 extern errno_t hr_check_ba_range(hr_volume_t *, size_t, uint64_t); 78 78 extern void hr_add_ba_offset(hr_volume_t *, uint64_t *); 79 extern void hr_update_ext_stat us(hr_volume_t *, size_t,80 hr_ext_stat us_t);81 extern void hr_update_hotspare_stat us(hr_volume_t *, size_t,82 hr_ext_stat us_t);83 extern void hr_update_vol_stat us(hr_volume_t *, hr_vol_status_t);79 extern void hr_update_ext_state(hr_volume_t *, size_t, 80 hr_ext_state_t); 81 extern void hr_update_hotspare_state(hr_volume_t *, size_t, 82 hr_ext_state_t); 83 extern void hr_update_vol_state(hr_volume_t *, hr_vol_state_t); 84 84 extern void hr_update_ext_svc_id(hr_volume_t *, size_t, 85 85 service_id_t); … … 87 87 service_id_t); 88 88 extern void hr_sync_all_extents(hr_volume_t *); 89 extern size_t hr_count_extents(hr_volume_t *, hr_ext_stat us_t);89 extern size_t hr_count_extents(hr_volume_t *, hr_ext_state_t); 90 90 extern void hr_mark_vol_state_dirty(hr_volume_t *); 91 91 extern void hr_range_lock_release(hr_range_lock_t *); -
uspace/srv/bd/hr/var.h
r155d34f r56602e0 58 58 errno_t (*create)(hr_volume_t *); 59 59 errno_t (*init)(hr_volume_t *); 60 void (*stat us_event)(hr_volume_t *);60 void (*state_event)(hr_volume_t *); 61 61 errno_t (*add_hotspare)(hr_volume_t *, service_id_t); 62 62 } hr_ops_t; … … 103 103 _Atomic uint64_t rebuild_blk; /* rebuild position */ 104 104 _Atomic int open_cnt; /* open/close() counter */ 105 hr_vol_stat us_t status; /* volume status*/105 hr_vol_state_t state; /* volume state */ 106 106 void (*state_callback)(hr_volume_t *, size_t, errno_t); 107 107 } hr_volume_t; … … 136 136 extern errno_t hr_raid5_init(hr_volume_t *); 137 137 138 extern void hr_raid0_stat us_event(hr_volume_t *);139 extern void hr_raid1_stat us_event(hr_volume_t *);140 extern void hr_raid5_stat us_event(hr_volume_t *);138 extern void hr_raid0_state_event(hr_volume_t *); 139 extern void hr_raid1_state_event(hr_volume_t *); 140 extern void hr_raid5_state_event(hr_volume_t *); 141 141 142 142 extern errno_t hr_raid1_add_hotspare(hr_volume_t *, service_id_t);
Note:
See TracChangeset
for help on using the changeset viewer.