Changeset e47a032 in mainline for uspace/srv/bd
- Timestamp:
- 2024-10-28T20:02:39Z (15 months ago)
- Children:
- 9fc1d36d
- Parents:
- 066fed9
- Location:
- uspace/srv/bd/hr
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/bd/hr/hr.c
r066fed9 re47a032 134 134 } 135 135 136 /* 137 * If there was a missing device provided 138 * for creation of a new array, abort 139 */ 140 if (!assemble) { 141 for (i = 0; i < cfg->dev_no; i++) { 142 if (cfg->devs[i] == 0) { 143 free(cfg); 144 async_answer_0(icall, EINVAL); 145 return; 146 } 147 } 148 } 149 136 150 new_volume = calloc(1, sizeof(hr_volume_t)); 137 151 if (new_volume == NULL) { … … 302 316 info.strip_size = volume->strip_size; 303 317 info.bsize = volume->bsize; 318 info.status = volume->status; 304 319 305 320 if (!async_data_read_receive(&call, &size)) { -
uspace/srv/bd/hr/superblock.c
r066fed9 re47a032 121 121 } 122 122 123 124 123 errno_t hr_fill_vol_from_meta(hr_volume_t *vol) 125 124 { … … 134 133 135 134 service_id_t cfg_svc_id_order[HR_MAXDEVS] = { 0 }; 136 for (size_t i = 0; i < vol->dev_no; i++) 135 for (size_t i = 0; i < vol->dev_no; i++) { 137 136 cfg_svc_id_order[i] = vol->extents[i].svc_id; 138 139 140 uint32_t md_order[HR_MAXDEVS] = { 0 }; 137 vol->extents[i].svc_id = 0; 138 vol->extents[i].status = HR_EXT_MISSING; 139 } 140 141 int32_t md_order[HR_MAXDEVS] = { 0 }; 141 142 for (size_t i = 0; i < vol->dev_no; i++) { 143 if (cfg_svc_id_order[i] == 0) { 144 md_order[i] = -1; 145 continue; 146 } 142 147 rc = read_metadata(cfg_svc_id_order[i], metadata); 143 148 if (rc != EOK) … … 149 154 } 150 155 151 for (size_t i = 0; i < vol->dev_no; i++) 152 for (size_t j = 0; j < vol->dev_no; j++) 153 if (i == md_order[j])156 for (size_t i = 0; i < vol->dev_no; i++) { 157 for (size_t j = 0; j < vol->dev_no; j++) { 158 if (i == (uint32_t) md_order[j]) { 154 159 vol->extents[i].svc_id = cfg_svc_id_order[j]; 160 vol->extents[i].status = HR_EXT_ONLINE; 161 } 162 } 163 } 155 164 156 165 /* -
uspace/srv/bd/hr/util.c
r066fed9 re47a032 56 56 57 57 for (i = 0; i < vol->dev_no; i++) { 58 if (vol->extents[i].svc_id == 0) { 59 vol->extents[i].status = HR_EXT_MISSING; 60 continue; 61 } 58 62 rc = block_init(vol->extents[i].svc_id); 63 vol->extents[i].status = HR_EXT_ONLINE; 59 64 log_msg(LOG_DEFAULT, LVL_DEBUG, 60 "hr_init_devs(): initing (%" PRIun ")", vol->extents[i].svc_id); 65 "hr_init_devs(): initing (%" PRIun ")", 66 vol->extents[i].svc_id); 61 67 if (rc != EOK) { 62 68 log_msg(LOG_DEFAULT, LVL_ERROR, … … 77 83 78 84 for (i = 0; i < vol->dev_no; i++) 79 block_fini(vol->extents[i].svc_id); 85 if (vol->extents[i].status != HR_EXT_MISSING) 86 block_fini(vol->extents[i].svc_id); 80 87 } 81 88 … … 127 134 128 135 errno_t rc; 129 size_t i, bsize, last_bsize; 130 uint64_t nblocks, last_nblocks; 136 size_t i, bsize; 137 uint64_t nblocks; 138 size_t last_bsize = 0; 139 uint64_t last_nblocks = 0; 131 140 uint64_t total_blocks = 0; 132 141 133 142 for (i = 0; i < vol->dev_no; i++) { 143 if (vol->extents[i].status == HR_EXT_MISSING) 144 continue; 134 145 rc = block_get_nblocks(vol->extents[i].svc_id, &nblocks); 135 146 if (rc != EOK) 136 147 goto error; 137 if ( i!= 0 && nblocks != last_nblocks) {148 if (last_nblocks != 0 && nblocks != last_nblocks) { 138 149 log_msg(LOG_DEFAULT, LVL_ERROR, 139 150 "number of blocks differs"); … … 146 157 147 158 for (i = 0; i < vol->dev_no; i++) { 159 if (vol->extents[i].status == HR_EXT_MISSING) 160 continue; 148 161 rc = block_get_bsize(vol->extents[i].svc_id, &bsize); 149 162 if (rc != EOK) 150 163 goto error; 151 if ( i!= 0 && bsize != last_bsize) {164 if (last_bsize != 0 && bsize != last_bsize) { 152 165 log_msg(LOG_DEFAULT, LVL_ERROR, "block sizes differ"); 153 166 rc = EINVAL; … … 177 190 } 178 191 192 void hr_update_ext_status(hr_volume_t *vol, uint64_t extent, hr_ext_status_t s) 193 { 194 log_msg(LOG_DEFAULT, LVL_WARN, 195 "vol %s, changing extent: %lu, to status: %s", 196 vol->devname, extent, hr_get_ext_status_msg(s)); 197 vol->extents[extent].status = s; 198 } 199 179 200 /** @} 180 201 */ -
uspace/srv/bd/hr/util.h
r066fed9 re47a032 44 44 extern void hr_fini_devs(hr_volume_t *); 45 45 extern errno_t hr_register_volume(hr_volume_t *); 46 errno_t hr_check_devs(hr_volume_t *, uint64_t *, size_t *); 47 errno_t hr_check_ba_range(hr_volume_t *, size_t, uint64_t); 48 void hr_add_ba_offset(hr_volume_t *, uint64_t *); 46 extern errno_t hr_check_devs(hr_volume_t *, uint64_t *, size_t *); 47 extern errno_t hr_check_ba_range(hr_volume_t *, size_t, uint64_t); 48 extern void hr_add_ba_offset(hr_volume_t *, uint64_t *); 49 extern void hr_update_ext_status(hr_volume_t *, uint64_t, hr_ext_status_t); 49 50 50 51 #endif -
uspace/srv/bd/hr/var.h
r066fed9 re47a032 67 67 size_t dev_no; 68 68 hr_level_t level; 69 hr_vol_status_t status; 69 70 } hr_volume_t; 70 71
Note:
See TracChangeset
for help on using the changeset viewer.
