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

Commit 2c51ae70 authored by Pete Zaitcev's avatar Pete Zaitcev Committed by Greg Kroah-Hartman
Browse files

ub: Fix timeouts



The wodim says:
"close track/session scsi sendcmd: cmd timeout after 5.000 (480) s"
This happened because we ignored the supplied timeout and used 5s.

It's not completely correct to apply a timeout meant for the complete
command to any single URB, but we don't have many URBs per command, so
this is simple and works.

Signed-off-by: default avatarPete Zaitcev <zaitcev@redhat.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent 04304210
Loading
Loading
Loading
Loading
+15 −2
Original line number Diff line number Diff line
@@ -205,6 +205,7 @@ struct ub_scsi_cmd {
	unsigned char key, asc, ascq;	/* May be valid if error==-EIO */

	int stat_count;			/* Retries getting status. */
	unsigned int timeo;		/* jiffies until rq->timeout changes */

	unsigned int len;		/* Requested length */
	unsigned int current_sg;
@@ -764,6 +765,12 @@ static void ub_cmd_build_packet(struct ub_dev *sc, struct ub_lun *lun,
	cmd->cdb_len = rq->cmd_len;

	cmd->len = rq->data_len;

	/*
	 * To reapply this to every URB is not as incorrect as it looks.
	 * In return, we avoid any complicated tracking calculations.
	 */
	cmd->timeo = rq->timeout;
}

static void ub_rw_cmd_done(struct ub_dev *sc, struct ub_scsi_cmd *cmd)
@@ -1336,6 +1343,9 @@ static void ub_data_start(struct ub_dev *sc, struct ub_scsi_cmd *cmd)
		return;
	}

	if (cmd->timeo)
		sc->work_timer.expires = jiffies + cmd->timeo;
	else
		sc->work_timer.expires = jiffies + UB_DATA_TIMEOUT;
	add_timer(&sc->work_timer);

@@ -1376,6 +1386,9 @@ static int __ub_state_stat(struct ub_dev *sc, struct ub_scsi_cmd *cmd)
		return -1;
	}

	if (cmd->timeo)
		sc->work_timer.expires = jiffies + cmd->timeo;
	else
		sc->work_timer.expires = jiffies + UB_STAT_TIMEOUT;
	add_timer(&sc->work_timer);
	return 0;