On Fri, Oct 30, 2015 at 4:00 AM, Eric Dumazet <eric.duma...@gmail.com> wrote: > On Fri, 2015-10-30 at 11:48 +0100, Florian Westphal wrote: >> Hannes Frederic Sowa <han...@stressinduktion.org> wrote: >> > > > > @@ -936,7 +936,9 @@ static void ipmr_cache_resolve(struct net *net, >> > > > > struct mr_table *mrt, >> > > > > >> > > > > rtnl_unicast(skb, net, NETLINK_CB(skb).portid); >> > > > > } else { >> > > > > + preempt_disable(); >> > > > > ip_mr_forward(net, mrt, skb, c, 0); >> > > > > + preempt_enable(); >> > > > > } >> > > > > } >> > > > > } >> > > > >> > > > I do not believe this fix is correct. >> > > >> > > Yes, sorry. I should have suggested local_bh_disable instead. >> > > >> > > > Better replace the >> > > > IP_INC_STATS_BH() by IP_INC_STATS() >> > > > >> > > > and IP_ADD_STATS_BH() by IP_ADD_STATS() >> > > >> > > Hmm, whats the rationale for this? >> > > >> > > Note that IP_ADD_STATS_BH in question is unconditional (not in >> > > error path). It seems that its virtually always called from softirq >> > > except in the setsockopt case. >> > >> > The naming of the functions is bad if you compare them to e.g. >> > spin_lock_bh. >> > >> > STATS_BH can only be used from bottom half and the normal ones (without >> > _BH) can be called from everywhere. It is a common pattern in the >> > kernel. >> > >> > Eric's proposal is correct. >> >> Yes, its correct but it results in 4 additonal bh on/off calls >> for the common case, hence my question. >> >> Moving the one ip_mr_forward into bh-off keeps the bh-disable thing >> in the setsockopt path. > > I have no idea how long is the ip_mr_forward(net, mrt, skb, c, 0) > section, and if GFP_KERNEL allocations were attempted in this path. > > The proposed fix might add other regressions. > > I do not want to spend time auditing this code that nobody uses. > > While on x86, IP_INC_STATS() does not use additional bh on/off calls >
for 32 bit archs, it does in SNMP_ADD_STATS64_USER() > In general, we should disable interrupts (even if soft) for limited > amount of times. > > -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html