Page MenuHomeFreeBSD

D19201.id53931.diff
No OneTemporary

D19201.id53931.diff

Index: sys/net/ieee8023ad_lacp.c
===================================================================
--- sys/net/ieee8023ad_lacp.c
+++ sys/net/ieee8023ad_lacp.c
@@ -566,7 +566,6 @@
lp->lp_aggregator = NULL;
lacp_sm_rx_set_expired(lp);
LACP_UNLOCK(lsc);
- lacp_linkstate(lgp);
return (0);
}
Index: sys/net/if_lagg.c
===================================================================
--- sys/net/if_lagg.c
+++ sys/net/if_lagg.c
@@ -731,6 +731,7 @@
if (CK_SLIST_EMPTY(&sc->sc_ports))
sc->sc_primary = lp;
+ LAGG_RLOCK();
/* Change the interface type */
lp->lp_iftype = ifp->if_type;
ifp->if_type = IFT_IEEE8023ADLAG;
@@ -751,7 +752,6 @@
* is predictable and `ifconfig laggN create ...` command
* will lead to the same result each time.
*/
- LAGG_RLOCK();
CK_SLIST_FOREACH(tlp, &sc->sc_ports, lp_entries) {
if (tlp->lp_ifp->if_index < ifp->if_index && (
CK_SLIST_NEXT(tlp, lp_entries) == NULL ||
@@ -759,7 +759,6 @@
ifp->if_index))
break;
}
- LAGG_RUNLOCK();
if (tlp != NULL)
CK_SLIST_INSERT_AFTER(tlp, lp, lp_entries);
else
@@ -774,10 +773,13 @@
lagg_port_destroy(lp, 0);
if (oldmtu != -1)
(*ifp->if_ioctl)(ifp, SIOCSIFMTU, (caddr_t)&ifr);
+ LAGG_RUNLOCK();
return (error);
}
+ LAGG_RUNLOCK();
/* Update lagg capabilities */
+ lagg_proto_linkstate(sc, lp);
lagg_capabilities(sc);
lagg_linkstate(sc);
@@ -828,6 +830,7 @@
LAGG_XLOCK_ASSERT(sc);
+ LAGG_RLOCK();
if (rundelport)
lagg_proto_delport(sc, lp);
@@ -850,6 +853,7 @@
/* Finally, remove the port from the lagg */
CK_SLIST_REMOVE(&sc->sc_ports, lp, lagg_port, lp_entries);
sc->sc_count--;
+ LAGG_RUNLOCK();
/* Update the primary interface */
if (lp == sc->sc_primary) {
Index: sys/net/iflib.c
===================================================================
--- sys/net/iflib.c
+++ sys/net/iflib.c
@@ -1468,12 +1468,14 @@
{
iflib_filter_info_t info = arg;
struct grouptask *gtask = info->ifi_task;
+ int result;
if (!iflib_started)
- return (FILTER_HANDLED);
+ return (FILTER_STRAY);
DBG_COUNTER_INC(fast_intrs);
- if (info->ifi_filter != NULL && info->ifi_filter(info->ifi_filter_arg) == FILTER_HANDLED)
- return (FILTER_HANDLED);
+ if (info->ifi_filter != NULL
+ && (result = info->ifi_filter(info->ifi_filter_arg)) != FILTER_SCHEDULE_THREAD)
+ return result;
GROUPTASK_ENQUEUE(gtask);
return (FILTER_HANDLED);
@@ -1522,7 +1524,7 @@
IFDI_RX_QUEUE_INTR_ENABLE(ctx, rxq->ifr_id);
DBG_COUNTER_INC(rx_intr_enables);
}
- return (FILTER_HANDLED);
+ return (FILTER_SCHEDULE_THREAD);
}
@@ -1531,16 +1533,18 @@
{
iflib_filter_info_t info = arg;
struct grouptask *gtask = info->ifi_task;
+ int result;
if (!iflib_started)
- return (FILTER_HANDLED);
+ return (FILTER_STRAY);
DBG_COUNTER_INC(fast_intrs);
- if (info->ifi_filter != NULL && info->ifi_filter(info->ifi_filter_arg) == FILTER_HANDLED)
- return (FILTER_HANDLED);
+ if (info->ifi_filter != NULL
+ && (result = info->ifi_filter(info->ifi_filter_arg)) != FILTER_SCHEDULE_THREAD)
+ return result;
GROUPTASK_ENQUEUE(gtask);
- return (FILTER_HANDLED);
+ return (FILTER_SCHEDULE_THREAD);
}
static int

File Metadata

Mime Type
text/plain
Expires
Sun, Jul 19, 3:43 PM (16 h, 13 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
35238689
Default Alt Text
D19201.id53931.diff (3 KB)

Event Timeline