14-Jul-16 16:52, Olga Krishtal пишет:

Signed-off-by: Olga Krishtal <okrish...@virtuozzo.com>
---
  src/conf/domain_audit.c    |  4 ++--
  src/conf/domain_conf.c     | 34 ++++++++++++++++++++++++-------
  src/conf/domain_conf.h     |  3 ++-
  src/libvirt_private.syms   |  1 +
  src/lxc/lxc_cgroup.c       |  2 +-
  src/lxc/lxc_container.c    | 50 +++++++++++++++++++++++-----------------------
  src/lxc/lxc_controller.c   | 18 ++++++++---------
  src/lxc/lxc_native.c       |  5 +++--
  src/lxc/lxc_process.c      |  4 ++--
  src/openvz/openvz_conf.c   |  6 +++---
  src/openvz/openvz_driver.c |  4 ++--
  src/qemu/qemu_command.c    |  2 +-
  src/vbox/vbox_common.c     |  6 +++---
  src/vmx/vmx.c              |  6 +++---
  src/vz/vz_sdk.c            | 12 +++++------
  15 files changed, 90 insertions(+), 67 deletions(-)

diff --git a/src/conf/domain_audit.c b/src/conf/domain_audit.c
index 6ad0acb..53a58ac 100644
--- a/src/conf/domain_audit.c
+++ b/src/conf/domain_audit.c
@@ -296,8 +296,8 @@ virDomainAuditFS(virDomainObjPtr vm,
                   const char *reason, bool success)
  {
      virDomainAuditGenericDev(vm, "fs",
-                             oldDef ? oldDef->src : NULL,
-                             newDef ? newDef->src : NULL,
+                             oldDef ? oldDef->src->path : NULL,
+                             newDef ? newDef->src->path : NULL,
                               reason, success);
  }
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 9f7b906..0b33b3b 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -1698,12 +1698,31 @@ void 
virDomainControllerDefFree(virDomainControllerDefPtr def)
      VIR_FREE(def);
  }
