diff options
author | Sean Bruno <sbruno@FreeBSD.org> | 2017-07-25 14:41:50 +0000 |
---|---|---|
committer | Sean Bruno <sbruno@FreeBSD.org> | 2017-07-25 14:41:50 +0000 |
commit | 51352d9d8114dff53419b164d594869fdfca5534 (patch) | |
tree | fe6d8aa55de21a69ca8b0beedc4d5e3e58d52c89 /sys/net | |
parent | e0ef5a73069bf8d8ab053e8e780e99b470d227a6 (diff) | |
download | src-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.c | 5 |
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); |