Changeset db9c889 in mainline for uspace/srv/volsrv/part.c


Ignore:
Timestamp:
2018-06-29T13:22:39Z (7 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
72c72d4
Parents:
5f36841
git-author:
Jiri Svoboda <jiri@…> (2018-06-28 17:22:13)
git-committer:
Jiri Svoboda <jiri@…> (2018-06-29 13:22:39)
Message:

Add volume administration utility.

File:
1 edited

Legend:

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

    r5f36841 rdb9c889  
    155155                return;
    156156
     157        free(part->cur_mp);
    157158        free(part->svc_name);
    158159        free(part);
     
    219220}
    220221
    221 static int vol_part_mount(vol_part_t *part)
     222static errno_t vol_part_mount(vol_part_t *part)
    222223{
    223224        char *mp;
    224         int rc;
     225        int err;
     226        errno_t rc;
    225227
    226228        if (str_size(part->label) < 1) {
     
    231233
    232234        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);
     235        err = asprintf(&mp, "/vol/%s", part->label);
     236        if (err < 0) {
     237                log_msg(LOG_DEFAULT, LVL_ERROR, "Out of memory");
    236238                return ENOMEM;
    237239        }
     
    255257        log_msg(LOG_DEFAULT, LVL_NOTE, "Mount to %s -> %d\n", mp, rc);
    256258
    257         free(mp);
     259        part->cur_mp = mp;
     260        part->cur_mp_auto = true;
     261
    258262        return rc;
    259263}
     
    381385
    382386        return ENOENT;
     387}
     388
     389errno_t vol_part_eject_part(vol_part_t *part)
     390{
     391        int rc;
     392
     393        log_msg(LOG_DEFAULT, LVL_DEBUG, "vol_part_eject_part()");
     394
     395        if (part->cur_mp == NULL) {
     396                log_msg(LOG_DEFAULT, LVL_DEBUG, "Attempt to mount unmounted "
     397                    "partition.");
     398                return EINVAL;
     399        }
     400
     401        rc = vfs_unmount_path(part->cur_mp);
     402        if (rc != EOK) {
     403                log_msg(LOG_DEFAULT, LVL_ERROR, "Failed unmounting partition "
     404                    "from %s", part->cur_mp);
     405                return rc;
     406        }
     407
     408        if (part->cur_mp_auto) {
     409                rc = vfs_unlink_path(part->cur_mp);
     410                if (rc != EOK) {
     411                        log_msg(LOG_DEFAULT, LVL_ERROR, "Failed deleting "
     412                            "mount directory %s.", part->cur_mp);
     413                }
     414        }
     415
     416        free(part->cur_mp);
     417        part->cur_mp = NULL;
     418        part->cur_mp_auto = false;
     419
     420        return EOK;
    383421}
    384422
     
    443481        pinfo->fstype = part->fstype;
    444482        str_cpy(pinfo->label, sizeof(pinfo->label), part->label);
     483        str_cpy(pinfo->cur_mp, sizeof(pinfo->cur_mp), part->cur_mp);
     484        pinfo->cur_mp_auto = part->cur_mp_auto;
    445485        return EOK;
    446486}
Note: See TracChangeset for help on using the changeset viewer.