<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:syn="http://purl.org/rss/1.0/modules/syndication/" xmlns:admin="http://webns.net/mvcb/">
  <channel rdf:about="http://blog.gmane.org/gmane.comp.emulators.libvirt">
    <title>gmane.comp.emulators.libvirt</title>
    <link>http://blog.gmane.org/gmane.comp.emulators.libvirt</link>
    <description/>
    <syn:updatePeriod>hourly</syn:updatePeriod>
    <syn:updateFrequency>1</syn:updateFrequency>
    <syn:updateBase>1901-01-01T00:00+00:00</syn:updateBase>
    <items>
      <rdf:Seq>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.emulators.libvirt/79274"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.emulators.libvirt/79271"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.emulators.libvirt/79270"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.emulators.libvirt/79265"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.emulators.libvirt/79257"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.emulators.libvirt/79252"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.emulators.libvirt/79237"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.emulators.libvirt/79230"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.emulators.libvirt/79214"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.emulators.libvirt/79211"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.emulators.libvirt/79209"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.emulators.libvirt/79207"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.emulators.libvirt/79200"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.emulators.libvirt/79193"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.emulators.libvirt/79190"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.emulators.libvirt/79189"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.emulators.libvirt/79188"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.emulators.libvirt/79182"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.emulators.libvirt/79177"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.emulators.libvirt/79176"/>
      </rdf:Seq>
    </items>
    <image rdf:resource="http://gmane.org/img/gmane-25t.png"/>
    <textinput rdf:resource=""/>
  </channel>
  <image rdf:about="http://gmane.org/img/gmane-25t.png">
    <title>Gmane</title>
    <url>http://gmane.org/img/gmane-25t.png</url>
    <link>http://gmane.org</link>
  </image>
  <item rdf:about="http://comments.gmane.org/gmane.comp.emulators.libvirt/79274">
    <title>[libvirt] [PATCH v2 0/2] BSD implementation of virNetDevTapCreate()and virNetDevTapDelete()</title>
    <link>http://comments.gmane.org/gmane.comp.emulators.libvirt/79274</link>
    <description>&lt;pre&gt;Changes from the previous version:
 * virNetDevSetupControl patch: remove pointless &amp;lt;config.h&amp;gt; include from
   virnetdev.h
 * virnetdevtap.c patch: rebase to include new tapfdSize param for
   virNetDevTapCreate()

Roman Bogorodskiy (2):
  Make virNetDevSetupControl() public.
  BSD: implement virNetDevTapCreate() and virNetDevTapDelete()

 src/libvirt_private.syms         |   1 +
 src/util/virnetdev.c             |  15 ++++-
 src/util/virnetdev.h             |  11 ++++
 src/util/virnetdevmacvlan.c      |   2 +-
 src/util/virnetdevtap.c          | 116 ++++++++++++++++++++++++++++++++++++++-
 src/util/virnetdevvportprofile.c |   2 +-
 6 files changed, 141 insertions(+), 6 deletions(-)

&lt;/pre&gt;</description>
    <dc:creator>Roman Bogorodskiy</dc:creator>
    <dc:date>2013-05-25T15:24:21</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.emulators.libvirt/79271">
    <title>[libvirt] virCommandWait internal error Child process unexpectedexit status 1</title>
    <link>http://comments.gmane.org/gmane.comp.emulators.libvirt/79271</link>
    <description>&lt;pre&gt;I am use libvirt master branch to test LXC , the lastest commit of the master branch is 03d813bbcd7b4a18360105500672b84d985dd889,
by Marek Marczykowski &amp;lt;marmarek&amp;lt; at &amp;gt;invisiblethingslab.com&amp;gt;
on  Thu May 23 02:01:30 2013 +0200,
 
root&amp;lt; at &amp;gt;wheezy:/tmp# cat test.xml 
&amp;lt;domain type='lxc'&amp;gt;
  &amp;lt;name&amp;gt;vmtest&amp;lt;/name&amp;gt;
  &amp;lt;memory&amp;gt;500000&amp;lt;/memory&amp;gt;
  &amp;lt;os&amp;gt;
    &amp;lt;type&amp;gt;exe&amp;lt;/type&amp;gt;
    &amp;lt;cmdline&amp;gt;console=ttyS0&amp;lt;/cmdline&amp;gt;
    &amp;lt;init&amp;gt;/sbin/init&amp;lt;/init&amp;gt;
  &amp;lt;/os&amp;gt;
  &amp;lt;vcpu&amp;gt;1&amp;lt;/vcpu&amp;gt;
  &amp;lt;clock offset='utc'/&amp;gt;
  &amp;lt;on_poweroff&amp;gt;destroy&amp;lt;/on_poweroff&amp;gt;
  &amp;lt;on_reboot&amp;gt;restart&amp;lt;/on_reboot&amp;gt;
  &amp;lt;on_crash&amp;gt;destroy&amp;lt;/on_crash&amp;gt;
  &amp;lt;devices&amp;gt;
    &amp;lt;filesystem type="mount"&amp;gt;
      &amp;lt;source dir="/tmp/x"/&amp;gt;
      &amp;lt;target dir="/"/&amp;gt;
    &amp;lt;/filesystem&amp;gt;
    &amp;lt;emulator&amp;gt;/usr/libexec/libvirt_lxc&amp;lt;/emulator&amp;gt;
    &amp;lt;interface type='network'&amp;gt;
      &amp;lt;source network='default'/&amp;gt;
    &amp;lt;/interface&amp;gt;
    &amp;lt;console type='pty' /&amp;gt;
  &amp;lt;/devices&amp;gt;
&amp;lt;/domain&amp;gt;
root&amp;lt; at &amp;gt;wheezy:/tmp# virsh -c lxc:/// define test.xml 
Domain vmtest defined from test.xml

root&amp;lt; at &amp;gt;wheezy:/tmp# virsh -c lxc:/// start vmtest 
error: Failed to start domain vmtest
error: internal error Child process (PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin LIBVIRT_DEBUG=3 LIBVIRT_LOG_OUTPUTS=3:stderr /usr/libexec/libvirt_lxc --name vmtest --console 19 --security=none --handshake 22 --background --veth veth7) unexpected exit status 1

below's a libvirtd log
2013-05-25 14:46:58.727+0000: 7865: error : virCommandWait:2354 : internal error Child process (PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin LIBVIRT_DEBUG=3 LIBVIRT_LOG_OUTPUTS=3:stderr /usr/libexec/libvirt_lxc --name vmtest --console 19 --security=none --handshake 22 --background --veth veth7) unexpected exit status 1&lt;/pre&gt;</description>
    <dc:creator>jj</dc:creator>
    <dc:date>2013-05-25T14:53:23</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.emulators.libvirt/79270">
    <title>[libvirt] snapshot-create-as  Permission denied</title>
    <link>http://comments.gmane.org/gmane.comp.emulators.libvirt/79270</link>
    <description>&lt;pre&gt;May 25 20:50:59 ovirtdev NetworkManager[2370]: &amp;lt;warn&amp;gt; /sys/devices/virtual/net/vnet0: couldn't determine device driver; ignoring...
root&amp;lt; at &amp;gt;ovirtdev images]# virsh snapshot-create-as linux snapshot1 "snapshot1" --disk-only --atomic
error: internal error unable to execute QEMU command 'transaction': /var/lib/libvirt/images/test.snapshot1: error while creating qcow2: Permission denied
&lt;/pre&gt;</description>
    <dc:creator>yue</dc:creator>
    <dc:date>2013-05-25T13:10:32</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.emulators.libvirt/79265">
    <title>[libvirt] [PATCH] Expose all CPU features in host definition</title>
    <link>http://comments.gmane.org/gmane.comp.emulators.libvirt/79265</link>
    <description>&lt;pre&gt;I've opened BZ 697141 on this as I would consider it more
a bug than a feature request.  Anyway, to re-iterate my
rationale from the BZ:


The virConnectGetCapabilities API describes the host capabilities
by returning an XML description that includes the CPU model name
and a set of CPU features.  The problem is that any features that
are part of the CPU model are not explicitly listed, they are
assumed to be part of the definition of that CPU model.  This
makes it extremely difficult for the caller of this API to check
for the presence of a specific CPU feature, the caller would have
to know what features are part of which CPU models, a very
daunting task.

This patch solves this problem by having the API return a model
name, as it currently does, but it will also explicitly list all
of the CPU features that are present.  This would make it much
easier for a caller of this API to check for specific features.

