[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <AE90C24D6B3A694183C094C60CF0A2F6026B718C@saturn3.aculab.com>
Date: Thu, 14 Mar 2013 09:47:24 -0000
From: "David Laight" <David.Laight@...LAB.COM>
To: "Hannes Frederic Sowa" <hannes@...essinduktion.org>,
"Stephen Hemminger" <stephen@...workplumber.org>
Cc: "Eric Dumazet" <eric.dumazet@...il.com>, <netdev@...r.kernel.org>,
<yoshfuji@...ux-ipv6.org>, <brouer@...hat.com>
Subject: RE: [PATCH RFC] ipv6: use stronger hash for reassembly queue hash table
> On Wed, Mar 13, 2013 at 09:36:52PM -0700, Stephen Hemminger wrote:
> > > +#define INET_FRAG_FIND_CHECK(val) \
> > > + ({ \
> > > + static const char ___mem[] = \
> > > + KERN_ERR pr_fmt( \
> > > + "inet_frag_find: No memory left." \
> > > + " Dropping fragment.\n"); \
> > > + static const char ___limit[] = \
> > > + KERN_WARNING pr_fmt( \
> > > + "inet_frag_find: Fragment hash bucket" \
> > > + " list length grew above limit " \
> > > + __stringify(INETFRAGS_MAXDEPTH) \
> > > + ". Dropping fragment.\n"); \
> > > + bool ___b = true; \
> > > + if (IS_ERR_OR_NULL(val)) { \
> > > + ___b = false; \
> > > + if (PTR_ERR(val) == -ENOBUFS) \
> > > + LIMIT_NETDEBUG(___limit); \
> > > + else \
> > > + LIMIT_NETDEBUG(___mem); \
> > > + } \
> > > + ___b; \
> > > + })
> > > +
> >
> > Big macros suck, write it as an inline function or better yet a real function.
>
> I switched to the macro to have string expansion with pr_fmt. So it is visible
> from the dmesg if IPv4, IPv6 or IPv6-nf did generate the message. This could
> be done with a function, too, but would require a bit more string handling.
I'd guess it would be best to have the IS_ERR_OR_NULL() inline calling a
real function on error.
I'd also have thought that INETFRAGS_MAXDEPTH should be run-time tunable.
David
Powered by blists - more mailing lists