Avoids create/destroy cycles of the bonding device if the port devices are unavailable
Signed-off-by: Felix Fietkau <nbd@nbd.name>
if (!bp->present)
return 0;
if (!bp->present)
return 0;
- ret = bonding_set_active(bdev, true);
- if (ret)
- goto error;
-
/* Disable IPv6 for bonding ports */
if (!(bp->dev.dev->settings.flags & DEV_OPT_IPV6)) {
bp->dev.dev->settings.ipv6 = 0;
/* Disable IPv6 for bonding ports */
if (!(bp->dev.dev->settings.flags & DEV_OPT_IPV6)) {
bp->dev.dev->settings.ipv6 = 0;
ret = device_claim(&bp->dev);
if (ret < 0)
ret = device_claim(&bp->dev);
if (ret < 0)
+ return ret;
+
+ ret = bonding_set_active(bdev, true);
+ if (ret)
+ goto release;
dev = bp->dev.dev;
if (dev->settings.auth && !dev->auth_status)
dev = bp->dev.dev;
if (dev->settings.auth && !dev->auth_status)
bdev->n_failed++;
bp->present = false;
bdev->n_present--;
bdev->n_failed++;
bp->present = false;
bdev->n_present--;
device_release(&bp->dev);
return ret;
device_release(&bp->dev);
return ret;