#ifndef __TRIGGER_H_ #define __TRIGGER_H_ 1 #include "util/debug.h" #include "asm/bug.h" /* * Use trigger to model operations which need to be executed when * an event (a signal, for example) is observed. * * States and transits: * * * OFF--(on)--> READY --(hit)--> HIT * ^ | * | (ready) * | | * \_____________/ * * is_hit and is_ready are two key functions to query the state of * a trigger. is_hit means the event already happen; is_ready means the * trigger is waiting for the event. */ struct trigger { volatile enum { TRIGGER_ERROR = -2, TRIGGER_OFF = -1, TRIGGER_READY = 0, TRIGGER_HIT = 1, } state; const char *name; }; #define TRIGGER_WARN_ONCE(t, exp) \ WARN_ONCE(t->state != exp, "trigger '%s' state transist error: %d in %s()\n", \ t->name, t->state, __func__) static inline bool trigger_is_available(struct trigger *t) { return t->state >= 0; } static inline bool trigger_is_error(struct trigger *t) { return t->state <= TRIGGER_ERROR; } static inline void trigger_on(struct trigger *t) { TRIGGER_WARN_ONCE(t, TRIGGER_OFF); t->state = TRIGGER_READY; } static inline void trigger_ready(struct trigger *t) { if (!trigger_is_available(t)) return; t->state = TRIGGER_READY; } static inline void trigger_hit(struct trigger *t) { if (!trigger_is_available(t)) return; TRIGGER_WARN_ONCE(t, TRIGGER_READY); t->state = TRIGGER_HIT; } static inline void trigger_off(struct trigger *t) { if (!trigger_is_available(t)) return; t->state = TRIGGER_OFF; } static inline void trigger_error(struct trigger *t) { t->state = TRIGGER_ERROR; } static inline bool trigger_is_ready(struct trigger *t) { return t->state == TRIGGER_READY; } static inline bool trigger_is_hit(struct trigger *t) { return t->state == TRIGGER_HIT; } #define DEFINE_TRIGGER(n) \ struct trigger n = {.state = TRIGGER_OFF, .name = #n} #endif class='active' href='/cgit.cgi/linux/net-next.git/commit/net/sunrpc/rpcb_clnt.c?h=nds-private-remove&id=f991bb9da142ba79b54ed0757f22e756f45e2c5a'>commitdiff
path: root/net/sunrpc/rpcb_clnt.c
diff options
context:
space:
mode:
authorSteffen Klassert <steffen.klassert@secunet.com>2017-01-30 06:45:38 +0100
committerSteffen Klassert <steffen.klassert@secunet.com>2017-01-30 06:45:38 +0100
commitf991bb9da142ba79b54ed0757f22e756f45e2c5a (patch)
tree0c1e5ec4de598c841b8fae187c4b1b783c1ceb02 /net/sunrpc/rpcb_clnt.c
parenteb758c8864d49f5786432ce38fd8a72bdbbd10cf (diff)
net: Drop secpath on free after gro merge.
With a followup patch, a gro merged skb can have a secpath. So drop it before freeing or reusing the skb. Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
Diffstat (limited to 'net/sunrpc/rpcb_clnt.c')