diff options
author | Felix Fietkau <nbd@nbd.name> | 2021-09-21 18:04:32 +0200 |
---|---|---|
committer | Felix Fietkau <nbd@nbd.name> | 2021-09-21 18:04:34 +0200 |
commit | 08e954e137ffcf7770200bbd6476dc36bbd326f5 (patch) | |
tree | 6d1d657a27147b0629fee25e2518af730450dd25 | |
parent | 06d11bbf1f2b61dcdb1b7088eec539fcd00b28a0 (diff) | |
download | netifd-08e954e137ffcf7770200bbd6476dc36bbd326f5.tar.gz |
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 <nbd@nbd.name>
-rw-r--r-- | bonding.c | 11 |
1 files changed, 6 insertions, 5 deletions
@@ -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; |