From: Maxim Nestratov <mnestratov(a)virtuozzo.com>
In order to support not only root disks with type=file for containers,
we need to specify mount points for them.
For instance, if a secondary disk is added by the following record in
xml:
<disk type='file' device='disk'>
<driver type='ploop' cache='writeback'/>
<source file='/vz/some_path_to_image_dir'/>
<target bus='sata' dev='sdb'/>
</disk>
we are going to add it to container mounted to '/mnt/sdb' path.
Signed-off-by: Maxim Nestratov <mnestratov(a)virtuozzo.com>
---
src/vz/vz_sdk.c | 35 +++++++++++++++++++++++++++++++----
1 files changed, 31 insertions(+), 4 deletions(-)
diff --git a/src/vz/vz_sdk.c b/src/vz/vz_sdk.c
index 744b58a..6642933 100644
--- a/src/vz/vz_sdk.c
+++ b/src/vz/vz_sdk.c
@@ -3292,21 +3292,48 @@ static int prlsdkAddDisk(PRL_HANDLE sdkdom,
goto cleanup;
}
- if (bootDisk == true) {
+ if (bootDisk) {
pret = PrlVmDev_GetIndex(sdkdisk, &devIndex);
prlsdkCheckRetGoto(pret, cleanup);
if (prlsdkAddDeviceToBootList(sdkdom, devIndex, devType, 0) < 0)
goto cleanup;
- /* If we add physical device as a boot disk to container
- * we have to specify mount point for it */
- if (isCt) {
+ }
+
+ if (isCt) {
+
+ /* If we add a disk as a boot disk to a container
+ * (it doesn't matter whether it has image or real device backend)
+ * we have to specify the root mount point for it */
+ if (bootDisk) {
pret = PrlVmDevHd_SetMountPoint(sdkdisk, "/");
prlsdkCheckRetGoto(pret, cleanup);
+ } else {
+
+ /* In case of image we need to specify a mount point
+ * to make it usable within a container */
+ if (disk->src->type == VIR_STORAGE_TYPE_FILE) {
+ char *mount_point;
+ char *dev_name = strrchr(disk->dst, '/');
+
+ if (!dev_name) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+ _("Unexpected format of disk destination
'%s'."));
+ goto cleanup;
+ }
+
+ if (virAsprintf(&mount_point, "/mnt%s", dev_name) < 0)
+ goto cleanup;
+
+ pret = PrlVmDevHd_SetMountPoint(sdkdisk, mount_point);
+ VIR_FREE(mount_point);
+ prlsdkCheckRetGoto(pret, cleanup);
+ }
}
}
+
return 0;
cleanup:
PrlHandle_Free(sdkdisk);
--
1.7.1