Changeset 1626cd4 in mainline for uspace/lib/c/generic/vbd.c


Ignore:
Timestamp:
2015-07-02T19:01:37Z (9 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
6a0d4ce2
Parents:
3faa03d
Message:

Propagate label and partition block ranges and other info up through the stack.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/c/generic/vbd.c

    r3faa03d r1626cd4  
    3737#include <ipc/vbd.h>
    3838#include <loc.h>
     39#include <macros.h>
    3940#include <mem.h>
    4041#include <stdlib.h>
     
    106107}
    107108
     109#include <io/log.h>
    108110/** Get disk information. */
    109111int vbd_disk_info(vbd_t *vbd, service_id_t sid, vbd_disk_info_t *vinfo)
    110112{
    111113        async_exch_t *exch;
    112         sysarg_t ltype;
    113         int retval;
    114 
    115         exch = async_exchange_begin(vbd->sess);
    116         retval = async_req_1_1(exch, VBD_DISK_INFO, sid, &ltype);
    117         async_exchange_end(exch);
    118 
    119         if (retval != EOK)
    120                 return EIO;
    121 
    122         vinfo->ltype = (label_type_t)ltype;
     114        sysarg_t retval;
     115        ipc_call_t answer;
     116
     117        log_msg(LOG_DEFAULT, LVL_DEBUG, "vbd_disk_info() begin exchange");
     118        exch = async_exchange_begin(vbd->sess);
     119        aid_t req = async_send_1(exch, VBD_DISK_INFO, sid, &answer);
     120        log_msg(LOG_DEFAULT, LVL_DEBUG, "vbd_disk_info() read start");
     121        int rc = async_data_read_start(exch, vinfo, sizeof(vbd_disk_info_t));
     122        log_msg(LOG_DEFAULT, LVL_DEBUG, "vbd_disk_info() end exch");
     123        async_exchange_end(exch);
     124
     125        if (rc != EOK) {
     126                async_forget(req);
     127                return EIO;
     128        }
     129
     130        log_msg(LOG_DEFAULT, LVL_DEBUG, "vbd_disk_info() wait fore req reply");
     131        async_wait_for(req, &retval);
     132        if (retval != EOK)
     133                return EIO;
     134
     135        log_msg(LOG_DEFAULT, LVL_DEBUG, "vbd_disk_info() done");
    123136        return EOK;
    124137}
     
    257270{
    258271        async_exch_t *exch;
    259         int retval;
    260 
    261         exch = async_exchange_begin(vbd->sess);
    262         retval = async_req_1_0(exch, VBD_PART_GET_INFO, part);
    263         async_exchange_end(exch);
    264 
    265         if (retval != EOK)
    266                 return EIO;
    267 
     272        sysarg_t index;
     273        sysarg_t b0_lo, b0_hi;
     274        sysarg_t nb_lo, nb_hi;
     275        int retval;
     276
     277        exch = async_exchange_begin(vbd->sess);
     278        retval = async_req_1_5(exch, VBD_PART_GET_INFO, part, &index,
     279            &b0_lo, &b0_hi, &nb_lo, &nb_hi);
     280        async_exchange_end(exch);
     281
     282        if (retval != EOK)
     283                return EIO;
     284
     285        pinfo->index = index;
     286        pinfo->block0 = MERGE_LOUP32(b0_lo, b0_hi);
     287        pinfo->nblocks = MERGE_LOUP32(nb_lo, nb_hi);
    268288        return EOK;
    269289}
Note: See TracChangeset for help on using the changeset viewer.