diff options
| author | Felix Fietkau | 2021-09-21 16:04:32 +0000 |
|---|---|---|
| committer | Felix Fietkau | 2021-09-21 16:04:34 +0000 |
| 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; |