Changeset e89a06a in mainline for uspace/srv/volsrv/volsrv.c


Ignore:
Timestamp:
2018-07-06T22:13:20Z (6 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
be0f5e4
Parents:
6419c6e
Message:

Encapsulate partitions list in volume server. (Global state is not good coding practice.)

File:
1 edited

Legend:

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

    r6419c6e re89a06a  
    5757{
    5858        errno_t rc;
     59        vol_parts_t *parts = NULL;
     60
    5961        log_msg(LOG_DEFAULT, LVL_DEBUG, "vol_init()");
    6062
    61         rc = vol_part_init();
     63        rc = vol_parts_create(&parts);
    6264        if (rc != EOK)
    63                 return rc;
    64 
    65         rc = vol_part_discovery_start();
     65                goto error;
     66
     67        rc = vol_part_discovery_start(parts);
    6668        if (rc != EOK)
    67                 return rc;
    68 
    69         async_set_fallback_port_handler(vol_client_conn, NULL);
     69                goto error;
     70
     71        async_set_fallback_port_handler(vol_client_conn, parts);
    7072
    7173        rc = loc_server_register(NAME);
    7274        if (rc != EOK) {
    7375                log_msg(LOG_DEFAULT, LVL_ERROR, "Failed registering server: %s.", str_error(rc));
    74                 return EEXIST;
     76                rc = EEXIST;
    7577        }
    7678
     
    7981        if (rc != EOK) {
    8082                log_msg(LOG_DEFAULT, LVL_ERROR, "Failed registering service: %s.", str_error(rc));
    81                 return EEXIST;
     83                rc = EEXIST;
     84                goto error;
    8285        }
    8386
    8487        return EOK;
    85 }
    86 
    87 static void vol_get_parts_srv(ipc_call_t *icall)
     88error:
     89        vol_parts_destroy(parts);
     90        return rc;
     91}
     92
     93static void vol_get_parts_srv(vol_parts_t *parts, ipc_call_t *icall)
    8894{
    8995        ipc_call_t call;
     
    105111        }
    106112
    107         rc = vol_part_get_ids(id_buf, size, &act_size);
     113        rc = vol_part_get_ids(parts, id_buf, size, &act_size);
    108114        if (rc != EOK) {
    109115                async_answer_0(&call, rc);
     
    118124}
    119125
    120 static void vol_part_add_srv(ipc_call_t *icall)
    121 {
    122         service_id_t sid;
    123         errno_t rc;
    124 
    125         sid = IPC_GET_ARG1(*icall);
    126 
    127         rc = vol_part_add(sid);
    128         if (rc != EOK) {
    129                 async_answer_0(icall, rc);
    130                 return;
    131         }
    132 
    133         async_answer_0(icall, EOK);
    134 }
    135 
    136 static void vol_part_info_srv(ipc_call_t *icall)
     126static void vol_part_add_srv(vol_parts_t *parts, ipc_call_t *icall)
     127{
     128        service_id_t sid;
     129        errno_t rc;
     130
     131        sid = IPC_GET_ARG1(*icall);
     132
     133        rc = vol_part_add(parts, sid);
     134        if (rc != EOK) {
     135                async_answer_0(icall, rc);
     136                return;
     137        }
     138
     139        async_answer_0(icall, EOK);
     140}
     141
     142static void vol_part_info_srv(vol_parts_t *parts, ipc_call_t *icall)
    137143{
    138144        service_id_t sid;
     
    144150        log_msg(LOG_DEFAULT, LVL_DEBUG, "vol_part_info_srv(%zu)",
    145151            sid);
    146         rc = vol_part_find_by_id_ref(sid, &part);
     152        rc = vol_part_find_by_id_ref(parts, sid, &part);
    147153        if (rc != EOK) {
    148154                async_answer_0(icall, ENOENT);
     
    183189}
    184190
    185 static void vol_part_eject_srv(ipc_call_t *icall)
     191static void vol_part_eject_srv(vol_parts_t *parts, ipc_call_t *icall)
    186192{
    187193        service_id_t sid;
     
    192198        log_msg(LOG_DEFAULT, LVL_DEBUG, "vol_part_eject_srv(%zu)", sid);
    193199
    194         rc = vol_part_find_by_id_ref(sid, &part);
     200        rc = vol_part_find_by_id_ref(parts, sid, &part);
    195201        if (rc != EOK) {
    196202                async_answer_0(icall, ENOENT);
     
    209215}
    210216
    211 static void vol_part_empty_srv(ipc_call_t *icall)
     217static void vol_part_empty_srv(vol_parts_t *parts, ipc_call_t *icall)
    212218{
    213219        service_id_t sid;
     
    218224        log_msg(LOG_DEFAULT, LVL_DEBUG, "vol_part_empty_srv(%zu)", sid);
    219225
    220         rc = vol_part_find_by_id_ref(sid, &part);
     226        rc = vol_part_find_by_id_ref(parts, sid, &part);
    221227        if (rc != EOK) {
    222228                async_answer_0(icall, ENOENT);
     
    235241}
    236242
    237 static void vol_part_get_lsupp_srv(ipc_call_t *icall)
     243static void vol_part_get_lsupp_srv(vol_parts_t *parts, ipc_call_t *icall)
    238244{
    239245        vol_fstype_t fstype;
     
    273279
    274280
    275 static void vol_part_mkfs_srv(ipc_call_t *icall)
     281static void vol_part_mkfs_srv(vol_parts_t *parts, ipc_call_t *icall)
    276282{
    277283        service_id_t sid;
     
    298304        }
    299305
    300         rc = vol_part_find_by_id_ref(sid, &part);
     306        rc = vol_part_find_by_id_ref(parts, sid, &part);
    301307        if (rc != EOK) {
    302308                free(label);
     
    319325static void vol_client_conn(ipc_call_t *icall, void *arg)
    320326{
     327        vol_parts_t *parts = (vol_parts_t *) arg;
     328
    321329        log_msg(LOG_DEFAULT, LVL_DEBUG, "vol_client_conn()");
    322330
     
    337345                switch (method) {
    338346                case VOL_GET_PARTS:
    339                         vol_get_parts_srv(&call);
     347                        vol_get_parts_srv(parts, &call);
    340348                        break;
    341349                case VOL_PART_ADD:
    342                         vol_part_add_srv(&call);
     350                        vol_part_add_srv(parts, &call);
    343351                        break;
    344352                case VOL_PART_INFO:
    345                         vol_part_info_srv(&call);
     353                        vol_part_info_srv(parts, &call);
    346354                        break;
    347355                case VOL_PART_EJECT:
    348                         vol_part_eject_srv(&call);
     356                        vol_part_eject_srv(parts, &call);
    349357                        break;
    350358                case VOL_PART_EMPTY:
    351                         vol_part_empty_srv(&call);
     359                        vol_part_empty_srv(parts, &call);
    352360                        break;
    353361                case VOL_PART_LSUPP:
    354                         vol_part_get_lsupp_srv(&call);
     362                        vol_part_get_lsupp_srv(parts, &call);
    355363                        break;
    356364                case VOL_PART_MKFS:
    357                         vol_part_mkfs_srv(&call);
     365                        vol_part_mkfs_srv(parts, &call);
    358366                        break;
    359367                default:
Note: See TracChangeset for help on using the changeset viewer.