diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2012-12-13 11:59:27 -0800 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-12-13 11:59:27 -0800 |
commit | dadfab4873256d2145640c0ce468fcbfb48977fe (patch) | |
tree | 73569a071221172e7f5f787e5df0064e8d129b3f | |
parent | 046e7d685bc370fd4c879ab6635ad3f69e6673d1 (diff) | |
parent | db2cad2f55078e90f84960b84b721291efa83d36 (diff) | |
download | linux-dadfab4873256d2145640c0ce468fcbfb48977fe.tar.gz linux-dadfab4873256d2145640c0ce468fcbfb48977fe.tar.bz2 linux-dadfab4873256d2145640c0ce468fcbfb48977fe.zip |
Merge tag 'firewire-updates' of git://git.kernel.org/pub/scm/linux/kernel/git/ieee1394/linux1394
Pull IEEE 1394 (FireWire) subsystem updates from Stefan Richter:
- IPv4-over-1394: fixes for broadcast and multicast
- SBP-2: allow thin-provisioning related commands
- trivia
* tag 'firewire-updates' of git://git.kernel.org/pub/scm/linux/kernel/git/ieee1394/linux1394:
firewire: net: remove unused variable in fwnet_receive_broadcast()
firewire: net: Fix handling of fragmented multicast/broadcast packets.
firewire: sbp2: allow WRITE SAME and REPORT SUPPORTED OPERATION CODES
tools/firewire: nosy-dump: check for allocation failure
-rw-r--r-- | drivers/firewire/net.c | 15 | ||||
-rw-r--r-- | drivers/firewire/sbp2.c | 2 | ||||
-rw-r--r-- | tools/firewire/nosy-dump.c | 4 |
3 files changed, 13 insertions, 8 deletions
diff --git a/drivers/firewire/net.c b/drivers/firewire/net.c index 08c674957af8..e7a711f53a6f 100644 --- a/drivers/firewire/net.c +++ b/drivers/firewire/net.c @@ -828,7 +828,6 @@ static void fwnet_receive_broadcast(struct fw_iso_context *context, { struct fwnet_device *dev; struct fw_iso_packet packet; - struct fw_card *card; __be16 *hdr_ptr; __be32 *buf_ptr; int retval; @@ -840,7 +839,6 @@ static void fwnet_receive_broadcast(struct fw_iso_context *context, unsigned long flags; dev = data; - card = dev->card; hdr_ptr = header; length = be16_to_cpup(hdr_ptr); @@ -861,8 +859,8 @@ static void fwnet_receive_broadcast(struct fw_iso_context *context, if (specifier_id == IANA_SPECIFIER_ID && ver == RFC2734_SW_VERSION) { buf_ptr += 2; length -= IEEE1394_GASP_HDR_SIZE; - fwnet_incoming_packet(dev, buf_ptr, length, - source_node_id, -1, true); + fwnet_incoming_packet(dev, buf_ptr, length, source_node_id, + context->card->generation, true); } packet.payload_length = dev->rcv_buffer_size; @@ -958,7 +956,12 @@ static void fwnet_transmit_packet_done(struct fwnet_packet_task *ptask) break; } - skb_pull(skb, ptask->max_payload); + if (ptask->dest_node == IEEE1394_ALL_NODES) { + skb_pull(skb, + ptask->max_payload + IEEE1394_GASP_HDR_SIZE); + } else { + skb_pull(skb, ptask->max_payload); + } if (ptask->outstanding_pkts > 1) { fwnet_make_sf_hdr(&ptask->hdr, RFC2374_HDR_INTFRAG, dg_size, fg_off, datagram_label); @@ -1062,7 +1065,7 @@ static int fwnet_send_packet(struct fwnet_packet_task *ptask) smp_rmb(); node_id = dev->card->node_id; - p = skb_push(ptask->skb, 8); + p = skb_push(ptask->skb, IEEE1394_GASP_HDR_SIZE); put_unaligned_be32(node_id << 16 | IANA_SPECIFIER_ID >> 8, p); put_unaligned_be32((IANA_SPECIFIER_ID & 0xff) << 24 | RFC2734_SW_VERSION, &p[4]); diff --git a/drivers/firewire/sbp2.c b/drivers/firewire/sbp2.c index bb1b392f5cda..1162d6b3bf85 100644 --- a/drivers/firewire/sbp2.c +++ b/drivers/firewire/sbp2.c @@ -1546,8 +1546,6 @@ static int sbp2_scsi_slave_configure(struct scsi_device *sdev) struct sbp2_logical_unit *lu = sdev->hostdata; sdev->use_10_for_rw = 1; - sdev->no_report_opcodes = 1; - sdev->no_write_same = 1; if (sbp2_param_exclusive_login) sdev->manage_start_stop = 1; diff --git a/tools/firewire/nosy-dump.c b/tools/firewire/nosy-dump.c index f93b776370b6..3179c711bd65 100644 --- a/tools/firewire/nosy-dump.c +++ b/tools/firewire/nosy-dump.c @@ -150,6 +150,8 @@ subaction_create(uint32_t *data, size_t length) /* we put the ack in the subaction struct for easy access. */ sa = malloc(sizeof *sa - sizeof sa->packet + length); + if (!sa) + exit(EXIT_FAILURE); sa->ack = data[length / 4 - 1]; sa->length = length; memcpy(&sa->packet, data, length); @@ -180,6 +182,8 @@ link_transaction_lookup(int request_node, int response_node, int tlabel) } t = malloc(sizeof *t); + if (!t) + exit(EXIT_FAILURE); t->request_node = request_node; t->response_node = response_node; t->tlabel = tlabel; |