From 5b5f12cffa86a1b4527bde620c2a86c5e96ad7c5 Mon Sep 17 00:00:00 2001 From: Laine Stump Date: Mon, 28 Mar 2016 10:14:04 -0400 Subject: [PATCH] util: avoid getting stuck on macvtapN name created outside libvirt After the patches that added tracking of in-use macvtap names (commit 370608, first appearing in libvirt-1.3.2), if the function to allocate a new macvtap device came to a device name created outside libvirt, it would retry the same device name MACVLAN_MAX_ID (8191) times before finally giving up in failure. The problem was that virBitmapNextClearBit was always being called with "0" rather than the value most recently checked (which would increment each time through the loop), so it would always return the same id (since we dutifully release that id after failing to create a new device using it). Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1321546 Signed-off-by: Laine Stump --- src/util/virnetdevmacvlan.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/util/virnetdevmacvlan.c b/src/util/virnetdevmacvlan.c index 24091135f9..d755b93a36 100644 --- a/src/util/virnetdevmacvlan.c +++ b/src/util/virnetdevmacvlan.c @@ -131,7 +131,7 @@ virNetDevMacVLanReserveID(int id, unsigned int flags, } if ((id < 0 || nextFree) && - (id = virBitmapNextClearBit(bitmap, 0)) < 0) { + (id = virBitmapNextClearBit(bitmap, id)) < 0) { virReportError(VIR_ERR_INTERNAL_ERROR, _("no unused %s names available"), (flags & VIR_NETDEV_MACVLAN_CREATE_WITH_TAP) ?