|
|
43fe83 |
From 97edaf4f3dc5af717f88e41577a1cda77982f4c1 Mon Sep 17 00:00:00 2001
|
|
|
43fe83 |
Message-Id: <97edaf4f3dc5af717f88e41577a1cda77982f4c1.1381871411.git.jdenemar@redhat.com>
|
|
|
43fe83 |
From: "Daniel P. Berrange" <berrange@redhat.com>
|
|
|
43fe83 |
Date: Mon, 7 Oct 2013 17:17:28 +0100
|
|
|
43fe83 |
Subject: [PATCH] Avoid reporting an error if veth device is already deleted
|
|
|
43fe83 |
|
|
|
43fe83 |
For
|
|
|
43fe83 |
|
|
|
43fe83 |
https://bugzilla.redhat.com/show_bug.cgi?id=1014604
|
|
|
43fe83 |
|
|
|
43fe83 |
The kernel automatically destroys veth devices when cleaning
|
|
|
43fe83 |
up the container network namespace. During normal shutdown, it
|
|
|
43fe83 |
is thus likely that the attempt to run 'ip link del vethN'
|
|
|
43fe83 |
will fail. If it fails, check if the device exists, and avoid
|
|
|
43fe83 |
reporting an error if it has gone. This switches to use the
|
|
|
43fe83 |
virCommand APIs instead of virRun too.
|
|
|
43fe83 |
|
|
|
43fe83 |
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
|
|
|
43fe83 |
(cherry picked from commit 10caf94ddc568d36561d89ca28fe0c58154a50f9)
|
|
|
43fe83 |
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
|
|
43fe83 |
---
|
|
|
43fe83 |
po/POTFILES.in | 1 +
|
|
|
43fe83 |
src/util/virnetdevveth.c | 17 ++++++++++++++---
|
|
|
43fe83 |
2 files changed, 15 insertions(+), 3 deletions(-)
|
|
|
43fe83 |
|
|
|
43fe83 |
diff --git a/po/POTFILES.in b/po/POTFILES.in
|
|
|
43fe83 |
index 884b70a..8afd015 100644
|
|
|
43fe83 |
--- a/po/POTFILES.in
|
|
|
43fe83 |
+++ b/po/POTFILES.in
|
|
|
43fe83 |
@@ -168,6 +168,7 @@ src/util/virnetdevbridge.c
|
|
|
43fe83 |
src/util/virnetdevmacvlan.c
|
|
|
43fe83 |
src/util/virnetdevopenvswitch.c
|
|
|
43fe83 |
src/util/virnetdevtap.c
|
|
|
43fe83 |
+src/util/virnetdevveth.c
|
|
|
43fe83 |
src/util/virnetdevvportprofile.c
|
|
|
43fe83 |
src/util/virnetlink.c
|
|
|
43fe83 |
src/util/virnodesuspend.c
|
|
|
43fe83 |
diff --git a/src/util/virnetdevveth.c b/src/util/virnetdevveth.c
|
|
|
43fe83 |
index 039767f..c0d32c4 100644
|
|
|
43fe83 |
--- a/src/util/virnetdevveth.c
|
|
|
43fe83 |
+++ b/src/util/virnetdevveth.c
|
|
|
43fe83 |
@@ -161,9 +161,20 @@ cleanup:
|
|
|
43fe83 |
*/
|
|
|
43fe83 |
int virNetDevVethDelete(const char *veth)
|
|
|
43fe83 |
{
|
|
|
43fe83 |
- const char *argv[] = {"ip", "link", "del", veth, NULL};
|
|
|
43fe83 |
+ virCommandPtr cmd = virCommandNewArgList("ip", "link", "del", veth, NULL);
|
|
|
43fe83 |
+ int status;
|
|
|
43fe83 |
|
|
|
43fe83 |
- VIR_DEBUG("veth: %s", veth);
|
|
|
43fe83 |
+ if (virCommandRun(cmd, &status) < 0)
|
|
|
43fe83 |
+ return -1;
|
|
|
43fe83 |
|
|
|
43fe83 |
- return virRun(argv, NULL);
|
|
|
43fe83 |
+ if (status != 0) {
|
|
|
43fe83 |
+ if (!virNetDevExists(veth)) {
|
|
|
43fe83 |
+ VIR_DEBUG("Device %s already deleted (by kernel namespace cleanup)", veth);
|
|
|
43fe83 |
+ return 0;
|
|
|
43fe83 |
+ }
|
|
|
43fe83 |
+ virReportError(VIR_ERR_INTERNAL_ERROR,
|
|
|
43fe83 |
+ _("Failed to delete veth device %s"), veth);
|
|
|
43fe83 |
+ return -1;
|
|
|
43fe83 |
+ }
|
|
|
43fe83 |
+ return 0;
|
|
|
43fe83 |
}
|
|
|
43fe83 |
--
|
|
|
43fe83 |
1.8.3.2
|
|
|
43fe83 |
|