+virDomainFSDefPtr
+virDomainFSDefNew(void)
+{
+    virDomainFSDefPtr ret;
+
+    if (VIR_ALLOC(ret) < 0)
+        return NULL;
+
+    if (VIR_ALLOC(ret->src) < 0)
+        goto cleanup;
+
+    return ret;
+
+ cleanup:
+    virDomainFSDefFree(ret);
+    return NULL;
+
+}
+
  void virDomainFSDefFree(virDomainFSDefPtr def)
  {
      if (!def)
          return;
- VIR_FREE(def->src);
+    virStorageSourceFree(def->src);
      VIR_FREE(def->dst);
      virDomainDeviceInfoClear(&def->info);
@@ -8528,7 +8547,7 @@ virDomainFSDefParseXML(xmlNodePtr node, ctxt->node = node; - if (VIR_ALLOC(def) < 0)
+    if (!(def = virDomainFSDefNew()))
          return NULL;
type = virXMLPropString(node, "type");
@@ -8655,7 +8674,7 @@ virDomainFSDefParseXML(xmlNodePtr node,
              goto error;
      }
- def->src = source;
+    def->src->path = source;
      source = NULL;
      def->dst = target;
      target = NULL;
@@ -20144,6 +20163,7 @@ virDomainFSDefFormat(virBufferPtr buf,
      const char *accessmode = 
virDomainFSAccessModeTypeToString(def->accessmode);
      const char *fsdriver = virDomainFSDriverTypeToString(def->fsdriver);
      const char *wrpolicy = virDomainFSWrpolicyTypeToString(def->wrpolicy);
+    const char *src = def->src->path;
if (!type) {
          virReportError(VIR_ERR_INTERNAL_ERROR,
@@ -20180,22 +20200,22 @@ virDomainFSDefFormat(virBufferPtr buf,
      case VIR_DOMAIN_FS_TYPE_MOUNT:
      case VIR_DOMAIN_FS_TYPE_BIND:
          virBufferEscapeString(buf, "<source dir='%s'/>\n",
-                              def->src);
+                              src);
          break;
case VIR_DOMAIN_FS_TYPE_BLOCK:
          virBufferEscapeString(buf, "<source dev='%s'/>\n",
-                              def->src);
+                              src);
          break;
case VIR_DOMAIN_FS_TYPE_FILE:
          virBufferEscapeString(buf, "<source file='%s'/>\n",
-                              def->src);
+                              src);
          break;
case VIR_DOMAIN_FS_TYPE_TEMPLATE:
          virBufferEscapeString(buf, "<source name='%s'/>\n",
-                              def->src);
+                              src);
          break;
case VIR_DOMAIN_FS_TYPE_RAM:
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index ba0ad5f..281abba 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -802,7 +802,7 @@ struct _virDomainFSDef {
      int wrpolicy; /* enum virDomainFSWrpolicy */
      int format; /* virStorageFileFormat */
      unsigned long long usage; /* in bytes */
-    char *src;
+    virStorageSourcePtr src;
      char *dst;
      bool readonly;
      virDomainDeviceInfo info;
@@ -2474,6 +2474,7 @@ virDomainDiskDefPtr 
virDomainDiskFindByBusAndDst(virDomainDefPtr def,
                                                   int bus,
                                                   char *dst);
  void virDomainControllerDefFree(virDomainControllerDefPtr def);
+virDomainFSDefPtr virDomainFSDefNew(void);
  virDomainControllerDefPtr
  virDomainControllerDefNew(virDomainControllerType type);
  void virDomainFSDefFree(virDomainFSDefPtr def);
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index ccb4c5e..5f3a809 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -292,6 +292,7 @@ virDomainDiskSetDriver;
  virDomainDiskSetFormat;
  virDomainDiskSetSource;
  virDomainDiskSetType;
+virDomainFSDefNew;

Incorrect alphabetical order

  virDomainFSDefFree;
  virDomainFSIndexByName;
  virDomainFSInsert;
diff --git a/src/lxc/lxc_cgroup.c b/src/lxc/lxc_cgroup.c
index ea86d36..1c42ab5 100644
--- a/src/lxc/lxc_cgroup.c
+++ b/src/lxc/lxc_cgroup.c
@@ -412,7 +412,7 @@ static int virLXCCgroupSetupDeviceACL(virDomainDefPtr def,
              continue;
if (virCgroupAllowDevicePath(cgroup,
-                                     def->fss[i]->src,
+                                     def->fss[i]->src->path,
                                       def->fss[i]->readonly ?
                                       VIR_CGROUP_DEVICE_READ :
                                       VIR_CGROUP_DEVICE_RW, false) < 0)
diff --git a/src/lxc/lxc_container.c b/src/lxc/lxc_container.c
index 916a37b..a39e24f 100644
--- a/src/lxc/lxc_container.c
+++ b/src/lxc/lxc_container.c
@@ -619,27 +619,27 @@ static int lxcContainerResolveSymlinks(virDomainFSDefPtr 
fs, bool gentle)
      if (!fs->src || fs->symlinksResolved)
          return 0;
- if (access(fs->src, F_OK)) {
+    if (access(fs->src->path, F_OK)) {
          if (gentle) {
              /* Just ignore the error for the while, we'll try again later */
-            VIR_DEBUG("Skipped unaccessible '%s'", fs->src);
+            VIR_DEBUG("Skipped unaccessible '%s'", fs->src->path);
              return 0;
          } else {
              virReportSystemError(errno,
-                                 _("Failed to access '%s'"), fs->src);
+                                 _("Failed to access '%s'"), fs->src->path);
              return -1;
          }
      }
- VIR_DEBUG("Resolving '%s'", fs->src);
-    if (virFileResolveAllLinks(fs->src, &newroot) < 0) {
+    VIR_DEBUG("Resolving '%s'", fs->src->path);
+    if (virFileResolveAllLinks(fs->src->path, &newroot) < 0) {
          if (gentle) {
-            VIR_DEBUG("Skipped non-resolvable '%s'", fs->src);
+            VIR_DEBUG("Skipped non-resolvable '%s'", fs->src->path);
              return 0;
          } else {
              virReportSystemError(errno,
                                   _("Failed to resolve symlink at %s"),
-                                 fs->src);
+                                 fs->src->path);
          }
          return -1;
      }
@@ -647,10 +647,10 @@ static int lxcContainerResolveSymlinks(virDomainFSDefPtr 
fs, bool gentle)
      /* Mark it resolved to skip it the next time */
      fs->symlinksResolved = true;
- VIR_DEBUG("Resolved '%s' to %s", fs->src, newroot);
+    VIR_DEBUG("Resolved '%s' to %s", fs->src->path, newroot);
- VIR_FREE(fs->src);
-    fs->src = newroot;
+    VIR_FREE(fs->src->path);
+    fs->src->path = newroot;
return 0;
  }
@@ -698,8 +698,8 @@ static int lxcContainerPrepareRoot(virDomainDefPtr def,
root->dst = tmp;
      root->type = VIR_DOMAIN_FS_TYPE_MOUNT;
-    VIR_FREE(root->src);
-    root->src = dst;
+    VIR_FREE(root->src->path);
+    root->src->path = dst;
return 0;
  }
@@ -711,7 +711,7 @@ static int lxcContainerPivotRoot(virDomainFSDefPtr root)
ret = -1; - VIR_DEBUG("Pivot via %s", root->src);
+    VIR_DEBUG("Pivot via %s", root->src->path);
/* root->parent must be private, so make / private. */
      if (mount("", "/", NULL, MS_PRIVATE|MS_REC, NULL) < 0) {
@@ -720,7 +720,7 @@ static int lxcContainerPivotRoot(virDomainFSDefPtr root)
          goto err;
      }
- if (virAsprintf(&oldroot, "%s/.oldroot", root->src) < 0)
+    if (virAsprintf(&oldroot, "%s/.oldroot", root->src->path) < 0)
          goto err;
if (virFileMakePath(oldroot) < 0) {
@@ -751,18 +751,18 @@ static int lxcContainerPivotRoot(virDomainFSDefPtr root)
      }
/* ... and mount our root onto it */
-    if (mount(root->src, newroot, NULL, MS_BIND|MS_REC, NULL) < 0) {
+    if (mount(root->src->path, newroot, NULL, MS_BIND|MS_REC, NULL) < 0) {
          virReportSystemError(errno,
                               _("Failed to bind %s to new root %s"),
-                             root->src, newroot);
+                             root->src->path, newroot);
          goto err;
      }
if (root->readonly) {
-        if (mount(root->src, newroot, NULL, MS_BIND|MS_REC|MS_RDONLY|MS_REMOUNT, 
NULL) < 0) {
+        if (mount(root->src->path, newroot, NULL, 
MS_BIND|MS_REC|MS_RDONLY|MS_REMOUNT, NULL) < 0) {
              virReportSystemError(errno,
                                   _("Failed to make new root %s readonly"),
-                                 root->src);
+                                 root->src->path);
              goto err;
          }
      }
@@ -1179,9 +1179,9 @@ static int lxcContainerMountFSBind(virDomainFSDefPtr fs,
      int ret = -1;
      struct stat st;
- VIR_DEBUG("src=%s dst=%s", fs->src, fs->dst);
+    VIR_DEBUG("src=%s dst=%s", fs->src->path, fs->dst);
- if (virAsprintf(&src, "%s%s", srcprefix, fs->src) < 0)
+    if (virAsprintf(&src, "%s%s", srcprefix, fs->src->path) < 0)
          goto cleanup;
if (stat(fs->dst, &st) < 0) {
@@ -1514,9 +1514,9 @@ static int lxcContainerMountFSBlock(virDomainFSDefPtr fs,
      char *src = NULL;
      int ret = -1;
- VIR_DEBUG("src=%s dst=%s", fs->src, fs->dst);
+    VIR_DEBUG("src=%s dst=%s", fs->src->path, fs->dst);
- if (virAsprintf(&src, "%s%s", srcprefix, fs->src) < 0)
+    if (virAsprintf(&src, "%s%s", srcprefix, fs->src->path) < 0)
          goto cleanup;
ret = lxcContainerMountFSBlockHelper(fs, src, srcprefix, sec_mount_options);
@@ -1622,14 +1622,14 @@ static int lxcContainerMountAllFS(virDomainDefPtr vmDef,
          if (STREQ(vmDef->fss[i]->dst, "/"))
              continue;
- VIR_DEBUG("Mounting '%s' -> '%s'", vmDef->fss[i]->src, vmDef->fss[i]->dst);
+        VIR_DEBUG("Mounting '%s' -> '%s'", vmDef->fss[i]->src->path, 
vmDef->fss[i]->dst);
if (lxcContainerResolveSymlinks(vmDef->fss[i], false) < 0)
              return -1;
if (!(vmDef->fss[i]->src &&
-              STRPREFIX(vmDef->fss[i]->src, vmDef->fss[i]->dst)) &&
+              STRPREFIX(vmDef->fss[i]->src->path, vmDef->fss[i]->dst)) &&
              lxcContainerUnmountSubtree(vmDef->fss[i]->dst, false) < 0)
              return -1;
@@ -1777,7 +1777,7 @@ static int lxcContainerSetupPivotRoot(virDomainDefPtr vmDef, /* FIXME: we should find a way to unmount these mounts for container
       * even user namespace is enabled. */
-    if (STREQ(root->src, "/") && (!vmDef->idmap.nuidmap) &&
+    if (STREQ(root->src->path, "/") && (!vmDef->idmap.nuidmap) &&
          lxcContainerUnmountForSharedRoot(stateDir, vmDef->name) < 0)
          goto cleanup;
diff --git a/src/lxc/lxc_controller.c b/src/lxc/lxc_controller.c
index e58ff1b..f55aadc 100644
--- a/src/lxc/lxc_controller.c
+++ b/src/lxc/lxc_controller.c
@@ -424,18 +424,18 @@ static int 
virLXCControllerSetupLoopDeviceFS(virDomainFSDefPtr fs)
      int lofd;
      char *loname = NULL;
- if ((lofd = virFileLoopDeviceAssociate(fs->src, &loname)) < 0)
+    if ((lofd = virFileLoopDeviceAssociate(fs->src->path, &loname)) < 0)
          return -1;
VIR_DEBUG("Changing fs %s to use type=block for dev %s",
-              fs->src, loname);
+              fs->src->path, loname);
      /*
       * We now change it into a block device type, so that
       * the rest of container setup 'just works'
       */
      fs->type = VIR_DOMAIN_FS_TYPE_BLOCK;
-    VIR_FREE(fs->src);
-    fs->src = loname;
+    VIR_FREE(fs->src->path);
+    fs->src->path = loname;
      loname = NULL;
return lofd;
@@ -485,21 +485,21 @@ static int 
virLXCControllerSetupNBDDeviceFS(virDomainFSDefPtr fs)
          return -1;
      }
- if (virFileNBDDeviceAssociate(fs->src,
+    if (virFileNBDDeviceAssociate(fs->src->path,
                                    fs->format,
                                    fs->readonly,
                                    &dev) < 0)
          return -1;
VIR_DEBUG("Changing fs %s to use type=block for dev %s",
-              fs->src, dev);
+              fs->src->path, dev);
      /*
       * We now change it into a block device type, so that
       * the rest of container setup 'just works'
       */
      fs->type = VIR_DOMAIN_FS_TYPE_BLOCK;
-    VIR_FREE(fs->src);
-    fs->src = dev;
+    VIR_FREE(fs->src->path);
+    fs->src->path = dev;
return 0;
  }
@@ -635,7 +635,7 @@ static int 
virLXCControllerSetupLoopDevices(virLXCControllerPtr ctrl)
              /* The NBD device will be cleaned up while the cgroup will end.
               * For this we need to remember the qemu-nbd pid and add it to
               * the cgroup*/
-            if (virLXCControllerAppendNBDPids(ctrl, fs->src) < 0)
+            if (virLXCControllerAppendNBDPids(ctrl, fs->src->path) < 0)
                  goto cleanup;
          } else {
              virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
diff --git a/src/lxc/lxc_native.c b/src/lxc/lxc_native.c
index acbc20b..ed92049 100644
--- a/src/lxc/lxc_native.c
+++ b/src/lxc/lxc_native.c
@@ -32,6 +32,7 @@
  #include "util/virlog.h"
  #include "util/virstring.h"
  #include "util/virconf.h"
+#include "conf/domain_conf.h"
#define VIR_FROM_THIS VIR_FROM_LXC @@ -46,12 +47,12 @@ lxcCreateFSDef(int type,
  {
      virDomainFSDefPtr def;
- if (VIR_ALLOC(def) < 0)
+    if (!(def = virDomainFSDefNew()))
          return NULL;
def->type = type;
      def->accessmode = VIR_DOMAIN_FS_ACCESSMODE_PASSTHROUGH;
-    if (src && VIR_STRDUP(def->src, src) < 0)
+    if (src && VIR_STRDUP(def->src->path, src) < 0)
          goto error;
      if (VIR_STRDUP(def->dst, dst) < 0)
          goto error;
diff --git a/src/lxc/lxc_process.c b/src/lxc/lxc_process.c
index 28313f0..6761394 100644
--- a/src/lxc/lxc_process.c
+++ b/src/lxc/lxc_process.c
@@ -1153,12 +1153,12 @@ virLXCProcessEnsureRootFS(virDomainObjPtr vm)
      if (root)
          return 0;
- if (VIR_ALLOC(root) < 0)
+    if (!(root = virDomainFSDefNew()) < 0)
          goto error;
root->type = VIR_DOMAIN_FS_TYPE_MOUNT; - if (VIR_STRDUP(root->src, "/") < 0 ||
+    if (VIR_STRDUP(root->src->path, "/") < 0 ||
          VIR_STRDUP(root->dst, "/") < 0)
          goto error;
diff --git a/src/openvz/openvz_conf.c b/src/openvz/openvz_conf.c
index 50f4902..da67488 100644
--- a/src/openvz/openvz_conf.c
+++ b/src/openvz/openvz_conf.c
@@ -351,11 +351,11 @@ openvzReadFSConf(virDomainDefPtr def,
                         veid);
          goto error;
      } else if (ret > 0) {
-        if (VIR_ALLOC(fs) < 0)
+        if (!(fs = virDomainFSDefNew()) < 0)
              goto error;
fs->type = VIR_DOMAIN_FS_TYPE_TEMPLATE;
-        if (VIR_STRDUP(fs->src, temp) < 0)
+        if (VIR_STRDUP(fs->src->path, temp) < 0)
              goto error;
      } else {
          /* OSTEMPLATE was not found, VE was booted from a private dir 
directly */
@@ -374,7 +374,7 @@ openvzReadFSConf(virDomainDefPtr def,
              goto error;
fs->type = VIR_DOMAIN_FS_TYPE_MOUNT;
-        if (!(fs->src = virStringReplace(temp, "$VEID", veid_str)))
+        if (!(fs->src->path = virStringReplace(temp, "$VEID", veid_str)))
              goto error;
VIR_FREE(veid_str);
diff --git a/src/openvz/openvz_driver.c b/src/openvz/openvz_driver.c
index 48c264b..2bb9db0 100644
--- a/src/openvz/openvz_driver.c
+++ b/src/openvz/openvz_driver.c
@@ -206,7 +206,7 @@ static int openvzSetInitialConfig(virDomainDefPtr vmdef)
              goto cleanup;
          }
- if (openvzWriteVPSConfigParam(vpsid, "VE_PRIVATE", vmdef->fss[0]->src) < 0) {
+        if (openvzWriteVPSConfigParam(vpsid, "VE_PRIVATE", 
vmdef->fss[0]->src->path) < 0) {
              virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
                             _("Could not set the source dir for the 
filesystem"));
              goto cleanup;
@@ -2050,7 +2050,7 @@ openvzUpdateDevice(virDomainDefPtr vmdef,
          cur = vmdef->fss[pos];
/* We only allow updating the quota */
-        if (STRNEQ(cur->src, fs->src)
+        if (STRNEQ(cur->src->path, fs->src->path)
              || cur->type != fs->type
              || cur->accessmode != fs->accessmode
              || cur->wrpolicy != fs->wrpolicy
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index 3898ed7..1c50c4c 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -2087,7 +2087,7 @@ qemuBuildFSStr(virDomainFSDefPtr fs,
      }
virBufferAsprintf(&opt, ",id=%s%s", QEMU_FSDEV_HOST_PREFIX, fs->info.alias);
-    virBufferAsprintf(&opt, ",path=%s", fs->src);
+    virBufferAsprintf(&opt, ",path=%s", fs->src->path);
if (fs->readonly) {
          if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_FSDEV_READONLY)) {
diff --git a/src/vbox/vbox_common.c b/src/vbox/vbox_common.c
index 8e49268..0996a1e 100644
--- a/src/vbox/vbox_common.c
+++ b/src/vbox/vbox_common.c
@@ -1839,7 +1839,7 @@ vboxAttachSharedFolder(virDomainDefPtr def, 
vboxGlobalData *data, IMachine *mach
              continue;
VBOX_UTF8_TO_UTF16(def->fss[i]->dst, &nameUtf16);
-        VBOX_UTF8_TO_UTF16(def->fss[i]->src, &hostPathUtf16);
+        VBOX_UTF8_TO_UTF16(def->fss[i]->src->path, &hostPathUtf16);
          writable = !def->fss[i]->readonly;
gVBoxAPI.UIMachine.CreateSharedFolder(machine, nameUtf16, hostPathUtf16,
@@ -3448,7 +3448,7 @@ vboxDumpSharedFolders(virDomainDefPtr def, vboxGlobalData 
*data, IMachine *machi
gVBoxAPI.UISharedFolder.GetHostPath(sharedFolder, &hostPathUtf16);
          VBOX_UTF16_TO_UTF8(hostPathUtf16, &hostPath);
-        if (VIR_STRDUP(def->fss[i]->src, hostPath) < 0) {
+        if (VIR_STRDUP(def->fss[i]->src->path, hostPath) < 0) {
              VBOX_UTF8_FREE(hostPath);
              VBOX_UTF16_FREE(hostPathUtf16);
              goto sharedFoldersCleanup;
@@ -4159,7 +4159,7 @@ static int vboxDomainAttachDeviceImpl(virDomainPtr dom,
              PRBool writable;
VBOX_UTF8_TO_UTF16(dev->data.fs->dst, &nameUtf16);
-            VBOX_UTF8_TO_UTF16(dev->data.fs->src, &hostPathUtf16);
+            VBOX_UTF8_TO_UTF16(dev->data.fs->src->path, &hostPathUtf16);
              writable = !dev->data.fs->readonly;
rc = gVBoxAPI.UIMachine.CreateSharedFolder(machine, nameUtf16, hostPathUtf16,
diff --git a/src/vmx/vmx.c b/src/vmx/vmx.c
index d443dd0..f910f4f 100644
--- a/src/vmx/vmx.c
+++ b/src/vmx/vmx.c
@@ -2422,7 +2422,7 @@ int virVMXParseFileSystem(virConfPtr conf, int number, 
virDomainFSDefPtr *def)
          return -1;
      }
- if (VIR_ALLOC(*def) < 0)
+    if (!(*def = virDomainFSDefNew()))
          return -1;
(*def)->type = VIR_DOMAIN_FS_TYPE_MOUNT;
@@ -2450,7 +2450,7 @@ int virVMXParseFileSystem(virConfPtr conf, int number, 
virDomainFSDefPtr *def)
      if (virVMXGetConfigString(conf, hostPath_name, &hostPath, false) < 0)
          goto cleanup;
- (*def)->src = hostPath;
+    (*def)->src->path = hostPath;
      hostPath = NULL;
/* vmx:guestName */
@@ -3690,7 +3690,7 @@ virVMXFormatFileSystem(virDomainFSDefPtr def, int number, 
virBufferPtr buffer)
      virBufferAsprintf(buffer, "sharedFolder%d.writeAccess = \"%s\"\n", number,
                        def->readonly ? "false" : "true");
      virBufferAsprintf(buffer, "sharedFolder%d.hostPath = \"%s\"\n", number,
-                      def->src);
+                      def->src->path);
      virBufferAsprintf(buffer, "sharedFolder%d.guestName = \"%s\"\n", number,
                        def->dst);
diff --git a/src/vz/vz_sdk.c b/src/vz/vz_sdk.c
index eff6114..b13b84d 100644
--- a/src/vz/vz_sdk.c
+++ b/src/vz/vz_sdk.c
@@ -658,7 +658,7 @@ prlsdkGetFSInfo(PRL_HANDLE prldisk,
      if (!(buf = prlsdkGetStringParamVar(PrlVmDev_GetImagePath, prldisk)))
          goto cleanup;
- fs->src = buf;
+    fs->src->path = buf;
      buf = NULL;
if (!(buf = prlsdkGetStringParamVar(PrlVmDevHd_GetMountPoint, prldisk)))
@@ -699,7 +699,7 @@ prlsdkAddDomainHardDisksInfo(vzDriverPtr driver, PRL_HANDLE 
sdkdom, virDomainDef
if (PDT_USE_REAL_DEVICE != emulatedType && IS_CT(def)) { - if (VIR_ALLOC(fs) < 0)
+            if (!(fs = virDomainFSDefNew()))
                  goto error;
if (prlsdkGetFSInfo(hdd, fs) < 0)
@@ -3533,13 +3533,13 @@ prlsdkAddFS(PRL_HANDLE sdkdom, virDomainFSDefPtr fs)
      pret = PrlVmDev_SetEmulatedType(sdkdisk, PDT_USE_IMAGE_FILE);
      prlsdkCheckRetGoto(pret, cleanup);
- pret = PrlVmDev_SetSysName(sdkdisk, fs->src);
+    pret = PrlVmDev_SetSysName(sdkdisk, fs->src->path);
      prlsdkCheckRetGoto(pret, cleanup);
- pret = PrlVmDev_SetImagePath(sdkdisk, fs->src);
+    pret = PrlVmDev_SetImagePath(sdkdisk, fs->src->path);
      prlsdkCheckRetGoto(pret, cleanup);
- pret = PrlVmDev_SetFriendlyName(sdkdisk, fs->src);
+    pret = PrlVmDev_SetFriendlyName(sdkdisk, fs->src->path);
      prlsdkCheckRetGoto(pret, cleanup);
pret = PrlVmDevHd_SetMountPoint(sdkdisk, fs->dst);
@@ -3892,7 +3892,7 @@ prlsdkCreateCt(vzDriverPtr driver, virDomainDefPtr def)
      prlsdkCheckRetGoto(pret, cleanup);
if (useTemplate) {
-        pret = PrlVmCfg_SetOsTemplate(sdkdom, def->fss[0]->src);
+        pret = PrlVmCfg_SetOsTemplate(sdkdom, def->fss[0]->src->path);
          prlsdkCheckRetGoto(pret, cleanup);
}

A small nit inline otherwise look good.

Maxim

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

Reply via email to