drop_monitor: Add error code to detect duplicate state changes
Neil Horman [Tue, 20 Jul 2010 04:52:09 +0000 (04:52 +0000)]
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>

net/core/drop_monitor.c

index ad41529..646ef3b 100644 (file)
@@ -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;
 }