Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6089a91f authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull SCSI fixes from James Bottomley:
 "Four small fixes: three in drivers and one in the core.

  The core fix is also minor in scope since the bug it fixes is only
  known to affect systems using SCSI reservations. Of the driver bugs,
  the libsas one is the most major because it can lead to multiple disks
  on the same expander not being exposed"

* tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi:
  scsi: core: reset host byte in DID_NEXUS_FAILURE case
  scsi: libsas: Fix rphy phy_identifier for PHYs with end devices attached
  scsi: sd_zbc: Fix sd_zbc_report_zones() buffer allocation
  scsi: libiscsi: Fix race between iscsi_xmit_task and iscsi_complete_task
parents cb268d80 4a067cf8
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -1459,7 +1459,13 @@ static int iscsi_xmit_task(struct iscsi_conn *conn)
	if (test_bit(ISCSI_SUSPEND_BIT, &conn->suspend_tx))
		return -ENODATA;

	spin_lock_bh(&conn->session->back_lock);
	if (conn->task == NULL) {
		spin_unlock_bh(&conn->session->back_lock);
		return -ENODATA;
	}
	__iscsi_get_task(task);
	spin_unlock_bh(&conn->session->back_lock);
	spin_unlock_bh(&conn->session->frwd_lock);
	rc = conn->session->tt->xmit_task(task);
	spin_lock_bh(&conn->session->frwd_lock);
+2 −0
Original line number Diff line number Diff line
@@ -828,6 +828,7 @@ static struct domain_device *sas_ex_discover_end_dev(
		rphy = sas_end_device_alloc(phy->port);
		if (!rphy)
			goto out_free;
		rphy->identify.phy_identifier = phy_id;

		child->rphy = rphy;
		get_device(&rphy->dev);
@@ -854,6 +855,7 @@ static struct domain_device *sas_ex_discover_end_dev(

		child->rphy = rphy;
		get_device(&rphy->dev);
		rphy->identify.phy_identifier = phy_id;
		sas_fill_in_rphy(child, rphy);

		list_add_tail(&child->disco_list_node, &parent->port->disco_list);
+1 −0
Original line number Diff line number Diff line
@@ -655,6 +655,7 @@ static blk_status_t scsi_result_to_blk_status(struct scsi_cmnd *cmd, int result)
		set_host_byte(cmd, DID_OK);
		return BLK_STS_TARGET;
	case DID_NEXUS_FAILURE:
		set_host_byte(cmd, DID_OK);
		return BLK_STS_NEXUS;
	case DID_ALLOC_FAILURE:
		set_host_byte(cmd, DID_OK);
+5 −3
Original line number Diff line number Diff line
@@ -142,10 +142,12 @@ int sd_zbc_report_zones(struct gendisk *disk, sector_t sector,
		return -EOPNOTSUPP;

	/*
	 * Get a reply buffer for the number of requested zones plus a header.
	 * For ATA, buffers must be aligned to 512B.
	 * Get a reply buffer for the number of requested zones plus a header,
	 * without exceeding the device maximum command size. For ATA disks,
	 * buffers must be aligned to 512B.
	 */
	buflen = roundup((nrz + 1) * 64, 512);
	buflen = min(queue_max_hw_sectors(disk->queue) << 9,
		     roundup((nrz + 1) * 64, 512));
	buf = kmalloc(buflen, gfp_mask);
	if (!buf)
		return -ENOMEM;