Signed-off-by: Don Dugger &amp;lt;donald.d.dugger&amp;lt; at &amp;gt;intel.com&amp;gt;

---
 src/cpu/cpu_x86.c |   30 ++++++++++++++++++++++++++++++
 1 file changed, 30 insertions(+)

diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
index 5d479c2..b2e16df 100644
--- a/src/cpu/cpu_x86.c
+++ b/src/cpu/cpu_x86.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1296,6 +1296,35 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; x86GuestData(virCPUDefPtr host,
     return x86Compute(host, guest, data, message);
 }
 
+static void
+x86AddFeatures(virCPUDefPtr cpu,
+       struct x86_map *map)
+{
+    const struct x86_model *candidate;
+    const struct x86_feature *feature = map-&amp;gt;features;
+
+    candidate = map-&amp;gt;models;
+    while (candidate != NULL) {
+if (STREQ(cpu-&amp;gt;model, candidate-&amp;gt;name))
+    break;
+candidate = candidate-&amp;gt;next;
+    }
+    if (!candidate) {
+VIR_WARN("Odd, %s not a known CPU model\n", cpu-&amp;gt;model);
+return;
+    }
+    while (feature != NULL) {
+if (x86DataIsSubset(candidate-&amp;gt;data, feature-&amp;gt;data)) {
+    if (virCPUDefAddFeature(cpu, feature-&amp;gt;name, VIR_CPU_FEATURE_DISABLE) &amp;lt; 0) {
+VIR_WARN("CPU model %s, no room for feature %s", cpu-&amp;gt;model, feature-&amp;gt;name);
+return;
+    }
+}
+feature = feature-&amp;gt;next;
+    }
+    return;
+}
+
 
 static int
 x86Decode(virCPUDefPtr cpu,
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1383,6 +1412,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; x86Decode(virCPUDefPtr cpu,
         goto out;
     }
 
+    x86AddFeatures(cpuModel, map);
     cpu-&amp;gt;model = cpuModel-&amp;gt;model;
     cpu-&amp;gt;vendor = cpuModel-&amp;gt;vendor;
     cpu-&amp;gt;nfeatures = cpuModel-&amp;gt;nfeatures;
&lt;/pre&gt;</description>
    <dc:creator>Don Dugger</dc:creator>
    <dc:date>2013-05-24T22:44:59</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.emulators.libvirt/79257">
    <title>[libvirt] [PATCH 0/3] qemu: Fix how files are being opened</title>
    <link>http://comments.gmane.org/gmane.comp.emulators.libvirt/79257</link>
    <description>&lt;pre&gt;There were some places in the code, where files were being opened with
uid:gid of the daemon instead of the qemu process related to the file.

First patch exposes the parseIds() function in order for it to be used
somewhere else in the code than in the DAC security driver.  The next
patch fixes how the files are opened and the last one fixes occurences
of open() that should use different uid:gid for opening files.

There maybe should be a check for whether the file being opened is an
image and whether the label used to open the file should be imagelabel
or not.  But, the QEMU process opening the file is running as the
label (not imagelabel) and accessing the files as such.

Martin Kletzander (3):
  Expose ownership ID parsing
  Make qemuOpenFile aware of per-VM DAC seclabel.
  Use qemuOpenFile in qemu_driver.c

 src/libvirt_private.syms    |  1 +
 src/qemu/qemu_driver.c      | 87 +++++++++++++++++++++++++++++++--------------
 src/security/security_dac.c | 51 ++------------------------
 src/util/virutil.c          | 56 +++++++++++++++++++++++++++++
 src/util/virutil.h          |  2 ++
 5 files changed, 122 insertions(+), 75 deletions(-)

--
1.8.2.1

&lt;/pre&gt;</description>
    <dc:creator>Martin Kletzander</dc:creator>
    <dc:date>2013-05-24T20:25:06</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.emulators.libvirt/79252">
    <title>[libvirt] [PATCH 0/2] More semicolon cleanups</title>
    <link>http://comments.gmane.org/gmane.comp.emulators.libvirt/79252</link>
    <description>&lt;pre&gt;In response to:
https://www.redhat.com/archives/libvir-list/2013-May/msg01791.html

Eric Blake (2):
  syntax: prefer space after semicolon in for loop
  syntax-check: mandate space after mid-line semicolon

 HACKING                       | 23 +++++++++++++++++++++++
 build-aux/bracket-spacing.pl  | 12 ++++++++++++
 cfg.mk                        |  2 +-
 docs/hacking.html.in          | 29 +++++++++++++++++++++++++++++
 examples/domsuspend/suspend.c |  2 +-
 python/libvirt-override.c     | 38 +++++++++++++++++++-------------------
 src/conf/interface_conf.c     | 14 +++++++-------
 src/security/virt-aa-helper.c |  2 +-
 src/util/virconf.c            |  4 ++--
 src/util/virhook.c            |  2 +-
 src/util/virlog.c             | 10 +++++-----
 src/util/virsocketaddr.c      | 12 ++++++------
 src/util/virsysinfo.c         |  4 ++--
 src/util/viruuid.c            |  4 ++--
 src/vbox/vbox_tmpl.c          | 11 ++++++++---
 src/xen/xen_hypervisor.c      |  3 ++-
 tools/virsh-domain-monitor.c  |  6 +++---
 tools/virsh-domain.c          |  6 +++---
 18 files changed, 127 insertions(+), 57 deletions(-)

&lt;/pre&gt;</description>
    <dc:creator>Eric Blake</dc:creator>
    <dc:date>2013-05-24T17:19:35</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.emulators.libvirt/79237">
    <title>[libvirt] [PATCH] spec: Build vbox packages only for x86architectures</title>
    <link>http://comments.gmane.org/gmane.comp.emulators.libvirt/79237</link>
    <description>&lt;pre&gt;Commit 6ab6bc19f03513fd87d29ecfd405bb7f4a7de114 has introduced separate
daemon/driver packages for vbox. These should only be built for x86
architectures which is done hereby.

Signed-off-by: Viktor Mihajlovski &amp;lt;mihajlov&amp;lt; at &amp;gt;linux.vnet.ibm.com&amp;gt;
---
 libvirt.spec.in |    5 +++++
 1 file changed, 5 insertions(+)

diff --git a/libvirt.spec.in b/libvirt.spec.in
index e1c5f49..7abe9fe 100644
--- a/libvirt.spec.in
+++ b/libvirt.spec.in
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -130,6 +130,11 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
     %define with_libxl 0
 %endif
 
+# vbox is available only on i386 x86_64
+%ifnarch %{ix86} x86_64
+    %define with_vbox 0
+%endif
+
 # Numactl is not available on s390[x] and ARM
 %ifarch s390 s390x %{arm}
     %define with_numactl 0
&lt;/pre&gt;</description>
    <dc:creator>Viktor Mihajlovski</dc:creator>
    <dc:date>2013-05-24T13:44:19</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.emulators.libvirt/79230">
    <title>[libvirt] [PATCH] qemuOpenVhostNet: Decrease vhostfdSize on openfailure</title>
    <link>http://comments.gmane.org/gmane.comp.emulators.libvirt/79230</link>
    <description>&lt;pre&gt;Currently, if there's an error opening /dev/vhost-net (e.g. because
it doesn't exist) but it's not required we proceed with vhostfd array
filled with -1 and vhostfdSize unchanged. Later, when constructing
the qemu command line only non-negative items within vhostfd array
are taken into account. This means, vhostfdSize may be greater than
the actual count of non-negative items in vhostfd array. This results
in improper command line arguments being generated, e.g.:

-netdev tap,fd=21,id=hostnet0,vhost=on,vhostfd=(null)
---
 src/qemu/qemu_command.c | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index 434f5a7..d969f88 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -486,6 +486,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; qemuOpenVhostNet(virDomainDefPtr def,
                                        "but is unavailable"));
                 goto error;
             }
