int volmgr_start_volume_by_mountpoint(char *mount_point) { volume_t *v; v = volmgr_lookup_volume_by_mountpoint(mount_point, true); if (!v) return -ENOENT; if (v->media_type == media_devmapper) { if (devmapper_start(v->dm) < 0) { LOGE("volmgr failed to start devmapper volume '%s'", v->mount_point); } } else if (v->media_type == media_mmc) { if (!v->dev) { LOGE("Cannot start volume '%s' (volume is not bound)", mount_point); pthread_mutex_unlock(&v->lock); return -ENOENT; } if (_volmgr_consider_disk_and_vol(v, v->dev->disk) < 0) { LOGE("volmgr failed to start volume '%s'", v->mount_point); } } pthread_mutex_unlock(&v->lock); return 0; }
int devmapper_genesis(struct devmapping *dm) { if (dm->src_type == dmsrc_loopback) { int fd; LOG_VOL("devmapper_genesis(): Working on %s", dm->type_data.loop.loop_src); unlink(dm->type_data.loop.loop_src); LOG_VOL("devmapper_genesis(): Creating imagefile (%u MB)", dm->size_mb); if ((fd = creat(dm->type_data.loop.loop_src, 0600)) < 0) { LOGE("Error creating imagefile (%s)", strerror(errno)); return -errno; } if (ftruncate(fd, (dm->size_mb * (1024 * 1024))) < 0) { LOGE("Error truncating imagefile (%s)", strerror(errno)); close(fd); return -errno; } close(fd); } else if (dm->src_type == dmsrc_partition) { LOGE("partition maps not yet supported"); return -ENOSYS; } return devmapper_start(dm); }