IEEE 1394 (FireWire) subsystem updates:

- IPv4-over-1394: fixes for broadcast and multicast
   - SBP-2: allow thin-provisioning related commands
   - trivia
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v2.0.19 (GNU/Linux)
 
 iQIcBAABAgAGBQJQyPUwAAoJEHnzb7JUXXnQ9/cQAMOpU1VJ08h4HzxlhEgiFKK/
 5iYONLuYXmervb7RKTgcFCKUq1ix0B+5DFTaZcArhWThKX+2JF537QJ1AsqsgivW
 y4zlG5glJ9q99FXoSKtheY1PHRnLEFbkcs2BkaPeM0Is4yg5gIVDquewZAILpOxo
 T+2en4HeKz3dBmwtNWQc6peGURYmfQZkQjE5dU7ZwBlaZvDm5mt6+8hDI+CmxCgk
 qAWYEOg3h1EX5utV4jimOQANkbcVP1AFg6AGzWcEMmcepUXoI9sVJFhm/bM6Ly+H
 4e8A8TZc6McxT0bnFaZnG+oZ/MlSBfkE6OP4yM+fhyw6NwW94qtZfhR8JpkX3LJ5
 RQx5xKy0lbf0ZYB2JuX15y0azYtrzkDx1fCBIFkj0CE/FT17fC7SgGTLKn3NVz2I
 RoSAsR+UzZuQZ4NMXR8x5f3CElz8wJTgagxNnU2kQBOvt+xoF3rGkYCk/NOv/3ob
 U3Bu3emzMp4i4dS2KHrhA0b0nFsZIzlysiL4ORsBYQqvAEhAO4AteJ2tFKEW8vyJ
 iuoLNAlFS0MmcWJzRouHA2geN2XH+Y1la5i090fsg855WCAvi/V4PD9+EewBAX0+
 rmv3qcDJkNzHZGOT0RZkLjmfP+WhpiZ+QYjLN4IHQJd5UgyhFnQU1fODdFqwqDNx
 /LF35POVU1e5oH8h68U5
 =G3d3
 -----END PGP SIGNATURE-----

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
This commit is contained in:
Linus Torvalds 2012-12-13 11:59:27 -08:00
commit dadfab4873
3 changed files with 13 additions and 8 deletions

View File

@ -828,7 +828,6 @@ static void fwnet_receive_broadcast(struct fw_iso_context *context,
{ {
struct fwnet_device *dev; struct fwnet_device *dev;
struct fw_iso_packet packet; struct fw_iso_packet packet;
struct fw_card *card;
__be16 *hdr_ptr; __be16 *hdr_ptr;
__be32 *buf_ptr; __be32 *buf_ptr;
int retval; int retval;
@ -840,7 +839,6 @@ static void fwnet_receive_broadcast(struct fw_iso_context *context,
unsigned long flags; unsigned long flags;
dev = data; dev = data;
card = dev->card;
hdr_ptr = header; hdr_ptr = header;
length = be16_to_cpup(hdr_ptr); 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) { if (specifier_id == IANA_SPECIFIER_ID && ver == RFC2734_SW_VERSION) {
buf_ptr += 2; buf_ptr += 2;
length -= IEEE1394_GASP_HDR_SIZE; length -= IEEE1394_GASP_HDR_SIZE;
fwnet_incoming_packet(dev, buf_ptr, length, fwnet_incoming_packet(dev, buf_ptr, length, source_node_id,
source_node_id, -1, true); context->card->generation, true);
} }
packet.payload_length = dev->rcv_buffer_size; packet.payload_length = dev->rcv_buffer_size;
@ -958,7 +956,12 @@ static void fwnet_transmit_packet_done(struct fwnet_packet_task *ptask)
break; 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) { if (ptask->outstanding_pkts > 1) {
fwnet_make_sf_hdr(&ptask->hdr, RFC2374_HDR_INTFRAG, fwnet_make_sf_hdr(&ptask->hdr, RFC2374_HDR_INTFRAG,
dg_size, fg_off, datagram_label); dg_size, fg_off, datagram_label);
@ -1062,7 +1065,7 @@ static int fwnet_send_packet(struct fwnet_packet_task *ptask)
smp_rmb(); smp_rmb();
node_id = dev->card->node_id; 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(node_id << 16 | IANA_SPECIFIER_ID >> 8, p);
put_unaligned_be32((IANA_SPECIFIER_ID & 0xff) << 24 put_unaligned_be32((IANA_SPECIFIER_ID & 0xff) << 24
| RFC2734_SW_VERSION, &p[4]); | RFC2734_SW_VERSION, &p[4]);

View File

@ -1546,8 +1546,6 @@ static int sbp2_scsi_slave_configure(struct scsi_device *sdev)
struct sbp2_logical_unit *lu = sdev->hostdata; struct sbp2_logical_unit *lu = sdev->hostdata;
sdev->use_10_for_rw = 1; sdev->use_10_for_rw = 1;
sdev->no_report_opcodes = 1;
sdev->no_write_same = 1;
if (sbp2_param_exclusive_login) if (sbp2_param_exclusive_login)
sdev->manage_start_stop = 1; sdev->manage_start_stop = 1;

View File

@ -150,6 +150,8 @@ subaction_create(uint32_t *data, size_t length)
/* we put the ack in the subaction struct for easy access. */ /* we put the ack in the subaction struct for easy access. */
sa = malloc(sizeof *sa - sizeof sa->packet + length); sa = malloc(sizeof *sa - sizeof sa->packet + length);
if (!sa)
exit(EXIT_FAILURE);
sa->ack = data[length / 4 - 1]; sa->ack = data[length / 4 - 1];
sa->length = length; sa->length = length;
memcpy(&sa->packet, data, 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); t = malloc(sizeof *t);
if (!t)
exit(EXIT_FAILURE);
t->request_node = request_node; t->request_node = request_node;
t->response_node = response_node; t->response_node = response_node;
t->tlabel = tlabel; t->tlabel = tlabel;