Changeset 4a2a6b8b in mainline
- Timestamp:
- 2024-09-06T22:09:33Z (8 months ago)
- Children:
- 57c61b0
- Parents:
- a19d7fc4
- Location:
- uspace
- Files:
-
- 1 added
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/app/hrctl/hrctl.c
ra19d7fc4 r4a2a6b8b 232 232 233 233 while (c != -1) { 234 c = getopt_long(argc, argv, "hsC:c:A:a:l:01 5Ln:T:",234 c = getopt_long(argc, argv, "hsC:c:A:a:l:0145Ln:T:", 235 235 long_options, NULL); 236 236 switch (c) { … … 299 299 goto bad; 300 300 cfg->level = hr_l_1; 301 break; 302 case '4': 303 if (cfg->level != hr_l_empty) 304 goto bad; 305 cfg->level = hr_l_4; 301 306 break; 302 307 case '5': -
uspace/lib/device/include/hr.h
ra19d7fc4 r4a2a6b8b 51 51 hr_l_0 = 0, 52 52 hr_l_1 = 1, 53 hr_l_4 = 4, 53 54 hr_l_5 = 5, 54 55 hr_l_linear = 254, -
uspace/lib/device/src/hr.c
ra19d7fc4 r4a2a6b8b 157 157 158 158 printf("level: %d\n", vol_info->level); 159 if (vol_info->level == hr_l_0 ) {159 if (vol_info->level == hr_l_0 || vol_info->level == hr_l_4) { 160 160 if (vol_info->strip_size / 1024 < 1) 161 161 printf("strip size in bytes: %u\n", -
uspace/srv/bd/hr/hr.c
ra19d7fc4 r4a2a6b8b 166 166 new_volume->strip_size = HR_STRIP_SIZE; 167 167 break; 168 case hr_l_4: 169 new_volume->hr_ops.create = hr_raid4_create; 170 new_volume->strip_size = HR_STRIP_SIZE; 171 break; 168 172 default: 169 173 log_msg(LOG_DEFAULT, LVL_ERROR, … … 271 275 case hr_l_0: 272 276 new_volume->hr_ops.create = hr_raid0_create; 277 break; 278 case hr_l_4: 279 new_volume->hr_ops.create = hr_raid4_create; 273 280 break; 274 281 default: -
uspace/srv/bd/hr/meson.build
ra19d7fc4 r4a2a6b8b 28 28 29 29 deps = [ 'block', 'device' ] 30 src = files('hr.c', 'raid0.c', 'raid1.c', ' superblock.c', 'util.c')30 src = files('hr.c', 'raid0.c', 'raid1.c', 'raid4.c', 'superblock.c', 'util.c') -
uspace/srv/bd/hr/raid0.c
ra19d7fc4 r4a2a6b8b 105 105 errno_t rc; 106 106 uint64_t phys_block; 107 size_t extent; 107 size_t extent, left; 108 109 rc = hr_check_ba_range(vol, cnt, ba); 110 if (rc != EOK) 111 return rc; 108 112 109 113 fibril_mutex_lock(&big_lock); 110 114 111 size_tleft = cnt;115 left = cnt; 112 116 while (left != 0) { 113 raid0_geometry(ba++, vol, &extent, &phys_block); 114 rc = hr_calc_ba(vol, cnt, &ba); 115 if (rc != EOK) 116 break; 117 raid0_geometry(ba, vol, &extent, &phys_block); 118 hr_add_ba_offset(vol, &phys_block); 117 119 rc = block_sync_cache(vol->devs[extent], phys_block, 1); 118 120 if (rc != EOK) 119 121 break; 120 122 left--; 123 ba++; 121 124 } 122 125 … … 131 134 errno_t rc; 132 135 uint64_t phys_block; 133 size_t extent ;136 size_t extent, left; 134 137 135 138 if (size < cnt * vol->bsize) 136 139 return EINVAL; 137 140 141 rc = hr_check_ba_range(vol, cnt, ba); 142 if (rc != EOK) 143 return rc; 144 138 145 fibril_mutex_lock(&big_lock); 139 146 140 size_tleft = cnt;147 left = cnt; 141 148 while (left != 0) { 142 raid0_geometry(ba++, vol, &extent, &phys_block); 143 rc = hr_calc_ba(vol, cnt, &ba); 144 if (rc != EOK) 145 break; 149 raid0_geometry(ba, vol, &extent, &phys_block); 150 hr_add_ba_offset(vol, &phys_block); 146 151 rc = block_read_direct(vol->devs[extent], phys_block, 1, buf); 147 152 buf = buf + vol->bsize; … … 149 154 break; 150 155 left--; 156 ba++; 151 157 } 152 158 … … 161 167 errno_t rc; 162 168 uint64_t phys_block; 163 size_t extent ;169 size_t extent, left; 164 170 165 171 if (size < cnt * vol->bsize) 166 172 return EINVAL; 167 173 174 rc = hr_check_ba_range(vol, cnt, ba); 175 if (rc != EOK) 176 return rc; 177 168 178 fibril_mutex_lock(&big_lock); 169 179 170 size_tleft = cnt;180 left = cnt; 171 181 while (left != 0) { 172 raid0_geometry(ba++, vol, &extent, &phys_block); 173 rc = hr_calc_ba(vol, cnt, &phys_block); 174 if (rc != EOK) 175 break; 182 raid0_geometry(ba, vol, &extent, &phys_block); 183 hr_add_ba_offset(vol, &phys_block); 176 184 rc = block_write_direct(vol->devs[extent], phys_block, 1, data); 177 185 data = data + vol->bsize; … … 179 187 break; 180 188 left--; 189 ba++; 181 190 } 182 191 -
uspace/srv/bd/hr/raid1.c
ra19d7fc4 r4a2a6b8b 87 87 static errno_t hr_raid1_bd_sync_cache(bd_srv_t *bd, aoff64_t ba, size_t cnt) 88 88 { 89 hr_volume_t *vol = bd->srvs->sarg; 90 91 errno_t rc; 92 size_t i; 93 94 rc = hr_check_ba_range(vol, cnt, ba); 95 if (rc != EOK) 96 return rc; 97 98 hr_add_ba_offset(vol, &ba); 99 89 100 fibril_mutex_lock(&big_lock); 90 hr_volume_t *vol = bd->srvs->sarg;91 92 errno_t rc;93 size_t i;94 95 rc = hr_calc_ba(vol, cnt, &ba);96 if (rc != EOK) {97 fibril_mutex_unlock(&big_lock);98 return rc;99 }100 101 101 102 for (i = 0; i < vol->dev_no; i++) { … … 112 113 void *buf, size_t size) 113 114 { 115 hr_volume_t *vol = bd->srvs->sarg; 116 117 errno_t rc; 118 size_t i; 119 120 rc = hr_check_ba_range(vol, cnt, ba); 121 if (rc != EOK) 122 return rc; 123 124 hr_add_ba_offset(vol, &ba); 125 114 126 fibril_mutex_lock(&big_lock); 115 hr_volume_t *vol = bd->srvs->sarg;116 117 errno_t rc;118 size_t i;119 120 rc = hr_calc_ba(vol, cnt, &ba);121 if (rc != EOK) {122 fibril_mutex_unlock(&big_lock);123 return rc;124 }125 127 126 128 for (i = 0; i < vol->dev_no; i++) { … … 137 139 const void *data, size_t size) 138 140 { 141 hr_volume_t *vol = bd->srvs->sarg; 142 143 errno_t rc; 144 size_t i; 145 146 rc = hr_check_ba_range(vol, cnt, ba); 147 if (rc != EOK) 148 return rc; 149 150 hr_add_ba_offset(vol, &ba); 151 139 152 fibril_mutex_lock(&big_lock); 140 hr_volume_t *vol = bd->srvs->sarg;141 142 errno_t rc;143 size_t i;144 145 rc = hr_calc_ba(vol, cnt, &ba);146 if (rc != EOK) {147 fibril_mutex_unlock(&big_lock);148 return rc;149 }150 153 151 154 for (i = 0; i < vol->dev_no; i++) { -
uspace/srv/bd/hr/superblock.c
ra19d7fc4 r4a2a6b8b 78 78 } else if (vol->level == hr_l_0) { 79 79 data_blkno = vol->nblocks - (data_offset * vol->dev_no); 80 } else if (vol->level == hr_l_4) { 81 data_blkno = vol->nblocks - (data_offset * vol->dev_no) - (vol->nblocks / vol->dev_no); 80 82 } else { 81 83 log_msg(LOG_DEFAULT, LVL_ERROR, -
uspace/srv/bd/hr/util.c
ra19d7fc4 r4a2a6b8b 159 159 if (vol->level == hr_l_1) { 160 160 vol->nblocks = total_blocks / vol->dev_no; 161 } else if (vol->level == hr_l_0 ) {161 } else if (vol->level == hr_l_0 || vol->level == hr_l_4) { 162 162 vol->nblocks = total_blocks; 163 163 } else { … … 172 172 } 173 173 174 errno_t hr_c alc_ba(hr_volume_t *vol, size_t cnt, uint64_t *ba)174 errno_t hr_check_ba_range(hr_volume_t *vol, size_t cnt, uint64_t ba) 175 175 { 176 if ( *ba + cnt > vol->data_blkno)176 if (ba + cnt > vol->data_blkno) 177 177 return ERANGE; 178 return EOK; 179 } 178 180 181 void hr_add_ba_offset(hr_volume_t *vol, uint64_t *ba) 182 { 179 183 *ba = *ba + vol->data_offset; 180 return EOK;181 184 } 182 185 -
uspace/srv/bd/hr/util.h
ra19d7fc4 r4a2a6b8b 45 45 extern errno_t hr_register_volume(hr_volume_t *); 46 46 extern errno_t hr_check_devs(hr_volume_t *vol); 47 errno_t hr_calc_ba(hr_volume_t *vol, size_t cnt, uint64_t *ba); 47 errno_t hr_check_ba_range(hr_volume_t *vol, size_t cnt, uint64_t ba); 48 void hr_add_ba_offset(hr_volume_t *vol, uint64_t *ba); 48 49 49 50 #endif -
uspace/srv/bd/hr/var.h
ra19d7fc4 r4a2a6b8b 72 72 extern errno_t hr_raid0_create(hr_volume_t *); 73 73 extern errno_t hr_raid1_create(hr_volume_t *); 74 extern errno_t hr_raid4_create(hr_volume_t *); 74 75 75 76 #endif
Note:
See TracChangeset
for help on using the changeset viewer.