Changeset 5f36841 in mainline for uspace/srv/volsrv/part.c


Ignore:
Timestamp:
2018-06-28T23:03:50Z (7 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
db9c889
Parents:
70fae4e
git-author:
Jiri Svoboda <jiri@…> (2018-06-28 22:27:12)
git-committer:
Jiri Svoboda <jiri@…> (2018-06-28 23:03:50)
Message:

Basic automatic volume mounting.

File:
1 edited

Legend:

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

    r70fae4e r5f36841  
    6868};
    6969
     70static const char *fstype_str(vol_fstype_t fstype)
     71{
     72        struct fsname_type *fst;
     73
     74        fst = &fstab[0];
     75        while (fst->name != NULL) {
     76                if (fst->fstype == fstype)
     77                        return fst->name;
     78                ++fst;
     79        }
     80
     81        assert(false);
     82        return NULL;
     83}
     84
    7085/** Check for new partitions */
    7186static errno_t vol_part_check_new(void)
     
    204219}
    205220
     221static int vol_part_mount(vol_part_t *part)
     222{
     223        char *mp;
     224        int rc;
     225
     226        if (str_size(part->label) < 1) {
     227                /* Don't mount nameless volumes */
     228                log_msg(LOG_DEFAULT, LVL_NOTE, "Not mounting nameless partition.");
     229                return EOK;
     230        }
     231
     232        log_msg(LOG_DEFAULT, LVL_NOTE, "Determine MP label='%s'", part->label);
     233        rc = asprintf(&mp, "/vol/%s", part->label);
     234        if (rc < 0) {
     235                log_msg(LOG_DEFAULT, LVL_NOTE, "rc -> %d", rc);
     236                return ENOMEM;
     237        }
     238
     239        log_msg(LOG_DEFAULT, LVL_NOTE, "Create mount point '%s'", mp);
     240        rc = vfs_link_path(mp, KIND_DIRECTORY, NULL);
     241        if (rc != EOK) {
     242                log_msg(LOG_DEFAULT, LVL_ERROR, "Error creating mount point '%s'",
     243                    mp);
     244                free(mp);
     245                return EIO;
     246        }
     247
     248        log_msg(LOG_DEFAULT, LVL_NOTE, "Call vfs_mount_path mp='%s' fstype='%s' svc_name='%s'",
     249            mp, fstype_str(part->fstype), part->svc_name);
     250        rc = vfs_mount_path(mp, fstype_str(part->fstype),
     251            part->svc_name, "", 0, 0);
     252        if (rc != EOK) {
     253                log_msg(LOG_DEFAULT, LVL_NOTE, "Failed mounting to %s", mp);
     254        }
     255        log_msg(LOG_DEFAULT, LVL_NOTE, "Mount to %s -> %d\n", mp, rc);
     256
     257        free(mp);
     258        return rc;
     259}
     260
     261
    206262static errno_t vol_part_add_locked(service_id_t sid)
    207263{
     
    210266
    211267        assert(fibril_mutex_is_locked(&vol_parts_lock));
     268        log_msg(LOG_DEFAULT, LVL_NOTE, "vol_part_add_locked(%zu)", sid);
    212269
    213270        /* Check for duplicates */
     
    216273                return EEXIST;
    217274
    218         log_msg(LOG_DEFAULT, LVL_DEBUG, "vol_part_add_locked()");
     275        log_msg(LOG_DEFAULT, LVL_NOTE, "partition %zu is new", sid);
     276
    219277        part = vol_part_new();
    220278        if (part == NULL)
     
    230288
    231289        rc = vol_part_probe(part);
     290        if (rc != EOK)
     291                goto error;
     292
     293        rc = vol_part_mount(part);
    232294        if (rc != EOK)
    233295                goto error;
     
    366428        }
    367429
     430        rc = vol_part_mount(part);
     431        if (rc != EOK) {
     432                fibril_mutex_unlock(&vol_parts_lock);
     433                return rc;
     434        }
     435
    368436        fibril_mutex_unlock(&vol_parts_lock);
    369437        return EOK;
Note: See TracChangeset for help on using the changeset viewer.