diff options
| -rw-r--r-- | MAINTAINERS | 9 | ||||
| -rw-r--r-- | drivers/scsi/be2iscsi/be_main.c | 2 | ||||
| -rw-r--r-- | drivers/scsi/be2iscsi/be_mgmt.c | 4 | ||||
| -rw-r--r-- | drivers/scsi/bnx2fc/bnx2fc_fcoe.c | 16 | ||||
| -rw-r--r-- | drivers/scsi/bnx2fc/bnx2fc_io.c | 2 | ||||
| -rw-r--r-- | drivers/scsi/ibmvscsi/ibmvscsi.c | 13 | ||||
| -rw-r--r-- | drivers/scsi/pm8001/pm8001_init.c | 13 | ||||
| -rw-r--r-- | drivers/scsi/qla2xxx/qla_target.c | 17 | ||||
| -rw-r--r-- | drivers/scsi/qla2xxx/qla_target.h | 4 | ||||
| -rw-r--r-- | drivers/scsi/scsi_error.c | 20 | ||||
| -rw-r--r-- | drivers/scsi/scsi_transport_fc.c | 1 | ||||
| -rw-r--r-- | drivers/scsi/virtio_scsi.c | 26 | ||||
| -rw-r--r-- | include/scsi/scsi_cmnd.h | 2 |
13 files changed, 86 insertions, 43 deletions
diff --git a/MAINTAINERS b/MAINTAINERS index 56b013a1309a..6813d0aa5ecf 100644 --- a/MAINTAINERS +++ b/MAINTAINERS | |||
| @@ -5530,10 +5530,11 @@ S: Maintained | |||
| 5530 | F: arch/arm/mach-lpc32xx/ | 5530 | F: arch/arm/mach-lpc32xx/ |
| 5531 | 5531 | ||
| 5532 | LSILOGIC MPT FUSION DRIVERS (FC/SAS/SPI) | 5532 | LSILOGIC MPT FUSION DRIVERS (FC/SAS/SPI) |
| 5533 | M: Nagalakshmi Nandigama <Nagalakshmi.Nandigama@lsi.com> | 5533 | M: Nagalakshmi Nandigama <nagalakshmi.nandigama@avagotech.com> |
| 5534 | M: Sreekanth Reddy <Sreekanth.Reddy@lsi.com> | 5534 | M: Praveen Krishnamoorthy <praveen.krishnamoorthy@avagotech.com> |
| 5535 | M: support@lsi.com | 5535 | M: Sreekanth Reddy <sreekanth.reddy@avagotech.com> |
| 5536 | L: DL-MPTFusionLinux@lsi.com | 5536 | M: Abhijit Mahajan <abhijit.mahajan@avagotech.com> |
| 5537 | L: MPT-FusionLinux.pdl@avagotech.com | ||
| 5537 | L: linux-scsi@vger.kernel.org | 5538 | L: linux-scsi@vger.kernel.org |
| 5538 | W: http://www.lsilogic.com/support | 5539 | W: http://www.lsilogic.com/support |
| 5539 | S: Supported | 5540 | S: Supported |
diff --git a/drivers/scsi/be2iscsi/be_main.c b/drivers/scsi/be2iscsi/be_main.c index 554349029628..56467df3d6de 100644 --- a/drivers/scsi/be2iscsi/be_main.c +++ b/drivers/scsi/be2iscsi/be_main.c | |||
| @@ -4198,6 +4198,8 @@ static int hba_setup_cid_tbls(struct beiscsi_hba *phba) | |||
| 4198 | kfree(phba->ep_array); | 4198 | kfree(phba->ep_array); |
| 4199 | phba->ep_array = NULL; | 4199 | phba->ep_array = NULL; |
| 4200 | ret = -ENOMEM; | 4200 | ret = -ENOMEM; |
| 4201 | |||
| 4202 | goto free_memory; | ||
| 4201 | } | 4203 | } |
| 4202 | 4204 | ||
| 4203 | for (i = 0; i < phba->params.cxns_per_ctrl; i++) { | 4205 | for (i = 0; i < phba->params.cxns_per_ctrl; i++) { |
diff --git a/drivers/scsi/be2iscsi/be_mgmt.c b/drivers/scsi/be2iscsi/be_mgmt.c index 6045aa78986a..07934b0b9ee1 100644 --- a/drivers/scsi/be2iscsi/be_mgmt.c +++ b/drivers/scsi/be2iscsi/be_mgmt.c | |||
| @@ -1008,10 +1008,8 @@ int mgmt_set_ip(struct beiscsi_hba *phba, | |||
| 1008 | BE2_IPV6 : BE2_IPV4 ; | 1008 | BE2_IPV6 : BE2_IPV4 ; |
| 1009 | 1009 | ||
| 1010 | rc = mgmt_get_if_info(phba, ip_type, &if_info); | 1010 | rc = mgmt_get_if_info(phba, ip_type, &if_info); |
| 1011 | if (rc) { | 1011 | if (rc) |
| 1012 | kfree(if_info); | ||
| 1013 | return rc; | 1012 | return rc; |
| 1014 | } | ||
| 1015 | 1013 | ||
| 1016 | if (boot_proto == ISCSI_BOOTPROTO_DHCP) { | 1014 | if (boot_proto == ISCSI_BOOTPROTO_DHCP) { |
| 1017 | if (if_info->dhcp_state) { | 1015 | if (if_info->dhcp_state) { |
diff --git a/drivers/scsi/bnx2fc/bnx2fc_fcoe.c b/drivers/scsi/bnx2fc/bnx2fc_fcoe.c index f54843023466..785d0d71781e 100644 --- a/drivers/scsi/bnx2fc/bnx2fc_fcoe.c +++ b/drivers/scsi/bnx2fc/bnx2fc_fcoe.c | |||
| @@ -516,23 +516,17 @@ static void bnx2fc_recv_frame(struct sk_buff *skb) | |||
| 516 | skb_pull(skb, sizeof(struct fcoe_hdr)); | 516 | skb_pull(skb, sizeof(struct fcoe_hdr)); |
| 517 | fr_len = skb->len - sizeof(struct fcoe_crc_eof); | 517 | fr_len = skb->len - sizeof(struct fcoe_crc_eof); |
| 518 | 518 | ||
| 519 | stats = per_cpu_ptr(lport->stats, get_cpu()); | ||
| 520 | stats->RxFrames++; | ||
| 521 | stats->RxWords += fr_len / FCOE_WORD_TO_BYTE; | ||
| 522 | |||
| 523 | fp = (struct fc_frame *)skb; | 519 | fp = (struct fc_frame *)skb; |
| 524 | fc_frame_init(fp); | 520 | fc_frame_init(fp); |
| 525 | fr_dev(fp) = lport; | 521 | fr_dev(fp) = lport; |
| 526 | fr_sof(fp) = hp->fcoe_sof; | 522 | fr_sof(fp) = hp->fcoe_sof; |
| 527 | if (skb_copy_bits(skb, fr_len, &crc_eof, sizeof(crc_eof))) { | 523 | if (skb_copy_bits(skb, fr_len, &crc_eof, sizeof(crc_eof))) { |
| 528 | put_cpu(); | ||
| 529 | kfree_skb(skb); | 524 | kfree_skb(skb); |
| 530 | return; | 525 | return; |
| 531 | } | 526 | } |
| 532 | fr_eof(fp) = crc_eof.fcoe_eof; | 527 | fr_eof(fp) = crc_eof.fcoe_eof; |
| 533 | fr_crc(fp) = crc_eof.fcoe_crc32; | 528 | fr_crc(fp) = crc_eof.fcoe_crc32; |
| 534 | if (pskb_trim(skb, fr_len)) { | 529 | if (pskb_trim(skb, fr_len)) { |
| 535 | put_cpu(); | ||
| 536 | kfree_skb(skb); | 530 | kfree_skb(skb); |
| 537 | return; | 531 | return; |
| 538 | } | 532 | } |
| @@ -544,7 +538,6 @@ static void bnx2fc_recv_frame(struct sk_buff *skb) | |||
| 544 | port = lport_priv(vn_port); | 538 | port = lport_priv(vn_port); |
| 545 | if (!ether_addr_equal(port->data_src_addr, dest_mac)) { | 539 | if (!ether_addr_equal(port->data_src_addr, dest_mac)) { |
| 546 | BNX2FC_HBA_DBG(lport, "fpma mismatch\n"); | 540 | BNX2FC_HBA_DBG(lport, "fpma mismatch\n"); |
| 547 | put_cpu(); | ||
| 548 | kfree_skb(skb); | 541 | kfree_skb(skb); |
| 549 | return; | 542 | return; |
| 550 | } | 543 | } |
| @@ -552,7 +545,6 @@ static void bnx2fc_recv_frame(struct sk_buff *skb) | |||
| 552 | if (fh->fh_r_ctl == FC_RCTL_DD_SOL_DATA && | 545 | if (fh->fh_r_ctl == FC_RCTL_DD_SOL_DATA && |
| 553 | fh->fh_type == FC_TYPE_FCP) { | 546 | fh->fh_type == FC_TYPE_FCP) { |
| 554 | /* Drop FCP data. We dont this in L2 path */ | 547 | /* Drop FCP data. We dont this in L2 path */ |
| 555 | put_cpu(); | ||
| 556 | kfree_skb(skb); | 548 | kfree_skb(skb); |
| 557 | return; | 549 | return; |
| 558 | } | 550 | } |
| @@ -562,7 +554,6 @@ static void bnx2fc_recv_frame(struct sk_buff *skb) | |||
| 562 | case ELS_LOGO: | 554 | case ELS_LOGO: |
| 563 | if (ntoh24(fh->fh_s_id) == FC_FID_FLOGI) { | 555 | if (ntoh24(fh->fh_s_id) == FC_FID_FLOGI) { |
| 564 | /* drop non-FIP LOGO */ | 556 | /* drop non-FIP LOGO */ |
| 565 | put_cpu(); | ||
| 566 | kfree_skb(skb); | 557 | kfree_skb(skb); |
| 567 | return; | 558 | return; |
| 568 | } | 559 | } |
| @@ -572,22 +563,23 @@ static void bnx2fc_recv_frame(struct sk_buff *skb) | |||
| 572 | 563 | ||
| 573 | if (fh->fh_r_ctl == FC_RCTL_BA_ABTS) { | 564 | if (fh->fh_r_ctl == FC_RCTL_BA_ABTS) { |
| 574 | /* Drop incoming ABTS */ | 565 | /* Drop incoming ABTS */ |
| 575 | put_cpu(); | ||
| 576 | kfree_skb(skb); | 566 | kfree_skb(skb); |
| 577 | return; | 567 | return; |
| 578 | } | 568 | } |
| 579 | 569 | ||
| 570 | stats = per_cpu_ptr(lport->stats, smp_processor_id()); | ||
| 571 | stats->RxFrames++; | ||
| 572 | stats->RxWords += fr_len / FCOE_WORD_TO_BYTE; | ||
| 573 | |||
| 580 | if (le32_to_cpu(fr_crc(fp)) != | 574 | if (le32_to_cpu(fr_crc(fp)) != |
| 581 | ~crc32(~0, skb->data, fr_len)) { | 575 | ~crc32(~0, skb->data, fr_len)) { |
| 582 | if (stats->InvalidCRCCount < 5) | 576 | if (stats->InvalidCRCCount < 5) |
| 583 | printk(KERN_WARNING PFX "dropping frame with " | 577 | printk(KERN_WARNING PFX "dropping frame with " |
| 584 | "CRC error\n"); | 578 | "CRC error\n"); |
| 585 | stats->InvalidCRCCount++; | 579 | stats->InvalidCRCCount++; |
| 586 | put_cpu(); | ||
| 587 | kfree_skb(skb); | 580 | kfree_skb(skb); |
| 588 | return; | 581 | return; |
| 589 | } | 582 | } |
| 590 | put_cpu(); | ||
| 591 | fc_exch_recv(lport, fp); | 583 | fc_exch_recv(lport, fp); |
| 592 | } | 584 | } |
| 593 | 585 | ||
diff --git a/drivers/scsi/bnx2fc/bnx2fc_io.c b/drivers/scsi/bnx2fc/bnx2fc_io.c index 32a5e0a2a669..7bc47fc7c686 100644 --- a/drivers/scsi/bnx2fc/bnx2fc_io.c +++ b/drivers/scsi/bnx2fc/bnx2fc_io.c | |||
| @@ -282,6 +282,8 @@ struct bnx2fc_cmd_mgr *bnx2fc_cmd_mgr_alloc(struct bnx2fc_hba *hba) | |||
| 282 | arr_sz, GFP_KERNEL); | 282 | arr_sz, GFP_KERNEL); |
| 283 | if (!cmgr->free_list_lock) { | 283 | if (!cmgr->free_list_lock) { |
| 284 | printk(KERN_ERR PFX "failed to alloc free_list_lock\n"); | 284 | printk(KERN_ERR PFX "failed to alloc free_list_lock\n"); |
| 285 | kfree(cmgr->free_list); | ||
| 286 | cmgr->free_list = NULL; | ||
| 285 | goto mem_err; | 287 | goto mem_err; |
| 286 | } | 288 | } |
| 287 | 289 | ||
diff --git a/drivers/scsi/ibmvscsi/ibmvscsi.c b/drivers/scsi/ibmvscsi/ibmvscsi.c index 2ebfb2bb0f42..7b23f21f22f1 100644 --- a/drivers/scsi/ibmvscsi/ibmvscsi.c +++ b/drivers/scsi/ibmvscsi/ibmvscsi.c | |||
| @@ -185,6 +185,11 @@ static struct viosrp_crq *crq_queue_next_crq(struct crq_queue *queue) | |||
| 185 | if (crq->valid & 0x80) { | 185 | if (crq->valid & 0x80) { |
| 186 | if (++queue->cur == queue->size) | 186 | if (++queue->cur == queue->size) |
| 187 | queue->cur = 0; | 187 | queue->cur = 0; |
| 188 | |||
| 189 | /* Ensure the read of the valid bit occurs before reading any | ||
