greybus: loopback: fix double error count
authorJohan Hovold <johan@hovoldconsulting.com>
Thu, 3 Mar 2016 14:29:39 +0000 (15:29 +0100)
committerGreg Kroah-Hartman <gregkh@google.com>
Thu, 3 Mar 2016 18:02:48 +0000 (10:02 -0800)
Make sure not count errors during asynchronous tests twice (first in
the timeout handler then again in the completion handler) to avoid
obviously broken error stats such as:

$ loopback_test -i 1000 -t transfer -p -o 200000 -c 64 -x -s 2000

1970-1-1 1:3:35
 test:                  transfer
 path:                  gb_loopback0
 size:                  2000
 iterations:            1000
 errors:                1998
 async:                 Enabled
 requests per-sec:      min=0, max=0, average=0.310556, jitter=0
 ap-throughput B/s:     min=0 max=4026 average=1254.647461 jitter=4026
 ap-latency usec:       min=12803 max=12803 average=12803.000000 jitter=0
 apbridge-latency usec: min=89 max=89 average=89.000000 jitter=0
 gpbridge-latency usec: min=294 max=294 average=294.000000 jitter=0

where we supposedly have more errors than iterations (operations
initiated).

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
drivers/staging/greybus/loopback.c

index 9014c2b51ae00a014f9687eeae2916087c1b371b..ba6e12a3648ccd70951fae0be672e322bc38b1c3 100644 (file)
@@ -516,15 +516,15 @@ static void gb_loopback_async_operation_callback(struct gb_operation *operation)
                                err = true;
        }
 
-       if (err) {
-               gb->error++;
-       } else {
+       if (!err) {
                gb_loopback_push_latency_ts(gb, &op_async->ts, &te);
                gb->elapsed_nsecs = gb_loopback_calc_latency(&op_async->ts,
                                                             &te);
        }
 
        if (op_async->pending) {
+               if (err)
+                       gb->error++;
                gb->iteration_count++;
                op_async->pending = false;
                del_timer_sync(&op_async->timer);