Changeset 06f2762 in mainline
- Timestamp:
- 2024-11-22T18:36:16Z (6 months ago)
- Children:
- 5b320ac
- Parents:
- e76e12d8
- Location:
- uspace/srv/bd/hr
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/bd/hr/superblock.c
re76e12d8 r06f2762 51 51 52 52 static errno_t read_metadata(service_id_t, hr_metadata_t *); 53 static errno_t hr_fill_meta_from_vol(hr_volume_t *, hr_metadata_t *); 53 54 54 55 errno_t hr_write_meta_to_vol(hr_volume_t *vol) … … 58 59 errno_t rc; 59 60 size_t i; 60 size_t meta_blkno; /* blocks needed to write metadata */61 61 hr_metadata_t *metadata; 62 62 uuid_t uuid; … … 66 66 return ENOMEM; 67 67 68 rc = hr_fill_meta_from_vol(vol, metadata); 69 if (rc != EOK) 70 goto error; 71 72 for (i = 0; i < vol->dev_no; i++) { 73 metadata->index = host2uint32_t_le(i); 74 75 rc = uuid_generate(&uuid); 76 if (rc != EOK) 77 goto error; 78 uuid_encode(&uuid, metadata->uuid); 79 80 rc = block_write_direct(vol->extents[i].svc_id, HR_META_OFF, 81 HR_META_SIZE, metadata); 82 if (rc != EOK) 83 goto error; 84 85 /* rndgen */ 86 fibril_usleep(1000); 87 } 88 error: 89 free(metadata); 90 return rc; 91 } 92 93 errno_t hr_write_meta_to_ext(hr_volume_t *vol, size_t ext) 94 { 95 HR_DEBUG("hr_write_meta_to_vol()\n"); 96 97 errno_t rc; 98 hr_metadata_t *metadata; 99 uuid_t uuid; 100 101 metadata = calloc(1, HR_META_SIZE * vol->bsize); 102 if (metadata == NULL) 103 return ENOMEM; 104 105 rc = hr_fill_meta_from_vol(vol, metadata); 106 if (rc != EOK) 107 goto error; 108 109 metadata->index = host2uint32_t_le(ext); 110 111 rc = uuid_generate(&uuid); 112 if (rc != EOK) 113 goto error; 114 uuid_encode(&uuid, metadata->uuid); 115 116 rc = block_write_direct(vol->extents[ext].svc_id, HR_META_OFF, 117 HR_META_SIZE, metadata); 118 if (rc != EOK) 119 goto error; 120 121 error: 122 free(metadata); 123 return rc; 124 } 125 126 /* 127 * Fill metadata members from 128 * specified volume. 129 * 130 * Does not fill extent index and UUID. 131 */ 132 static errno_t hr_fill_meta_from_vol(hr_volume_t *vol, hr_metadata_t *metadata) 133 { 134 HR_DEBUG("hr_fill_meta_from_vol()\n"); 135 136 size_t meta_blkno; /* blocks needed to write metadata */ 137 68 138 meta_blkno = (HR_META_OFF + HR_META_SIZE); 69 139 if (vol->level != HR_LVL_1) … … 71 141 72 142 if (vol->nblocks < meta_blkno) { 73 HR_ERROR("not enough blocks to write metadat\n"); 74 rc = EINVAL; 75 goto error; 143 HR_ERROR("hr_fill_meta_from_vol(): volume \"%s\" does not " 144 " have enough space to store metada, aborting\n", 145 vol->devname); 146 return EINVAL; 76 147 } else if (vol->nblocks == meta_blkno) { 77 HR_ERROR(" there would be zero data blocks after writing"78 " metadata, aborting");79 rc = EINVAL;80 goto error;148 HR_ERROR("hr_fill_meta_from_vol(): volume \"%s\" would have " 149 "zero data blocks after writing metadata, aborting\n", 150 vol->devname); 151 return EINVAL; 81 152 } 82 153 … … 88 159 metadata->data_offset = host2uint32_t_le(vol->data_offset); 89 160 metadata->strip_size = host2uint32_t_le(vol->strip_size); 90 for (i = 0; i < vol->dev_no; i++) { 91 metadata->index = host2uint32_t_le(i); 92 93 rc = uuid_generate(&uuid); 94 if (rc != EOK) 95 goto error; 96 uuid_encode(&uuid, metadata->uuid); 97 98 str_cpy(metadata->devname, HR_DEVNAME_LEN, vol->devname); 99 100 rc = block_write_direct(vol->extents[i].svc_id, HR_META_OFF, 101 HR_META_SIZE, metadata); 102 if (rc != EOK) 103 goto error; 104 105 /* rndgen */ 106 fibril_usleep(1000); 107 } 108 error: 109 free(metadata); 110 return rc; 161 162 str_cpy(metadata->devname, HR_DEVNAME_LEN, vol->devname); 163 164 return EOK; 111 165 } 112 166 -
uspace/srv/bd/hr/superblock.h
re76e12d8 r06f2762 61 61 62 62 extern errno_t hr_write_meta_to_vol(hr_volume_t *); 63 extern errno_t hr_write_meta_to_ext(hr_volume_t *, size_t); 63 64 extern errno_t hr_fill_vol_from_meta(hr_volume_t *); 64 65
Note:
See TracChangeset
for help on using the changeset viewer.