Changeset 6a8c1569 in mainline for uspace/srv/bd/hr/metadata/native.c
- Timestamp:
- 2025-06-23T18:31:18Z (9 months ago)
- Children:
- 62a8756
- Parents:
- e0695ce
- File:
-
- 1 edited
-
uspace/srv/bd/hr/metadata/native.c (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/bd/hr/metadata/native.c
re0695ce r6a8c1569 65 65 static void meta_native_inc_counter(hr_volume_t *); 66 66 static errno_t meta_native_save(hr_volume_t *, bool); 67 static errno_t meta_native_save_ext(hr_volume_t *, size_t, bool); 67 68 static const char *meta_native_get_devname(const void *); 68 69 static hr_level_t meta_native_get_level(const void *); … … 86 87 .inc_counter = meta_native_inc_counter, 87 88 .save = meta_native_save, 89 .save_ext = meta_native_save_ext, 88 90 .get_devname = meta_native_get_devname, 89 91 .get_level = meta_native_get_level, … … 394 396 HR_DEBUG("%s()", __func__); 395 397 396 errno_t rc = EOK; 398 fibril_rwlock_read_lock(&vol->extents_lock); 399 400 for (size_t i = 0; i < vol->extent_no; i++) 401 meta_native_save_ext(vol, i, with_state_callback); 402 403 fibril_rwlock_read_unlock(&vol->extents_lock); 404 405 return EOK; 406 } 407 408 static errno_t meta_native_save_ext(hr_volume_t *vol, size_t ext_idx, 409 bool with_state_callback) 410 { 411 HR_DEBUG("%s()", __func__); 412 413 assert(fibril_rwlock_is_locked(&vol->extents_lock)); 397 414 398 415 void *md_block = hr_calloc_waitok(1, vol->bsize); … … 400 417 hr_metadata_t *md = (hr_metadata_t *)vol->in_mem_md; 401 418 402 fibril_rwlock_read_lock(&vol->extents_lock); 419 hr_extent_t *ext = &vol->extents[ext_idx]; 420 421 fibril_rwlock_read_lock(&vol->states_lock); 422 hr_ext_state_t s = ext->state; 423 fibril_rwlock_read_unlock(&vol->states_lock); 424 425 if (s != HR_EXT_ONLINE && s != HR_EXT_REBUILD) { 426 return EINVAL; 427 } 403 428 404 429 fibril_mutex_lock(&vol->md_lock); 405 430 406 for (size_t i = 0; i < vol->extent_no; i++) { 407 hr_extent_t *ext = &vol->extents[i]; 408 409 fibril_rwlock_read_lock(&vol->states_lock); 410 hr_ext_state_t s = ext->state; 411 412 if (s != HR_EXT_ONLINE && s != HR_EXT_REBUILD) { 413 fibril_rwlock_read_unlock(&vol->states_lock); 414 continue; 415 } 416 417 fibril_rwlock_read_unlock(&vol->states_lock); 418 419 md->index = i; 420 if (s == HR_EXT_REBUILD) 421 md->rebuild_pos = vol->rebuild_blk; 422 else 423 md->rebuild_pos = 0; 424 meta_native_encode(md, md_block); 425 rc = meta_native_write_block(ext->svc_id, md_block); 426 if (rc != EOK && with_state_callback) 427 vol->hr_ops.ext_state_cb(vol, i, rc); 428 } 431 md->index = ext_idx; 432 if (s == HR_EXT_REBUILD) 433 md->rebuild_pos = vol->rebuild_blk; 434 else 435 md->rebuild_pos = 0; 436 meta_native_encode(md, md_block); 437 errno_t rc = meta_native_write_block(ext->svc_id, md_block); 438 if (rc != EOK && with_state_callback) 439 vol->hr_ops.ext_state_cb(vol, ext_idx, rc); 429 440 430 441 fibril_mutex_unlock(&vol->md_lock); 431 432 fibril_rwlock_read_unlock(&vol->extents_lock);433 442 434 443 if (with_state_callback)
Note:
See TracChangeset
for help on using the changeset viewer.
