diff options
-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 | ||