Changeset b0f1366 in mainline for uspace/srv/bd/hr/raid1.c
- Timestamp:
- 2024-09-06T11:37:54Z (16 months ago)
- Children:
- 9c1cf34c
- Parents:
- ee83e9c
- File:
-
- 1 edited
-
uspace/srv/bd/hr/raid1.c (modified) (8 diffs)
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/bd/hr/raid1.c
ree83e9c rb0f1366 47 47 #include <str_error.h> 48 48 49 #include "util.h" 49 50 #include "var.h" 50 #include "util.h"51 51 52 52 extern fibril_mutex_t big_lock; … … 85 85 } 86 86 87 static errno_t hr_raid1_bd_sync_cache(bd_srv_t *bd, aoff64_t ba, size_t size)87 static errno_t hr_raid1_bd_sync_cache(bd_srv_t *bd, aoff64_t ba, size_t cnt) 88 88 { 89 89 fibril_mutex_lock(&big_lock); … … 93 93 size_t i; 94 94 95 rc = hr_calc_ba(vol, cnt, &ba); 96 if (rc != EOK) { 97 fibril_mutex_unlock(&big_lock); 98 return rc; 99 } 100 95 101 for (i = 0; i < vol->dev_no; i++) { 96 rc = block_sync_cache(vol->devs[i], ba, size);102 rc = block_sync_cache(vol->devs[i], ba, cnt); 97 103 if (rc != EOK) 98 104 break; … … 111 117 errno_t rc; 112 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 } 113 125 114 126 for (i = 0; i < vol->dev_no; i++) { … … 131 143 size_t i; 132 144 145 rc = hr_calc_ba(vol, cnt, &ba); 146 if (rc != EOK) { 147 fibril_mutex_unlock(&big_lock); 148 return rc; 149 } 150 133 151 for (i = 0; i < vol->dev_no; i++) { 134 152 rc = block_write_direct(vol->devs[i], ba, cnt, data); … … 153 171 hr_volume_t *vol = bd->srvs->sarg; 154 172 155 *rnb = vol-> nblocks;173 *rnb = vol->data_blkno; 156 174 return EOK; 157 175 } … … 159 177 errno_t hr_raid1_create(hr_volume_t *new_volume) 160 178 { 179 errno_t rc; 180 161 181 assert(new_volume->level == hr_l_1); 162 182 … … 167 187 } 168 188 169 errno_t rc;170 size_t i, bsize, last_bsize;171 uint64_t nblocks, last_nblocks;172 uint64_t total_blocks = 0;173 174 rc = hr_init_devs(new_volume);175 if (rc != EOK)176 return rc;177 178 for (i = 0; i < new_volume->dev_no; i++) {179 rc = block_get_nblocks(new_volume->devs[i], &nblocks);180 if (rc != EOK)181 goto error;182 if (i != 0 && nblocks != last_nblocks) {183 log_msg(LOG_DEFAULT, LVL_ERROR,184 "number of blocks differs");185 rc = EINVAL;186 goto error;187 }188 total_blocks += nblocks;189 last_nblocks = nblocks;190 }191 192 for (i = 0; i < new_volume->dev_no; i++) {193 rc = block_get_bsize(new_volume->devs[i], &bsize);194 if (rc != EOK)195 goto error;196 if (i != 0 && bsize != last_bsize) {197 log_msg(LOG_DEFAULT, LVL_ERROR, "block sizes differ");198 rc = EINVAL;199 goto error;200 }201 last_bsize = bsize;202 }203 204 189 bd_srvs_init(&new_volume->hr_bds); 205 190 new_volume->hr_bds.ops = &hr_raid1_bd_ops; 206 191 new_volume->hr_bds.sarg = new_volume; 207 new_volume->nblocks = total_blocks / new_volume->dev_no;208 new_volume->bsize = bsize;209 192 210 193 rc = hr_register_volume(new_volume); 211 194 if (rc != EOK) 212 goto error; 213 214 return EOK; 215 error: 216 hr_fini_devs(new_volume); 217 return rc; 195 return rc; 196 197 return EOK; 218 198 } 219 199
Note:
See TracChangeset
for help on using the changeset viewer.
