scsi: scsi_debug: skip long delays when ndelay small
authorDouglas Gilbert <dgilbert@interlog.com>
Thu, 12 Jul 2018 17:35:42 +0000 (13:35 -0400)
committerMartin K. Petersen <martin.petersen@oracle.com>
Fri, 13 Jul 2018 03:01:16 +0000 (23:01 -0400)
A test program's runtime became impractically long since any non zero
ndelay (e.g. 1 nanosec) caused Start Stop Unit to delay over 8 magnitudes
greater than other commands. This patch skips long delays (on Start Stop
Unit and Synchronize Cache) if ndelay is less than or equal to 10
microsecs.

Signed-off-by: Douglas Gilbert <dgilbert@interlog.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/scsi_debug.c

index 24d7496cd9e23cfc2a97126fc22b5f4c25a253b0..4dda192b8fba042aafa3167a4132d2c0bce2d0ef 100644 (file)
@@ -5790,11 +5790,13 @@ static int scsi_debug_queuecommand(struct Scsi_Host *shost,
 fini:
        if (F_DELAY_OVERR & flags)
                return schedule_resp(scp, devip, errsts, pfp, 0, 0);
-       else if ((sdebug_jdelay || sdebug_ndelay) && (flags & F_LONG_DELAY)) {
+       else if ((flags & F_LONG_DELAY) && (sdebug_jdelay > 0 ||
+                                           sdebug_ndelay > 10000)) {
                /*
-                * If any delay is active, for F_SSU_DELAY want at least 1
-                * second and if sdebug_jdelay>0 want a long delay of that
-                * many seconds; for F_SYNC_DELAY want 1/20 of that.
+                * Skip long delays if ndelay <= 10 microseconds. Otherwise
+                * for Start Stop Unit (SSU) want at least 1 second delay and
+                * if sdebug_jdelay>1 want a long delay of that many seconds.
+                * For Synchronize Cache want 1/20 of SSU's delay.
                 */
                int jdelay = (sdebug_jdelay < 2) ? 1 : sdebug_jdelay;
                int denom = (flags & F_SYNC_DELAY) ? 20 : 1;