All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mike Anderson <andmike@us.ibm.com>
To: linux-scsi@vger.kernel.org
Cc: ishii.hironobu@jp.fujitsu.com
Subject: [PATCH] scsi_eh_flush_done_q return status
Date: Fri, 16 Jan 2004 12:11:17 -0800	[thread overview]
Message-ID: <20040116201117.GD1053@beaverton.ibm.com> (raw)

This is a refresh of a patch for a previously reported problem with the
scsi_eh_flush_done_q. The original thread is located here:

http://marc.theaimsgroup.com/?l=linux-scsi&m=107043398314649&w=2

This patch has a one line difference than the one previously posted in
response to the thread. In the previous patch I was unconditionally
setting result in the finish case.

I verified the patch using scsi_debug + gov, but could only cover the
retry path of the patch. I ran out of time to tweak scsi_debug to give
me the right failure signature. If Hironobu has some free time may be
the patch could be verified on the original failing system.

-andmike
--
Michael Anderson
andmike@us.ibm.com

DESC
This patch fixes a bug in scsi_eh_flush_done_q when the allowed count has
been exceeded and the command errored for a timeout. The bug is that the
result will be left at zero and the command finished.

author: Mike Anderson <andmike@us.ibm.com>
patch_version: Thu Jan 15 20:27:10 UTC 2004
EDESC


 patched-scsi-misc-2.7-andmike/drivers/scsi/scsi_error.c |   28 +++++++---------
 1 files changed, 13 insertions(+), 15 deletions(-)

diff -puN drivers/scsi/scsi_error.c~scsi_error_retry drivers/scsi/scsi_error.c
--- patched-scsi-misc-2.7/drivers/scsi/scsi_error.c~scsi_error_retry	Thu Jan 15 22:14:40 2004
+++ patched-scsi-misc-2.7-andmike/drivers/scsi/scsi_error.c	Thu Jan 15 22:14:40 2004
@@ -1420,23 +1420,21 @@ static void scsi_eh_flush_done_q(struct 
 	list_for_each_safe(lh, lh_sf, done_q) {
 		scmd = list_entry(lh, struct scsi_cmnd, eh_entry);
 		list_del_init(lh);
-		if (!scmd->device->online) {
-			 scmd->result |= (DRIVER_TIMEOUT << 24);
-		} else {
-			if (++scmd->retries < scmd->allowed) {
-				SCSI_LOG_ERROR_RECOVERY(3,
-					printk("%s: flush retry"
-					       " cmd: %p\n",
-						  current->comm,
-						  scmd));
+		if (scmd->device->online &&
+		    	(++scmd->retries < scmd->allowed)) {
+			SCSI_LOG_ERROR_RECOVERY(3, printk("%s: flush"
+							  " retry cmd: %p\n",
+							  current->comm,
+							  scmd));
 				scsi_queue_insert(scmd, SCSI_MLQUEUE_EH_RETRY);
-				continue;
-			}
+		} else {
+			if (!scmd->result)
+				scmd->result |= (DRIVER_TIMEOUT << 24);
+			SCSI_LOG_ERROR_RECOVERY(3, printk("%s: flush finish"
+							" cmd: %p\n",
+							current->comm, scmd));
+			scsi_finish_command(scmd);
 		}
-		SCSI_LOG_ERROR_RECOVERY(3, printk("%s: flush finish"
-				       " cmd: %p\n",
-					  current->comm, scmd));
-		scsi_finish_command(scmd);
 	}
 }
 

_


             reply	other threads:[~2004-01-16 20:06 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-01-16 20:11 Mike Anderson [this message]
2004-02-02 10:29 ` [PATCH] scsi_eh_flush_done_q return status Hironobu Ishii
2004-02-02 15:59   ` Mike Anderson

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20040116201117.GD1053@beaverton.ibm.com \
    --to=andmike@us.ibm.com \
    --cc=ishii.hironobu@jp.fujitsu.com \
    --cc=linux-scsi@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.