+            i--;
+            (*vhostfdSize)--;
         }
     }
     virDomainAuditNetDevice(def, net, "/dev/vhost-net", *vhostfdSize);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -6560,12 +6562,10 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; qemuBuildInterfaceCommandLine(virCommandPtr cmd,
     }
 
     for (i = 0; i &amp;lt; vhostfdSize; i++) {
-        if (vhostfd[i] &amp;gt;= 0) {
-            virCommandTransferFD(cmd, vhostfd[i]);
-            if (virAsprintf(&amp;amp;vhostfdName[i], "%d", vhostfd[i]) &amp;lt; 0) {
-                virReportOOMError();
-                goto cleanup;
-            }
+        virCommandTransferFD(cmd, vhostfd[i]);
+        if (virAsprintf(&amp;amp;vhostfdName[i], "%d", vhostfd[i]) &amp;lt; 0) {
+            virReportOOMError();
+            goto cleanup;
         }
     }
 
&lt;/pre&gt;</description>
    <dc:creator>Michal Privoznik</dc:creator>
    <dc:date>2013-05-24T12:50:56</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.emulators.libvirt/79214">
    <title>[libvirt] [PATCH 0/4] Assorted bool cleanups</title>
    <link>http://comments.gmane.org/gmane.comp.emulators.libvirt/79214</link>
    <description>&lt;pre&gt;Found by: git grep '= 1'

Ján Tomko (4):
  Replace two-state local integers with bool
  Remove redundant two-state integers
  nwfilter: change two-state int parameters to bool
  qemu: change two-state int parameters to bool

 src/conf/domain_conf.c                    | 18 +++++-----
 src/conf/network_conf.c                   |  5 ++-
 src/conf/nwfilter_conf.c                  | 56 +++++++++++++++----------------
 src/conf/storage_conf.c                   |  5 ++-
 src/lxc/lxc_controller.c                  |  4 +--
 src/lxc/lxc_process.c                     |  4 +--
 src/nwfilter/nwfilter_dhcpsnoop.c         |  8 +----
 src/nwfilter/nwfilter_ebiptables_driver.c | 36 ++++++++++----------
 src/nwfilter/nwfilter_gentech_driver.c    |  4 +--
 src/qemu/qemu_agent.c                     |  6 ++--
 src/qemu/qemu_capabilities.c              | 21 ++++++------
 src/qemu/qemu_capabilities.h              |  2 +-
 src/qemu/qemu_command.c                   | 39 ++++++++++-----------
 src/qemu/qemu_driver.c                    |  6 ++--
 src/qemu/qemu_hostdev.c                   |  6 ++--
 src/qemu/qemu_migration.c                 | 20 +++++------
 src/qemu/qemu_monitor.c                   |  6 ++--
 src/qemu/qemu_monitor_json.c              |  8 ++---
 src/qemu/qemu_monitor_text.c              | 16 ++++-----
 src/qemu/qemu_process.c                   | 23 +++++--------
 src/remote/remote_driver.c                |  5 ++-
 src/rpc/virnetserver.c                    |  6 ++--
 src/storage/storage_backend.c             |  4 +--
 src/util/vircgroup.c                      |  4 +--
 src/util/virlog.c                         | 15 +++++----
 src/util/virnetdev.c                      | 19 +++++------
 src/util/virpci.c                         | 12 +++----
 src/util/viruri.c                         |  5 +--
 src/util/virutil.c                        | 12 +++----
 tests/qemuhelptest.c                      |  5 +--
 tests/reconnect.c                         |  6 ++--
 tests/ssh.c                               |  8 ++---
 32 files changed, 192 insertions(+), 202 deletions(-)

&lt;/pre&gt;</description>
    <dc:creator>Ján Tomko</dc:creator>
    <dc:date>2013-05-24T11:02:18</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.emulators.libvirt/79211">
    <title>[libvirt] [PATCH v2] Fix blkdeviotune for shutoff domain</title>
    <link>http://comments.gmane.org/gmane.comp.emulators.libvirt/79211</link>
    <description>&lt;pre&gt;Function qemuDomainSetBlockIoTune() was checking QEMU capabilities
even when !(flags &amp;amp; VIR_DOMAIN_AFFECT_LIVE) and the domain was
shutoff, resulting in the following problem:

 virsh # domstate asdf; blkdeviotune asdf vda --write-bytes-sec 100
 shut off

 error: Unable to change block I/O throttle
 error: unsupported configuration: block I/O throttling not supported with this QEMU binary

Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=965016

Signed-off-by: Martin Kletzander &amp;lt;mkletzan&amp;lt; at &amp;gt;redhat.com&amp;gt;
---

Notes:
    Moved the job starting before anything happens

 src/qemu/qemu_driver.c | 33 ++++++++++++++-------------------
 1 file changed, 14 insertions(+), 19 deletions(-)

diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 3df26b8..4a76f14 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -13918,26 +13918,17 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; qemuDomainSetBlockIoTune(virDomainPtr dom,
     if (!(vm = qemuDomObjFromDomain(dom)))
         return -1;

+    if (qemuDomainObjBeginJob(driver, vm, QEMU_JOB_MODIFY) &amp;lt; 0)
+        goto cleanup;
+
     priv = vm-&amp;gt;privateData;
     cfg = virQEMUDriverGetConfig(driver);

     if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
-        goto cleanup;
-
-    if (!virQEMUCapsGet(priv-&amp;gt;qemuCaps, QEMU_CAPS_DRIVE_IOTUNE)) {
-        virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
-                       _("block I/O throttling not supported with this "
-                         "QEMU binary"));
-        goto cleanup;
-    }
-
-    device = qemuDiskPathToAlias(vm, disk, &amp;amp;idx);
-    if (!device) {
-        goto cleanup;
-    }
+        goto endjob;

-    if (qemuDomainObjBeginJob(driver, vm, QEMU_JOB_MODIFY) &amp;lt; 0)
-        goto cleanup;
+    if (!(device = qemuDiskPathToAlias(vm, disk, &amp;amp;idx)))
+        goto endjob;

     if (virDomainLiveConfigHelperMethod(caps, driver-&amp;gt;xmlopt, vm, &amp;amp;flags,
                                         &amp;amp;persistentDef) &amp;lt; 0)
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -13987,6 +13978,13 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; qemuDomainSetBlockIoTune(virDomainPtr dom,
     }

     if (flags &amp;amp; VIR_DOMAIN_AFFECT_LIVE) {
+        if (!virQEMUCapsGet(priv-&amp;gt;qemuCaps, QEMU_CAPS_DRIVE_IOTUNE)) {
+            virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+                       _("block I/O throttling not supported with this "
+                         "QEMU binary"));
+            goto endjob;
+        }
+
         /* If the user didn't specify bytes limits, inherit previous
          * values; likewise if the user didn't specify iops
          * limits.  */
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -14011,9 +14009,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; qemuDomainSetBlockIoTune(virDomainPtr dom,

     if (flags &amp;amp; VIR_DOMAIN_AFFECT_CONFIG) {
         sa_assert(persistentDef);
-        idx = virDomainDiskIndexByName(persistentDef, disk, true);
-        if (idx &amp;lt; 0)
-            goto endjob;
         oldinfo = &amp;amp;persistentDef-&amp;gt;disks[idx]-&amp;gt;blkdeviotune;
         if (!set_bytes) {
             info.total_bytes_sec = oldinfo-&amp;gt;total_bytes_sec;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -14035,7 +14030,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; qemuDomainSetBlockIoTune(virDomainPtr dom,
     }

 endjob:
-    if (qemuDomainObjEndJob(driver, vm) == 0)
+    if (!qemuDomainObjEndJob(driver, vm))
         vm = NULL;

 cleanup:
&lt;/pre&gt;</description>
    <dc:creator>Martin Kletzander</dc:creator>
    <dc:date>2013-05-24T09:57:32</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.emulators.libvirt/79209">
    <title>[libvirt] [PATCH 1/2] virStrndup: Accept negative values as stringlength</title>
    <link>http://comments.gmane.org/gmane.comp.emulators.libvirt/79209</link>
    <description>&lt;pre&gt;It may shorten the code a bit as the following pattern:

  VIR_STRNDUP(dst, src, cond ? n : strlen(src))

is used on several places among our code. However, we can
move the strlen into virStrndup and thus write just:

  VIR_STRNDUP(dst, src, cond ? n : -1)
---
 src/util/virstring.c  |  7 ++++++-
 src/util/virstring.h  | 11 ++++++++---
 tests/virstringtest.c | 36 ++++++++++++++++++++++++++++++++++++
 3 files changed, 50 insertions(+), 4 deletions(-)

diff --git a/src/util/virstring.c b/src/util/virstring.c
index fcbb375..b244e6c 100644
--- a/src/util/virstring.c
+++ b/src/util/virstring.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -568,12 +568,15 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; virStrdup(char **dest,
  * caller's body where virStrndup is called from. Consider
  * using VIR_STRNDUP which sets these automatically.
  *
+ * In case &amp;lt; at &amp;gt;n is smaller than zero, the whole &amp;lt; at &amp;gt;src string is
+ * copied.
+ *
  * Returns: 0 for NULL src, 1 on successful copy, -1 otherwise.
  */
 int
 virStrndup(char **dest,
            const char *src,
-           size_t n,
+           ssize_t n,
            bool report,
            int domcode,
            const char *filename,
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -582,6 +585,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; virStrndup(char **dest,
 {
     if (!src)
         return 0;
+    if (n &amp;lt; 0)
+        n = strlen(src);
     if (!(*dest = strndup(src, n))) {
         if (report)
             virReportOOMErrorFull(domcode, filename, funcname, linenr);
diff --git a/src/util/virstring.h b/src/util/virstring.h
index 534ce91..7063fe4 100644
--- a/src/util/virstring.h
+++ b/src/util/virstring.h
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -93,7 +93,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; int virStrdup(char **dest, const char *src, bool report, int domcode,
               const char *filename, const char *funcname, size_t linenr)
     ATTRIBUTE_RETURN_CHECK ATTRIBUTE_NONNULL(1);
 
-int virStrndup(char **dest, const char *src, size_t n, bool report, int domcode,
+int virStrndup(char **dest, const char *src, ssize_t n, bool report, int domcode,
                const char *filename, const char *funcname, size_t linenr)
     ATTRIBUTE_RETURN_CHECK ATTRIBUTE_NONNULL(1);
 
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -132,7 +132,9 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; int virStrndup(char **dest, const char *src, size_t n, bool report, int domcode,
  * &amp;lt; at &amp;gt;n: the maximum number of bytes to copy
  *
  * Duplicate &amp;lt; at &amp;gt;src string and store it into &amp;lt; at &amp;gt;dst. If &amp;lt; at &amp;gt;src is longer than &amp;lt; at &amp;gt;n,
- * only &amp;lt; at &amp;gt;n bytes are copied and terminating null byte '\0' is added.
+ * only &amp;lt; at &amp;gt;n bytes are copied and terminating null byte '\0' is added. If &amp;lt; at &amp;gt;n
+ * is a negative number, then the whole &amp;lt; at &amp;gt;src string is copied. That is
+ * VIR_STRDUP(dst, src) and VIR_STRNDUP(dst, src, -1) are equal.
  *
  * This macro is safe to use on arguments with side effects.
  *
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -150,7 +152,10 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; int virStrndup(char **dest, const char *src, size_t n, bool report, int domcode,
  * &amp;lt; at &amp;gt;n: the maximum number of bytes to copy
  *
  * Duplicate &amp;lt; at &amp;gt;src string and store it into &amp;lt; at &amp;gt;dst. If &amp;lt; at &amp;gt;src is longer than &amp;lt; at &amp;gt;n,
- * only &amp;lt; at &amp;gt;n bytes are copied and terminating null byte '\0' is added.
+ * only &amp;lt; at &amp;gt;n bytes are copied and terminating null byte '\0' is added. If &amp;lt; at &amp;gt;n
+ * is a negative number, then the whole &amp;lt; at &amp;gt;src string is copied. That is
+ * VIR_STRDUP_QUIET(dst, src) and VIR_STRNDUP_QUIET(dst, src, -1) are
+ * equal.
  *
  * This macro is safe to use on arguments with side effects.
  *
diff --git a/tests/virstringtest.c b/tests/virstringtest.c
index da06c0f..3d0b55b 100644
--- a/tests/virstringtest.c
+++ b/tests/virstringtest.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -196,6 +196,39 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; cleanup:
     return ret;
 }
 
+static int
+testStrndupNegative(const void *opaque ATTRIBUTE_UNUSED)
+{
+    int ret = -1;
+    char *dst;
+    const char *src = "Hello world";
+    int value;
+
+    if ((value = VIR_STRNDUP(dst, src, 5)) != 1) {
+        fprintf(stderr, "unexpected virStrndup result %d, expected 1\n", value);
+        goto cleanup;
+    }
+
+    if (STRNEQ_NULLABLE(dst, "Hello")) {
+        fprintf(stderr, "unexpected content '%s'", dst);
+        goto cleanup;
+    }
+
+    if ((value = VIR_STRNDUP(dst, src, -1)) != 1) {
+        fprintf(stderr, "unexpected virStrndup result %d, expected 1\n", value);
+        goto cleanup;
+    }
+
+    if (STRNEQ_NULLABLE(dst, src)) {
+        fprintf(stderr, "unexpected content '%s'", dst);
+        goto cleanup;
+    }
+
+    ret = 0;
+cleanup:
+    VIR_FREE(dst);
+    return ret;
+}
 
 static int
 mymain(void)
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -245,6 +278,9 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; mymain(void)
     if (virtTestRun("strdup", 1, testStrdup, NULL) &amp;lt; 0)
         ret = -1;
 
+    if (virtTestRun("strdup", 1, testStrndupNegative, NULL) &amp;lt; 0)
+        ret = -1;
+
     return ret==0 ? EXIT_SUCCESS : EXIT_FAILURE;
 }
 
&lt;/pre&gt;</description>
    <dc:creator>Michal Privoznik</dc:creator>
    <dc:date>2013-05-24T09:53:08</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.emulators.libvirt/79207">
    <title>[libvirt] [PATCH] syntax-check: ignore all quoted strings inbracket-spacing</title>
    <link>http://comments.gmane.org/gmane.comp.emulators.libvirt/79207</link>
    <description>&lt;pre&gt;Ignore strings with an escaped double quote too.

This removes the need for special handling of quotes in the
semicolon check.
---
 build-aux/bracket-spacing.pl | 13 ++++---------
 1 file changed, 4 insertions(+), 9 deletions(-)

diff --git a/build-aux/bracket-spacing.pl b/build-aux/bracket-spacing.pl
index fbe6666..a99edeb 100755
--- a/build-aux/bracket-spacing.pl
+++ b/build-aux/bracket-spacing.pl
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -31,8 +31,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; foreach my $file (&amp;lt; at &amp;gt;ARGV) {
     while (defined (my $line = &amp;lt;FILE&amp;gt;)) {
         my $data = $line;
 
-        # Kill any quoted strongs
-        $data =~ s,".*?","XXX",g;
+        # Kill any quoted strings
+        $data =~ s,"([^\\\"]|\\.)+","XXX",g;
 
         # Kill any C++ style comments
         $data =~ s,//.*$,//,;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -120,14 +120,9 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; foreach my $file (&amp;lt; at &amp;gt;ARGV) {
         #          errno == EINTR)
         #       ;
         #
-        # 3) ";" is inside double-quote, I.e, as part of const string. E.g.
-        #   printf("%s", "a ; b\n");
         while ($data =~ /[^;\s]\s+;/) {
-            # Inside the double-quote
-            if ($data !~ /"[^"]*\s;/) {
-                print "$file:$.: $line";
-                $ret = 1;
-            }
+            print "$file:$.: $line";
+            $ret = 1;
             last;
         }
     }
&lt;/pre&gt;</description>
    <dc:creator>Ján Tomko</dc:creator>
    <dc:date>2013-05-24T09:26:53</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.emulators.libvirt/79200">
    <title>[libvirt] [PATCH 0/3 v3] Cgroup fixes</title>
    <link>http://comments.gmane.org/gmane.comp.emulators.libvirt/79200</link>
    <description>&lt;pre&gt;Instead of only post v2 of 5/7 (v2) in the old mail thread, this
resend the left patches of v2 with a independant thread for easy
reviewing.

v2 - v3:
  * 1/7 ~ 4/7 of v1 are pushed.
  * goto label "cleanup" is kept with Daniel's suggestion for 5/7 (v1)
  * Commit log of 6/7 (v1) are updated a bit to reflect more clear
    about the cause

v1 - v2:
  * Just resending

v2: https://www.redhat.com/archives/libvir-list/2013-May/msg01314.html

Osier Yang (3):
  qemu: Abstract code for the cpu controller setting into a helper
  qemu: Set cpuset.cpus for domain process
  qemu: Prohibit getting the numa parameters if mode is not strict

 src/qemu/qemu_cgroup.c | 94 ++++++++++++++++++++++++++++++++++++--------------
 src/qemu/qemu_driver.c | 11 ++++--
 2 files changed, 78 insertions(+), 27 deletions(-)

&lt;/pre&gt;</description>
    <dc:creator>Osier Yang</dc:creator>
    <dc:date>2013-05-24T09:08:26</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.emulators.libvirt/79193">
    <title>[libvirt] [PATCH] virCgroupAddTaskStrController: s/-1/-ENOMEM/</title>
    <link>http://comments.gmane.org/gmane.comp.emulators.libvirt/79193</link>
    <description>&lt;pre&gt;Within whole vircgroup.c we 'return -errno', e.g. 'return -ENOMEM'.
However, in this specific function virCgroupAddTaskStrController
we weren't returning -ENOMEM but -1 despite fact that later in
the function we are returning one of errno values indeed.
---

Notes:
    Pushing under trivial rule. This change has been sort of ACKed
    previously though:
    
    https://www.redhat.com/archives/libvir-list/2013-May/msg01731.html
    
    However, Eric suggested to be pushed as a separate patch.

 src/util/vircgroup.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/util/vircgroup.c b/src/util/vircgroup.c
index cc144a5..13b7332 100644
--- a/src/util/vircgroup.c
+++ b/src/util/vircgroup.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1028,7 +1028,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static int virCgroupAddTaskStrController(virCgroupPtr group,
     char *endp;
 
     if (!(str = strdup(pidstr)))
-        return -1;
+        return -ENOMEM;
 
     cur = str;
     while (*cur != '\0') {
&lt;/pre&gt;</description>
    <dc:creator>Michal Privoznik</dc:creator>
    <dc:date>2013-05-24T08:05:57</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.emulators.libvirt/79190">
    <title>[libvirt] [libvirt-sandbox][PATCH] Add missing get_unit_pathfunction into class Container</title>
    <link>http://comments.gmane.org/gmane.comp.emulators.libvirt/79190</link>
    <description>&lt;pre&gt;RHBZ:https://bugzilla.redhat.com/show_bug.cgi?id=966307

Signed-off-by: Alex Jia &amp;lt;ajia&amp;lt; at &amp;gt;redhat.com&amp;gt;
---
With the patch, we can successfully clone an existing Secure container,
but I met a Warning, I think it may be a LibvirtGObject question,

# virt-sandbox-service clone http1 clonebox
Created sandbox container dir /var/lib/libvirt/filesystems/clonebox
Created unit file /etc/libvirt-sandbox/services/clonebox.sandbox
/usr/lib64/python2.7/site-packages/gi/types.py:47: Warning: g_key_file_set_string: assertion `string != NULL' failed
  return info.invoke(*args, **kwargs)
Created sandbox config /etc/libvirt-sandbox/services/clonebox.sandbox

 bin/virt-sandbox-service |    6 ++++++
 1 files changed, 6 insertions(+), 0 deletions(-)

diff --git a/bin/virt-sandbox-service b/bin/virt-sandbox-service
index 4496b29..2595ea2 100755
--- a/bin/virt-sandbox-service
+++ b/bin/virt-sandbox-service
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -60,6 +60,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; class Container:
     DEFAULT_PATH       = "/var/lib/libvirt/filesystems"
     DEFAULT_IMAGE      = "/var/lib/libvirt/images/%s.raw"
     SELINUX_FILE_TYPE  = "svirt_lxc_file_t"
+    DEFAULT_UNIT       = "/etc/systemd/system/%s_sandbox.service"
 
     def __init__(self, name=None, uri = "lxc:///", path = DEFAULT_PATH, config=None, create=False):
         self.uri = uri
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -132,6 +133,11 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; class Container:
             name = self.get_name()
         return self.DEFAULT_IMAGE % name
 
+    def get_unit_path(self, name = None):
+        if not name:
+            name = self.get_name()
+        return self.DEFAULT_UNIT % name
+
     def set_image(self, size):
         self.use_image = True
         self.size = size * MB
&lt;/pre&gt;</description>
    <dc:creator>Alex Jia</dc:creator>
    <dc:date>2013-05-24T06:13:21</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.emulators.libvirt/79189">
    <title>[libvirt] Issues with qemu-nbd over AF_UNIX andvirDomainAttachDevice</title>
    <link>http://comments.gmane.org/gmane.comp.emulators.libvirt/79189</link>
    <description>&lt;pre&gt;Hi List,
     Facing issues trying to use virDomainAttachDevice API of libvirt 
from python.

Here is what I am trying to do

1) Setup qemu-nbd to export a qcow2 disk image over unix socket on my 
localhost
qemu-nbd -t -k /tmp/mysock2 /home/dpkshetty/work/img/iscsi_disk

The above blocks. and i am able to use
qemu-system-x86_64 -drive file=nbd:unix:/tmp/mysock2

Just to test it...and it works. Since currently the disk is a blank 
disk.. I see "No bootable device" and QEMU stops.. whcih is expected
So qemu-nbd is setup and working properly

2)
 &amp;gt;&amp;gt;&amp;gt; print nbdxml
&amp;lt;disk type='network' device='disk'&amp;gt;
   &amp;lt;driver name="qemu" type="qcow2"/&amp;gt;
   &amp;lt;source protocol="nbd"&amp;gt;
     &amp;lt;host name="deepakcs-lx" port="10809" transport="unix" 
socket="/tmp/mysock2" /&amp;gt;
   &amp;lt;/source&amp;gt;
   &amp;lt;target dev="vdc" bus="virtio" /&amp;gt;
&amp;lt;/disk&amp;gt;
 &amp;gt;&amp;gt;&amp;gt; dom.attachDevice(nbdxml)
libvir: QEMU error : operation failed: open disk image file failed
Traceback (most recent call last):
   File "&amp;lt;stdin&amp;gt;", line 1, in &amp;lt;module&amp;gt;
   File "/usr/lib64/python2.7/site-packages/libvirt.py", line 400, in 
attachDevice
     if ret == -1: raise libvirtError ('virDomainAttachDevice() failed', 
dom=self)
libvirt.libvirtError: operation failed: open disk image file failed

and I see... in the VM's log....

inet_connect_opts: 
connect(ipv4,deepakcs-lx.local.lan,192.168.1.7,10809): Connection refused

3) I tried usign virsh attach-device.. and the same problem happens

4) firewall/iptables are not running. SELinux is permissive

5) I tried appending -p 1111 to the qemu-nbd cmdline and using 
port="1111" in the XML.. but that doesn't help, see the same error


Questions/Observations :

1) What am i doing wrong here ? In the &amp;lt;host&amp;gt; tag, port attr is 
mandatory.. but looking at `netstat -nptl` I don't see any process 
listeing on 10809 or 1111 (when i gave -p 1111 ).
So does this mean there is no way for libvirt to just directly open the 
socket and use it.. Its trying to connect to the port i give in the XML 
and since no one is listening there.. it fails.. hence the error seen in 
the VM logs.... Has anybody tryign usign qemu-nbd and attaching that 
disk as I am doign above ? Is it legal, if not, why ?

2) The VM/Domain is active during all of the above steps.

3) IIUC... for the above usecase... port attr of &amp;lt;host&amp;gt; should be 
optional... such that libvirt can directly do the equivalent of ` -drive 
file=nbd:unix:/tmp/mysock2` and add this as a NBD device to the runnign 
guest/Domain... but currently port and hostname are mandatory. For unix 
sockets... hostname will always be local...so i feel both hostname &amp;amp; 
port should be optional for the above usecase ?

4) I haven't yet tried doing the above when guest/Domain is Inactive.

5) I haven't yet tried doing the above usign nbd-server or qemu-nbd 
usign -c option (which i believe starts qemu-nbd in server mode, but 
need nbd.ko kernel module to be loaded).
I am hoping using either of these might get it working... since we have 
a process listening on a port on the host... but I wanted to get this 
working using plain unix sockets.. lightweight and doesn't need nbd.ko

Comments/Suggestions appreciated.

thanx,
deepak


&lt;/pre&gt;</description>
    <dc:creator>Deepak C Shetty</dc:creator>
    <dc:date>2013-05-24T04:59:15</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.emulators.libvirt/79188">
    <title>[libvirt] [PATCH] virsh: Fix regression of vol-resize</title>
    <link>http://comments.gmane.org/gmane.comp.emulators.libvirt/79188</link>
    <description>&lt;pre&gt;Introduced by commit 1daa4ba33acf. vshCommandOptStringReq returns
0 on *success* or the option is not required &amp;amp;&amp;amp; not present, both
are right result. Error out when returning 0 is not correct.
---
 tools/virsh-volume.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tools/virsh-volume.c b/tools/virsh-volume.c
index a222cca..e16a385 100644
--- a/tools/virsh-volume.c
+++ b/tools/virsh-volume.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1076,7 +1076,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; cmdVolResize(vshControl *ctl, const vshCmd *cmd)
     if (!(vol = vshCommandOptVol(ctl, cmd, "vol", "pool", NULL)))
         return false;
 
-    if (vshCommandOptStringReq(ctl, cmd, "capacity", &amp;amp;capacityStr) &amp;lt;= 0)
+    if (vshCommandOptStringReq(ctl, cmd, "capacity", &amp;amp;capacityStr) &amp;lt; 0)
         goto cleanup;
     virSkipSpaces(&amp;amp;capacityStr);
     if (*capacityStr == '-') {
&lt;/pre&gt;</description>
    <dc:creator>Osier Yang</dc:creator>
    <dc:date>2013-05-24T04:05:04</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.emulators.libvirt/79182">
    <title>[libvirt] [PATCH] xen: Resolve Coverity FORWARD_NULL issue</title>
    <link>http://comments.gmane.org/gmane.comp.emulators.libvirt/79182</link>
    <description>&lt;pre&gt;Commit '18b14012' refactored the Xen code resulting in a Coverity
warning about possible NULL reference if the path where the XM driver
takes puts the def on it's list.  Moved/duplicated the virGetDomain()
call to pacify the possible NULL deref.

NOTE: I did ping Dan B, but he is away, so rather than wait or take
the chance this ends up in the upcoming release, I made the change.

---
 src/xen/xen_driver.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/xen/xen_driver.c b/src/xen/xen_driver.c
index cc6e486..9eab3fc 100644
--- a/src/xen/xen_driver.c
+++ b/src/xen/xen_driver.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1658,13 +1658,14 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; xenUnifiedDomainDefineXML(virConnectPtr conn, const char *xml)
     if (priv-&amp;gt;xendConfigVersion &amp;lt; XEND_CONFIG_VERSION_3_0_4) {
         if (xenXMDomainDefineXML(conn, def) &amp;lt; 0)
             goto cleanup;
+        ret = virGetDomain(conn, def-&amp;gt;name, def-&amp;gt;uuid);
         def = NULL; /* XM driver owns it now */
     } else {
         if (xenDaemonDomainDefineXML(conn, def) &amp;lt; 0)
             goto cleanup;
+        ret = virGetDomain(conn, def-&amp;gt;name, def-&amp;gt;uuid);
     }
 
-    ret = virGetDomain(conn, def-&amp;gt;name, def-&amp;gt;uuid);
     if (ret)
         ret-&amp;gt;id = -1;
 
&lt;/pre&gt;</description>
    <dc:creator>John Ferlan</dc:creator>
    <dc:date>2013-05-23T15:20:57</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.emulators.libvirt/79177">
    <title>[libvirt] [PATCH] docs: domain: /dev/urandom isn't a valid rng patch</title>
    <link>http://comments.gmane.org/gmane.comp.emulators.libvirt/79177</link>
    <description>&lt;pre&gt;Only /dev/random and /dev/hwrng are accepted, list them explicitly.
---
 docs/formatdomain.html.in | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
index 3a200aa..755d084 100644
--- a/docs/formatdomain.html.in
+++ b/docs/formatdomain.html.in
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -4666,7 +4666,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; qemu-kvm -net nic,model=? /dev/null
       &amp;lt;dd&amp;gt;
         &amp;lt;p&amp;gt;
           This backend type expects a non-blocking character device as input.
-          Examples of such devices are /dev/random and /dev/urandom. The file
+          The only accepted paths are /dev/random and /dev/hwrng. The file
           name is specified as contents of the &amp;lt;code&amp;gt;backend&amp;lt;/code&amp;gt; element.
           When no file name is specified the hypervisor default is used.
         &amp;lt;/p&amp;gt;
&lt;/pre&gt;</description>
    <dc:creator>Cole Robinson</dc:creator>
    <dc:date>2013-05-23T18:37:46</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.emulators.libvirt/79176">
    <title>[libvirt] [PATCHv4] Configure native vlan modes on Open vSwitchports</title>
    <link>http://comments.gmane.org/gmane.comp.emulators.libvirt/79176</link>
    <description>&lt;pre&gt;This patch adds functionality to allow libvirt to configure the
'native-tagged' and 'native-untagged' modes on openvswitch networks.

v2 changes:
Fix problems reported by Eric Blake

v3 changes:
Re work patch to address review comments

v4 changes:
Use enum for native modes

---

diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
index 9284534..ba32185 100644
--- a/docs/formatdomain.html.in
+++ b/docs/formatdomain.html.in
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -3498,6 +3498,13 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; qemu-kvm -net nic,model=? /dev/null
         &amp;amp;lt;parameters interfaceid='09b11c53-8b5c-4eeb-8f00-d84eaa0aaa4f'/&amp;amp;gt;
       &amp;amp;lt;/virtualport&amp;amp;gt;
     &amp;amp;lt;/interface&amp;amp;gt;
+    &amp;amp;lt;interface type='bridge'&amp;amp;gt;
+      &amp;lt;b&amp;gt;&amp;amp;lt;vlan trunk='yes'&amp;amp;gt;&amp;lt;/b&amp;gt;
+        &amp;lt;b&amp;gt;&amp;amp;lt;tag id='42'/&amp;amp;gt;&amp;lt;/b&amp;gt;
+        &amp;lt;b&amp;gt;&amp;amp;lt;tag id='123' nativeMode='untagged'/&amp;amp;gt;&amp;lt;/b&amp;gt;
+      &amp;lt;b&amp;gt;&amp;amp;lt;/vlan&amp;amp;gt;&amp;lt;/b&amp;gt;
+      ...
+    &amp;amp;lt;/interface&amp;amp;gt;
   &amp;amp;lt;devices&amp;amp;gt;
   ...&amp;lt;/pre&amp;gt;
 
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -3524,6 +3531,15 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; qemu-kvm -net nic,model=? /dev/null
       vlan element.
     &amp;lt;/p&amp;gt;
 
+    &amp;lt;p&amp;gt;
+      For network connections using openvswitch it is possible to
+      configure the 'native-tagged' and 'native-untagged' vlan modes
+      &amp;lt;span class="since"&amp;gt;(Since 1.0.5).&amp;lt;/span&amp;gt; This uses the optional
+      &amp;lt;code&amp;gt;nativeMode&amp;lt;/code&amp;gt; attribute on the &amp;lt;code&amp;gt;&amp;amp;lt;tag&amp;amp;gt;&amp;lt;/code&amp;gt;
+      element: &amp;lt;code&amp;gt;nativeMode&amp;lt;/code&amp;gt; may be set to 'tagged' or
+      'untagged'. The id atribute of the element sets the native vlan.
+    &amp;lt;/p&amp;gt;
+
     &amp;lt;h5&amp;gt;&amp;lt;a name="elementLink"&amp;gt;Modifying virtual link state&amp;lt;/a&amp;gt;&amp;lt;/h5&amp;gt;
 &amp;lt;pre&amp;gt;
   ...
diff --git a/docs/formatnetwork.html.in b/docs/formatnetwork.html.in
index a1198ce..29e12d9 100644
--- a/docs/formatnetwork.html.in
+++ b/docs/formatnetwork.html.in
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -446,6 +446,13 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
         &amp;amp;lt;parameters interfaceid='09b11c53-8b5c-4eeb-8f00-d84eaa0aaa4f'/&amp;amp;gt;
       &amp;amp;lt;/virtualport&amp;amp;gt;
     &amp;amp;lt;/interface&amp;amp;gt;
+    &amp;amp;lt;interface type='bridge'&amp;amp;gt;
+      &amp;lt;b&amp;gt;&amp;amp;lt;vlan trunk='yes'&amp;amp;gt;&amp;lt;/b&amp;gt;
+        &amp;lt;b&amp;gt;&amp;amp;lt;tag id='42'/&amp;amp;gt;&amp;lt;/b&amp;gt;
+        &amp;lt;b&amp;gt;&amp;amp;lt;tag id='123' nativeMode='untagged'/&amp;amp;gt;&amp;lt;/b&amp;gt;
+      &amp;lt;b&amp;gt;&amp;amp;lt;/vlan&amp;amp;gt;&amp;lt;/b&amp;gt;
+      ...
+    &amp;amp;lt;/interface&amp;amp;gt;
   &amp;amp;lt;devices&amp;amp;gt;
   ...&amp;lt;/pre&amp;gt;
 
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -469,6 +476,14 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
       be added to the vlan element.
     &amp;lt;/p&amp;gt;
     &amp;lt;p&amp;gt;
+      For network connections using openvswitch it is possible to
+      configure the 'native-tagged' and 'native-untagged' vlan modes
+      &amp;lt;span class="since"&amp;gt;(Since 1.0.6).&amp;lt;/span&amp;gt; This uses the optional
+      &amp;lt;code&amp;gt;nativeMode&amp;lt;/code&amp;gt; attribute on the &amp;lt;code&amp;gt;&amp;amp;lt;tag&amp;amp;gt;&amp;lt;/code&amp;gt;
+      element: &amp;lt;code&amp;gt;nativeMode&amp;lt;/code&amp;gt; may be set to 'tagged' or
+      'untagged'. The id atribute of the element sets the native vlan.
+    &amp;lt;/p&amp;gt;
+    &amp;lt;p&amp;gt;
       &amp;lt;code&amp;gt;&amp;amp;lt;vlan&amp;amp;gt;&amp;lt;/code&amp;gt; elements can also be specified in
       a &amp;lt;code&amp;gt;&amp;amp;lt;portgroup&amp;amp;gt;&amp;lt;/code&amp;gt; element, as well as directly in
       a domain's &amp;lt;code&amp;gt;&amp;amp;lt;interface&amp;amp;gt;&amp;lt;/code&amp;gt; element. In the case
diff --git a/docs/schemas/networkcommon.rng b/docs/schemas/networkcommon.rng
index 51ff759..e60f1fc 100644
--- a/docs/schemas/networkcommon.rng
+++ b/docs/schemas/networkcommon.rng
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -204,6 +204,14 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
               &amp;lt;param name="maxInclusive"&amp;gt;4095&amp;lt;/param&amp;gt;
             &amp;lt;/data&amp;gt;
           &amp;lt;/attribute&amp;gt;
+          &amp;lt;optional&amp;gt;
+            &amp;lt;attribute name="nativeMode"&amp;gt;
+              &amp;lt;choice&amp;gt;
+                &amp;lt;value&amp;gt;tagged&amp;lt;/value&amp;gt;
+                &amp;lt;value&amp;gt;untagged&amp;lt;/value&amp;gt;
+              &amp;lt;/choice&amp;gt;
+            &amp;lt;/attribute&amp;gt;
+          &amp;lt;/optional&amp;gt;
           &amp;lt;empty/&amp;gt;
         &amp;lt;/element&amp;gt;
       &amp;lt;/oneOrMore&amp;gt;
diff --git a/src/conf/netdev_vlan_conf.c b/src/conf/netdev_vlan_conf.c
index 13ba8c6..2b4cd48 100644
--- a/src/conf/netdev_vlan_conf.c
+++ b/src/conf/netdev_vlan_conf.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -17,6 +17,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
  *
  * Authors:
  *     Laine Stump &amp;lt;laine&amp;lt; at &amp;gt;redhat.com&amp;gt;
+ *     James Robson &amp;lt;jrobson&amp;lt; at &amp;gt;websense.com&amp;gt;
  */
 
 #include &amp;lt;config.h&amp;gt;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -27,12 +28,15 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 
 #define VIR_FROM_THIS VIR_FROM_NONE
 
+VIR_ENUM_IMPL(virNativeVlanMode, VIR_NATIVE_VLAN_MODE_LAST, "default", "tagged", "untagged")
+
 int
 virNetDevVlanParse(xmlNodePtr node, xmlXPathContextPtr ctxt, virNetDevVlanPtr def)
 {
     int ret = -1;
     xmlNodePtr save = ctxt-&amp;gt;node;
     const char *trunk = NULL;
+    const char *nativeMode = NULL;
     xmlNodePtr *tagNodes = NULL;
     int nTags, ii;
 
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -54,6 +58,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; virNetDevVlanParse(xmlNodePtr node, xmlXPathContextPtr ctxt, virNetDevVlanPtr de
         goto error;
     }
 
+    def-&amp;gt;nativeMode = 0;
+    def-&amp;gt;nativeTag = 0;
     for (ii = 0; ii &amp;lt; nTags; ii++) {
         unsigned long id;
 
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -68,6 +74,19 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; virNetDevVlanParse(xmlNodePtr node, xmlXPathContextPtr ctxt, virNetDevVlanPtr de
                            _("vlan tag id %lu too large (maximum 4095)"), id);
             goto error;
         }
+        if ((nativeMode = virXPathString("string(./&amp;lt; at &amp;gt;nativeMode)", ctxt)) != NULL) {
+            if (def-&amp;gt;nativeMode != 0) {
+                virReportError(VIR_ERR_XML_ERROR, "%s",
+                               _("duplicate native vlan setting"));
+                goto error;
+            }
+            if ((def-&amp;gt;nativeMode = virNativeVlanModeTypeFromString(nativeMode)) &amp;lt;= 0) {
+                virReportError(VIR_ERR_XML_ERROR,
+                               _("Attribute \"nativeMode='%s'\" is invalid"), nativeMode);
+                goto error;
+            }
+            def-&amp;gt;nativeTag = id;
+        }
         def-&amp;gt;tag[ii] = id;
     }
 
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -89,6 +108,12 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; virNetDevVlanParse(xmlNodePtr node, xmlXPathContextPtr ctxt, virNetDevVlanPtr de
                                  "is required for more than one vlan tag"), trunk);
                 goto error;
             }
+            if (def-&amp;gt;nativeMode != 0) {
+                virReportError(VIR_ERR_XML_ERROR, "%s",
+                               _("invalid configuration in &amp;lt;vlan&amp;gt; - \"trunk='no'\" is "
+                                 "not allowed with a native vlan id"));
+                goto error;
+            }
             /* allow (but discard) "trunk='no' if there is a single tag */
             if (STRCASENEQ(trunk, "no")) {
                 virReportError(VIR_ERR_XML_ERROR,
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -125,7 +150,17 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; virNetDevVlanFormat(virNetDevVlanPtr def, virBufferPtr buf)
 
     virBufferAsprintf(buf, "&amp;lt;vlan%s&amp;gt;\n", def-&amp;gt;trunk ? " trunk='yes'" : "");
     for (ii = 0; ii &amp;lt; def-&amp;gt;nTags; ii++) {
-        virBufferAsprintf(buf, "  &amp;lt;tag id='%u'/&amp;gt;\n", def-&amp;gt;tag[ii]);
+        if (def-&amp;gt;nativeMode != VIR_NATIVE_VLAN_MODE_DEFAULT &amp;amp;&amp;amp; def-&amp;gt;nativeTag == def-&amp;gt;tag[ii]) {
+            /* check the nativeMode in case we get &amp;lt;tag id='0'/&amp;gt;*/
+            const char *mode = virNativeVlanModeTypeToString(def-&amp;gt;nativeMode);
+            if (!mode) {
+                virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+                               _("Bad vlaue for nativeMode"));
+            }
+            virBufferAsprintf(buf, "  &amp;lt;tag id='%u' nativeMode='%s'/&amp;gt;\n", def-&amp;gt;tag[ii], mode);
+        } else {
+            virBufferAsprintf(buf, "  &amp;lt;tag id='%u'/&amp;gt;\n", def-&amp;gt;tag[ii]);
+        }
     }
     virBufferAddLit(buf, "&amp;lt;/vlan&amp;gt;\n");
     return 0;
diff --git a/src/util/virnetdevopenvswitch.c b/src/util/virnetdevopenvswitch.c
index 2aee445..47e6027 100644
--- a/src/util/virnetdevopenvswitch.c
+++ b/src/util/virnetdevopenvswitch.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -109,8 +109,22 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; int virNetDevOpenvswitchAddPort(const char *brname, const char *ifname,
     virCommandAddArgList(cmd, "--timeout=5", "--", "--may-exist", "add-port",
                         brname, ifname, NULL);
 
-    if (virBufferUse(&amp;amp;buf) != 0)
+    if (virBufferUse(&amp;amp;buf) != 0) {
+        switch (virtVlan-&amp;gt;nativeMode) {
+            case VIR_NATIVE_VLAN_MODE_TAGGED:
+                virCommandAddArg(cmd, "vlan_mode=native-tagged");
+                virCommandAddArgFormat(cmd, "tag=%d", virtVlan-&amp;gt;nativeTag);
+                break;
+            case VIR_NATIVE_VLAN_MODE_UNTAGGED:
+                virCommandAddArg(cmd, "vlan_mode=native-untagged");
+                virCommandAddArgFormat(cmd, "tag=%d", virtVlan-&amp;gt;nativeTag);
+                break;
+            case VIR_NATIVE_VLAN_MODE_DEFAULT:
+            default:
+                break;
+        }
         virCommandAddArgList(cmd, virBufferCurrentContent(&amp;amp;buf), NULL);
+    }
 
     if (ovsport-&amp;gt;profileID[0] == '\0') {
         virCommandAddArgList(cmd,
diff --git a/src/util/virnetdevvlan.c b/src/util/virnetdevvlan.c
index 2fe2017..eed32f7 100644
--- a/src/util/virnetdevvlan.c
+++ b/src/util/virnetdevvlan.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -33,6 +33,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; virNetDevVlanClear(virNetDevVlanPtr vlan)
 {
     VIR_FREE(vlan-&amp;gt;tag);
     vlan-&amp;gt;nTags = 0;
+    vlan-&amp;gt;nativeMode = 0;
+    vlan-&amp;gt;nativeTag = 0;
 }
 
 void
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -54,7 +56,9 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; virNetDevVlanEqual(const virNetDevVlanPtr a, const virNetDevVlanPtr b)
         return false;
 
     if (a-&amp;gt;trunk != b-&amp;gt;trunk ||
-        a-&amp;gt;nTags != b-&amp;gt;nTags) {
+        a-&amp;gt;nTags != b-&amp;gt;nTags ||
+        a-&amp;gt;nativeMode != b-&amp;gt;nativeMode ||
+        a-&amp;gt;nativeTag != b-&amp;gt;nativeTag) {
         return false;
     }
 
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -89,6 +93,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; virNetDevVlanCopy(virNetDevVlanPtr dst, const virNetDevVlanPtr src)
 
     dst-&amp;gt;trunk = src-&amp;gt;trunk;
     dst-&amp;gt;nTags = src-&amp;gt;nTags;
+    dst-&amp;gt;nativeMode = src-&amp;gt;nativeMode;
+    dst-&amp;gt;nativeTag = src-&amp;gt;nativeTag;
     memcpy(dst-&amp;gt;tag, src-&amp;gt;tag, src-&amp;gt;nTags * sizeof(*src-&amp;gt;tag));
     return 0;
 }
diff --git a/src/util/virnetdevvlan.h b/src/util/virnetdevvlan.h
index c6b16ef..a084938 100644
--- a/src/util/virnetdevvlan.h
+++ b/src/util/virnetdevvlan.h
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -18,16 +18,28 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
  * Authors:
  *      Laine Stump &amp;lt;laine&amp;lt; at &amp;gt;redhat.com&amp;gt;
  */
-
+# include &amp;lt;virutil.h&amp;gt;
 #ifndef __VIR_NETDEV_VLAN_H__
 # define __VIR_NETDEV_VLAN_H__
 
+typedef enum {
+    VIR_NATIVE_VLAN_MODE_DEFAULT = 0,
+    VIR_NATIVE_VLAN_MODE_TAGGED,
+    VIR_NATIVE_VLAN_MODE_UNTAGGED,
+
+    VIR_NATIVE_VLAN_MODE_LAST
+} virNativeVlanMode;
+
+VIR_ENUM_DECL(virNativeVlanMode)
+
 typedef struct _virNetDevVlan virNetDevVlan;
 typedef virNetDevVlan *virNetDevVlanPtr;
 struct _virNetDevVlan {
     bool trunk;        /* true if this is a trunk */
     int nTags;          /* number of tags in array */
     unsigned int *tag; /* pointer to array of tags */
+    int nativeMode;
+    unsigned int nativeTag;
 };
 
 void virNetDevVlanClear(virNetDevVlanPtr vlan);
diff --git a/tests/networkxml2xmlin/openvswitch-net.xml b/tests/networkxml2xmlin/openvswitch-net.xml
index a3d82b1..2f6084d 100644
--- a/tests/networkxml2xmlin/openvswitch-net.xml
+++ b/tests/networkxml2xmlin/openvswitch-net.xml
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -21,4 +21,13 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
       &amp;lt;parameters profileid='alice-profile'/&amp;gt;
     &amp;lt;/virtualport&amp;gt;
   &amp;lt;/portgroup&amp;gt;
+  &amp;lt;portgroup name='native'&amp;gt;
+    &amp;lt;vlan trunk='yes'&amp;gt;
+      &amp;lt;tag id='123' nativeMode='tagged'/&amp;gt;
+      &amp;lt;tag id='444'/&amp;gt;
+    &amp;lt;/vlan&amp;gt;
+    &amp;lt;virtualport&amp;gt;
+      &amp;lt;parameters profileid='native-profile'/&amp;gt;
+    &amp;lt;/virtualport&amp;gt;
+  &amp;lt;/portgroup&amp;gt;
 &amp;lt;/network&amp;gt;
diff --git a/tests/networkxml2xmlout/openvswitch-net.xml b/tests/networkxml2xmlout/openvswitch-net.xml
index a3d82b1..2f6084d 100644
--- a/tests/networkxml2xmlout/openvswitch-net.xml
+++ b/tests/networkxml2xmlout/openvswitch-net.xml
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -21,4 +21,13 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
       &amp;lt;parameters profileid='alice-profile'/&amp;gt;
     &amp;lt;/virtualport&amp;gt;
   &amp;lt;/portgroup&amp;gt;
+  &amp;lt;portgroup name='native'&amp;gt;
+    &amp;lt;vlan trunk='yes'&amp;gt;
+      &amp;lt;tag id='123' nativeMode='tagged'/&amp;gt;
+      &amp;lt;tag id='444'/&amp;gt;
+    &amp;lt;/vlan&amp;gt;
+    &amp;lt;virtualport&amp;gt;
+      &amp;lt;parameters profileid='native-profile'/&amp;gt;
+    &amp;lt;/virtualport&amp;gt;
+  &amp;lt;/portgroup&amp;gt;
 &amp;lt;/network&amp;gt;



 Protected by Websense Hosted Email Security -- www.websense.com 

&lt;/pre&gt;</description>
    <dc:creator>james robson</dc:creator>
    <dc:date>2013-05-23T17:12:10</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.emulators.libvirt/79175">
    <title>[libvirt] [PATCH] conf: add missing OOM errors</title>
    <link>http://comments.gmane.org/gmane.comp.emulators.libvirt/79175</link>
    <description>&lt;pre&gt;---
Pushed under the trivial rule.

 src/conf/virchrdev.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/src/conf/virchrdev.c b/src/conf/virchrdev.c
index 17b1f05..36fbb97 100644
--- a/src/conf/virchrdev.c
+++ b/src/conf/virchrdev.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -89,8 +89,10 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static char *virChrdevLockFilePath(const char *dev)
         ++p;
     }
 
-    if (virAsprintf(&amp;amp;path, "%s/LCK..%s", VIR_CHRDEV_LOCK_FILE_PATH, filename) &amp;lt; 0)
+    if (virAsprintf(&amp;amp;path, "%s/LCK..%s", VIR_CHRDEV_LOCK_FILE_PATH, filename) &amp;lt; 0) {
+        virReportOOMError();
         goto cleanup;
+    }
 
     sanitizedPath = virFileSanitizePath(path);
 
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -136,8 +138,10 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static int virChrdevLockFileCreate(const char *dev)
 
     /* ensure correct format according to filesystem hierarchy standard */
     /* http://www.pathname.com/fhs/pub/fhs-2.3.html#VARLOCKLOCKFILES */
-    if (virAsprintf(&amp;amp;pidStr, "%10lld\n", (long long) getpid()) &amp;lt; 0)
+    if (virAsprintf(&amp;amp;pidStr, "%10lld\n", (long long) getpid()) &amp;lt; 0) {
+        virReportOOMError();
         goto cleanup;
+    }
 
     /* create the lock file */
     if ((lockfd = open(path, O_WRONLY | O_CREAT | O_EXCL, 00644)) &amp;lt; 0) {
&lt;/pre&gt;</description>
    <dc:creator>Ján Tomko</dc:creator>
    <dc:date>2013-05-23T17:00:26</dc:date>
  </item>
  <textinput rdf:about="http://search.gmane.org/?group=$group=gmane.comp.emulators.libvirt">
    <title>Search Engine</title>
    <description>Search the mailing list at Gmane</description>
    <name>query</name>
    <link>http://search.gmane.org/?group=$group=gmane.comp.emulators.libvirt</link>
  </textinput>
</rdf:RDF>
