On Tue, Apr 26, 2011 at 10:21:57PM +1000, NeilBrown wrote: > On Tue, 26 Apr 2011 08:36:50 +0100 Mel Gorman <mgorman@xxxxxxx> wrote: > > > diff --git a/net/core/dev.c b/net/core/dev.c > > index 3871bf6..2d79a20 100644 > > --- a/net/core/dev.c > > +++ b/net/core/dev.c > > @@ -3095,6 +3095,27 @@ static void vlan_on_bond_hook(struct sk_buff *skb) > > } > > } > > > > +/* > > + * Limit which protocols can use the PFMEMALLOC reserves to those that are > > + * expected to be used for communication with swap. > > + */ > > +static bool skb_pfmemalloc_protocol(struct sk_buff *skb) > > +{ > > + if (skb_pfmemalloc(skb)) > > + switch (skb->protocol) { > > + case __constant_htons(ETH_P_ARP): > > + case __constant_htons(ETH_P_IP): > > + case __constant_htons(ETH_P_IPV6): > > + case __constant_htons(ETH_P_8021Q): > > + break; > > + > > + default: > > + return false; > > + } > > + > > + return true; > > +} > > This sort of thing really bugs me :-) > Neither the comment nor the function name actually describe what the function > is doing. The function is checking *2* things. > is_pfmemalloc_skb_or_pfmemalloc_protocol() > might be a more correct name, but is too verbose. > > I would prefer the skb_pfmemalloc test were removed from here and .... > > > + if (!skb_pfmemalloc_protocol(skb)) > > + goto drop; > > + > > ...added here so this becomes: > > if (!skb_pfmemalloc(skb) && !skb_pfmemalloc_protocol(skb)) > goto drop; > > which actually makes sense. > Moving the check is neater but that check should be if (skb_pfmemalloc(skb) && !skb_pfmemalloc_protocol(skb)) ? It's only if the skb was allocated from emergency reserves that we need to consider dropping it to make way for other packets to be received. -- Mel Gorman SUSE Labs -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxxx For more info on Linux MM, see: http://www.linux-mm.org/ . Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/ Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>