Changeset 3f7e1f24 in mainline for uspace/srv/sysman/units/unit_mnt.c


Ignore:
Timestamp:
2019-08-03T08:28:26Z (6 years ago)
Author:
Matthieu Riolo <matthieu.riolo@…>
Children:
095d03c
Parents:
d7c5fc0
git-author:
Michal Koutný <xm.koutny+hos@…> (2015-04-22 17:54:08)
git-committer:
Matthieu Riolo <matthieu.riolo@…> (2019-08-03 08:28:26)
Message:

sysman: Refactored job manipulation (event loop + one main fibril)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/sysman/units/unit_mnt.c

    rd7c5fc0 r3f7e1f24  
    8787static int unit_mnt_start(unit_t *unit)
    8888{
     89        // TODO replace with non-blocking
     90        const bool blocking = true;
    8991        unit_mnt_t *u_mnt = CAST_MNT(unit);
    9092        assert(u_mnt);
    9193
    92         fibril_mutex_lock(&unit->state_mtx);
    9394       
    9495        // TODO think about unit's lifecycle (is STOPPED only acceptable?)
    9596        assert(unit->state == STATE_STOPPED);
    96         unit->state = STATE_STARTING;
    97        
    98         fibril_condvar_broadcast(&unit->state_cv);
    99         fibril_mutex_unlock(&unit->state_mtx);
    10097
    10198
    10299        // TODO use other mount parameters
    103100        int rc = mount(u_mnt->type, u_mnt->mountpoint, u_mnt->device, "",
    104             IPC_FLAG_BLOCKING, 0);
     101            blocking ? IPC_FLAG_BLOCKING : 0, 0);
    105102
    106         if (rc == EOK) {
    107                 sysman_log(LVL_NOTE, "Mount ('%s') mounted", unit_name(unit));
    108                 unit_set_state(unit, STATE_STARTED);
     103        if (blocking) {
     104                if (rc == EOK) {
     105                        sysman_log(LVL_DEBUG, "Mount ('%s') mounted", unit_name(unit));
     106                        unit->state = STATE_STARTED;
     107                } else {
     108                        sysman_log(LVL_ERROR, "Mount ('%s') failed (%i)",
     109                            unit_name(unit), rc);
     110                        unit->state = STATE_FAILED;
     111                }
    109112        } else {
    110                 sysman_log(LVL_ERROR, "Mount ('%s') failed (%i)",
    111                     unit_name(unit), rc);
    112                 unit_set_state(unit, STATE_FAILED);
     113                if (rc == EOK) {
     114                        sysman_log(LVL_DEBUG, "Mount ('%s') requested", unit_name(unit));
     115                        unit->state = STATE_STARTING;
     116                } else {
     117                        sysman_log(LVL_ERROR, "Mount ('%s') request failed (%i)",
     118                            unit_name(unit), rc);
     119                        unit->state = STATE_FAILED;
     120                }
    113121        }
    114122
Note: See TracChangeset for help on using the changeset viewer.