Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi

Pull SCSI fixes from James Bottomley:
"Ten small fixes, all in drivers"

* tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi:
scsi: target: qla2xxx: Wait for stop_phase1 at WWN removal
scsi: hisi_sas: Drop free_irq() of devm_request_irq() allocated irq
scsi: vmw_pvscsi: Set correct residual data length
scsi: bnx2fc: Return failure if io_req is already in ABTS processing
scsi: aic7xxx: Remove multiple definition of globals
scsi: aic7xxx: Restore several defines for aic7xxx firmware build
scsi: target: iblock: Fix smp_processor_id() BUG messages
scsi: libsas: Use _safe() loop in sas_resume_port()
scsi: target: tcmu: Fix xarray RCU warning
scsi: target: core: Avoid smp_processor_id() in preemptible code

+38 -17
-1
drivers/scsi/aic7xxx/aicasm/aicasm_gram.y
··· 58 58 #include "aicasm_symbol.h" 59 59 #include "aicasm_insformat.h" 60 60 61 - int yylineno; 62 61 char *yyfilename; 63 62 char stock_prefix[] = "aic_"; 64 63 char *prefix = stock_prefix;
+1 -1
drivers/scsi/aic7xxx/aicasm/aicasm_symbol.h
··· 108 108 regex_t arg_regex; 109 109 char *replacement_text; 110 110 }; 111 - STAILQ_HEAD(macro_arg_list, macro_arg) args; 111 + STAILQ_HEAD(macro_arg_list, macro_arg); 112 112 113 113 struct macro_info { 114 114 struct macro_arg_list args;
+11
drivers/scsi/aic7xxx/scsi_message.h
··· 3 3 * $FreeBSD: src/sys/cam/scsi/scsi_message.h,v 1.2 2000/05/01 20:21:29 peter Exp $ 4 4 */ 5 5 6 + /* Messages (1 byte) */ /* I/T (M)andatory or (O)ptional */ 7 + #define MSG_SAVEDATAPOINTER 0x02 /* O/O */ 8 + #define MSG_RESTOREPOINTERS 0x03 /* O/O */ 9 + #define MSG_DISCONNECT 0x04 /* O/O */ 10 + #define MSG_MESSAGE_REJECT 0x07 /* M/M */ 11 + #define MSG_NOOP 0x08 /* M/M */ 12 + 13 + /* Messages (2 byte) */ 14 + #define MSG_SIMPLE_Q_TAG 0x20 /* O/O */ 15 + #define MSG_IGN_WIDE_RESIDUE 0x23 /* O/O */ 16 + 6 17 /* Identify message */ /* M/M */ 7 18 #define MSG_IDENTIFYFLAG 0x80 8 19 #define MSG_IDENTIFY_DISCFLAG 0x40
+1
drivers/scsi/bnx2fc/bnx2fc_io.c
··· 1220 1220 was a result from the ABTS request rather than the CLEANUP 1221 1221 request */ 1222 1222 set_bit(BNX2FC_FLAG_IO_CLEANUP, &io_req->req_flags); 1223 + rc = FAILED; 1223 1224 goto done; 1224 1225 } 1225 1226
+4 -4
drivers/scsi/hisi_sas/hisi_sas_v3_hw.c
··· 4811 4811 { 4812 4812 int i; 4813 4813 4814 - free_irq(pci_irq_vector(pdev, 1), hisi_hba); 4815 - free_irq(pci_irq_vector(pdev, 2), hisi_hba); 4816 - free_irq(pci_irq_vector(pdev, 11), hisi_hba); 4814 + devm_free_irq(&pdev->dev, pci_irq_vector(pdev, 1), hisi_hba); 4815 + devm_free_irq(&pdev->dev, pci_irq_vector(pdev, 2), hisi_hba); 4816 + devm_free_irq(&pdev->dev, pci_irq_vector(pdev, 11), hisi_hba); 4817 4817 for (i = 0; i < hisi_hba->cq_nvecs; i++) { 4818 4818 struct hisi_sas_cq *cq = &hisi_hba->cq[i]; 4819 4819 int nr = hisi_sas_intr_conv ? 16 : 16 + i; 4820 4820 4821 - free_irq(pci_irq_vector(pdev, nr), cq); 4821 + devm_free_irq(&pdev->dev, pci_irq_vector(pdev, nr), cq); 4822 4822 } 4823 4823 pci_free_irq_vectors(pdev); 4824 4824 }
+2 -2
drivers/scsi/libsas/sas_port.c
··· 25 25 26 26 static void sas_resume_port(struct asd_sas_phy *phy) 27 27 { 28 - struct domain_device *dev; 28 + struct domain_device *dev, *n; 29 29 struct asd_sas_port *port = phy->port; 30 30 struct sas_ha_struct *sas_ha = phy->ha; 31 31 struct sas_internal *si = to_sas_internal(sas_ha->core.shost->transportt); ··· 44 44 * 1/ presume every device came back 45 45 * 2/ force the next revalidation to check all expander phys 46 46 */ 47 - list_for_each_entry(dev, &port->dev_list, dev_list_node) { 47 + list_for_each_entry_safe(dev, n, &port->dev_list, dev_list_node) { 48 48 int i, rc; 49 49 50 50 rc = sas_notify_lldd_dev_found(dev);
+2
drivers/scsi/qla2xxx/qla_target.c
··· 1563 1563 return; 1564 1564 } 1565 1565 1566 + mutex_lock(&tgt->ha->optrom_mutex); 1566 1567 mutex_lock(&vha->vha_tgt.tgt_mutex); 1567 1568 tgt->tgt_stop = 0; 1568 1569 tgt->tgt_stopped = 1; 1569 1570 mutex_unlock(&vha->vha_tgt.tgt_mutex); 1571 + mutex_unlock(&tgt->ha->optrom_mutex); 1570 1572 1571 1573 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf00c, "Stop of tgt %p finished\n", 1572 1574 tgt);
+7 -1
drivers/scsi/vmw_pvscsi.c
··· 585 585 case BTSTAT_SUCCESS: 586 586 case BTSTAT_LINKED_COMMAND_COMPLETED: 587 587 case BTSTAT_LINKED_COMMAND_COMPLETED_WITH_FLAG: 588 - /* If everything went fine, let's move on.. */ 588 + /* 589 + * Commands like INQUIRY may transfer less data than 590 + * requested by the initiator via bufflen. Set residual 591 + * count to make upper layer aware of the actual amount 592 + * of data returned. 593 + */ 594 + scsi_set_resid(cmd, scsi_bufflen(cmd) - e->dataLen); 589 595 cmd->result = (DID_OK << 16); 590 596 break; 591 597
+2 -2
drivers/target/target_core_iblock.c
··· 204 204 struct iblock_dev_plug *ib_dev_plug; 205 205 206 206 /* 207 - * Each se_device has a per cpu work this can be run from. Wwe 207 + * Each se_device has a per cpu work this can be run from. We 208 208 * shouldn't have multiple threads on the same cpu calling this 209 209 * at the same time. 210 210 */ 211 - ib_dev_plug = &ib_dev->ibd_plug[smp_processor_id()]; 211 + ib_dev_plug = &ib_dev->ibd_plug[raw_smp_processor_id()]; 212 212 if (test_and_set_bit(IBD_PLUGF_PLUGGED, &ib_dev_plug->flags)) 213 213 return NULL; 214 214
+1 -1
drivers/target/target_core_transport.c
··· 1416 1416 cmd->orig_fe_lun = unpacked_lun; 1417 1417 1418 1418 if (!(cmd->se_cmd_flags & SCF_USE_CPUID)) 1419 - cmd->cpuid = smp_processor_id(); 1419 + cmd->cpuid = raw_smp_processor_id(); 1420 1420 1421 1421 cmd->state_active = false; 1422 1422 }
+7 -5
drivers/target/target_core_user.c
··· 516 516 dpi = dbi * udev->data_pages_per_blk; 517 517 /* Count the number of already allocated pages */ 518 518 xas_set(&xas, dpi); 519 + rcu_read_lock(); 519 520 for (cnt = 0; xas_next(&xas) && cnt < page_cnt;) 520 521 cnt++; 522 + rcu_read_unlock(); 521 523 522 524 for (i = cnt; i < page_cnt; i++) { 523 525 /* try to get new page from the mm */ ··· 701 699 struct scatterlist *sg, unsigned int sg_nents, 702 700 struct iovec **iov, size_t data_len) 703 701 { 704 - XA_STATE(xas, &udev->data_pages, 0); 705 702 /* start value of dbi + 1 must not be a valid dbi */ 706 703 int dbi = -2; 707 704 size_t page_remaining, cp_len; 708 - int page_cnt, page_inx; 705 + int page_cnt, page_inx, dpi; 709 706 struct sg_mapping_iter sg_iter; 710 707 unsigned int sg_flags; 711 708 struct page *page; ··· 727 726 if (page_cnt > udev->data_pages_per_blk) 728 727 page_cnt = udev->data_pages_per_blk; 729 728 730 - xas_set(&xas, dbi * udev->data_pages_per_blk); 731 - for (page_inx = 0; page_inx < page_cnt && data_len; page_inx++) { 732 - page = xas_next(&xas); 729 + dpi = dbi * udev->data_pages_per_blk; 730 + for (page_inx = 0; page_inx < page_cnt && data_len; 731 + page_inx++, dpi++) { 732 + page = xa_load(&udev->data_pages, dpi); 733 733 734 734 if (direction == TCMU_DATA_AREA_TO_SG) 735 735 flush_dcache_page(page);