Changeset 095a989 in mainline for uspace/lib/device/src/hr.c


Ignore:
Timestamp:
2024-09-05T22:34:53Z (11 months ago)
Author:
Miroslav Cimerman <mc@…>
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)
Message:

hr: add status printing

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/device/src/hr.c

    re192339 r095a989  
    114114}
    115115
     116static 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
     145errno_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
     201error:
     202        if (vols != NULL)
     203                free(vols);
     204        return rc;
     205}
     206
    116207/** @}
    117208 */
Note: See TracChangeset for help on using the changeset viewer.