diff options
author | Guido Günther <agx@sigxcpu.org> | 2014-11-12 07:39:47 +0100 |
---|---|---|
committer | Guido Günther <agx@sigxcpu.org> | 2014-11-12 07:39:47 +0100 |
commit | 87bcfc8f11c0c2eecda20de3b99ac0f4ddba879a (patch) | |
tree | fca336a57cac9fc97ba25cae08e2dbe8a55480f6 /src | |
parent | 7e3dbba7e329a858948eb4c3e4e87c7741d1d7fe (diff) |
New upstream version 1.2.10
Diffstat (limited to 'src')
-rw-r--r-- | src/conf/domain_conf.c | 24 | ||||
-rw-r--r-- | src/conf/domain_conf.h | 14 | ||||
-rw-r--r-- | src/conf/storage_conf.c | 35 | ||||
-rw-r--r-- | src/qemu/qemu_hotplug.c | 13 | ||||
-rw-r--r-- | src/qemu/qemu_migration.c | 6 | ||||
-rw-r--r-- | src/qemu/qemu_process.c | 2 | ||||
-rw-r--r-- | src/util/virnetdev.c | 4 | ||||
-rw-r--r-- | src/vbox/vbox_storage.c | 36 |
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); |