Changeset 372df8f in mainline for uspace/srv/bd/vbd/vbd.c


Ignore:
Timestamp:
2015-10-09T07:00:23Z (9 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
0ecfc62
Parents:
0bde8523
Message:

Let VBD handle unlabeled devices too. Now volsrv only cares about partitions.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/bd/vbd/vbd.c

    r0bde8523 r372df8f  
    6060        log_msg(LOG_DEFAULT, LVL_NOTE, "vbds_init()");
    6161
    62         vbds_disks_init();
     62        rc = vbds_disks_init();
     63        if (rc != EOK)
     64                return rc;
     65
     66        rc = vbds_disk_discovery_start();
     67        if (rc != EOK)
     68                return rc;
    6369
    6470        async_set_client_connection(vbds_client_conn);
     
    7985}
    8086
    81 
    82 static void vbds_disk_add_srv(ipc_callid_t iid, ipc_call_t *icall)
    83 {
    84         service_id_t disk_sid;
    85         int rc;
    86 
    87         log_msg(LOG_DEFAULT, LVL_NOTE, "vbds_disk_add_srv()");
    88 
    89         disk_sid = IPC_GET_ARG1(*icall);
    90         rc = vbds_disk_add(disk_sid);
    91         async_answer_0(iid, (sysarg_t) rc);
    92 }
    93 
    94 static void vbds_disk_remove_srv(ipc_callid_t iid, ipc_call_t *icall)
    95 {
    96         service_id_t disk_sid;
    97         int rc;
    98 
    99         log_msg(LOG_DEFAULT, LVL_NOTE, "vbds_disk_remove_srv()");
    100 
    101         disk_sid = IPC_GET_ARG1(*icall);
    102         rc = vbds_disk_remove(disk_sid);
    103         async_answer_0(iid, (sysarg_t) rc);
     87static void vbds_get_disks_srv(ipc_callid_t iid, ipc_call_t *icall)
     88{
     89        ipc_callid_t callid;
     90        size_t size;
     91        size_t act_size;
     92        int rc;
     93
     94        if (!async_data_read_receive(&callid, &size)) {
     95                async_answer_0(callid, EREFUSED);
     96                async_answer_0(iid, EREFUSED);
     97                return;
     98        }
     99
     100        service_id_t *id_buf = (service_id_t *) malloc(size);
     101        if (id_buf == NULL) {
     102                async_answer_0(callid, ENOMEM);
     103                async_answer_0(iid, ENOMEM);
     104                return;
     105        }
     106
     107        rc = vbds_disk_get_ids(id_buf, size, &act_size);
     108        if (rc != EOK) {
     109                async_answer_0(callid, rc);
     110                async_answer_0(iid, rc);
     111                return;
     112        }
     113
     114        sysarg_t retval = async_data_read_finalize(callid, id_buf, size);
     115        free(id_buf);
     116
     117        async_answer_1(iid, retval, act_size);
    104118}
    105119
     
    362376
    363377                switch (method) {
    364                 case VBD_DISK_ADD:
    365                         vbds_disk_add_srv(callid, &call);
    366                         break;
    367                 case VBD_DISK_REMOVE:
    368                         vbds_disk_remove_srv(callid, &call);
     378                case VBD_GET_DISKS:
     379                        vbds_get_disks_srv(callid, &call);
    369380                        break;
    370381                case VBD_DISK_INFO:
Note: See TracChangeset for help on using the changeset viewer.