Changeset edebb4a1 in mainline for uspace/srv/volsrv


Ignore:
Timestamp:
2015-10-14T22:30:12Z (10 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
ea0ff6b
Parents:
4b6635a7
Message:

Handle dummy partition addition/removal during label destruction/creation. Handle dummy label properly in fdisk.

Location:
uspace/srv/volsrv
Files:
3 edited

Legend:

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

    r4b6635a7 redebb4a1  
    4747#include "types/part.h"
    4848
    49 static int vol_part_add(service_id_t);
    50 
     49static int vol_part_add_locked(service_id_t);
    5150static LIST_INITIALIZE(vol_parts); /* of vol_part_t */
    5251static FIBRIL_MUTEX_INITIALIZE(vol_parts_lock);
     
    9190                        log_msg(LOG_DEFAULT, LVL_NOTE, "Found partition '%lu'",
    9291                            (unsigned long) svcs[i]);
    93                         rc = vol_part_add(svcs[i]);
     92                        rc = vol_part_add_locked(svcs[i]);
    9493                        if (rc != EOK) {
    9594                                log_msg(LOG_DEFAULT, LVL_ERROR, "Could not add "
     
    128127}
    129128
    130 static int vol_part_add(service_id_t sid)
     129static int vol_part_add_locked(service_id_t sid)
    131130{
    132131        vol_part_t *part;
     
    135134
    136135        assert(fibril_mutex_is_locked(&vol_parts_lock));
     136
     137        /* Check for duplicates */
     138        rc = vol_part_find_by_id(sid, &part);
     139        if (rc == EOK)
     140                return EEXIST;
    137141
    138142        log_msg(LOG_DEFAULT, LVL_NOTE, "vol_part_add()");
     
    160164        list_append(&part->lparts, &vol_parts);
    161165
     166        log_msg(LOG_DEFAULT, LVL_NOTE, "Added partition %zu", part->svc_id);
     167
    162168        return EOK;
    163169
    164170error:
    165171        vol_part_delete(part);
     172        return rc;
     173}
     174
     175int vol_part_add(service_id_t sid)
     176{
     177        int rc;
     178
     179        fibril_mutex_lock(&vol_parts_lock);
     180        rc = vol_part_add_locked(sid);
     181        fibril_mutex_unlock(&vol_parts_lock);
     182
    166183        return rc;
    167184}
  • uspace/srv/volsrv/part.h

    r4b6635a7 redebb4a1  
    4040#include <loc.h>
    4141#include <sys/types.h>
    42 #include <vol.h>
     42#include <types/vol.h>
    4343#include "types/part.h"
    4444
    4545extern int vol_part_init(void);
    4646extern int vol_part_discovery_start(void);
     47extern int vol_part_add(service_id_t);
    4748extern int vol_part_get_ids(service_id_t *, size_t, size_t *);
    4849extern int vol_part_find_by_id(service_id_t, vol_part_t **);
  • uspace/srv/volsrv/volsrv.c

    r4b6635a7 redebb4a1  
    4444#include <stdlib.h>
    4545#include <task.h>
    46 #include <vol.h>
     46#include <types/vol.h>
    4747
    4848#include "part.h"
     
    116116}
    117117
     118static void vol_part_add_srv(ipc_callid_t iid, ipc_call_t *icall)
     119{
     120        service_id_t sid;
     121        int rc;
     122
     123        sid = IPC_GET_ARG1(*icall);
     124
     125        rc = vol_part_add(sid);
     126        if (rc != EOK) {
     127                async_answer_0(iid, rc);
     128                return;
     129        }
     130
     131        async_answer_0(iid, EOK);
     132}
     133
     134
    118135static void vol_part_info_srv(ipc_callid_t iid, ipc_call_t *icall)
    119136{
     
    124141
    125142        sid = IPC_GET_ARG1(*icall);
     143        log_msg(LOG_DEFAULT, LVL_NOTE, "vol_part_info_srv(%zu)",
     144            sid);
    126145        rc = vol_part_find_by_id(sid, &part);
    127146        if (rc != EOK) {
    128147                async_answer_0(iid, ENOENT);
     148                log_msg(LOG_DEFAULT, LVL_NOTE, "vol_part_info_srv(%zu) - "
     149                    "not found", sid);
    129150                return;
    130151        }
     
    133154        if (rc != EOK) {
    134155                async_answer_0(iid, EIO);
     156                log_msg(LOG_DEFAULT, LVL_NOTE, "vol_part_info_srv(%zu) - "
     157                    "get info failed (%d)", sid, rc);
    135158                return;
    136159        }
     
    141164                async_answer_0(callid, EREFUSED);
    142165                async_answer_0(iid, EREFUSED);
     166                log_msg(LOG_DEFAULT, LVL_NOTE, "vol_part_info_srv(%zu) - "
     167                    "read receive failed", sid);
    143168                return;
    144169        }
     
    147172                async_answer_0(callid, EINVAL);
    148173                async_answer_0(iid, EINVAL);
     174                log_msg(LOG_DEFAULT, LVL_NOTE, "vol_part_info_srv(%zu) - "
     175                    "incorrect size", sid);
    149176                return;
    150177        }
     
    155182                async_answer_0(callid, rc);
    156183                async_answer_0(iid, rc);
    157                 return;
    158         }
    159 
     184                log_msg(LOG_DEFAULT, LVL_NOTE, "vol_part_info_srv(%zu) - "
     185                    "data read failed", sid);
     186                return;
     187        }
     188
     189        log_msg(LOG_DEFAULT, LVL_NOTE, "vol_part_info_srv(%zu) - "
     190            "success", sid);
    160191        async_answer_0(iid, EOK);
    161192}
     
    206237                        vol_get_parts_srv(callid, &call);
    207238                        break;
     239                case VOL_PART_ADD:
     240                        vol_part_add_srv(callid, &call);
     241                        break;
    208242                case VOL_PART_INFO:
    209243                        vol_part_info_srv(callid, &call);
Note: See TracChangeset for help on using the changeset viewer.