summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGuido Günther <agx@sigxcpu.org>2014-11-12 07:39:47 +0100
committerGuido Günther <agx@sigxcpu.org>2014-11-12 07:39:47 +0100
commit87bcfc8f11c0c2eecda20de3b99ac0f4ddba879a (patch)
treefca336a57cac9fc97ba25cae08e2dbe8a55480f6 /src
parent7e3dbba7e329a858948eb4c3e4e87c7741d1d7fe (diff)
New upstream version 1.2.10
Diffstat (limited to 'src')
-rw-r--r--src/conf/domain_conf.c24
-rw-r--r--src/conf/domain_conf.h14
-rw-r--r--src/conf/storage_conf.c35
-rw-r--r--src/qemu/qemu_hotplug.c13
-rw-r--r--src/qemu/qemu_migration.c6
-rw-r--r--src/qemu/qemu_process.c2
-rw-r--r--src/util/virnetdev.c4
-rw-r--r--src/vbox/vbox_storage.c36
8 files changed, 85 insertions, 49 deletions
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index a35138232..1b8efb166 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -6380,19 +6380,23 @@ virDomainParseScaledValue(const char *xpath,
/* Parse a memory element located at XPATH within CTXT, and store the
- * result into MEM. If REQUIRED, then the value must exist;
- * otherwise, the value is optional. The value is in blocks of 1024.
+ * result into MEM, in blocks of 1024. If REQUIRED, then the value
+ * must exist; otherwise, the value is optional. The value must not
+ * exceed VIR_DOMAIN_MEMORY_PARAM_UNLIMITED once scaled; additionally,
+ * if CAPPED is true, the value must fit within an unsigned long (only
+ * matters on 32-bit platforms).
+ *
* Return 0 on success, -1 on failure after issuing error. */
static int
virDomainParseMemory(const char *xpath, xmlXPathContextPtr ctxt,
- unsigned long long *mem, bool required)
+ unsigned long long *mem, bool required, bool capped)
{
int ret = -1;
unsigned long long bytes, max;
/* On 32-bit machines, our bound is 0xffffffff * KiB. On 64-bit
* machines, our bound is off_t (2^63). */
- if (sizeof(unsigned long) < sizeof(long long))
+ if (capped && sizeof(unsigned long) < sizeof(long long))
max = 1024ull * ULONG_MAX;
else
max = LLONG_MAX;
@@ -12222,11 +12226,11 @@ virDomainDefParseXML(xmlDocPtr xml,
/* Extract domain memory */
if (virDomainParseMemory("./memory[1]", ctxt,
- &def->mem.max_balloon, true) < 0)
+ &def->mem.max_balloon, true, true) < 0)
goto error;
if (virDomainParseMemory("./currentMemory[1]", ctxt,
- &def->mem.cur_balloon, false) < 0)
+ &def->mem.cur_balloon, false, true) < 0)
goto error;
/* and info about it */
@@ -12346,19 +12350,19 @@ virDomainDefParseXML(xmlDocPtr xml,
/* Extract other memory tunables */
if (virDomainParseMemory("./memtune/hard_limit[1]", ctxt,
- &def->mem.hard_limit, false) < 0)
+ &def->mem.hard_limit, false, false) < 0)
goto error;
if (virDomainParseMemory("./memtune/soft_limit[1]", ctxt,
- &def->mem.soft_limit, false) < 0)
+ &def->mem.soft_limit, false, false) < 0)
goto error;
if (virDomainParseMemory("./memtune/min_guarantee[1]", ctxt,
- &def->mem.min_guarantee, false) < 0)
+ &def->mem.min_guarantee, false, false) < 0)
goto error;
if (virDomainParseMemory("./memtune/swap_hard_limit[1]", ctxt,
- &def->mem.swap_hard_limit, false) < 0)
+ &def->mem.swap_hard_limit, false, false) < 0)
goto error;
n = virXPathULong("string(./vcpu[1])", ctxt, &count);
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index 9908d88c9..fbb3b2f78 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -1966,8 +1966,10 @@ typedef struct _virDomainMemtune virDomainMemtune;
typedef virDomainMemtune *virDomainMemtunePtr;
struct _virDomainMemtune {
- unsigned long long max_balloon; /* in kibibytes */
- unsigned long long cur_balloon; /* in kibibytes */
+ unsigned long long max_balloon; /* in kibibytes, capped at ulong thanks
+ to virDomainGetMaxMemory */
+ unsigned long long cur_balloon; /* in kibibytes, capped at ulong thanks
+ to virDomainGetInfo */
virDomainHugePagePtr hugepages;
size_t nhugepages;
@@ -1975,10 +1977,10 @@ struct _virDomainMemtune {
bool nosharepages;
bool locked;
int dump_core; /* enum virTristateSwitch */
- unsigned long long hard_limit; /* in kibibytes */
- unsigned long long soft_limit; /* in kibibytes */
- unsigned long long min_guarantee; /* in kibibytes */
- unsigned long long swap_hard_limit; /* in kibibytes */
+ unsigned long long hard_limit; /* in kibibytes, limit at off_t bytes */
+ unsigned long long soft_limit; /* in kibibytes, limit at off_t bytes */
+ unsigned long long min_guarantee; /* in kibibytes, limit at off_t bytes */
+ unsigned long long swap_hard_limit; /* in kibibytes, limit at off_t bytes */
};
typedef struct _virDomainPowerManagement virDomainPowerManagement;
diff --git a/src/conf/storage_conf.c b/src/conf/storage_conf.c
index 19c452bf9..afd6cd465 100644
--- a/src/conf/storage_conf.c
+++ b/src/conf/storage_conf.c
@@ -2094,6 +2094,28 @@ getSCSIHostNumber(virStoragePoolSourceAdapter adapter,
VIR_FREE(name);
return ret;
}
+static bool
+matchSCSIAdapterParent(virStoragePoolObjPtr pool,
+ virStoragePoolDefPtr def)
+{
+ virDevicePCIAddressPtr pooladdr =
+ &pool->def->source.adapter.data.scsi_host.parentaddr;
+ virDevicePCIAddressPtr defaddr =
+ &def->source.adapter.data.scsi_host.parentaddr;
+ int pool_unique_id =
+ pool->def->source.adapter.data.scsi_host.unique_id;
+ int def_unique_id =
+ def->source.adapter.data.scsi_host.unique_id;
+ if (pooladdr->domain == defaddr->domain &&
+ pooladdr->bus == defaddr->bus &&
+ pooladdr->slot == defaddr->slot &&
+ pooladdr->function == defaddr->function &&
+ pool_unique_id == def_unique_id) {
+ return true;
+ }
+ return false;
+}
+
int
virStoragePoolSourceFindDuplicate(virStoragePoolObjListPtr pools,
@@ -2143,10 +2165,17 @@ virStoragePoolSourceFindDuplicate(virStoragePoolObjListPtr pools,
VIR_STORAGE_POOL_SOURCE_ADAPTER_TYPE_SCSI_HOST) {
unsigned int pool_hostnum, def_hostnum;
+ if (pool->def->source.adapter.data.scsi_host.has_parent &&
+ def->source.adapter.data.scsi_host.has_parent &&
+ matchSCSIAdapterParent(pool, def)) {
+ matchpool = pool;
+ break;
+ }
+
if (getSCSIHostNumber(pool->def->source.adapter,
&pool_hostnum) < 0 ||
getSCSIHostNumber(def->source.adapter, &def_hostnum) < 0)
- goto error;
+ break;
if (pool_hostnum == def_hostnum)
matchpool = pool;
}
@@ -2188,10 +2217,6 @@ virStoragePoolSourceFindDuplicate(virStoragePoolObjListPtr pools,
ret = -1;
}
return ret;
-
- error:
- virStoragePoolObjUnlock(pool);
- return -1;
}
void
diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c
index d3bf39238..13bcd8898 100644
--- a/src/qemu/qemu_hotplug.c
+++ b/src/qemu/qemu_hotplug.c
@@ -3713,12 +3713,17 @@ int qemuDomainDetachChrDevice(virQEMUDriverPtr driver,
return ret;
}
- if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_DEVICE) &&
- !tmpChr->info.alias) {
- if (qemuAssignDeviceChrAlias(vmdef, tmpChr, -1) < 0)
- return ret;
+ if (!virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_DEVICE)) {
+ virReportError(VIR_ERR_OPERATION_INVALID, "%s",
+ _("qemu does not support -device"));
+ return ret;
}
+ if (!tmpChr->info.alias && qemuAssignDeviceChrAlias(vmdef, tmpChr, -1) < 0)
+ return ret;
+
+ sa_assert(tmpChr->info.alias);
+
if (qemuBuildChrDeviceStr(&devstr, vm->def, chr, priv->qemuCaps) < 0)
return ret;
diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
index ca70e3529..13239ebe3 100644
--- a/src/qemu/qemu_migration.c
+++ b/src/qemu/qemu_migration.c
@@ -1389,7 +1389,7 @@ qemuMigrationStartNBDServer(virQEMUDriverPtr driver,
cleanup:
VIR_FREE(diskAlias);
if (ret < 0)
- virPortAllocatorRelease(driver->remotePorts, port);
+ virPortAllocatorRelease(driver->migrationPorts, port);
return ret;
}
@@ -1595,7 +1595,7 @@ qemuMigrationStopNBDServer(virQEMUDriverPtr driver,
qemuDomainObjExitMonitor(driver, vm);
- virPortAllocatorRelease(driver->remotePorts, priv->nbdPort);
+ virPortAllocatorRelease(driver->migrationPorts, priv->nbdPort);
priv->nbdPort = 0;
}
@@ -2813,7 +2813,7 @@ qemuMigrationPrepareAny(virQEMUDriverPtr driver,
VIR_FORCE_CLOSE(dataFD[1]);
if (vm) {
if (ret < 0) {
- virPortAllocatorRelease(driver->remotePorts, priv->nbdPort);
+ virPortAllocatorRelease(driver->migrationPorts, priv->nbdPort);
priv->nbdPort = 0;
}
if (ret >= 0 || vm->persistent)
diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
index ef258cfad..ba8ba8266 100644
--- a/src/qemu/qemu_process.c
+++ b/src/qemu/qemu_process.c
@@ -4839,7 +4839,7 @@ void qemuProcessStop(virQEMUDriverPtr driver,
}
}
- virPortAllocatorRelease(driver->remotePorts, priv->nbdPort);
+ virPortAllocatorRelease(driver->migrationPorts, priv->nbdPort);
priv->nbdPort = 0;
if (priv->agent) {
diff --git a/src/util/virnetdev.c b/src/util/virnetdev.c
index 6da3371d5..3831009d8 100644
--- a/src/util/virnetdev.c
+++ b/src/util/virnetdev.c
@@ -52,6 +52,10 @@
# include <net/if_dl.h>
#endif
+#ifndef IFNAMSIZ
+# define IFNAMSIZ 16
+#endif
+
#define VIR_FROM_THIS VIR_FROM_NONE
VIR_LOG_INIT("util.netdev");
diff --git a/src/vbox/vbox_storage.c b/src/vbox/vbox_storage.c
index 3610a35fc..0cf7a33ef 100644
--- a/src/vbox/vbox_storage.c
+++ b/src/vbox/vbox_storage.c
@@ -551,7 +551,6 @@ static int vboxStorageVolDelete(virStorageVolPtr vol, unsigned int flags)
PRUint32 machineIdsSize = 0;
vboxArray machineIds = VBOX_ARRAY_INITIALIZER;
vboxIIDUnion hddIID;
- nsresult rc;
int ret = -1;
if (!data->vboxObj) {
@@ -568,8 +567,9 @@ static int vboxStorageVolDelete(virStorageVolPtr vol, unsigned int flags)
}
vboxIIDFromUUID(&hddIID, uuid);
- rc = gVBoxAPI.UIVirtualBox.GetHardDiskByIID(data->vboxObj, &hddIID, &hardDisk);
- if (NS_FAILED(rc))
+ if (NS_FAILED(gVBoxAPI.UIVirtualBox.GetHardDiskByIID(data->vboxObj,
+ &hddIID,
+ &hardDisk)))
goto cleanup;
gVBoxAPI.UIMedium.GetState(hardDisk, &hddstate);
@@ -603,23 +603,22 @@ static int vboxStorageVolDelete(virStorageVolPtr vol, unsigned int flags)
vboxIIDFromArrayItem(&machineId, &machineIds, i);
if (gVBoxAPI.getMachineForSession) {
- rc = gVBoxAPI.UIVirtualBox.GetMachine(data->vboxObj, &machineId, &machine);
- if (NS_FAILED(rc)) {
+ if (NS_FAILED(gVBoxAPI.UIVirtualBox.GetMachine(data->vboxObj,
+ &machineId,
+ &machine))) {
virReportError(VIR_ERR_NO_DOMAIN, "%s",
_("no domain with matching uuid"));
break;
}
}
- rc = gVBoxAPI.UISession.Open(data, &machineId, machine);
-
- if (NS_FAILED(rc)) {
+ if (NS_FAILED(gVBoxAPI.UISession.Open(data, &machineId, machine))) {
vboxIIDUnalloc(&machineId);
continue;
}
- rc = gVBoxAPI.UISession.GetMachine(data->vboxSession, &machine);
- if (NS_FAILED(rc))
+ if (NS_FAILED(gVBoxAPI.UISession.GetMachine(data->vboxSession,
+ &machine)))
goto cleanupLoop;
gVBoxAPI.UArray.vboxArrayGet(&hddAttachments, machine,
@@ -633,13 +632,12 @@ static int vboxStorageVolDelete(virStorageVolPtr vol, unsigned int flags)
if (!hddAttachment)
continue;
- rc = gVBoxAPI.UIMediumAttachment.GetMedium(hddAttachment, &hdd);
- if (NS_FAILED(rc) || !hdd)
+ if (NS_FAILED(gVBoxAPI.UIMediumAttachment.GetMedium(hddAttachment,
+ &hdd)) || !hdd)
continue;
VBOX_IID_INITIALIZE(&iid);
- rc = gVBoxAPI.UIMedium.GetId(hdd, &iid);
- if (NS_FAILED(rc)) {
+ if (NS_FAILED(gVBoxAPI.UIMedium.GetId(hdd, &iid))) {
VBOX_MEDIUM_RELEASE(hdd);
continue;
}
@@ -658,9 +656,8 @@ static int vboxStorageVolDelete(virStorageVolPtr vol, unsigned int flags)
gVBoxAPI.UIMediumAttachment.GetPort(hddAttachment, &port);
gVBoxAPI.UIMediumAttachment.GetDevice(hddAttachment, &device);
- rc = gVBoxAPI.UIMachine.DetachDevice(machine, controller, port, device);
- if (NS_SUCCEEDED(rc)) {
- rc = gVBoxAPI.UIMachine.SaveSettings(machine);
+ if (NS_SUCCEEDED(gVBoxAPI.UIMachine.DetachDevice(machine, controller, port, device))) {
+ ignore_value(gVBoxAPI.UIMachine.SaveSettings(machine));
VIR_DEBUG("saving machine settings");
deregister++;
VIR_DEBUG("deregistering hdd:%d", deregister);
@@ -683,9 +680,8 @@ static int vboxStorageVolDelete(virStorageVolPtr vol, unsigned int flags)
if (machineIdsSize == 0 || machineIdsSize == deregister) {
IProgress *progress = NULL;
- rc = gVBoxAPI.UIHardDisk.DeleteStorage(hardDisk, &progress);
-
- if (NS_SUCCEEDED(rc) && progress) {
+ if (NS_SUCCEEDED(gVBoxAPI.UIHardDisk.DeleteStorage(hardDisk, &progress)) &&
+ progress) {
gVBoxAPI.UIProgress.WaitForCompletion(progress, -1);
VBOX_RELEASE(progress);
DEBUGIID("HardDisk deleted, UUID", &hddIID);