Changeset 22fb7ab in mainline for uspace/srv/volsrv/volsrv.c


Ignore:
Timestamp:
2015-06-26T16:15:31Z (9 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
28ed0d9
Parents:
1356f85a
Message:

Delegate disks to volsrv and labels to vbd.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/volsrv/volsrv.c

    r1356f85a r22fb7ab  
    3838#include <io/log.h>
    3939#include <ipc/services.h>
     40#include <ipc/vol.h>
    4041#include <loc.h>
    4142#include <stdio.h>
     
    5455        log_msg(LOG_DEFAULT, LVL_DEBUG, "vol_init()");
    5556
     57        rc = vol_disk_init();
     58        if (rc != EOK)
     59                return rc;
     60
    5661        rc = vol_disk_discovery_start();
    5762        if (rc != EOK)
     
    7681}
    7782
     83static void vol_get_disks_srv(ipc_callid_t iid, ipc_call_t *icall)
     84{
     85        ipc_callid_t callid;
     86        size_t size;
     87        size_t act_size;
     88        int rc;
     89
     90        if (!async_data_read_receive(&callid, &size)) {
     91                async_answer_0(callid, EREFUSED);
     92                async_answer_0(iid, EREFUSED);
     93                return;
     94        }
     95
     96        service_id_t *id_buf = (service_id_t *) malloc(size);
     97        if (id_buf == NULL) {
     98                async_answer_0(callid, ENOMEM);
     99                async_answer_0(iid, ENOMEM);
     100                return;
     101        }
     102
     103        rc = vol_disk_get_ids(id_buf, size, &act_size);
     104        if (rc != EOK) {
     105                async_answer_0(callid, rc);
     106                async_answer_0(iid, rc);
     107                return;
     108        }
     109
     110        sysarg_t retval = async_data_read_finalize(callid, id_buf, size);
     111        free(id_buf);
     112
     113        async_answer_1(iid, retval, act_size);
     114}
     115
     116static void vol_disk_info_srv(ipc_callid_t iid, ipc_call_t *icall)
     117{
     118        service_id_t sid;
     119        vol_disk_t *disk;
     120        int rc;
     121
     122        sid = IPC_GET_ARG1(*icall);
     123        rc = vol_disk_find_by_id(sid, &disk);
     124        if (rc != EOK) {
     125                async_answer_0(iid, ENOENT);
     126                return;
     127        }
     128
     129        async_answer_2(iid, rc, disk->dcnt, disk->ltype);
     130}
     131
     132static void vol_label_create_srv(ipc_callid_t iid, ipc_call_t *icall)
     133{
     134        service_id_t sid;
     135        vol_disk_t *disk;
     136        label_type_t ltype;
     137        int rc;
     138
     139        sid = IPC_GET_ARG1(*icall);
     140        ltype = IPC_GET_ARG2(*icall);
     141
     142        rc = vol_disk_find_by_id(sid, &disk);
     143        if (rc != EOK) {
     144                async_answer_0(iid, ENOENT);
     145                return;
     146        }
     147
     148        disk->dcnt = dc_label;
     149        disk->ltype = ltype;
     150
     151        async_answer_0(iid, EOK);
     152}
     153
     154static void vol_disk_empty_srv(ipc_callid_t iid, ipc_call_t *icall)
     155{
     156        service_id_t sid;
     157        vol_disk_t *disk;
     158        int rc;
     159
     160        sid = IPC_GET_ARG1(*icall);
     161
     162        rc = vol_disk_find_by_id(sid, &disk);
     163        if (rc != EOK) {
     164                async_answer_0(iid, ENOENT);
     165                return;
     166        }
     167
     168        disk->dcnt = dc_empty;
     169
     170        async_answer_0(iid, EOK);
     171}
    78172
    79173static void vol_client_conn(ipc_callid_t iid, ipc_call_t *icall, void *arg)
     
    96190
    97191                switch (method) {
     192                case VOL_GET_DISKS:
     193                        vol_get_disks_srv(callid, &call);
     194                        break;
     195                case VOL_DISK_INFO:
     196                        vol_disk_info_srv(callid, &call);
     197                        break;
     198                case VOL_LABEL_CREATE:
     199                        vol_label_create_srv(callid, &call);
     200                        break;
     201                case VOL_DISK_EMPTY:
     202                        vol_disk_empty_srv(callid, &call);
     203                        break;
    98204                default:
    99205                        async_answer_0(callid, EINVAL);
Note: See TracChangeset for help on using the changeset viewer.