Changeset a5ec426 in mainline
- Timestamp:
- 2025-03-31T17:08:27Z (6 weeks ago)
- Children:
- 0277ec2
- Parents:
- baa4929
- Location:
- uspace/srv/bd/hr
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/bd/hr/superblock.c
rbaa4929 ra5ec426 83 83 metadata->index = host2uint32_t_le(i); 84 84 85 rc = block_write_direct(vol->extents[i].svc_id, HR_META_OFF,86 HR_META_SIZE, metadata);85 rc = block_write_direct(vol->extents[i].svc_id, 86 vol->extents[i].blkno - 1, HR_META_SIZE, metadata); 87 87 if (rc != EOK) 88 88 goto error; … … 114 114 metadata->index = host2uint32_t_le(ext); 115 115 116 rc = block_write_direct(vol->extents[ext].svc_id, HR_META_OFF,117 HR_META_SIZE, metadata);116 rc = block_write_direct(vol->extents[ext].svc_id, 117 vol->extents[ext].blkno - 1, HR_META_SIZE, metadata); 118 118 if (rc != EOK) 119 119 goto error; … … 134 134 HR_DEBUG("%s()", __func__); 135 135 136 size_t meta_blkno = HR_META_ OFF + HR_META_SIZE;136 size_t meta_blkno = HR_META_SIZE; 137 137 138 138 if (vol->level != HR_LVL_1) … … 193 193 assembly_svc_id_order[i] = vol->extents[i].svc_id; 194 194 195 /* 196 * XXX: sanitize metadata, for example if truncated_blkno <= extent.blkno 197 * or bsize == extent.bsize 198 */ 199 195 200 size_t md_order_indices[HR_MAX_EXTENTS] = { 0 }; 196 201 for (size_t i = 0; i < vol->extent_no; i++) { … … 255 260 } 256 261 262 /* XXX: rewrite with read_metadata_block() */ 257 263 static errno_t read_metadata(service_id_t dev, hr_metadata_t *metadata) 258 264 { … … 264 270 return rc; 265 271 266 if (nblocks < HR_META_SIZE + HR_META_OFF)267 return EINVAL; 268 269 rc = block_read_direct(dev, HR_META_OFF, HR_META_SIZE, metadata);272 if (nblocks < HR_META_SIZE) 273 return EINVAL; 274 275 rc = block_read_direct(dev, nblocks - 1, HR_META_SIZE, metadata); 270 276 if (rc != EOK) 271 277 return rc; … … 293 299 return rc; 294 300 295 if (blkno < HR_META_ OFF + HR_META_SIZE)301 if (blkno < HR_META_SIZE) 296 302 return EINVAL; 297 303 … … 300 306 return ENOMEM; 301 307 302 rc = block_read_direct(dev, HR_META_OFF, HR_META_SIZE, block);308 rc = block_read_direct(dev, blkno - 1, HR_META_SIZE, block); 303 309 if (rc != EOK) { 304 310 free(block); -
uspace/srv/bd/hr/superblock.h
rbaa4929 ra5ec426 39 39 #include "var.h" 40 40 41 /* 42 * Metadata is stored on the last block of an extent. 43 */ 41 44 #define HR_META_SIZE 1 /* in blocks */ 42 #define HR_META_OFF 7 /* in blocks */ 43 #define HR_DATA_OFF (HR_META_OFF + HR_META_SIZE) 45 #define HR_DATA_OFF 0 44 46 45 47 #define HR_MAGIC_STR "HelenRAID" … … 75 77 76 78 char devname[HR_DEVNAME_LEN]; 77 } ;79 } __attribute__((packed)); 78 80 79 81 extern errno_t hr_write_meta_to_vol(hr_volume_t *);
Note:
See TracChangeset
for help on using the changeset viewer.