[libvirt] [PATCHv2] util: keep/use a bitmap of in-use macvtap devices
Pavel Hrdina
phrdina at redhat.com
Tue Jan 26 09:21:48 UTC 2016
On Mon, Jan 25, 2016 at 09:00:27PM -0500, Laine Stump wrote:
> >> + retries = MACVLAN_MAX_ID + 1;
> >> + while (!ifnameCreated && retries) {
> >> virMutexLock(&virNetDevMacVLanCreateMutex);
> >> - for (c = 0; c < 8192; c++) {
> >> - snprintf(ifname, sizeof(ifname), pattern, c);
> >> - if ((ret = virNetDevExists(ifname)) < 0) {
> >> - virMutexUnlock(&virNetDevMacVLanCreateMutex);
> >> + reservedID = virNetDevMacVLanReserveID(reservedID, flags, false, true);
> >> + if (reservedID < 0) {
> >> + virMutexUnlock(&virNetDevMacVLanCreateMutex);
> >> + return -1;
> >> + }
> >> + snprintf(ifname, sizeof(ifname), pattern, reservedID);
> > Since you're changing this, snprintf returns -1 in case of error.
>
> Well, the man page says -1 is returned by the *printf functions "if an
> output error is encountered", which would include an I/O error (moot for
> snprintf() since it doesn't do any I/O) or a bad format string (but
> we're calling it with a literal format string that only includes a
> single %d, so it is known to be good). Checking the returned length is
> pointless too, since by definition the longest possible result of
> macvtap%d where the %d is guaranteed between 0 and 8192 is
> "macvtap8192", which is 12 characters - safely below the limit of
> IFNAMSIZ (16).
Sure, I've looked at the man page and also into gnulib code and just wanted to
point it out, that we may want to somehow handle -1, but if it happens probably
the whole libvirt is going to die with OOM. Let's leave it as it is.
More information about the libvir-list
mailing list