Changeset 800d188 in mainline for uspace/srv/bd/hr/superblock.c
- Timestamp:
- 2025-04-15T07:00:31Z (9 months ago)
- Children:
- 29e7cc7
- Parents:
- ca7fa5b
- git-author:
- Miroslav Cimerman <mc@…> (2025-04-15 06:55:25)
- git-committer:
- Miroslav Cimerman <mc@…> (2025-04-15 07:00:31)
- File:
-
- 1 edited
-
uspace/srv/bd/hr/superblock.c (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/bd/hr/superblock.c
rca7fa5b r800d188 88 88 89 89 /* 90 * TODO: think about thread safety, if hr_metadata_save() can91 * be called from multiple threads, and if, maybe will need92 * md_lock... or whatever, but dont want to stall I/Os...93 */ 94 errno_t hr_metadata_save(hr_volume_t *vol )90 * XXX: finish this fcn documentation 91 * 92 * Returns ENOMEM else EOK 93 */ 94 errno_t hr_metadata_save(hr_volume_t *vol, bool with_state_callback) 95 95 { 96 96 HR_DEBUG("%s()", __func__); … … 102 102 return ENOMEM; 103 103 104 fibril_rwlock_read_lock(&vol->extents_lock); 105 106 fibril_mutex_lock(&vol->md_lock); 107 104 108 for (size_t i = 0; i < vol->extent_no; i++) { 105 109 hr_extent_t *ext = &vol->extents[i]; 110 111 fibril_rwlock_read_lock(&vol->states_lock); 106 112 107 113 /* TODO: special case for REBUILD */ … … 109 115 continue; 110 116 117 fibril_rwlock_read_unlock(&vol->states_lock); 118 111 119 vol->in_mem_md->index = i; 112 120 hr_encode_metadata_to_block(vol->in_mem_md, md_block); 113 121 rc = hr_write_metadata_block(ext->svc_id, md_block); 114 /* 115 * XXX: here maybe call vol status event or the state 116 * callback inside, same with read_block... 117 * 118 * also think about using FGE here... maybe a bit more 119 * code, but faster and gratis state callback :-) 120 */ 121 if (rc != EOK) 122 goto error; 122 if (with_state_callback && rc != EOK) 123 vol->state_callback(vol, i, rc); 123 124 } 124 125 125 error: 126 fibril_mutex_unlock(&vol->md_lock); 127 128 fibril_rwlock_read_unlock(&vol->extents_lock); 129 130 if (with_state_callback) 131 vol->hr_ops.status_event(vol); 132 126 133 free(md_block); 127 return rc;134 return EOK; 128 135 } 129 136 … … 161 168 162 169 rc = block_write_direct(dev, blkno - 1, HR_META_SIZE, block); 163 /*164 * XXX: here maybe call vol status event or the state callback...165 *166 * but need to pass vol pointer167 */168 170 169 171 return rc;
Note:
See TracChangeset
for help on using the changeset viewer.
