* [PATCH] consolidate and log scsi command on send and completion
@ 2003-10-01 0:21 Patrick Mansfield
2003-10-01 0:23 ` Patrick Mansfield
0 siblings, 1 reply; 3+ messages in thread
From: Patrick Mansfield @ 2003-10-01 0:21 UTC (permalink / raw)
To: James Bottomley, linux-scsi
Hi -
Patch against 2.6.0-test6.
Consolidate and nicely log the scsi_device and scsi command before sending
and after completing a command to an adapter driver.
diff -uprN -X /home/patman/dontdiff bl-25/drivers/scsi/scsi.c bl-25-scmd-log/drivers/scsi/scsi.c
--- bl-25/drivers/scsi/scsi.c Mon Sep 29 12:21:09 2003
+++ bl-25-scmd-log/drivers/scsi/scsi.c Tue Sep 30 14:24:17 2003
@@ -351,6 +351,124 @@ void scsi_destroy_command_freelist(struc
up(&host_cmd_pool_mutex);
}
+#ifdef CONFIG_SCSI_LOGGING
+void scsi_log_send(struct scsi_cmnd *cmd)
+{
+ unsigned int level;
+ struct scsi_device *sdev;
+
+ /*
+ * If ML QUEUE log level is greater than or equal to:
+ *
+ * 1: nothing (match completion)
+ *
+ * 2: log opcode + command of all commands
+ *
+ * 3: same as 2 plus dump cmd address
+ *
+ * 4: same as 3 plus dump extra junk
+ */
+ if (unlikely(scsi_logging_level)) {
+ level = SCSI_LOG_LEVEL(SCSI_LOG_MLQUEUE_SHIFT,
+ SCSI_LOG_MLQUEUE_BITS);
+ if (level > 1) {
+ sdev = cmd->device;
+ printk(KERN_INFO "scsi <%d:%d:%d:%d> send ",
+ sdev->host->host_no, sdev->channel, sdev->id,
+ sdev->lun);
+ if (level > 2)
+ printk("0x%p ", cmd);
+ /*
+ * spaces to match disposition and cmd->result
+ * output in scsi_log_completion.
+ */
+ printk(" ");
+ print_command(cmd->cmnd);
+ if (level > 3) {
+ printk(KERN_INFO "buffer = 0x%p, bufflen = %d,"
+ " done = 0x%p, queuecommand 0x%p\n",
+ cmd->buffer, cmd->bufflen,
+ cmd->done,
+ sdev->host->hostt->queuecommand);
+
+ }
+ }
+ }
+}
+
+void scsi_log_completion(struct scsi_cmnd *cmd, int disposition)
+{
+ unsigned int level;
+ struct scsi_device *sdev;
+
+ /*
+ * If ML COMPLETE log level is greater than or equal to:
+ *
+ * 1: log disposition, result, opcode + command, and conditionally
+ * sense data for failures or non SUCCESS dispositions.
+ *
+ * 2: same as 1 but for all command completions.
+ *
+ * 3: same as 2 plus dump cmd address
+ *
+ * 4: same as 3 plus dump extra junk
+ */
+ if (unlikely(scsi_logging_level)) {
+ level = SCSI_LOG_LEVEL(SCSI_LOG_MLCOMPLETE_SHIFT,
+ SCSI_LOG_MLCOMPLETE_BITS);
+ if (((level > 0) && (cmd->result || disposition != SUCCESS)) ||
+ (level > 1)) {
+ sdev = cmd->device;
+ printk(KERN_INFO "scsi <%d:%d:%d:%d> done ",
+ sdev->host->host_no, sdev->channel, sdev->id,
+ sdev->lun);
+ if (level > 2)
+ printk("0x%p ", cmd);
+ /*
+ * Dump truncated values, so we usually fit within
+ * 80 chars.
+ */
+ switch (disposition) {
+ case SUCCESS:
+ printk("SUCCESS");
+ break;
+ case NEEDS_RETRY:
+ printk("RETRY ");
+ break;
+ case ADD_TO_MLQUEUE:
+ printk("MLQUEUE");
+ break;
+ case FAILED:
+ printk("FAILED ");
+ break;
+ case TIMEOUT:
+ /*
+ * If called via scsi_times_out.
+ */
+ printk("TIMEOUT");
+ break;
+ default:
+ printk("UNKNOWN");
+ }
+ printk(" %8x ", cmd->result);
+ print_command(cmd->cmnd);
+ if (status_byte(cmd->result) & CHECK_CONDITION) {
+ /*
+ * XXX The print_sense formatting/prefix
+ * doesn't match this function.
+ */
+ print_sense("", cmd);
+ }
+ if (level > 3) {
+ printk(KERN_INFO "scsi host busy %d failed %d\n",
+ sdev->host->host_busy,
+ sdev->host->host_failed);
+ }
+ }
+ }
+}
+#endif
+
/*
* Function: scsi_dispatch_command
*
@@ -406,16 +524,12 @@ int scsi_dispatch_cmd(struct scsi_cmnd *
scsi_add_timer(cmd, cmd->timeout_per_command, scsi_times_out);
+ scsi_log_send(cmd);
+
/*
* We will use a queued command if possible, otherwise we will
* emulate the queuing and calling of completion function ourselves.
*/
- SCSI_LOG_MLQUEUE(3, printk("scsi_dispatch_cmnd (host = %d, "
- "channel = %d, target = %d, command = %p, "
- "buffer = %p, \nbufflen = %d, done = %p)\n",
- host->host_no, cmd->device->channel,
- cmd->device->id, cmd->cmnd, cmd->buffer,
- cmd->bufflen, cmd->done));
cmd->state = SCSI_STATE_QUEUED;
cmd->owner = SCSI_OWNER_LOWLEVEL;
@@ -435,9 +549,6 @@ int scsi_dispatch_cmd(struct scsi_cmnd *
goto out;
}
- SCSI_LOG_MLQUEUE(3, printk("queuecommand : routine at %p\n",
- host->hostt->queuecommand));
-
spin_lock_irqsave(host->host_lock, flags);
if (unlikely(test_bit(SHOST_CANCEL, &host->shost_state))) {
cmd->result = (DID_NO_CONNECT << 16);
@@ -594,6 +705,7 @@ void scsi_done(struct scsi_cmnd *cmd)
*/
static void scsi_softirq(struct softirq_action *h)
{
+ int disposition;
LIST_HEAD(local_q);
local_irq_disable();
@@ -605,75 +717,19 @@ static void scsi_softirq(struct softirq_
struct scsi_cmnd, eh_entry);
list_del_init(&cmd->eh_entry);
- switch (scsi_decide_disposition(cmd)) {
+ disposition = scsi_decide_disposition(cmd);
+ scsi_log_completion(cmd, disposition);
+ switch (disposition) {
case SUCCESS:
- /*
- * Add to BH queue.
- */
- SCSI_LOG_MLCOMPLETE(3,
- printk("Command finished %d %d "
- "0x%x\n",
- cmd->device->host->host_busy,
- cmd->device->host->host_failed,
- cmd->result));
-
scsi_finish_command(cmd);
break;
case NEEDS_RETRY:
- /*
- * We only come in here if we want to retry a
- * command. The test to see whether the
- * command should be retried should be keeping
- * track of the number of tries, so we don't
- * end up looping, of course.
- */
- SCSI_LOG_MLCOMPLETE(3, printk("Command needs retry "
- "%d %d 0x%x\n",
- cmd->device->host->host_busy,
- cmd->device->host->host_failed,
- cmd->result));
-
scsi_retry_command(cmd);
break;
case ADD_TO_MLQUEUE:
- /*
- * This typically happens for a QUEUE_FULL
- * message - typically only when the queue
- * depth is only approximate for a given
- * device. Adding a command to the queue for
- * the device will prevent further commands
- * from being sent to the device, so we
- * shouldn't end up with tons of things being
- * sent down that shouldn't be.
- */
- SCSI_LOG_MLCOMPLETE(3, printk("Command rejected as "
- "device queue full, "
- "put on ml queue %p\n",
- cmd));
scsi_queue_insert(cmd, SCSI_MLQUEUE_DEVICE_BUSY);
break;
default:
- /*
- * Here we have a fatal error of some sort.
- * Turn it over to the error handler.
- */
- SCSI_LOG_MLCOMPLETE(3,
- printk("Command failed %p %x "
- "busy=%d failed=%d\n",
- cmd, cmd->result,
- cmd->device->host->host_busy,
- cmd->device->host->host_failed));
-
- /*
- * Dump the sense information too.
- */
- if (status_byte(cmd->result) & CHECK_CONDITION)
- SCSI_LOG_MLCOMPLETE(3, print_sense("bh", cmd));
-
- /*
- * We only fail here if the error recovery thread
- * has died.
- */
if (!scsi_eh_scmd_add(cmd, 0))
scsi_finish_command(cmd);
}
@@ -739,7 +795,7 @@ void scsi_finish_command(struct scsi_cmn
if (SCSI_SENSE_VALID(cmd))
cmd->result |= (DRIVER_SENSE << 24);
- SCSI_LOG_MLCOMPLETE(3, printk("Notifying upper driver of completion "
+ SCSI_LOG_MLCOMPLETE(4, printk("Notifying upper driver of completion "
"for device %d %x\n", sdev->id, cmd->result));
cmd->owner = SCSI_OWNER_HIGHLEVEL;
diff -uprN -X /home/patman/dontdiff bl-25/drivers/scsi/scsi_error.c bl-25-scmd-log/drivers/scsi/scsi_error.c
--- bl-25/drivers/scsi/scsi_error.c Mon Sep 29 12:21:09 2003
+++ bl-25-scmd-log/drivers/scsi/scsi_error.c Mon Sep 29 12:37:28 2003
@@ -164,14 +164,11 @@ int scsi_delete_timer(struct scsi_cmnd *
**/
void scsi_times_out(struct scsi_cmnd *scmd)
{
+ scsi_log_completion(scmd, TIMEOUT);
if (unlikely(!scsi_eh_scmd_add(scmd, SCSI_EH_CANCEL_CMD))) {
panic("Error handler thread not present at %p %p %s %d",
scmd, scmd->device->host, __FILE__, __LINE__);
}
-
- SCSI_LOG_TIMEOUT(3, printk("Command timed out busy=%d failed=%d\n",
- scmd->device->host->host_busy,
- scmd->device->host->host_failed));
}
/**
@@ -446,10 +443,12 @@ static int scsi_send_eh_cmnd(struct scsi
scmd->request->rq_status = RQ_SCSI_BUSY;
spin_lock_irqsave(scmd->device->host->host_lock, flags);
+ scsi_log_send(scmd);
host->hostt->queuecommand(scmd, scsi_eh_done);
spin_unlock_irqrestore(scmd->device->host->host_lock, flags);
down(&sem);
+ scsi_log_completion(scmd, SUCCESS);
scmd->device->host->eh_action = NULL;
diff -uprN -X /home/patman/dontdiff bl-25/drivers/scsi/scsi_logging.h bl-25-scmd-log/drivers/scsi/scsi_logging.h
--- bl-25/drivers/scsi/scsi_logging.h Mon Sep 22 13:08:53 2003
+++ bl-25-scmd-log/drivers/scsi/scsi_logging.h Mon Sep 29 12:37:28 2003
@@ -40,10 +40,13 @@
extern unsigned int scsi_logging_level;
#ifdef CONFIG_SCSI_LOGGING
+
+#define SCSI_LOG_LEVEL(SHIFT, BITS) \
+ ((scsi_logging_level >> (SHIFT)) & ((1 << (BITS)) - 1))
+
#define SCSI_CHECK_LOGGING(SHIFT, BITS, LEVEL, CMD) \
{ \
- unsigned int mask = (1 << (BITS)) - 1; \
- if (((scsi_logging_level >> (SHIFT)) & mask) > (LEVEL)) \
+ if ((SCSI_LOG_LEVEL(SHIFT, BITS)) > (LEVEL)) \
(CMD); \
}
#else
diff -uprN -X /home/patman/dontdiff bl-25/drivers/scsi/scsi_priv.h bl-25-scmd-log/drivers/scsi/scsi_priv.h
--- bl-25/drivers/scsi/scsi_priv.h Mon Sep 29 12:21:09 2003
+++ bl-25-scmd-log/drivers/scsi/scsi_priv.h Mon Sep 29 12:37:28 2003
@@ -83,6 +83,15 @@ extern int scsi_insert_special_req(struc
extern void scsi_init_cmd_from_req(struct scsi_cmnd *cmd,
struct scsi_request *sreq);
extern void __scsi_release_request(struct scsi_request *sreq);
+#ifdef CONFIG_SCSI_LOGGING
+void scsi_log_send(struct scsi_cmnd *cmd);
+void scsi_log_completion(struct scsi_cmnd *cmd, int disposition);
+#else
+static inline void scsi_log_send(struct scsi_cmnd *cmd)
+ { };
+static inline void scsi_log_completion(struct scsi_cmnd *cmd, int disposition)
+ { };
+#endif
/* scsi_devinfo.c */
extern int scsi_get_device_flags(unsigned char *vendor, unsigned char *model);
diff -uprN -X /home/patman/dontdiff bl-25/include/scsi/scsi.h bl-25-scmd-log/include/scsi/scsi.h
--- bl-25/include/scsi/scsi.h Mon Sep 29 12:21:10 2003
+++ bl-25-scmd-log/include/scsi/scsi.h Mon Sep 29 12:39:10 2003
@@ -302,6 +302,7 @@ struct scsi_lun {
#define QUEUED 0x2004
#define SOFT_ERROR 0x2005
#define ADD_TO_MLQUEUE 0x2006
+#define TIMEOUT 0x2007
/*
* Midlevel queue return values.
^ permalink raw reply [flat|nested] 3+ messages in thread* Re: [PATCH] consolidate and log scsi command on send and completion 2003-10-01 0:21 [PATCH] consolidate and log scsi command on send and completion Patrick Mansfield @ 2003-10-01 0:23 ` Patrick Mansfield 2003-10-01 1:22 ` [PATCH] constants.c [was: consolidate and log scsi command on send and completion] Douglas Gilbert 0 siblings, 1 reply; 3+ messages in thread From: Patrick Mansfield @ 2003-10-01 0:23 UTC (permalink / raw) To: James Bottomley, linux-scsi Some sample output showing the command logging (with CONFIG_SCSI_CONSTANTS enabled). Of course after shutting off syslogd :-( And with scsi logging for ml queue of 2 and ml complete of 2 via: sysctl -w dev.scsi.logging_level=0x2400 FYI, if you want both ml queue and ml complete both set: to use scsi_logging_level 1 0x1200 2 0x2400 3 0x3600 4 0x4800 Output for scanning host3 id 0, a0 is REPORT LUNS, interspersed with writes to the root disk <0:0:0:0>, and partition information: scsi <3:0:0:0> send UNKNOWN(0xa0) 00 00 00 00 00 00 00 04 08 00 00 scsi <3:0:0:0> done SUCCESS 0 UNKNOWN(0xa0) 00 00 00 00 00 00 00 04 08 00 00 scsi <3:0:0:1> send Inquiry 00 00 00 24 00 scsi <3:0:0:1> done SUCCESS 0 Inquiry 00 00 00 24 00 Vendor: IBM Model: 3542 Rev: 0520 Type: Direct-Access ANSI SCSI revision: 03 scsi(3:0:0:1): Enabled tagged queuing, queue depth 64. scsi <3:0:0:1> send Test Unit Ready 00 00 00 00 00 scsi <3:0:0:1> done SUCCESS 0 Test Unit Ready 00 00 00 00 00 scsi <3:0:0:1> send Read Capacity 00 00 00 00 00 00 00 00 00 scsi <3:0:0:1> done SUCCESS 0 Read Capacity 00 00 00 00 00 00 00 00 00 SCSI device sdi: 11087872 512-byte hdwr sectors (5677 MB) scsi <3:0:0:1> send Mode Sense 00 08 00 04 00 scsi <3:0:0:1> done SUCCESS 0 Mode Sense 00 08 00 04 00 scsi <3:0:0:1> send Mode Sense 00 08 00 20 00 scsi <3:0:0:1> done SUCCESS<6>scsi <0:0:0:0> send Write (10) 00 00 28 00 47 00 00 08 00 scsi <0:0:0:0> done SUCCESS 0 Write (10) 00 00 28 00 47 00 00 08 00 scsi <0:0:0:0> send Write (10) 00 00 28 02 67 00 00 08 00 scsi <0:0:0:0> done SUCCESS 0 Write (10) 00 00 28 02 67 00 00 08 00 scsi <0:0:0:0> send Write (10) 00 00 28 18 3f 00 00 08 00 scsi <0:0:0:0> done SUCCESS 0 Write (10) 00 00 28 18 3f 00 00 08 00 scsi <0:0:0:0> send Write (10) 00 00 34 00 a7 00 00 08 00 0 Mode Sense 00 08 00 20 00 scsi <0:0:0:0> done <5>SCSI device sdi: drive cache: write back sdi:<6>scsi <3:0:0:1> send Read (10) 00 00 00 00 00 00 00 08 00 scsi <3:0:0:1> done SUCCESS 0 Read (10) 00 00 00 00 00 00 00 08 00 unknown partition table Attached scsi disk sdi at scsi3, channel 0, id 0, lun 1 SUCCESS 0 Write (10) 00 00 34 00 a7 00 00 08 00 Example of a device not supporting INQUIRY page code 0x83 (with sense data dump): scsi <0:0:0:0> send Inquiry 01 83 00 ff 00 scsi <0:0:0:0> done SUCCESS 2 Inquiry 01 83 00 ff 00 Current sda: sense key Illegal Request Additional sense: Invalid field in cdb scsi <0:0:0:0> done SUCCESS 2 Inquiry 01 83 00 ff 00 Current sda: sense key Illegal Request Additional sense: Invalid field in cdb Ard example output on timeout, with scsi logging for ml queue of 3 and ml complete of 3: scsi <2:0:0:0> done 0xf4abd560 TIMEOUT 0 Read (10) 00 00 00 00 00 00 00 80 00 scsi <2:0:0:0> send 0xf4abd560 Test Unit Ready 00 00 00 00 00 scsi <2:0:0:0> done 0xf4abd560 SUCCESS 0 Test Unit Ready 00 00 00 00 00 Inserting command f4abd560 into mlqueue scsi <2:0:0:0> send 0xf4abd560 Read (10) 00 00 00 00 00 00 00 80 00 scsi <2:0:0:0> done 0xf4abd560 SUCCESS 0 Read (10) 00 00 00 00 00 00 00 80 00 ^ permalink raw reply [flat|nested] 3+ messages in thread
* [PATCH] constants.c [was: consolidate and log scsi command on send and completion] 2003-10-01 0:23 ` Patrick Mansfield @ 2003-10-01 1:22 ` Douglas Gilbert 0 siblings, 0 replies; 3+ messages in thread From: Douglas Gilbert @ 2003-10-01 1:22 UTC (permalink / raw) To: Patrick Mansfield; +Cc: James Bottomley, linux-scsi [-- Attachment #1: Type: text/plain, Size: 914 bytes --] Patrick Mansfield wrote: > Some sample output showing the command logging (with CONFIG_SCSI_CONSTANTS > enabled). > > Of course after shutting off syslogd :-( > > And with scsi logging for ml queue of 2 and ml complete of 2 via: > > sysctl -w dev.scsi.logging_level=0x2400 > > FYI, if you want both ml queue and ml complete both set: > > to use scsi_logging_level > 1 0x1200 > 2 0x2400 > 3 0x3600 > 4 0x4800 > > Output for scanning host3 id 0, a0 is REPORT LUNS, interspersed with writes > to the root disk <0:0:0:0>, and partition information: > > scsi <3:0:0:0> send UNKNOWN(0xa0) 00 00 00 00 00 00 00 04 08 00 00 > scsi <3:0:0:0> done SUCCESS 0 UNKNOWN(0xa0) 00 00 00 00 00 00 00 04 08 00 00 looks good .... However, drivers/scsi/constants.c does know about Report Luns?? Looks like a merging problem by Andries and me sometime back. See attachment. Doug Gilbert [-- Attachment #2: s_consts_c260t6.diff --] [-- Type: text/plain, Size: 4260 bytes --] --- linux/drivers/scsi/constants.c 2003-07-31 01:37:47.000000000 +1000 +++ linux/drivers/scsi/constants.c260t6pl 2003-10-01 11:12:35.000000000 +1000 @@ -62,42 +62,54 @@ static const char *group_2_commands[] = { -/* 40-41 */ "Change Definition", "Write Same", -/* 42-48 */ "Read sub-channel", "Read TOC", "Read header", - "Play audio (10)", unknown, "Play audio msf", - "Play audio track/index", -/* 49-4f */ "Play track relative (10)", unknown, "Pause/resume", - "Log Select", "Log Sense", unknown, unknown, -/* 50-55 */ unknown, unknown, unknown, unknown, unknown, "Mode Select (10)", -/* 56-5b */ unknown, unknown, unknown, unknown, "Mode Sense (10)", unknown, -/* 5c-5f */ unknown, unknown, unknown, +/* 40-41 */ "Change Definition", "Write Same", +/* 42-48 */ "Read sub-channel", "Read TOC", "Read header", + "Play audio (10)", "Get configuration", "Play audio msf", + "Play audio track/index", +/* 49-4f */ "Play track relative (10)", "Get event status notification", + "Pause/resume", "Log Select", "Log Sense", "Stop play/scan", + unknown, +/* 50-55 */ "Xdwrite", "Xpwrite, Read disk info", "Xdread, Read track info", + "Reserve track", "Send OPC onfo", "Mode Select (10)", +/* 56-5b */ "Reserve (10)", "Release (10)", "Repair track", "Read master cue", + "Mode Sense (10)", "Close track/session", +/* 5c-5f */ "Read buffer capacity", "Send cue sheet", "Persistent reserve in", + "Persistent reserve out", }; /* The following are 16 byte commands in group 4 */ static const char *group_4_commands[] = { -/* 80-84 */ unknown, unknown, unknown, unknown, unknown, -/* 85-89 */ "Memory Export In (16)", unknown, unknown, unknown, - "Memory Export Out (16)", -/* 8a-8f */ unknown, unknown, unknown, unknown, unknown, unknown, -/* 90-94 */ unknown, unknown, unknown, unknown, unknown, +/* 80-84 */ "Xdwrite (16)", "Rebuild (16)", "Regenerate (16)", "Extended copy", + "Receive copy results", +/* 85-89 */ "Memory Export In (16)", "Access control in", "Access control out", + "Read (16)", "Memory Export Out (16)", +/* 8a-8f */ "Write (16)", unknown, "Read attributes", "Write attributes", + "Write and verify (16)", "Verify (16)", +/* 90-94 */ "Pre-fetch (16)", "Synchronize cache (16)", + "Lock/unlock cache (16)", "Write same (16)", unknown, /* 95-99 */ unknown, unknown, unknown, unknown, unknown, -/* 9a-9f */ unknown, unknown, unknown, unknown, unknown, unknown, +/* 9a-9f */ unknown, unknown, unknown, unknown, "Service action in", + "Service action out", }; - /* The following are 12 byte commands in group 5 */ static const char *group_5_commands[] = { -/* a0-a5 */ unknown, unknown, unknown, unknown, unknown, - "Move medium/play audio(12)", -/* a6-a9 */ "Exchange medium", unknown, "Read(12)", "Play track relative(12)", -/* aa-ae */ "Write(12)", unknown, "Erase(12)", unknown, - "Write and verify(12)", +/* a0-a5 */ "Report luns", "Blank", "Send event", "Maintenance (in)", + "Maintenance (out)", "Move medium/play audio(12)", +/* a6-a9 */ "Exchange medium", "Move medium attached", "Read(12)", + "Play track relative(12)", +/* aa-ae */ "Write(12)", unknown, "Erase(12), Get Performance", + "Read DVD structure", "Write and verify(12)", /* af-b1 */ "Verify(12)", "Search data high(12)", "Search data equal(12)", -/* b2-b4 */ "Search data low(12)", "Set limits(12)", unknown, -/* b5-b6 */ "Request volume element address", "Send volume tag", -/* b7-b9 */ "Read defect data(12)", "Read element status", unknown, -/* ba-bf */ unknown, unknown, unknown, unknown, unknown, unknown, +/* b2-b4 */ "Search data low(12)", "Set limits(12)", + "Read element status attached", +/* b5-b6 */ "Request volume element address", "Send volume tag, set streaming", +/* b7-b9 */ "Read defect data(12)", "Read element status", "Read CD msf", +/* ba-bc */ "Redundancy group (in), Scan", + "Redundancy group (out), Set cd-rom speed", "Spare (in), Play cd", +/* bd-bf */ "Spare (out), Mechanism status", "Volume set (in), Read cd", + "Volume set (out), Send DVD structure", }; ^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2003-10-01 1:23 UTC | newest] Thread overview: 3+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2003-10-01 0:21 [PATCH] consolidate and log scsi command on send and completion Patrick Mansfield 2003-10-01 0:23 ` Patrick Mansfield 2003-10-01 1:22 ` [PATCH] constants.c [was: consolidate and log scsi command on send and completion] Douglas Gilbert
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.