From 08e954e137ffcf7770200bbd6476dc36bbd326f5 Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Tue, 21 Sep 2021 18:04:32 +0200 Subject: bonding: claim the port device before creating the bonding device Avoids create/destroy cycles of the bonding device if the port devices are unavailable Signed-off-by: Felix Fietkau --- bonding.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) (limited to 'bonding.c') diff --git a/bonding.c b/bonding.c index 321f819..0bf4f9a 100644 --- a/bonding.c +++ b/bonding.c @@ -221,10 +221,6 @@ bonding_enable_port(struct bonding_port *bp) 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; @@ -233,7 +229,11 @@ bonding_enable_port(struct bonding_port *bp) ret = device_claim(&bp->dev); if (ret < 0) - goto error; + return ret; + + ret = bonding_set_active(bdev, true); + if (ret) + goto release; dev = bp->dev.dev; if (dev->settings.auth && !dev->auth_status) @@ -257,6 +257,7 @@ error: bdev->n_failed++; bp->present = false; bdev->n_present--; +release: device_release(&bp->dev); return ret; -- cgit v1.2.1