summaryrefslogtreecommitdiffstats
path: root/include/scsi
diff options
context:
space:
mode:
authorJames Bottomley <jejb@titanic>2005-04-18 13:45:00 -0500
committerJames Bottomley <jejb@titanic>2005-04-18 13:45:00 -0500
commitc46f2ffb9e7fce7208c2639790e1ade42e00b146 (patch)
tree284912295d46a861930d0619788a650f56c2a29b /include/scsi
parentc2a9331c62216e222a08de8dd58559367fef0af6 (diff)
parentf59114b7b5dc677bbd7cc7e26a5fcb3572a3445c (diff)
merge by hand (scsi_device.h)
Diffstat (limited to 'include/scsi')
-rw-r--r--include/scsi/scsi.h11
-rw-r--r--include/scsi/scsi_cmnd.h28
-rw-r--r--include/scsi/scsi_device.h3
-rw-r--r--include/scsi/scsi_host.h10
4 files changed, 30 insertions, 22 deletions
diff --git a/include/scsi/scsi.h b/include/scsi/scsi.h
index 1d54c063ae5..659ecf48fb4 100644
--- a/include/scsi/scsi.h
+++ b/include/scsi/scsi.h
@@ -295,6 +295,8 @@ struct scsi_lun {
#define DID_PASSTHROUGH 0x0a /* Force command past mid-layer */
#define DID_SOFT_ERROR 0x0b /* The low level driver just wish a retry */
#define DID_IMM_RETRY 0x0c /* Retry without decrementing retry count */
+#define DID_REQUEUE 0x0d /* Requeue command (no immediate retry) also
+ * without decrementing the retry count */
#define DRIVER_OK 0x00 /* Driver status */
/*
@@ -360,6 +362,15 @@ struct scsi_lun {
#define sense_error(sense) ((sense) & 0xf)
#define sense_valid(sense) ((sense) & 0x80);
+/*
+ * default timeouts
+*/
+#define FORMAT_UNIT_TIMEOUT (2 * 60 * 60 * HZ)
+#define START_STOP_TIMEOUT (60 * HZ)
+#define MOVE_MEDIUM_TIMEOUT (5 * 60 * HZ)
+#define READ_ELEMENT_STATUS_TIMEOUT (5 * 60 * HZ)
+#define READ_DEFECT_DATA_TIMEOUT (60 * HZ )
+
#define IDENTIFY_BASE 0x80
#define IDENTIFY(can_disconnect, lun) (IDENTIFY_BASE |\
diff --git a/include/scsi/scsi_cmnd.h b/include/scsi/scsi_cmnd.h
index 9d9871c28ab..07f5c699eaa 100644
--- a/include/scsi/scsi_cmnd.h
+++ b/include/scsi/scsi_cmnd.h
@@ -43,21 +43,17 @@ struct scsi_cmnd {
void (*done) (struct scsi_cmnd *); /* Mid-level done function */
/*
- * A SCSI Command is assigned a nonzero serial_number when internal_cmnd
- * passes it to the driver's queue command function. The serial_number
- * is cleared when scsi_done is entered indicating that the command has
- * been completed. If a timeout occurs, the serial number at the moment
- * of timeout is copied into serial_number_at_timeout. By subsequently
- * comparing the serial_number and serial_number_at_timeout fields
- * during abort or reset processing, we can detect whether the command
- * has already completed. This also detects cases where the command has
- * completed and the SCSI Command structure has already being reused
- * for another command, so that we can avoid incorrectly aborting or
- * resetting the new command.
- * The serial number is only unique per host.
+ * A SCSI Command is assigned a nonzero serial_number before passed
+ * to the driver's queue command function. The serial_number is
+ * cleared when scsi_done is entered indicating that the command
+ * has been completed. It currently doesn't have much use other
+ * than printk's. Some lldd's use this number for other purposes.
+ * It's almost certain that such usages are either incorrect or
+ * meaningless. Please kill all usages other than printk's. Also,
+ * as this number is always identical to ->pid, please convert
+ * printk's to use ->pid, so that we can kill this field.
*/
unsigned long serial_number;
- unsigned long serial_number_at_timeout;
int retries;
int allowed;
@@ -65,12 +61,6 @@ struct scsi_cmnd {
int timeout_total;
int timeout;
- /*
- * We handle the timeout differently if it happens when a reset,
- * abort, etc are in process.
- */
- unsigned volatile char internal_timeout;
-
unsigned char cmd_len;
unsigned char old_cmd_len;
enum dma_data_direction sc_data_direction;
diff --git a/include/scsi/scsi_device.h b/include/scsi/scsi_device.h
index fe9571d2e30..c018020d916 100644
--- a/include/scsi/scsi_device.h
+++ b/include/scsi/scsi_device.h
@@ -44,7 +44,8 @@ struct scsi_device {
struct list_head same_target_siblings; /* just the devices sharing same target id */
/* this is now protected by the request_queue->queue_lock */
- volatile unsigned short device_busy; /* commands actually active on low-level */
+ unsigned int device_busy; /* commands actually active on
+ * low-level. protected by queue_lock. */
spinlock_t list_lock;
struct list_head cmd_list; /* queue of in use SCSI Command structures */
struct list_head starved_entry;
diff --git a/include/scsi/scsi_host.h b/include/scsi/scsi_host.h
index 27f2c4e8943..1cee1e10094 100644
--- a/include/scsi/scsi_host.h
+++ b/include/scsi/scsi_host.h
@@ -448,8 +448,14 @@ struct Scsi_Host {
wait_queue_head_t host_wait;
struct scsi_host_template *hostt;
struct scsi_transport_template *transportt;
- volatile unsigned short host_busy; /* commands actually active on low-level */
- volatile unsigned short host_failed; /* commands that failed. */
+
+ /*
+ * The following two fields are protected with host_lock;
+ * however, eh routines can safely access during eh processing
+ * without acquiring the lock.
+ */
+ unsigned int host_busy; /* commands actually active on low-level */
+ unsigned int host_failed; /* commands that failed. */
unsigned short host_no; /* Used for IOCTL_GET_IDLUN, /proc/scsi et al. */
int resetting; /* if set, it means that last_reset is a valid value */