From: michaelc@cs.wisc.edu
To: linux-scsi@vger.kernel.org
Cc: Mike Christie <michaelc@cs.wisc.edu>
Subject: [PATCH] scsi_lib: don't decrement busy counters when inserting commands
Date: Tue, 16 Dec 2008 23:55:43 -0600 [thread overview]
Message-ID: <1229493343215-git-send-email-michaelc@cs.wisc.edu> (raw)
From: Mike Christie <michaelc@cs.wisc.edu>
This patch fixes a regression in scsi-misc introduced with:
312efe5efcdb02d604ea37a41d965f32ca276d6a
[SCSI] simplify scsi_io_completion().
The problem is that in previous kernels scsi_io_completion would call
scsi_requeue_command, but now it can call scsi_queue_insert for
something like a UNIT_ATTENTION (for netapp targets we get
UNIT_ATTENTION when restarting a iscsi session). And scsi_queue_insert
will call scsi_device_unbusy, but in the scsi_io_completion code path
scsi_finish_command has already called this so we now end up
with invalid host, target and device busy values.
Patch was made over scsi-misc.
Signed-off-by: Mike Christie <michaelc@cs.wisc.edu>
---
drivers/scsi/scsi_lib.c | 16 +++++++++-------
include/scsi/scsi.h | 9 +++++++++
2 files changed, 18 insertions(+), 7 deletions(-)
diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
index 111f9e9..a47fcac 100644
--- a/drivers/scsi/scsi_lib.c
+++ b/drivers/scsi/scsi_lib.c
@@ -139,6 +139,7 @@ int scsi_queue_insert(struct scsi_cmnd *cmd, int reason)
host->host_blocked = host->max_host_blocked;
break;
case SCSI_MLQUEUE_DEVICE_BUSY:
+ case SCSI_IO_COMPL_DEV_BUSY:
device->device_blocked = device->max_device_blocked;
break;
case SCSI_MLQUEUE_TARGET_BUSY:
@@ -146,11 +147,12 @@ int scsi_queue_insert(struct scsi_cmnd *cmd, int reason)
break;
}
- /*
- * Decrement the counters, since these commands are no longer
- * active on the host/device.
- */
- scsi_device_unbusy(device);
+ if (!SCSI_IO_COMPL_RET(reason))
+ /*
+ * Decrement the counters, since these commands are no longer
+ * active on the host/device.
+ */
+ scsi_device_unbusy(device);
/*
* Requeue this command. It will go before all other commands
@@ -1071,11 +1073,11 @@ void scsi_io_completion(struct scsi_cmnd *cmd, unsigned int good_bytes)
break;
case ACTION_RETRY:
/* Retry the same command immediately */
- scsi_queue_insert(cmd, SCSI_MLQUEUE_EH_RETRY);
+ scsi_queue_insert(cmd, SCSI_IO_COMPL_EH_RETRY);
break;
case ACTION_DELAYED_RETRY:
/* Retry the same command after a delay */
- scsi_queue_insert(cmd, SCSI_MLQUEUE_DEVICE_BUSY);
+ scsi_queue_insert(cmd, SCSI_IO_COMPL_DEV_BUSY);
break;
}
}
diff --git a/include/scsi/scsi.h b/include/scsi/scsi.h
index a109165..e9cc4fc 100644
--- a/include/scsi/scsi.h
+++ b/include/scsi/scsi.h
@@ -434,6 +434,15 @@ static inline int scsi_is_wlun(unsigned int lun)
#define SCSI_MLQUEUE_TARGET_BUSY 0x1058
/*
+ * Midlevel io completeion path return values
+ */
+#define SCSI_IO_COMPL_EH_RETRY 0x1059
+#define SCSI_IO_COMPL_DEV_BUSY 0x1060
+
+#define SCSI_IO_COMPL_RET(_ret) \
+ (_ret == SCSI_IO_COMPL_EH_RETRY || _ret == SCSI_IO_COMPL_DEV_BUSY)
+
+/*
* Use these to separate status msg and our bytes
*
* These are set by:
--
1.6.0.4
next reply other threads:[~2008-12-17 5:55 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-12-17 5:55 michaelc [this message]
2008-12-18 9:03 ` [PATCH] scsi_lib: don't decrement busy counters when inserting commands Andrew Vasquez
2009-01-02 16:42 ` James Bottomley
2009-01-03 3:39 ` Alan Stern
2009-01-04 20:53 ` Mike Christie
2009-01-05 23:28 ` Andrew Vasquez
2009-01-06 1:56 ` James Bottomley
2009-01-06 7:01 ` Andrew Vasquez
2009-01-06 19:15 ` James Bottomley
2009-01-06 19:48 ` Andrew Vasquez
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=1229493343215-git-send-email-michaelc@cs.wisc.edu \
--to=michaelc@cs.wisc.edu \
--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.