firewire: fully initialize fw_transaction before marking it pending
authorStefan Richter <stefanr@s5r6.in-berlin.de>
Sat, 12 Jul 2008 12:50:06 +0000 (14:50 +0200)
committerStefan Richter <stefanr@s5r6.in-berlin.de>
Mon, 14 Jul 2008 11:06:04 +0000 (13:06 +0200)
commite9aeb46c93a8b1b703d00586c05d9a71aa7e0f0c
tree8e20402235bdcdf0e250e90ba02ac9f5eae2b87c
parent792a61021c6043f6c2b24b1cdd42be5753b3e54c
firewire: fully initialize fw_transaction before marking it pending

In theory, card->flush_timer could already access a transaction between
fw_send_request()'s spin_unlock_irqrestore and the rest of what happens
in fw_send_request().  This would happen if the process which sends the
request is preempted and put to sleep right after spin_unlock_irqrestore
for longer than 100ms.

Therefore we fill in everything in struct fw_transaction at which the
flush_timer might look at before we lift the lock.

To do:  Ensure that the timer does not pick up the transaction before
the time of the AT request event plus split transaction timeout.

Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
drivers/firewire/fw-transaction.c