Changeset 9c1cf34c in mainline
- Timestamp:
- 2024-09-06T12:14:09Z (8 months ago)
- Children:
- 24968b5
- Parents:
- b0f1366
- Location:
- uspace
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/device/include/hr.h
rb0f1366 r9c1cf34c 69 69 hr_level_t level; 70 70 uint64_t nblocks; 71 uint32_t strip_size; 71 72 size_t bsize; 72 73 } hr_vol_info_t; -
uspace/lib/device/src/hr.c
rb0f1366 r9c1cf34c 157 157 158 158 printf("level: %d\n", vol_info->level); 159 printf("nblocks: %lu\n", vol_info->nblocks); 160 printf("bsize: %zu\n", vol_info->bsize); 159 if (vol_info->level == hr_l_0) { 160 if (vol_info->strip_size / 1024 < 1) 161 printf("strip size in bytes: %u\n", 162 vol_info->strip_size); 163 else 164 printf("strip size: %uK\n", 165 vol_info->strip_size / 1024); 166 } 167 printf("size in bytes: %luMiB\n", 168 vol_info->nblocks * vol_info->bsize / 1024 / 1024); 169 printf("size in blocks: %lu\n", vol_info->nblocks); 170 printf("block size: %zu\n", vol_info->bsize); 171 161 172 162 173 printf("extents: [index] [devname]\n"); -
uspace/srv/bd/hr/hr.c
rb0f1366 r9c1cf34c 61 61 static service_id_t ctl_sid; 62 62 63 64 63 static void hr_create_srv(ipc_call_t *icall) 65 64 { … … 121 120 goto error; 122 121 122 switch (new_volume->level) { 123 case hr_l_1: 124 new_volume->hr_ops.create = hr_raid1_create; 125 new_volume->strip_size = 0; 126 break; 127 case hr_l_0: 128 new_volume->hr_ops.create = hr_raid0_create; 129 new_volume->strip_size = HR_STRIP_SIZE; 130 break; 131 default: 132 log_msg(LOG_DEFAULT, LVL_ERROR, 133 "level %d not implemented yet", new_volume->level); 134 rc = EINVAL; 135 goto error; 136 } 137 123 138 rc = hr_write_meta_to_vol(new_volume); 139 if (rc != EOK) 140 goto error; 141 142 rc = new_volume->hr_ops.create(new_volume); 143 if (rc != EOK) 144 goto error; 145 146 fibril_mutex_lock(&hr_volumes_lock); 147 list_append(&new_volume->lvolumes, &hr_volumes); 148 fibril_mutex_unlock(&hr_volumes_lock); 149 150 log_msg(LOG_DEFAULT, LVL_NOTE, "created volume \"%s\" (%" PRIun ")", 151 new_volume->devname, new_volume->svc_id); 152 153 free(cfg); 154 async_answer_0(icall, rc); 155 return; 156 error: 157 free(cfg); 158 hr_fini_devs(new_volume); 159 async_answer_0(icall, rc); 160 } 161 162 static void hr_assemble_srv(ipc_call_t *icall) 163 { 164 log_msg(LOG_DEFAULT, LVL_NOTE, "hr_assemble_srv()"); 165 166 errno_t rc; 167 size_t size; 168 hr_config_t *cfg; 169 hr_volume_t *new_volume; 170 ipc_call_t call; 171 172 if (!async_data_write_receive(&call, &size)) { 173 async_answer_0(&call, EREFUSED); 174 async_answer_0(icall, EREFUSED); 175 return; 176 } 177 178 if (size != sizeof(hr_config_t)) { 179 async_answer_0(&call, EINVAL); 180 async_answer_0(icall, EINVAL); 181 return; 182 } 183 184 cfg = calloc(1, sizeof(hr_config_t)); 185 if (cfg == NULL) { 186 async_answer_0(&call, ENOMEM); 187 async_answer_0(icall, ENOMEM); 188 return; 189 } 190 191 rc = async_data_write_finalize(&call, cfg, size); 192 if (rc != EOK) { 193 async_answer_0(&call, rc); 194 async_answer_0(icall, rc); 195 return; 196 } 197 198 new_volume = calloc(1, sizeof(hr_volume_t)); 199 if (new_volume == NULL) { 200 free(cfg); 201 async_answer_0(icall, ENOMEM); 202 return; 203 } 204 205 str_cpy(new_volume->devname, 32, cfg->devname); 206 memcpy(new_volume->devs, cfg->devs, sizeof(service_id_t) * HR_MAXDEVS); 207 new_volume->dev_no = cfg->dev_no; 208 209 if (cfg->level != hr_l_empty) 210 log_msg(LOG_DEFAULT, LVL_WARN, 211 "level manually set when assembling, ingoring"); 212 213 new_volume->level = hr_l_empty; 214 215 rc = hr_init_devs(new_volume); 216 if (rc != EOK) { 217 free(cfg); 218 async_answer_0(icall, rc); 219 return; 220 } 221 222 rc = hr_check_devs(new_volume); 223 if (rc != EOK) 224 goto error; 225 226 rc = hr_get_vol_from_meta(cfg, new_volume); 124 227 if (rc != EOK) 125 228 goto error; … … 147 250 fibril_mutex_unlock(&hr_volumes_lock); 148 251 149 log_msg(LOG_DEFAULT, LVL_NOTE, "created volume \"%s\" (%" PRIun ")",150 new_volume->devname, new_volume->svc_id);151 152 free(cfg);153 async_answer_0(icall, rc);154 return;155 error:156 free(cfg);157 hr_fini_devs(new_volume);158 async_answer_0(icall, rc);159 }160 161 static void hr_assemble_srv(ipc_call_t *icall)162 {163 log_msg(LOG_DEFAULT, LVL_NOTE, "hr_assemble_srv()");164 165 errno_t rc;166 size_t size;167 hr_config_t *cfg;168 hr_volume_t *new_volume;169 ipc_call_t call;170 171 if (!async_data_write_receive(&call, &size)) {172 async_answer_0(&call, EREFUSED);173 async_answer_0(icall, EREFUSED);174 return;175 }176 177 if (size != sizeof(hr_config_t)) {178 async_answer_0(&call, EINVAL);179 async_answer_0(icall, EINVAL);180 return;181 }182 183 cfg = calloc(1, sizeof(hr_config_t));184 if (cfg == NULL) {185 async_answer_0(&call, ENOMEM);186 async_answer_0(icall, ENOMEM);187 return;188 }189 190 rc = async_data_write_finalize(&call, cfg, size);191 if (rc != EOK) {192 async_answer_0(&call, rc);193 async_answer_0(icall, rc);194 return;195 }196 197 new_volume = calloc(1, sizeof(hr_volume_t));198 if (new_volume == NULL) {199 free(cfg);200 async_answer_0(icall, ENOMEM);201 return;202 }203 204 str_cpy(new_volume->devname, 32, cfg->devname);205 memcpy(new_volume->devs, cfg->devs, sizeof(service_id_t) * HR_MAXDEVS);206 new_volume->dev_no = cfg->dev_no;207 208 if (cfg->level != hr_l_empty)209 log_msg(LOG_DEFAULT, LVL_WARN,210 "level manually set when assembling, ingoring");211 212 new_volume->level = hr_l_empty;213 214 rc = hr_init_devs(new_volume);215 if (rc != EOK) {216 free(cfg);217 async_answer_0(icall, rc);218 return;219 }220 221 rc = hr_check_devs(new_volume);222 if (rc != EOK)223 goto error;224 225 rc = hr_get_vol_from_meta(cfg, new_volume);226 if (rc != EOK)227 goto error;228 229 switch (new_volume->level) {230 case hr_l_1:231 new_volume->hr_ops.create = hr_raid1_create;232 break;233 case hr_l_0:234 new_volume->hr_ops.create = hr_raid0_create;235 break;236 default:237 log_msg(LOG_DEFAULT, LVL_ERROR,238 "level %d not implemented yet", new_volume->level);239 rc = EINVAL;240 goto error;241 }242 243 rc = new_volume->hr_ops.create(new_volume);244 if (rc != EOK)245 goto error;246 247 fibril_mutex_lock(&hr_volumes_lock);248 list_append(&new_volume->lvolumes, &hr_volumes);249 fibril_mutex_unlock(&hr_volumes_lock);250 251 252 log_msg(LOG_DEFAULT, LVL_NOTE, "assembled volume \"%s\" (%" PRIun ")", 252 253 new_volume->devname, new_volume->svc_id); … … 297 298 /* print usable number of blocks */ 298 299 info.nblocks = volume->data_blkno; 300 info.strip_size = volume->strip_size; 299 301 info.bsize = volume->bsize; 300 302 -
uspace/srv/bd/hr/raid0.c
rb0f1366 r9c1cf34c 78 78 { 79 79 uint64_t N = vol->dev_no; /* extents */ 80 uint64_t L = HR_STRIP_SIZE/ vol->bsize; /* size of strip in blocks */80 uint64_t L = vol->strip_size / vol->bsize; /* size of strip in blocks */ 81 81 82 82 uint64_t i = (x / L) % N; /* extent */ -
uspace/srv/bd/hr/superblock.c
rb0f1366 r9c1cf34c 90 90 metadata->data_blkno = host2uint64_t_le(data_blkno); 91 91 metadata->data_offset = host2uint32_t_le(data_offset); 92 metadata->strip_size = host2uint32_t_le(vol->strip_size); 92 93 for (i = 0; i < vol->dev_no; i++) { 93 94 metadata->index = host2uint32_t_le(i); … … 144 145 new_volume->data_blkno = uint64_t_le2host(metadata->data_blkno); 145 146 new_volume->data_offset = uint32_t_le2host(metadata->data_offset); 147 new_volume->strip_size = uint32_t_le2host(metadata->strip_size); 146 148 147 149 if (str_cmp(metadata->devname, new_volume->devname) != 0) { -
uspace/srv/bd/hr/superblock.h
rb0f1366 r9c1cf34c 49 49 uint32_t data_offset; /* block where data starts */ 50 50 uint32_t index; /* index of disk in array */ 51 uint32_t strip_size; 52 uint32_t status; /* yet unused */ 51 53 uint8_t uuid[16]; 52 54 char devname[32]; -
uspace/srv/bd/hr/var.h
rb0f1366 r9c1cf34c 60 60 uint64_t data_blkno; 61 61 uint32_t data_offset; 62 uint32_t strip_size; 62 63 service_id_t svc_id; 63 64 size_t bsize;
Note:
See TracChangeset
for help on using the changeset viewer.