Browse Source

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>
Neil Horman 15 years ago
parent
commit
4b706372f1
1 changed files with 8 additions and 2 deletions
  1. 8 2
      net/core/drop_monitor.c

+ 8 - 2
net/core/drop_monitor.c

@@ -223,6 +223,11 @@ static int set_all_monitor_traces(int state)
 
 
 	spin_lock(&trace_state_lock);
 	spin_lock(&trace_state_lock);
 
 
+	if (state == trace_state) {
+		rc = -EAGAIN;
+		goto out_unlock;
+	}
+
 	switch (state) {
 	switch (state) {
 	case TRACE_ON:
 	case TRACE_ON:
 		rc |= register_trace_kfree_skb(trace_kfree_skb_hit, NULL);
 		rc |= register_trace_kfree_skb(trace_kfree_skb_hit, NULL);
@@ -251,11 +256,12 @@ static int set_all_monitor_traces(int state)
 
 
 	if (!rc)
 	if (!rc)
 		trace_state = state;
 		trace_state = state;
+	else
+		rc = -EINPROGRESS;
 
 
+out_unlock:
 	spin_unlock(&trace_state_lock);
 	spin_unlock(&trace_state_lock);
 
 
-	if (rc)
-		return -EINPROGRESS;
 	return rc;
 	return rc;
 }
 }