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:
"Five small fixes. Four in drivers:

- hisi_sas: fix internal queue timeout

- be2iscsi: revert a prior fix causing problems

- bnx2i: add missing dependency

- storvsc: late arriving revert of a problem fix

and one in the core.

The core one is a minor change to stop paying attention to the busy
count when returning out of resources because there's a race window
where the queue might not restart due to missing returning I/O"

* tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi:
Revert "scsi: storvsc: Validate length of incoming packet in storvsc_on_channel_callback()"
scsi: hisi_sas: Select a suitable queue for internal I/Os
scsi: core: Fix race between handling STS_RESOURCE and completion
scsi: be2iscsi: Revert "Fix a theoretical leak in beiscsi_create_eqs()"
scsi: bnx2i: Requires MMU

+15 -9
+2 -2
drivers/scsi/be2iscsi/be_main.c
··· 3020 3020 goto create_eq_error; 3021 3021 } 3022 3022 3023 - mem->dma = paddr; 3024 3023 mem->va = eq_vaddress; 3025 3024 ret = be_fill_queue(eq, phba->params.num_eq_entries, 3026 3025 sizeof(struct be_eq_entry), eq_vaddress); ··· 3029 3030 goto create_eq_error; 3030 3031 } 3031 3032 3033 + mem->dma = paddr; 3032 3034 ret = beiscsi_cmd_eq_create(&phba->ctrl, eq, 3033 3035 BEISCSI_EQ_DELAY_DEF); 3034 3036 if (ret) { ··· 3086 3086 goto create_cq_error; 3087 3087 } 3088 3088 3089 - mem->dma = paddr; 3090 3089 ret = be_fill_queue(cq, phba->params.num_cq_entries, 3091 3090 sizeof(struct sol_cqe), cq_vaddress); 3092 3091 if (ret) { ··· 3095 3096 goto create_cq_error; 3096 3097 } 3097 3098 3099 + mem->dma = paddr; 3098 3100 ret = beiscsi_cmd_cq_create(&phba->ctrl, cq, eq, false, 3099 3101 false, 0); 3100 3102 if (ret) {
+1
drivers/scsi/bnx2i/Kconfig
··· 4 4 depends on NET 5 5 depends on PCI 6 6 depends on (IPV6 || IPV6=n) 7 + depends on MMU 7 8 select SCSI_ISCSI_ATTRS 8 9 select NETDEVICES 9 10 select ETHERNET
+6
drivers/scsi/hisi_sas/hisi_sas_main.c
··· 452 452 blk_tag = blk_mq_unique_tag(scmd->request); 453 453 dq_index = blk_mq_unique_tag_to_hwq(blk_tag); 454 454 *dq_pointer = dq = &hisi_hba->dq[dq_index]; 455 + } else if (hisi_hba->shost->nr_hw_queues) { 456 + struct Scsi_Host *shost = hisi_hba->shost; 457 + struct blk_mq_queue_map *qmap = &shost->tag_set.map[HCTX_TYPE_DEFAULT]; 458 + int queue = qmap->mq_map[raw_smp_processor_id()]; 459 + 460 + *dq_pointer = dq = &hisi_hba->dq[queue]; 455 461 } else { 456 462 *dq_pointer = dq = sas_dev->dq; 457 463 }
+5
drivers/scsi/hisi_sas/hisi_sas_v3_hw.c
··· 2452 2452 rc = -ENOENT; 2453 2453 goto free_irq_vectors; 2454 2454 } 2455 + cq->irq_mask = pci_irq_get_affinity(pdev, i + BASE_VECTORS_V3_HW); 2456 + if (!cq->irq_mask) { 2457 + dev_err(dev, "could not get cq%d irq affinity!\n", i); 2458 + return -ENOENT; 2459 + } 2455 2460 } 2456 2461 2457 2462 return 0;
+1 -2
drivers/scsi/scsi_lib.c
··· 1703 1703 break; 1704 1704 case BLK_STS_RESOURCE: 1705 1705 case BLK_STS_ZONE_RESOURCE: 1706 - if (atomic_read(&sdev->device_busy) || 1707 - scsi_device_blocked(sdev)) 1706 + if (scsi_device_blocked(sdev)) 1708 1707 ret = BLK_STS_DEV_RESOURCE; 1709 1708 break; 1710 1709 default:
-5
drivers/scsi/storvsc_drv.c
··· 1246 1246 request = (struct storvsc_cmd_request *) 1247 1247 ((unsigned long)desc->trans_id); 1248 1248 1249 - if (hv_pkt_datalen(desc) < sizeof(struct vstor_packet) - vmscsi_size_delta) { 1250 - dev_err(&device->device, "Invalid packet len\n"); 1251 - continue; 1252 - } 1253 - 1254 1249 if (request == &stor_device->init_request || 1255 1250 request == &stor_device->reset_request) { 1256 1251 memcpy(&request->vstor_packet, packet,