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

Commit 185dd232 authored by Douglas Gilbert's avatar Douglas Gilbert Committed by Martin K. Petersen
Browse files

scsi_debug: ignore host lock option



Remove logic to optionally hold host_lock while each command is
queued. Keep module and sysfs host_lock parameters for backward
compatibility. Note in module parameter description that host_lock is
ignored.

Signed-off-by: default avatarDouglas Gilbert <dgilbert@interlog.com>
Reviewed-by: default avatarHannes Reinicke <hare@suse.de>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent 773642d9
Loading
Loading
Loading
Loading
+7 −37
Original line number Original line Diff line number Diff line
@@ -4040,7 +4040,7 @@ MODULE_PARM_DESC(dsense, "use descriptor sense format(def=0 -> fixed)");
MODULE_PARM_DESC(every_nth, "timeout every nth command(def=0)");
MODULE_PARM_DESC(every_nth, "timeout every nth command(def=0)");
MODULE_PARM_DESC(fake_rw, "fake reads/writes instead of copying (def=0)");
MODULE_PARM_DESC(fake_rw, "fake reads/writes instead of copying (def=0)");
MODULE_PARM_DESC(guard, "protection checksum: 0=crc, 1=ip (def=0)");
MODULE_PARM_DESC(guard, "protection checksum: 0=crc, 1=ip (def=0)");
MODULE_PARM_DESC(host_lock, "use host_lock around all commands (def=0)");
MODULE_PARM_DESC(host_lock, "host_lock is ignored (def=0)");
MODULE_PARM_DESC(lbpu, "enable LBP, support UNMAP command (def=0)");
MODULE_PARM_DESC(lbpu, "enable LBP, support UNMAP command (def=0)");
MODULE_PARM_DESC(lbpws, "enable LBP, support WRITE SAME(16) with UNMAP bit (def=0)");
MODULE_PARM_DESC(lbpws, "enable LBP, support WRITE SAME(16) with UNMAP bit (def=0)");
MODULE_PARM_DESC(lbpws10, "enable LBP, support WRITE SAME(10) with UNMAP bit (def=0)");
MODULE_PARM_DESC(lbpws10, "enable LBP, support WRITE SAME(10) with UNMAP bit (def=0)");
@@ -4592,30 +4592,15 @@ static ssize_t host_lock_show(struct device_driver *ddp, char *buf)
{
{
	return scnprintf(buf, PAGE_SIZE, "%d\n", !!sdebug_host_lock);
	return scnprintf(buf, PAGE_SIZE, "%d\n", !!sdebug_host_lock);
}
}
/* Returns -EBUSY if host_lock is being changed and commands are queued */
/* N.B. sdebug_host_lock does nothing, kept for backward compatibility */
static ssize_t host_lock_store(struct device_driver *ddp, const char *buf,
static ssize_t host_lock_store(struct device_driver *ddp, const char *buf,
			       size_t count)
			       size_t count)
{
{
	int n, res;
	int n;


	if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
	if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
		bool new_host_lock = (n > 0);
		sdebug_host_lock = (n > 0);

		return count;
		res = count;
		if (new_host_lock != sdebug_host_lock) {
			unsigned long iflags;
			int k;

			spin_lock_irqsave(&queued_arr_lock, iflags);
			k = find_first_bit(queued_in_use_bm,
					   sdebug_max_queue);
			if (k != sdebug_max_queue)
				res = -EBUSY;	/* have queued commands */
			else
				sdebug_host_lock = new_host_lock;
			spin_unlock_irqrestore(&queued_arr_lock, iflags);
		}
		return res;
	}
	}
	return -EINVAL;
	return -EINVAL;
}
}
@@ -5035,7 +5020,7 @@ check_inject(struct scsi_cmnd *scp)
}
}


static int
static int
scsi_debug_queuecommand(struct scsi_cmnd *scp)
scsi_debug_queuecommand(struct Scsi_Host *shost, struct scsi_cmnd *scp)
{
{
	u8 sdeb_i;
	u8 sdeb_i;
	struct scsi_device *sdp = scp->device;
	struct scsi_device *sdp = scp->device;
@@ -5170,21 +5155,6 @@ scsi_debug_queuecommand(struct scsi_cmnd *scp)
	return schedule_resp(scp, devip, check_condition_result, 0);
	return schedule_resp(scp, devip, check_condition_result, 0);
}
}


static int
sdebug_queuecommand_lock_or_not(struct Scsi_Host *shost, struct scsi_cmnd *cmd)
{
	if (sdebug_host_lock) {
		unsigned long iflags;
		int rc;

		spin_lock_irqsave(shost->host_lock, iflags);
		rc = scsi_debug_queuecommand(cmd);
		spin_unlock_irqrestore(shost->host_lock, iflags);
		return rc;
	} else
		return scsi_debug_queuecommand(cmd);
}

static struct scsi_host_template sdebug_driver_template = {
static struct scsi_host_template sdebug_driver_template = {
	.show_info =		scsi_debug_show_info,
	.show_info =		scsi_debug_show_info,
	.write_info =		scsi_debug_write_info,
	.write_info =		scsi_debug_write_info,
@@ -5195,7 +5165,7 @@ static struct scsi_host_template sdebug_driver_template = {
	.slave_configure =	scsi_debug_slave_configure,
	.slave_configure =	scsi_debug_slave_configure,
	.slave_destroy =	scsi_debug_slave_destroy,
	.slave_destroy =	scsi_debug_slave_destroy,
	.ioctl =		scsi_debug_ioctl,
	.ioctl =		scsi_debug_ioctl,
	.queuecommand =		sdebug_queuecommand_lock_or_not,
	.queuecommand =		scsi_debug_queuecommand,
	.change_queue_depth =	sdebug_change_qdepth,
	.change_queue_depth =	sdebug_change_qdepth,
	.eh_abort_handler =	scsi_debug_abort,
	.eh_abort_handler =	scsi_debug_abort,
	.eh_device_reset_handler = scsi_debug_device_reset,
	.eh_device_reset_handler = scsi_debug_device_reset,