diff options
| author | Neil Horman <nhorman@tuxdriver.com> | 2010-07-20 00:52:09 -0400 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2010-07-20 16:28:04 -0400 |
| commit | 4b706372f18de53970e4c6887a96459590fef80a (patch) | |
| tree | 545fe784620c3dc9f0fd8a6efdeb2cbe566779c9 | |
| parent | d79d991379af35d43f003f162e8650e72965b8ca (diff) | |
drop_monitor: Add error code to detect duplicate state changes
Patch to add -EAGAIN error to dropwatch netlink message handling code.
-EAGAIN will be returned anytime userspace attempts to transition the state of
the drop monitor service to a state that its already in. That allows user space
to detect this condition, so it doesn't wait for a success ACK that will never
arrive. Tested successfully by me
Signed-off-by: Neil Horman <nhorman@tuxdriver.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
| -rw-r--r-- | net/core/drop_monitor.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/net/core/drop_monitor.c b/net/core/drop_monitor.c index ad41529fb60f..646ef3bc7200 100644 --- a/net/core/drop_monitor.c +++ b/net/core/drop_monitor.c | |||
| @@ -223,6 +223,11 @@ static int set_all_monitor_traces(int state) | |||
| 223 | 223 | ||
| 224 | spin_lock(&trace_state_lock); | 224 | spin_lock(&trace_state_lock); |
| 225 | 225 | ||
| 226 | if (state == trace_state) { | ||
| 227 | rc = -EAGAIN; | ||
| 228 | goto out_unlock; | ||
| 229 | } | ||
| 230 | |||
| 226 | switch (state) { | 231 | switch (state) { |
| 227 | case TRACE_ON: | 232 | case TRACE_ON: |
| 228 | rc |= register_trace_kfree_skb(trace_kfree_skb_hit, NULL); | 233 | rc |= register_trace_kfree_skb(trace_kfree_skb_hit, NULL); |
| @@ -251,11 +256,12 @@ static int set_all_monitor_traces(int state) | |||
| 251 | 256 | ||
| 252 | if (!rc) | 257 | if (!rc) |
| 253 | trace_state = state; | 258 | trace_state = state; |
| 259 | else | ||
| 260 | rc = -EINPROGRESS; | ||
| 254 | 261 | ||
| 262 | out_unlock: | ||
| 255 | spin_unlock(&trace_state_lock); | 263 | spin_unlock(&trace_state_lock); |
| 256 | 264 | ||
| 257 | if (rc) | ||
| 258 | return -EINPROGRESS; | ||
| 259 | return rc; | 265 | return rc; |
| 260 | } | 266 | } |
| 261 | 267 | ||
