greybus: operation: restructure activation state handling
authorJohan Hovold <johan@hovoldconsulting.com>
Fri, 27 May 2016 15:26:34 +0000 (17:26 +0200)
committerGreg Kroah-Hartman <gregkh@google.com>
Fri, 27 May 2016 19:21:16 +0000 (12:21 -0700)
Restructure the operation activation state handling in preparation for a
new disconnecting state.

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

index aaa1345..75d1231 100644 (file)
@@ -47,11 +47,15 @@ static int gb_operation_get_active(struct gb_operation *operation)
 
        spin_lock_irqsave(&connection->lock, flags);
 
-       if (connection->state != GB_CONNECTION_STATE_ENABLED &&
-                       (connection->state != GB_CONNECTION_STATE_ENABLED_TX ||
-                        gb_operation_is_incoming(operation))) {
-               spin_unlock_irqrestore(&connection->lock, flags);
-               return -ENOTCONN;
+       switch (connection->state) {
+       case GB_CONNECTION_STATE_ENABLED:
+               break;
+       case GB_CONNECTION_STATE_ENABLED_TX:
+               if (gb_operation_is_incoming(operation))
+                       goto err_unlock;
+               break;
+       default:
+               goto err_unlock;
        }
 
        if (operation->active++ == 0)
@@ -62,6 +66,11 @@ static int gb_operation_get_active(struct gb_operation *operation)
        spin_unlock_irqrestore(&connection->lock, flags);
 
        return 0;
+
+err_unlock:
+       spin_unlock_irqrestore(&connection->lock, flags);
+
+       return -ENOTCONN;
 }
 
 /* Caller holds operation reference. */