firewire: Implement proper transaction cancelation.

Drivers such as fw-sbp2 had no way to properly cancel in-progress
transactions, which could leave a pending transaction or an unset
packet in the low-level queues after kfree'ing the containing
structure. fw_cancel_transaction() lets drivers cancel a submitted
transaction.

Signed-off-by: Kristian Høgsberg <krh@redhat.com>
Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
diff --git a/drivers/firewire/fw-transaction.h b/drivers/firewire/fw-transaction.h
index 50ec2c6..8f0283c 100644
--- a/drivers/firewire/fw-transaction.h
+++ b/drivers/firewire/fw-transaction.h
@@ -391,6 +391,8 @@
 
 	void (*send_request) (struct fw_card *card, struct fw_packet *packet);
 	void (*send_response) (struct fw_card *card, struct fw_packet *packet);
+	/* Calling cancel is valid once a packet has been submitted. */
+	int (*cancel_packet) (struct fw_card *card, struct fw_packet *packet);
 
 	/* Allow the specified node ID to do direct DMA out and in of
 	 * host memory.  The card will disable this for all node when
@@ -421,6 +423,9 @@
 		void *data, size_t length,
 		fw_transaction_callback_t callback, void *callback_data);
 
+int fw_cancel_transaction(struct fw_card *card,
+			  struct fw_transaction *transaction);
+
 void fw_flush_transactions(struct fw_card *card);
 
 void fw_send_phy_config(struct fw_card *card,