Changeset dbd91da in mainline
- Timestamp:
- 2024-10-05T10:32:59Z (9 months ago)
- Children:
- 6b8e89b0
- Parents:
- 34abe6c5
- git-author:
- Miroslav Cimerman <mc@…> (2024-10-05 10:23:08)
- git-committer:
- Miroslav Cimerman <mc@…> (2024-10-05 10:32:59)
- Location:
- uspace
- Files:
-
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/device/include/hr.h
r34abe6c5 rdbd91da 64 64 } hr_config_t; 65 65 66 typedef struct hr_extent { 67 service_id_t svc_id; 68 int status; 69 } hr_extent_t; 70 66 71 typedef struct hr_vol_info { 67 service_id_t extents[HR_MAXDEVS];72 hr_extent_t extents[HR_MAXDEVS]; 68 73 size_t extent_no; 69 74 service_id_t svc_id; -
uspace/lib/device/src/hr.c
r34abe6c5 rdbd91da 146 146 size_t i; 147 147 char *devname; 148 hr_extent_t *ext; 148 149 149 150 printf("--- vol %zu ---\n", index); … … 170 171 printf("block size: %zu\n", vol_info->bsize); 171 172 172 printf("extents: [index] [devname]\n"); 173 if (vol_info->level == hr_l_4) 174 printf("extents: [P] [status] [index] [devname]\n"); 175 else 176 printf("extents: [status] [index] [devname]\n"); 173 177 for (i = 0; i < vol_info->extent_no; i++) { 174 rc = loc_service_get_name(vol_info->extents[i], &devname); 178 ext = &vol_info->extents[i]; 179 rc = loc_service_get_name(ext->svc_id, &devname); 175 180 if (rc != EOK) 176 181 return rc; 177 printf(" %zu %s\n", i, devname); 182 if (i == 0 && vol_info->level == hr_l_4) 183 printf(" P %d %zu %s\n", ext->status, i, devname); 184 else if (vol_info->level == hr_l_4) 185 printf(" %d %zu %s\n", ext->status, i, devname); 186 else 187 printf(" %d %zu %s\n", ext->status, i, devname); 178 188 } 179 189 return EOK; -
uspace/srv/bd/hr/hr.c
r34abe6c5 rdbd91da 103 103 104 104 errno_t rc; 105 size_t size;105 size_t i, size; 106 106 hr_config_t *cfg; 107 107 hr_volume_t *new_volume; … … 142 142 143 143 str_cpy(new_volume->devname, 32, cfg->devname); 144 memcpy(new_volume->devs, cfg->devs, sizeof(service_id_t) * HR_MAXDEVS); 144 for (i = 0; i < cfg->dev_no; i++) 145 new_volume->extents[i].svc_id = cfg->devs[i]; 145 146 new_volume->level = cfg->level; 146 147 new_volume->dev_no = cfg->dev_no; … … 206 207 207 208 errno_t rc; 208 size_t size;209 size_t i, size; 209 210 hr_config_t *cfg; 210 211 hr_volume_t *new_volume; … … 245 246 246 247 str_cpy(new_volume->devname, 32, cfg->devname); 247 memcpy(new_volume->devs, cfg->devs, sizeof(service_id_t) * HR_MAXDEVS); 248 for (i = 0; i < cfg->dev_no; i++) 249 new_volume->extents[i].svc_id = cfg->devs[i]; 248 250 new_volume->dev_no = cfg->dev_no; 249 251 … … 362 364 363 365 list_foreach(hr_volumes, lvolumes, hr_volume_t, volume) { 364 memcpy(info.extents, volume-> devs,365 sizeof( service_id_t) * HR_MAXDEVS);366 memcpy(info.extents, volume->extents, 367 sizeof(hr_extent_t) * HR_MAXDEVS); 366 368 info.svc_id = volume->svc_id; 367 369 info.extent_no = volume->dev_no; -
uspace/srv/bd/hr/raid0.c
r34abe6c5 rdbd91da 117 117 raid0_geometry(ba, vol, &extent, &phys_block); 118 118 hr_add_ba_offset(vol, &phys_block); 119 rc = block_sync_cache(vol-> devs[extent], phys_block, 1);119 rc = block_sync_cache(vol->extents[extent].svc_id, phys_block, 1); 120 120 if (rc != EOK) 121 121 break; … … 149 149 raid0_geometry(ba, vol, &extent, &phys_block); 150 150 hr_add_ba_offset(vol, &phys_block); 151 rc = block_read_direct(vol-> devs[extent], phys_block, 1, buf);151 rc = block_read_direct(vol->extents[extent].svc_id, phys_block, 1, buf); 152 152 buf = buf + vol->bsize; 153 153 if (rc != EOK) … … 182 182 raid0_geometry(ba, vol, &extent, &phys_block); 183 183 hr_add_ba_offset(vol, &phys_block); 184 rc = block_write_direct(vol-> devs[extent], phys_block, 1, data);184 rc = block_write_direct(vol->extents[extent].svc_id, phys_block, 1, data); 185 185 data = data + vol->bsize; 186 186 if (rc != EOK) -
uspace/srv/bd/hr/raid1.c
r34abe6c5 rdbd91da 101 101 102 102 for (i = 0; i < vol->dev_no; i++) { 103 rc = block_sync_cache(vol-> devs[i], ba, cnt);103 rc = block_sync_cache(vol->extents[i].svc_id, ba, cnt); 104 104 if (rc != EOK) 105 105 break; … … 127 127 128 128 for (i = 0; i < vol->dev_no; i++) { 129 rc = block_read_direct(vol-> devs[i], ba, cnt, buf);129 rc = block_read_direct(vol->extents[i].svc_id, ba, cnt, buf); 130 130 if (rc != EOK) 131 131 break; … … 153 153 154 154 for (i = 0; i < vol->dev_no; i++) { 155 rc = block_write_direct(vol-> devs[i], ba, cnt, data);155 rc = block_write_direct(vol->extents[i].svc_id, ba, cnt, data); 156 156 if (rc != EOK) 157 157 break; -
uspace/srv/bd/hr/raid4.c
r34abe6c5 rdbd91da 104 104 xor(xorbuf, data, vol->bsize); 105 105 } else { 106 rc = block_read_direct(vol-> devs[i], block, 1, buf);106 rc = block_read_direct(vol->extents[i].svc_id, block, 1, buf); 107 107 if (rc != EOK) 108 108 goto end; … … 111 111 } 112 112 113 rc = block_write_direct(vol-> devs[0], block, 1, xorbuf);113 rc = block_write_direct(vol->extents[0].svc_id, block, 1, xorbuf); 114 114 115 115 end: … … 162 162 raid4_geometry(ba, vol, &extent, &phys_block); 163 163 hr_add_ba_offset(vol, &phys_block); 164 rc = block_sync_cache(vol-> devs[extent], phys_block, 1);164 rc = block_sync_cache(vol->extents[extent].svc_id, phys_block, 1); 165 165 if (rc != EOK) 166 166 break; … … 194 194 raid4_geometry(ba, vol, &extent, &phys_block); 195 195 hr_add_ba_offset(vol, &phys_block); 196 rc = block_read_direct(vol-> devs[extent], phys_block, 1, buf);196 rc = block_read_direct(vol->extents[extent].svc_id, phys_block, 1, buf); 197 197 buf = buf + vol->bsize; 198 198 if (rc != EOK) … … 205 205 return rc; 206 206 } 207 208 207 209 208 static errno_t hr_raid4_bd_write_blocks(bd_srv_t *bd, aoff64_t ba, size_t cnt, … … 228 227 raid4_geometry(ba, vol, &extent, &phys_block); 229 228 hr_add_ba_offset(vol, &phys_block); 230 rc = block_write_direct(vol-> devs[extent], phys_block, 1, data);229 rc = block_write_direct(vol->extents[extent].svc_id, phys_block, 1, data); 231 230 if (rc != EOK) 232 231 break; -
uspace/srv/bd/hr/superblock.c
r34abe6c5 rdbd91da 103 103 str_cpy(metadata->devname, 32, vol->devname); 104 104 105 rc = block_write_direct(vol-> devs[i], HR_META_OFF, HR_META_SIZE,105 rc = block_write_direct(vol->extents[i].svc_id, HR_META_OFF, HR_META_SIZE, 106 106 metadata); 107 107 if (rc != EOK) … … 134 134 goto end; 135 135 136 /* TODO: sort new_volume-> devs according to metadata extent index */136 /* TODO: sort new_volume->extents according to metadata extent index */ 137 137 138 138 if (uint64_t_le2host(metadata->magic) != HR_MAGIC) { -
uspace/srv/bd/hr/util.c
r34abe6c5 rdbd91da 56 56 57 57 for (i = 0; i < vol->dev_no; i++) { 58 rc = block_init(vol-> devs[i]);58 rc = block_init(vol->extents[i].svc_id); 59 59 log_msg(LOG_DEFAULT, LVL_DEBUG, 60 "hr_init_devs(): initing (%" PRIun ")", vol-> devs[i]);60 "hr_init_devs(): initing (%" PRIun ")", vol->extents[i].svc_id); 61 61 if (rc != EOK) { 62 62 log_msg(LOG_DEFAULT, LVL_ERROR, 63 63 "hr_init_devs(): initing (%" PRIun ") failed, aborting", 64 vol-> devs[i]);64 vol->extents[i].svc_id); 65 65 break; 66 66 } … … 77 77 78 78 for (i = 0; i < vol->dev_no; i++) 79 block_fini(vol-> devs[i]);79 block_fini(vol->extents[i].svc_id); 80 80 } 81 81 … … 132 132 133 133 for (i = 0; i < vol->dev_no; i++) { 134 rc = block_get_nblocks(vol-> devs[i], &nblocks);134 rc = block_get_nblocks(vol->extents[i].svc_id, &nblocks); 135 135 if (rc != EOK) 136 136 goto error; … … 146 146 147 147 for (i = 0; i < vol->dev_no; i++) { 148 rc = block_get_bsize(vol-> devs[i], &bsize);148 rc = block_get_bsize(vol->extents[i].svc_id, &bsize); 149 149 if (rc != EOK) 150 150 goto error; -
uspace/srv/bd/hr/var.h
r34abe6c5 rdbd91da 56 56 link_t lvolumes; 57 57 char devname[32]; 58 service_id_t devs[HR_MAXDEVS];58 hr_extent_t extents[HR_MAXDEVS]; 59 59 uint64_t nblocks; 60 60 uint64_t data_blkno;
Note:
See TracChangeset
for help on using the changeset viewer.