Le lundi 15 novembre 2010 Ã 21:23 +0900, Tetsuo Handa a Ãcrit : > Stephen Hemminger wrote: > > This is a split up of what Eric did with a couple of small changes and additions. > Something seems to be wrong with this patchset. > > --- a/net/bridge/br_input.c > +++ b/net/bridge/br_input.c > > @@ -173,8 +177,8 @@ forward: > > switch (p->state) { > > case BR_STATE_FORWARDING: > > rhook = rcu_dereference(br_should_route_hook); > > - if (rhook != NULL) { > > - if (rhook(skb)) > > + if (rhook) { > > + if ((*rhook)(skb)) > > Is *rhook != NULL guaranteed when rhook != NULL? Its the C standard convention, we call function pointed by rhook, not *rhook. $ cat func.c typedef int (*hook_t)(int a1, int a2); hook_t *hook; int foo(int a1, int a2) { hook_t *handler = hook; if (handler) return handler(a1, a2); return 0; } $ gcc -O2 -c func.c func.c: In function âfooâ: func.c:10:17: error: called object âhandlerâ is not a function Now, if we use (*handler), it works : $ cat func.c typedef int (*hook_t)(int a1, int a2); hook_t *hook; int foo(int a1, int a2) { hook_t *handler = hook; if (handler) return (*handler)(a1, a2); return 0; } $ gcc -O2 -c func.c $ _______________________________________________ Bridge mailing list Bridge@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linux-foundation.org/mailman/listinfo/bridge