Commit 3b6f9793 authored by Linus Torvalds's avatar Linus Torvalds

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

Pull SCSI fixes from James Bottomley:
 "Three small bug fixes: an illegally overlapping memcmp in target code,
  a potential infinite loop in isci under certain rare phy conditions
  and an ATA queue depth (performance) correction for storvsc"

* tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi:
  scsi: target: Fix fortify_panic kernel exception
  scsi: isci: Fix infinite loop in while loop
  scsi: storvsc: Set up correct queue depth values for IDE devices
parents 2d618bdf f5957dad
...@@ -291,7 +291,7 @@ sci_mpc_agent_validate_phy_configuration(struct isci_host *ihost, ...@@ -291,7 +291,7 @@ sci_mpc_agent_validate_phy_configuration(struct isci_host *ihost,
* Note: We have not moved the current phy_index so we will actually * Note: We have not moved the current phy_index so we will actually
* compare the startting phy with itself. * compare the startting phy with itself.
* This is expected and required to add the phy to the port. */ * This is expected and required to add the phy to the port. */
while (phy_index < SCI_MAX_PHYS) { for (; phy_index < SCI_MAX_PHYS; phy_index++) {
if ((phy_mask & (1 << phy_index)) == 0) if ((phy_mask & (1 << phy_index)) == 0)
continue; continue;
sci_phy_get_sas_address(&ihost->phys[phy_index], sci_phy_get_sas_address(&ihost->phys[phy_index],
...@@ -311,7 +311,6 @@ sci_mpc_agent_validate_phy_configuration(struct isci_host *ihost, ...@@ -311,7 +311,6 @@ sci_mpc_agent_validate_phy_configuration(struct isci_host *ihost,
&ihost->phys[phy_index]); &ihost->phys[phy_index]);
assigned_phy_mask |= (1 << phy_index); assigned_phy_mask |= (1 << phy_index);
phy_index++;
} }
} }
......
...@@ -1722,11 +1722,14 @@ static int storvsc_probe(struct hv_device *device, ...@@ -1722,11 +1722,14 @@ static int storvsc_probe(struct hv_device *device,
max_targets = STORVSC_MAX_TARGETS; max_targets = STORVSC_MAX_TARGETS;
max_channels = STORVSC_MAX_CHANNELS; max_channels = STORVSC_MAX_CHANNELS;
/* /*
* On Windows8 and above, we support sub-channels for storage. * On Windows8 and above, we support sub-channels for storage
* on SCSI and FC controllers.
* The number of sub-channels offerred is based on the number of * The number of sub-channels offerred is based on the number of
* VCPUs in the guest. * VCPUs in the guest.
*/ */
max_sub_channels = (num_cpus / storvsc_vcpus_per_sub_channel); if (!dev_is_ide)
max_sub_channels =
(num_cpus - 1) / storvsc_vcpus_per_sub_channel;
} }
scsi_driver.can_queue = (max_outstanding_req_per_channel * scsi_driver.can_queue = (max_outstanding_req_per_channel *
......
...@@ -427,8 +427,8 @@ iblock_execute_zero_out(struct block_device *bdev, struct se_cmd *cmd) ...@@ -427,8 +427,8 @@ iblock_execute_zero_out(struct block_device *bdev, struct se_cmd *cmd)
{ {
struct se_device *dev = cmd->se_dev; struct se_device *dev = cmd->se_dev;
struct scatterlist *sg = &cmd->t_data_sg[0]; struct scatterlist *sg = &cmd->t_data_sg[0];
unsigned char *buf, zero = 0x00, *p = &zero; unsigned char *buf, *not_zero;
int rc, ret; int ret;
buf = kmap(sg_page(sg)) + sg->offset; buf = kmap(sg_page(sg)) + sg->offset;
if (!buf) if (!buf)
...@@ -437,10 +437,10 @@ iblock_execute_zero_out(struct block_device *bdev, struct se_cmd *cmd) ...@@ -437,10 +437,10 @@ iblock_execute_zero_out(struct block_device *bdev, struct se_cmd *cmd)
* Fall back to block_execute_write_same() slow-path if * Fall back to block_execute_write_same() slow-path if
* incoming WRITE_SAME payload does not contain zeros. * incoming WRITE_SAME payload does not contain zeros.
*/ */
rc = memcmp(buf, p, cmd->data_length); not_zero = memchr_inv(buf, 0x00, cmd->data_length);
kunmap(sg_page(sg)); kunmap(sg_page(sg));
if (rc) if (not_zero)
return TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE; return TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE;
ret = blkdev_issue_zeroout(bdev, ret = blkdev_issue_zeroout(bdev,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment