Skip to content

Commit 6bff9bb

Browse files
committed
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
2 parents 5ee595d + 4da3a54 commit 6bff9bb

File tree

6 files changed

+15
-9
lines changed

6 files changed

+15
-9
lines changed

drivers/scsi/be2iscsi/be_main.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3020,7 +3020,6 @@ static int beiscsi_create_eqs(struct beiscsi_hba *phba,
30203020
goto create_eq_error;
30213021
}
30223022

3023-
mem->dma = paddr;
30243023
mem->va = eq_vaddress;
30253024
ret = be_fill_queue(eq, phba->params.num_eq_entries,
30263025
sizeof(struct be_eq_entry), eq_vaddress);
@@ -3030,6 +3029,7 @@ static int beiscsi_create_eqs(struct beiscsi_hba *phba,
30303029
goto create_eq_error;
30313030
}
30323031

3032+
mem->dma = paddr;
30333033
ret = beiscsi_cmd_eq_create(&phba->ctrl, eq,
30343034
BEISCSI_EQ_DELAY_DEF);
30353035
if (ret) {
@@ -3086,7 +3086,6 @@ static int beiscsi_create_cqs(struct beiscsi_hba *phba,
30863086
goto create_cq_error;
30873087
}
30883088

3089-
mem->dma = paddr;
30903089
ret = be_fill_queue(cq, phba->params.num_cq_entries,
30913090
sizeof(struct sol_cqe), cq_vaddress);
30923091
if (ret) {
@@ -3096,6 +3095,7 @@ static int beiscsi_create_cqs(struct beiscsi_hba *phba,
30963095
goto create_cq_error;
30973096
}
30983097

3098+
mem->dma = paddr;
30993099
ret = beiscsi_cmd_cq_create(&phba->ctrl, cq, eq, false,
31003100
false, 0);
31013101
if (ret) {

drivers/scsi/bnx2i/Kconfig

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ config SCSI_BNX2_ISCSI
44
depends on NET
55
depends on PCI
66
depends on (IPV6 || IPV6=n)
7+
depends on MMU
78
select SCSI_ISCSI_ATTRS
89
select NETDEVICES
910
select ETHERNET

drivers/scsi/hisi_sas/hisi_sas_main.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -452,6 +452,12 @@ static int hisi_sas_task_prep(struct sas_task *task,
452452
blk_tag = blk_mq_unique_tag(scmd->request);
453453
dq_index = blk_mq_unique_tag_to_hwq(blk_tag);
454454
*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];
455461
} else {
456462
*dq_pointer = dq = sas_dev->dq;
457463
}

drivers/scsi/hisi_sas/hisi_sas_v3_hw.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2452,6 +2452,11 @@ static int interrupt_init_v3_hw(struct hisi_hba *hisi_hba)
24522452
rc = -ENOENT;
24532453
goto free_irq_vectors;
24542454
}
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+
}
24552460
}
24562461

24572462
return 0;

drivers/scsi/scsi_lib.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1703,8 +1703,7 @@ static blk_status_t scsi_queue_rq(struct blk_mq_hw_ctx *hctx,
17031703
break;
17041704
case BLK_STS_RESOURCE:
17051705
case BLK_STS_ZONE_RESOURCE:
1706-
if (atomic_read(&sdev->device_busy) ||
1707-
scsi_device_blocked(sdev))
1706+
if (scsi_device_blocked(sdev))
17081707
ret = BLK_STS_DEV_RESOURCE;
17091708
break;
17101709
default:

drivers/scsi/storvsc_drv.c

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1246,11 +1246,6 @@ static void storvsc_on_channel_callback(void *context)
12461246
request = (struct storvsc_cmd_request *)
12471247
((unsigned long)desc->trans_id);
12481248

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-
12541249
if (request == &stor_device->init_request ||
12551250
request == &stor_device->reset_request) {
12561251
memcpy(&request->vstor_packet, packet,

0 commit comments

Comments
 (0)