do_link_state_change() is executed in taskqueue context and in

general is allowed to sleep.  Don't enter the epoch for the
whole duration.  If some event handlers need the epoch, they
should handle that theirselves.

Discussed with:	hselasky
This commit is contained in:
Gleb Smirnoff 2019-10-16 16:32:58 +00:00
parent caf894f793
commit b46d70fd88
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=353654

View File

@ -2313,11 +2313,9 @@ if_link_state_change(struct ifnet *ifp, int link_state)
static void
do_link_state_change(void *arg, int pending)
{
struct epoch_tracker et;
struct ifnet *ifp;
int link_state;
NET_EPOCH_ENTER(et);
ifp = arg;
link_state = ifp->if_link_state;
@ -2345,7 +2343,6 @@ do_link_state_change(void *arg, int pending)
if (log_link_state_change)
if_printf(ifp, "link state changed to %s\n",
(link_state == LINK_STATE_UP) ? "UP" : "DOWN" );
NET_EPOCH_EXIT(et);
EVENTHANDLER_INVOKE(ifnet_link_event, ifp, link_state);
CURVNET_RESTORE();
}