firewire: core: make transaction label allocation more robust
authorClemens Ladisch <clemens@ladisch.de>
Mon, 19 Apr 2010 15:29:14 +0000 (17:29 +0200)
committerStefan Richter <stefanr@s5r6.in-berlin.de>
Mon, 19 Apr 2010 18:00:44 +0000 (20:00 +0200)
commit7906054f0d597246178b3154adca76de29913aa5
tree0645ad88ab8ad5cd98ce3cef95655ccc5bca0ef8
parentedd5bdaf128e04066caac84fcb21377197ea0d64
firewire: core: make transaction label allocation more robust

If one request is so long-lived that it does not get a response before
the following 63 requests, its bit in tlabel_mask is still set when the
next request tries to allocate a transaction label for that number.  In
this state, while the first request is not completed or timed out, no
new requests can be submitted.

To fix this, skip over any label still in use, and do not error out
unless we have entirely run out of labels.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
drivers/firewire/core-transaction.c