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

Commit 471a5a60 authored by Manoj Kumar's avatar Manoj Kumar Committed by James Bottomley
Browse files

cxlflash: Fix read capacity timeout



The timeout value for read capacity is too small. Certain devices
may take longer to respond and thus the command may prematurely
timeout. Additionally the literal used for the timeout is stale.

Update the timeout to 30 seconds (matches the value used in sd.c)
and rework the timeout literal to a more appropriate description.

Signed-off-by: default avatarMatthew R. Ochs <mrochs@linux.vnet.ibm.com>
Signed-off-by: default avatarManoj N. Kumar <manoj@linux.vnet.ibm.com>
Reviewed-by: default avatarBrian King <brking@linux.vnet.ibm.com>
Reviewed-by: default avatarTomas Henzl <thenzl@redhat.com>
Signed-off-by: default avatarJames Bottomley <JBottomley@Odin.com>
parent 3ebf2030
Loading
Loading
Loading
Loading
+4 −5
Original line number Diff line number Diff line
@@ -296,7 +296,7 @@ static int read_cap16(struct scsi_device *sdev, struct llun_info *lli)
	int rc = 0;
	int result = 0;
	int retry_cnt = 0;
	u32 tout = (MC_DISCOVERY_TIMEOUT * HZ);
	u32 to = CMD_TIMEOUT * HZ;

retry:
	cmd_buf = kzalloc(CMD_BUFSIZE, GFP_KERNEL);
@@ -315,8 +315,7 @@ static int read_cap16(struct scsi_device *sdev, struct llun_info *lli)
		retry_cnt ? "re" : "", scsi_cmd[0]);

	result = scsi_execute(sdev, scsi_cmd, DMA_FROM_DEVICE, cmd_buf,
			      CMD_BUFSIZE, sense_buf, tout, CMD_RETRIES,
			      0, NULL);
			      CMD_BUFSIZE, sense_buf, to, CMD_RETRIES, 0, NULL);

	if (driver_byte(result) == DRIVER_SENSE) {
		result &= ~(0xFF<<24); /* DRIVER_SENSE is not an error */
@@ -1376,8 +1375,8 @@ static int cxlflash_disk_attach(struct scsi_device *sdev,
	attach->block_size = gli->blk_len;
	attach->mmio_size = sizeof(afu->afu_map->hosts[0].harea);
	attach->last_lba = gli->max_lba;
	attach->max_xfer = (sdev->host->max_sectors * MAX_SECTOR_UNIT) /
		gli->blk_len;
	attach->max_xfer = sdev->host->max_sectors * MAX_SECTOR_UNIT;
	attach->max_xfer /= gli->blk_len;

out:
	attach->adap_fd = fd;
+1 −1
Original line number Diff line number Diff line
@@ -28,7 +28,7 @@ extern struct cxlflash_global global;
*/
#define MC_CHUNK_SIZE     (1 << MC_RHT_NMASK)	/* in LBAs */

#define MC_DISCOVERY_TIMEOUT 5  /* 5 secs */
#define CMD_TIMEOUT 30  /* 30 secs */
#define CMD_RETRIES 5   /* 5 retries for scsi_execute */

#define MAX_SECTOR_UNIT  512 /* max_sector is in 512 byte multiples */
+2 −2
Original line number Diff line number Diff line
@@ -414,7 +414,7 @@ static int write_same16(struct scsi_device *sdev,
	int ws_limit = SISLITE_MAX_WS_BLOCKS;
	u64 offset = lba;
	int left = nblks;
	u32 tout = sdev->request_queue->rq_timeout;
	u32 to = sdev->request_queue->rq_timeout;
	struct cxlflash_cfg *cfg = (struct cxlflash_cfg *)sdev->host->hostdata;
	struct device *dev = &cfg->dev->dev;

@@ -434,7 +434,7 @@ static int write_same16(struct scsi_device *sdev,
				   &scsi_cmd[10]);

		result = scsi_execute(sdev, scsi_cmd, DMA_TO_DEVICE, cmd_buf,
				      CMD_BUFSIZE, sense_buf, tout, CMD_RETRIES,
				      CMD_BUFSIZE, sense_buf, to, CMD_RETRIES,
				      0, NULL);
		if (result) {
			dev_err_ratelimited(dev, "%s: command failed for "