X-Git-Url: http://git.cascardo.info/?p=cascardo%2Flinux.git;a=blobdiff_plain;f=drivers%2Fstaging%2Fgreybus%2Foperation.c;h=75d1231cfde5113c4e141c781c84d416ede42047;hp=aaa1345b19d91d928e4a566fdedbdeedae03e083;hb=77bbbcf6d36d7ef2054a8b0dc8396cc0f092945e;hpb=8890f95710d835ba9f843c7dd849858da1d847d8 diff --git a/drivers/staging/greybus/operation.c b/drivers/staging/greybus/operation.c index aaa1345b19d9..75d1231cfde5 100644 --- a/drivers/staging/greybus/operation.c +++ b/drivers/staging/greybus/operation.c @@ -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. */