aboutsummaryrefslogtreecommitdiff
path: root/sys/net
diff options
context:
space:
mode:
authorSean Bruno <sbruno@FreeBSD.org>2017-07-25 14:41:50 +0000
committerSean Bruno <sbruno@FreeBSD.org>2017-07-25 14:41:50 +0000
commit51352d9d8114dff53419b164d594869fdfca5534 (patch)
treefe6d8aa55de21a69ca8b0beedc4d5e3e58d52c89 /sys/net
parente0ef5a73069bf8d8ab053e8e780e99b470d227a6 (diff)
downloadsrc-51352d9d8114dff53419b164d594869fdfca5534.tar.gz
src-51352d9d8114dff53419b164d594869fdfca5534.zip
Don't hold the RM lock during lagg_proto_addport() to avoid an LOR.
Submitted by: Kevin Bowling <kevin.bowling@kev009.com> Reviewed by: mav MFC after: 1 week Sponsored by: Limelight Networks Differential Revision: https://reviews.freebsd.org/D11711
Notes
Notes: svn path=/head/; revision=321477
Diffstat (limited to 'sys/net')
-rw-r--r--sys/net/if_lagg.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/sys/net/if_lagg.c b/sys/net/if_lagg.c
index afcad52c3dd1..0765400d37cf 100644
--- a/sys/net/if_lagg.c
+++ b/sys/net/if_lagg.c
@@ -738,15 +738,16 @@ lagg_port_create(struct lagg_softc *sc, struct ifnet *ifp)
lagg_setmulti(lp);
+ LAGG_WUNLOCK(sc);
+
if ((error = lagg_proto_addport(sc, lp)) != 0) {
/* Remove the port, without calling pr_delport. */
+ LAGG_WLOCK(sc);
lagg_port_destroy(lp, 0);
LAGG_UNLOCK_ASSERT(sc);
return (error);
}
- LAGG_WUNLOCK(sc);
-
/* Update lagg capabilities */
lagg_capabilities(sc);
lagg_linkstate(sc);