diff options
author | Neil Horman <nhorman@tuxdriver.com> | 2010-07-20 04:52:09 +0000 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2010-07-20 13:28:04 -0700 |
commit | 4b706372f18de53970e4c6887a96459590fef80a (patch) | |
tree | 545fe784620c3dc9f0fd8a6efdeb2cbe566779c9 /net | |
parent | d79d991379af35d43f003f162e8650e72965b8ca (diff) | |
download | linux-3.10-4b706372f18de53970e4c6887a96459590fef80a.tar.gz linux-3.10-4b706372f18de53970e4c6887a96459590fef80a.tar.bz2 linux-3.10-4b706372f18de53970e4c6887a96459590fef80a.zip |
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>
Diffstat (limited to '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 ad41529fb60..646ef3bc720 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) spin_lock(&trace_state_lock); + if (state == trace_state) { + rc = -EAGAIN; + goto out_unlock; + } + switch (state) { case TRACE_ON: rc |= register_trace_kfree_skb(trace_kfree_skb_hit, NULL); @@ -251,11 +256,12 @@ static int set_all_monitor_traces(int state) if (!rc) trace_state = state; + else + rc = -EINPROGRESS; +out_unlock: spin_unlock(&trace_state_lock); - if (rc) - return -EINPROGRESS; return rc; } |