Changeset 095a989 in mainline for uspace/lib/device/src/hr.c
- Timestamp:
- 2024-09-05T22:34:53Z (11 months ago)
- Children:
- ee83e9c
- Parents:
- e192339
- git-author:
- Miroslav Cimerman <mc@…> (2024-09-05 22:31:28)
- git-committer:
- Miroslav Cimerman <mc@…> (2024-09-05 22:34:53)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/device/src/hr.c
re192339 r095a989 114 114 } 115 115 116 static errno_t print_vol_info(size_t index, hr_vol_info_t *vol_info) 117 { 118 errno_t rc; 119 size_t i; 120 char *devname; 121 122 printf("--- vol %zu ---\n", index); 123 124 printf("svc_id: %lu\n", vol_info->svc_id); 125 126 rc = loc_service_get_name(vol_info->svc_id, &devname); 127 if (rc != EOK) 128 return rc; 129 printf("devname: %s\n", devname); 130 131 printf("level: %d\n", vol_info->level); 132 printf("nblocks: %lu\n", vol_info->nblocks); 133 printf("bsize: %zu\n", vol_info->bsize); 134 135 printf("extents: [index] [devname]\n"); 136 for (i = 0; i < vol_info->extent_no; i++) { 137 rc = loc_service_get_name(vol_info->extents[i], &devname); 138 if (rc != EOK) 139 return rc; 140 printf(" %zu %s\n", i, devname); 141 } 142 return EOK; 143 } 144 145 errno_t hr_print_status(void) 146 { 147 hr_t *hr; 148 errno_t rc, retval; 149 async_exch_t *exch; 150 aid_t req; 151 size_t size, i; 152 hr_vol_info_t *vols; 153 154 rc = hr_sess_init(&hr); 155 if (rc != EOK) 156 return rc; 157 158 exch = async_exchange_begin(hr->sess); 159 if (exch == NULL) 160 return EINVAL; 161 162 req = async_send_0(exch, HR_STATUS, NULL); 163 164 rc = async_data_read_start(exch, &size, sizeof(size_t)); 165 if (rc != EOK) { 166 async_exchange_end(exch); 167 async_forget(req); 168 return rc; 169 } 170 171 vols = calloc(size, sizeof(hr_vol_info_t)); 172 if (vols == NULL) { 173 async_exchange_end(exch); 174 async_forget(req); 175 return ENOMEM; 176 } 177 178 for (i = 0; i < size; i++) { 179 rc = async_data_read_start(exch, &vols[i], 180 sizeof(hr_vol_info_t)); 181 if (rc != EOK) { 182 async_exchange_end(exch); 183 async_forget(req); 184 goto error; 185 } 186 } 187 188 async_exchange_end(exch); 189 async_wait_for(req, &retval); 190 if (retval != EOK) { 191 rc = retval; 192 goto error; 193 } 194 195 for (i = 0; i < size; i++) { 196 rc = print_vol_info(i, &vols[i]); 197 if (rc != EOK) 198 goto error; 199 } 200 201 error: 202 if (vols != NULL) 203 free(vols); 204 return rc; 205 } 206 116 207 /** @} 117 208 */
Note:
See TracChangeset
for help on using the changeset viewer.