scsi: scsi_debug: reset injection flags for every_nth > 0
authorMartin Wilck <mwilck@suse.com>
Mon, 29 Jan 2018 23:35:52 +0000 (00:35 +0100)
committerMartin K. Petersen <martin.petersen@oracle.com>
Wed, 14 Feb 2018 02:49:19 +0000 (21:49 -0500)
If every_nth > 0, the injection flags must be reset for commands that
aren't supposed to fail (i.e. that aren't "nth"). Otherwise, commands
will continue to fail, like in the every_nth < 0 case.

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

index 52ccf4f..9055010 100644 (file)
@@ -4294,8 +4294,13 @@ static void clear_queue_stats(void)
 static void setup_inject(struct sdebug_queue *sqp,
                         struct sdebug_queued_cmd *sqcp)
 {
-       if ((atomic_read(&sdebug_cmnd_count) % abs(sdebug_every_nth)) > 0)
+       if ((atomic_read(&sdebug_cmnd_count) % abs(sdebug_every_nth)) > 0) {
+               if (sdebug_every_nth > 0)
+                       sqcp->inj_recovered = sqcp->inj_transport
+                               = sqcp->inj_dif
+                               = sqcp->inj_dix = sqcp->inj_short = 0;
                return;
+       }
        sqcp->inj_recovered = !!(SDEBUG_OPT_RECOVERED_ERR & sdebug_opts);
        sqcp->inj_transport = !!(SDEBUG_OPT_TRANSPORT_ERR & sdebug_opts);
        sqcp->inj_dif = !!(SDEBUG_OPT_DIF_ERR & sdebug_opts);