On 4/22/26 8:15 AM, Hannes Reinecke wrote: > On 4/18/26 00:57, Mike Christie wrote: >> For virtio-scsi, we export a wide variety of non-scsi devices like >> NVMe (local and RDMA/TCP based) drives and block based devices using >> ublk. And then it's common to have multiple high perf devices im a LVM >> volume. The problem for these setups, is we can easily hit the 4096 >> scsi_device queue depth limit so we end up throttling IO in the guest >> when the real device can handle more IO. >> >> In these situations we don't have a device wide limit that maps to >> cmd_per_lun. We have per hw queue limits or on the host we are doing >> more dynamic throttling. To allow for these types of devices, this >> patch allows drivers to set SCSI_UNLIMITED_CMD_PER_LUN for the >> cmd_per_lun. When set, we will then only be limited by the per hw >> queue limits. >> >> Signed-off-by: Mike Christie <[email protected]> >> --- >> drivers/scsi/hosts.c | 5 +++-- >> drivers/scsi/scsi_scan.c | 25 ++++++++++++++----------- >> include/scsi/scsi_host.h | 4 ++++ >> 3 files changed, 21 insertions(+), 13 deletions(-) >> >> diff --git a/drivers/scsi/hosts.c b/drivers/scsi/hosts.c >> index e047747d4ecf..c93c59e847c5 100644 >> --- a/drivers/scsi/hosts.c >> +++ b/drivers/scsi/hosts.c >> @@ -238,8 +238,9 @@ int scsi_add_host_with_dma(struct Scsi_Host *shost, >> struct device *dev, >> } >> /* Use min_t(int, ...) in case shost->can_queue exceeds SHRT_MAX */ >> - shost->cmd_per_lun = min_t(int, shost->cmd_per_lun, >> - shost->can_queue); >> + if (shost->cmd_per_lun != SCSI_UNLIMITED_CMD_PER_LUN) >> + shost->cmd_per_lun = min_t(int, shost->cmd_per_lun, >> + shost->can_queue); >> error = scsi_init_sense_cache(shost); >> if (error) >> diff --git a/drivers/scsi/scsi_scan.c b/drivers/scsi/scsi_scan.c >> index 7b11bc7de0e3..ecc3638c1909 100644 >> --- a/drivers/scsi/scsi_scan.c >> +++ b/drivers/scsi/scsi_scan.c >> @@ -352,18 +352,20 @@ static struct scsi_device *scsi_alloc_sdev(struct >> scsi_target *starget, >> if (scsi_device_is_pseudo_dev(sdev)) >> return sdev; >> - depth = sdev->host->cmd_per_lun ?: 1; >> + if (sdev->host->cmd_per_lun != SCSI_UNLIMITED_CMD_PER_LUN) { >> + depth = sdev->host->cmd_per_lun ?: 1; >> > Why don't we use a simple flag in the host (or host template) to > indicate that cmd_per_lun should be ignored?
That's fine with me. I don't need it per scsi_device, but had thought someone might. We can always change it later to a scsi_device flag if it comes up. > I'm not in favour of using magic values for a setting which > otherwise is a limit. > Look to dev_loss_tmo as a bad example ... > > Cheers, > > Hannes

