public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Adrian Bunk <bunk@stusta.de>
To: James.Bottomley@SteelEye.com
Cc: linux-scsi@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: [2.6 patch] SCSI: misc possible cleanups
Date: Mon, 15 Nov 2004 03:04:32 +0100	[thread overview]
Message-ID: <20041115020432.GK2249@stusta.de> (raw)

This patch below does:
- remove unused code
- make global code without external users static

It is meant for review and not for being applied immediately.
It should simply demonstrate with users are possible with the current 
in-kernel users today.


diffstat output:
 drivers/scsi/constants.c          |   58 --------
 drivers/scsi/hosts.c              |   44 +++---
 drivers/scsi/scsi.c               |    2 
 drivers/scsi/scsi.h               |    8 -
 drivers/scsi/scsi_debug.c         |    2 
 drivers/scsi/scsi_error.c         |    5 
 drivers/scsi/scsi_lib.c           |    5 
 drivers/scsi/scsi_syms.c          |    1 
 drivers/scsi/scsi_transport_fc.c  |  202 ------------------------------
 drivers/scsi/scsi_transport_spi.c |    4 
 include/scsi/scsi_dbg.h           |    2 
 include/scsi/scsi_device.h        |    1 
 include/scsi/scsi_eh.h            |    2 
 include/scsi/scsi_host.h          |    1 
 include/scsi/scsi_transport_fc.h  |    4 
 15 files changed, 32 insertions(+), 309 deletions(-)


Signed-off-by: Adrian Bunk <bunk@stusta.de>

--- linux-2.6.10-rc1-mm5-full/include/scsi/scsi_dbg.h.old	2004-11-13 17:20:08.000000000 +0100
+++ linux-2.6.10-rc1-mm5-full/include/scsi/scsi_dbg.h	2004-11-13 17:20:23.000000000 +0100
@@ -8,8 +8,6 @@
 extern void __scsi_print_command(unsigned char *);
 extern void scsi_print_sense(const char *, struct scsi_cmnd *);
 extern void scsi_print_req_sense(const char *, struct scsi_request *);
-extern void scsi_print_driverbyte(int);
-extern void scsi_print_hostbyte(int);
 extern void scsi_print_status(unsigned char);
 extern int scsi_print_msg(const unsigned char *);
 extern const char *scsi_sense_key_string(unsigned char);
--- linux-2.6.10-rc1-mm5-full/drivers/scsi/scsi.h.old	2004-11-13 17:20:35.000000000 +0100
+++ linux-2.6.10-rc1-mm5-full/drivers/scsi/scsi.h	2004-11-13 17:20:51.000000000 +0100
@@ -80,14 +80,6 @@
 {
 	return scsi_print_req_sense(devclass, req);
 }
-static inline void print_driverbyte(int scsiresult)
-{
-	return scsi_print_driverbyte(scsiresult);
-}
-static inline void print_hostbyte(int scsiresult)
-{
-	return scsi_print_hostbyte(scsiresult);
-}
 static inline void print_status(unsigned char status)
 {
 	return scsi_print_status(status);
--- linux-2.6.10-rc1-mm5-full/drivers/scsi/scsi_syms.c.old	2004-11-13 21:47:26.000000000 +0100
+++ linux-2.6.10-rc1-mm5-full/drivers/scsi/scsi_syms.c	2004-11-13 21:47:32.000000000 +0100
@@ -28,7 +28,6 @@
 EXPORT_SYMBOL(scsi_add_host);
 EXPORT_SYMBOL(scsi_scan_host);
 EXPORT_SYMBOL(scsi_remove_host);
-EXPORT_SYMBOL(scsi_host_get);
 EXPORT_SYMBOL(scsi_host_put);
 EXPORT_SYMBOL(scsi_host_lookup);
 EXPORT_SYMBOL(scsi_register);
--- linux-2.6.10-rc1-mm5-full/drivers/scsi/constants.c.old	2004-11-13 17:21:03.000000000 +0100
+++ linux-2.6.10-rc1-mm5-full/drivers/scsi/constants.c	2004-11-13 17:21:46.000000000 +0100
@@ -1136,61 +1136,3 @@
     __scsi_print_command(cmd->cmnd);
 }
 
-#if (CONSTANTS & CONST_HOST)
-static const char * hostbyte_table[]={
-"DID_OK", "DID_NO_CONNECT", "DID_BUS_BUSY", "DID_TIME_OUT", "DID_BAD_TARGET", 
-"DID_ABORT", "DID_PARITY", "DID_ERROR", "DID_RESET", "DID_BAD_INTR",
-"DID_PASSTHROUGH", "DID_SOFT_ERROR", "DID_IMM_RETRY", NULL};
-
-void scsi_print_hostbyte(int scsiresult)
-{   static int maxcode=0;
-    int i;
-   
-    if(!maxcode) {
-	for(i=0;hostbyte_table[i];i++) ;
-	maxcode=i-1;
-    }
-    printk("Hostbyte=0x%02x",host_byte(scsiresult));
-    if(host_byte(scsiresult)>maxcode) {
-	printk("is invalid "); 
-	return;
-    }
-    printk("(%s) ",hostbyte_table[host_byte(scsiresult)]);
-}
-#else
-void scsi_print_hostbyte(int scsiresult)
-{   printk("Hostbyte=0x%02x ",host_byte(scsiresult));
-}
-#endif
-
-#if (CONSTANTS & CONST_DRIVER)
-static const char * driverbyte_table[]={
-"DRIVER_OK", "DRIVER_BUSY", "DRIVER_SOFT",  "DRIVER_MEDIA", "DRIVER_ERROR", 
-"DRIVER_INVALID", "DRIVER_TIMEOUT", "DRIVER_HARD",NULL };
-
-static const char * driversuggest_table[]={"SUGGEST_OK",
-"SUGGEST_RETRY", "SUGGEST_ABORT", "SUGGEST_REMAP", "SUGGEST_DIE",
-unknown,unknown,unknown, "SUGGEST_SENSE",NULL};
-
-
-void scsi_print_driverbyte(int scsiresult)
-{   static int driver_max=0,suggest_max=0;
-    int i,dr=driver_byte(scsiresult)&DRIVER_MASK, 
-	su=(driver_byte(scsiresult)&SUGGEST_MASK)>>4;
-
-    if(!driver_max) {
-        for(i=0;driverbyte_table[i];i++) ;
-        driver_max=i;
-	for(i=0;driversuggest_table[i];i++) ;
-	suggest_max=i;
-    }
-    printk("Driverbyte=0x%02x",driver_byte(scsiresult));
-    printk("(%s,%s) ",
-	dr<driver_max  ? driverbyte_table[dr]:"invalid",
-	su<suggest_max ? driversuggest_table[su]:"invalid");
-}
-#else
-void scsi_print_driverbyte(int scsiresult)
-{   printk("Driverbyte=0x%02x ",driver_byte(scsiresult));
-}
-#endif
--- linux-2.6.10-rc1-mm5-full/include/scsi/scsi_host.h.old	2004-11-13 21:47:47.000000000 +0100
+++ linux-2.6.10-rc1-mm5-full/include/scsi/scsi_host.h	2004-11-13 21:47:38.000000000 +0100
@@ -528,7 +528,6 @@
 extern int __must_check scsi_add_host(struct Scsi_Host *, struct device *);
 extern void scsi_scan_host(struct Scsi_Host *);
 extern void scsi_remove_host(struct Scsi_Host *);
-extern struct Scsi_Host *scsi_host_get(struct Scsi_Host *);
 extern void scsi_host_put(struct Scsi_Host *t);
 extern struct Scsi_Host *scsi_host_lookup(unsigned short);
 
--- linux-2.6.10-rc1-mm5-full/drivers/scsi/hosts.c.old	2004-11-13 21:47:54.000000000 +0100
+++ linux-2.6.10-rc1-mm5-full/drivers/scsi/hosts.c	2004-11-13 21:49:48.000000000 +0100
@@ -60,7 +60,7 @@
  * @shost:	pointer to struct Scsi_Host
  * recovery:	recovery requested to run.
  **/
-void scsi_host_cancel(struct Scsi_Host *shost, int recovery)
+static void scsi_host_cancel(struct Scsi_Host *shost, int recovery)
 {
 	set_bit(SHOST_CANCEL, &shost->shost_state);
 	device_for_each_child(&shost->shost_gendev, &recovery,
@@ -326,6 +326,27 @@
 }
 
 /**
+ * scsi_host_get - inc a Scsi_Host ref count
+ * @shost:	Pointer to Scsi_Host to inc.
+ **/
+static struct Scsi_Host *scsi_host_get(struct Scsi_Host *shost)
+{
+	if (test_bit(SHOST_DEL, &shost->shost_state) ||
+		!get_device(&shost->shost_gendev))
+		return NULL;
+	return shost;
+}
+
+/**
+ * scsi_host_put - dec a Scsi_Host ref count
+ * @shost:	Pointer to Scsi_Host to dec.
+ **/
+void scsi_host_put(struct Scsi_Host *shost)
+{
+	put_device(&shost->shost_gendev);
+}
+
+/**
  * scsi_host_lookup - get a reference to a Scsi_Host by host no
  *
  * @hostnum:	host number to locate
@@ -352,27 +373,6 @@
 	return shost;
 }
 
-/**
- * scsi_host_get - inc a Scsi_Host ref count
- * @shost:	Pointer to Scsi_Host to inc.
- **/
-struct Scsi_Host *scsi_host_get(struct Scsi_Host *shost)
-{
-	if (test_bit(SHOST_DEL, &shost->shost_state) ||
-		!get_device(&shost->shost_gendev))
-		return NULL;
-	return shost;
-}
-
-/**
- * scsi_host_put - dec a Scsi_Host ref count
- * @shost:	Pointer to Scsi_Host to dec.
- **/
-void scsi_host_put(struct Scsi_Host *shost)
-{
-	put_device(&shost->shost_gendev);
-}
-
 int scsi_init_hosts(void)
 {
 	return class_register(&shost_class);
--- linux-2.6.10-rc1-mm5-full/drivers/scsi/scsi.c.old	2004-11-13 23:17:39.000000000 +0100
+++ linux-2.6.10-rc1-mm5-full/drivers/scsi/scsi.c	2004-11-13 23:17:53.000000000 +0100
@@ -90,7 +90,7 @@
 /*
  * Data declarations.
  */
-unsigned long scsi_pid;
+static unsigned long scsi_pid;
 static unsigned long serial_number;
 
 /*
--- linux-2.6.10-rc1-mm5-full/drivers/scsi/scsi_debug.c.old	2004-11-13 23:18:30.000000000 +0100
+++ linux-2.6.10-rc1-mm5-full/drivers/scsi/scsi_debug.c	2004-11-13 23:18:38.000000000 +0100
@@ -1781,7 +1781,7 @@
 device_initcall(scsi_debug_init);
 module_exit(scsi_debug_exit);
 
-void pseudo_0_release(struct device * dev)
+static void pseudo_0_release(struct device * dev)
 {
 	if (SCSI_DEBUG_OPT_NOISE & scsi_debug_opts)
 		printk(KERN_INFO "scsi_debug: pseudo_0_release() called\n");
--- linux-2.6.10-rc1-mm5-full/include/scsi/scsi_eh.h.old	2004-11-13 23:19:12.000000000 +0100
+++ linux-2.6.10-rc1-mm5-full/include/scsi/scsi_eh.h	2004-11-13 23:19:22.000000000 +0100
@@ -33,8 +33,6 @@
 extern void scsi_report_bus_reset(struct Scsi_Host *, int);
 extern void scsi_report_device_reset(struct Scsi_Host *, int, int);
 extern int scsi_block_when_processing_errors(struct scsi_device *);
-extern int scsi_normalize_sense(const u8 *sense_buffer, int sb_len,
-		struct scsi_sense_hdr *sshdr);
 extern int scsi_request_normalize_sense(struct scsi_request *sreq,
 		struct scsi_sense_hdr *sshdr);
 extern int scsi_command_normalize_sense(struct scsi_cmnd *cmd,
--- linux-2.6.10-rc1-mm5-full/drivers/scsi/scsi_error.c.old	2004-11-13 23:19:30.000000000 +0100
+++ linux-2.6.10-rc1-mm5-full/drivers/scsi/scsi_error.c	2004-11-13 23:20:02.000000000 +0100
@@ -1863,8 +1863,8 @@
  * Return value:
  *	1 if valid sense data information found, else 0;
  **/
-int scsi_normalize_sense(const u8 *sense_buffer, int sb_len,
-                         struct scsi_sense_hdr *sshdr)
+static int scsi_normalize_sense(const u8 *sense_buffer, int sb_len,
+				struct scsi_sense_hdr *sshdr)
 {
 	if (!sense_buffer || !sb_len || (sense_buffer[0] & 0x70) != 0x70)
 		return 0;
@@ -1902,7 +1902,6 @@
 
 	return 1;
 }
-EXPORT_SYMBOL(scsi_normalize_sense);
 
 int scsi_request_normalize_sense(struct scsi_request *sreq,
 				 struct scsi_sense_hdr *sshdr)
--- linux-2.6.10-rc1-mm5-full/include/scsi/scsi_device.h.old	2004-11-13 23:20:22.000000000 +0100
+++ linux-2.6.10-rc1-mm5-full/include/scsi/scsi_device.h	2004-11-13 23:20:28.000000000 +0100
@@ -219,7 +219,6 @@
 extern int scsi_device_set_state(struct scsi_device *sdev,
 				 enum scsi_device_state state);
 extern int scsi_device_quiesce(struct scsi_device *sdev);
-extern void scsi_device_resume(struct scsi_device *sdev);
 extern void scsi_target_quiesce(struct scsi_target *);
 extern void scsi_target_resume(struct scsi_target *);
 extern const char *scsi_device_state_name(enum scsi_device_state);
--- linux-2.6.10-rc1-mm5-full/drivers/scsi/scsi_lib.c.old	2004-11-13 23:20:35.000000000 +0100
+++ linux-2.6.10-rc1-mm5-full/drivers/scsi/scsi_lib.c	2004-11-13 23:21:02.000000000 +0100
@@ -43,7 +43,7 @@
 #endif
 
 #define SP(x) { x, "sgpool-" #x } 
-struct scsi_host_sg_pool scsi_sg_pools[] = { 
+static struct scsi_host_sg_pool scsi_sg_pools[] = { 
 	SP(8),
 	SP(16),
 	SP(32),
@@ -1755,14 +1755,13 @@
  *
  *	Must be called with user context, may sleep.
  **/
-void
+static void
 scsi_device_resume(struct scsi_device *sdev)
 {
 	if(scsi_device_set_state(sdev, SDEV_RUNNING))
 		return;
 	scsi_run_queue(sdev->request_queue);
 }
-EXPORT_SYMBOL(scsi_device_resume);
 
 static int
 device_quiesce_fn(struct device *dev, void *data)
--- linux-2.6.10-rc1-mm5-full/include/scsi/scsi_transport_fc.h.old	2004-11-13 23:21:51.000000000 +0100
+++ linux-2.6.10-rc1-mm5-full/include/scsi/scsi_transport_fc.h	2004-11-13 23:35:14.000000000 +0100
@@ -83,9 +83,5 @@
 
 struct scsi_transport_template *fc_attach_transport(struct fc_function_template *);
 void fc_release_transport(struct scsi_transport_template *);
-int fc_target_block(struct scsi_target *starget);
-void fc_target_unblock(struct scsi_target *starget);
-int fc_host_block(struct Scsi_Host *shost);
-void fc_host_unblock(struct Scsi_Host *shost);
 
 #endif /* SCSI_TRANSPORT_FC_H */
--- linux-2.6.10-rc1-mm5-full/drivers/scsi/scsi_transport_fc.c.old	2004-11-13 23:22:23.000000000 +0100
+++ linux-2.6.10-rc1-mm5-full/drivers/scsi/scsi_transport_fc.c	2004-11-13 23:40:02.000000000 +0100
@@ -52,12 +52,12 @@
 
 #define to_fc_internal(tmpl)	container_of(tmpl, struct fc_internal, t)
 
-struct class fc_transport_class = {
+static struct class fc_transport_class = {
 	.name = "fc_transport",
 	.release = transport_class_release,
 };
 
-struct class fc_host_class = {
+static struct class fc_host_class = {
 	.name = "fc_host",
 	.release = host_class_release,
 };
@@ -325,204 +325,6 @@
 EXPORT_SYMBOL(fc_release_transport);
 
 
-
-/**
- * fc_device_block - called by target functions to block a scsi device
- * @dev:	scsi device
- * @data:	unused
- **/
-static int fc_device_block(struct device *dev, void *data)
-{
-	scsi_internal_device_block(to_scsi_device(dev));
-	return 0;
-}
-
-/**
- * fc_device_unblock - called by target functions to unblock a scsi device
- * @dev:	scsi device
- * @data:	unused
- **/
-static int fc_device_unblock(struct device *dev, void *data)
-{
-	scsi_internal_device_unblock(to_scsi_device(dev));
-	return 0;
-}
-
-/**
- * fc_timeout_blocked_tgt - Timeout handler for blocked scsi targets
- *			 that fail to recover in the alloted time.
- * @data:	scsi target that failed to reappear in the alloted time.
- **/
-static void fc_timeout_blocked_tgt(unsigned long data)
-{
-	struct scsi_target *starget = (struct scsi_target *)data;
-
-	dev_printk(KERN_ERR, &starget->dev, 
-		"blocked target time out: target resuming\n");
-
-	/* 
-	 * set the device going again ... if the scsi lld didn't
-	 * unblock this device, then IO errors will probably
-	 * result if the host still isn't ready.
-	 */
-	device_for_each_child(&starget->dev, NULL, fc_device_unblock);
-}
-
-/**
- * fc_target_block - block a target by temporarily putting all its scsi devices
- *		into the SDEV_BLOCK state.
- * @starget:	scsi target managed by this fc scsi lldd.
- *
- * scsi lldd's with a FC transport call this routine to temporarily stop all
- * scsi commands to all devices managed by this scsi target.  Called 
- * from interrupt or normal process context.
- *
- * Returns zero if successful or error if not
- *
- * Notes:       
- *	The timeout and timer types are extracted from the fc transport 
- *	attributes from the caller's target pointer.  This routine assumes no
- *	locks are held on entry.
- **/
-int
-fc_target_block(struct scsi_target *starget)
-{
-	int timeout = fc_starget_dev_loss_tmo(starget);
-	struct timer_list *timer = &fc_starget_dev_loss_timer(starget);
-
-	if (timeout < 0 || timeout > SCSI_DEVICE_BLOCK_MAX_TIMEOUT)
-		return -EINVAL;
-
-	device_for_each_child(&starget->dev, NULL, fc_device_block);
-
-	/* The scsi lld blocks this target for the timeout period only. */
-	timer->data = (unsigned long)starget;
-	timer->expires = jiffies + timeout * HZ;
-	timer->function = fc_timeout_blocked_tgt;
-	add_timer(timer);
-
-	return 0;
-}
-EXPORT_SYMBOL(fc_target_block);
-
-/**
- * fc_target_unblock - unblock a target following a fc_target_block request.
- * @starget:	scsi target managed by this fc scsi lldd.	
- *
- * scsi lld's with a FC transport call this routine to restart IO to all 
- * devices associated with the caller's scsi target following a fc_target_block
- * request.  Called from interrupt or normal process context.
- *
- * Notes:       
- *	This routine assumes no locks are held on entry.
- **/
-void
-fc_target_unblock(struct scsi_target *starget)
-{
-	/* 
-	 * Stop the target timer first. Take no action on the del_timer
-	 * failure as the state machine state change will validate the
-	 * transaction. 
-	 */
-	del_timer_sync(&fc_starget_dev_loss_timer(starget));
-
-	device_for_each_child(&starget->dev, NULL, fc_device_unblock);
-}
-EXPORT_SYMBOL(fc_target_unblock);
-
-/**
- * fc_timeout_blocked_host - Timeout handler for blocked scsi hosts
- *			 that fail to recover in the alloted time.
- * @data:	scsi host that failed to recover its devices in the alloted
- *		time.
- **/
-static void fc_timeout_blocked_host(unsigned long data)
-{
-	struct Scsi_Host *shost = (struct Scsi_Host *)data;
-	struct scsi_device *sdev;
-
-	dev_printk(KERN_ERR, &shost->shost_gendev, 
-		"blocked host time out: host resuming\n");
-
-	shost_for_each_device(sdev, shost) {
-		/* 
-		 * set the device going again ... if the scsi lld didn't
-		 * unblock this device, then IO errors will probably
-		 * result if the host still isn't ready.
-		 */
-		scsi_internal_device_unblock(sdev);
-	}
-}
-
-/**
- * fc_host_block - block all scsi devices managed by the calling host temporarily 
- *		by putting each device in the SDEV_BLOCK state.
- * @shost:	scsi host pointer that contains all scsi device siblings.
- *
- * scsi lld's with a FC transport call this routine to temporarily stop all
- * scsi commands to all devices managed by this host.  Called 
- * from interrupt or normal process context.
- *
- * Returns zero if successful or error if not
- *
- * Notes:
- *	The timeout and timer types are extracted from the fc transport 
- *	attributes from the caller's host pointer.  This routine assumes no
- *	locks are held on entry.
- **/
-int
-fc_host_block(struct Scsi_Host *shost)
-{
-	struct scsi_device *sdev;
-	int timeout = fc_host_link_down_tmo(shost);
-	struct timer_list *timer = &fc_host_link_down_timer(shost);
-
-	if (timeout < 0 || timeout > SCSI_DEVICE_BLOCK_MAX_TIMEOUT)
-		return -EINVAL;
-
-	shost_for_each_device(sdev, shost) {
-		scsi_internal_device_block(sdev);
-	}
-
-	/* The scsi lld blocks this host for the timeout period only. */
-	timer->data = (unsigned long)shost;
-	timer->expires = jiffies + timeout * HZ;
-	timer->function = fc_timeout_blocked_host;
-	add_timer(timer);
-
-	return 0;
-}
-EXPORT_SYMBOL(fc_host_block);
-
-/**
- * fc_host_unblock - unblock all devices managed by this host following a 
- *		fc_host_block request.
- * @shost:	scsi host containing all scsi device siblings to unblock.
- *
- * scsi lld's with a FC transport call this routine to restart IO to all scsi
- * devices managed by the specified scsi host following an fc_host_block 
- * request.  Called from interrupt or normal process context.
- *
- * Notes:       
- *	This routine assumes no locks are held on entry.
- **/
-void
-fc_host_unblock(struct Scsi_Host *shost)
-{
-	struct scsi_device *sdev;
-
-	/* 
-	 * Stop the host timer first. Take no action on the del_timer
-	 * failure as the state machine state change will validate the
-	 * transaction.
-	 */
-	del_timer_sync(&fc_host_link_down_timer(shost));
-	shost_for_each_device(sdev, shost) {
-		scsi_internal_device_unblock(sdev);
-	}
-}
-EXPORT_SYMBOL(fc_host_unblock);
-
 MODULE_AUTHOR("Martin Hicks");
 MODULE_DESCRIPTION("FC Transport Attributes");
 MODULE_LICENSE("GPL");
--- linux-2.6.10-rc1-mm5-full/drivers/scsi/scsi_transport_spi.c.old	2004-11-13 23:41:04.000000000 +0100
+++ linux-2.6.10-rc1-mm5-full/drivers/scsi/scsi_transport_spi.c	2004-11-13 23:41:25.000000000 +0100
@@ -119,12 +119,12 @@
 }
 
 
-struct class spi_transport_class = {
+static struct class spi_transport_class = {
 	.name = "spi_transport",
 	.release = transport_class_release,
 };
 
-struct class spi_host_class = {
+static struct class spi_host_class = {
 	.name = "spi_host",
 	.release = host_class_release,
 };


             reply	other threads:[~2004-11-15  4:05 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-11-15  2:04 Adrian Bunk [this message]
2004-11-15  4:50 ` [2.6 patch] SCSI: misc possible cleanups James Bottomley
2004-11-15  5:02   ` Adrian Bunk
  -- strict thread matches above, loose matches on Subject: below --
2004-11-15 13:57 James.Smart
2004-11-15 16:22 ` Adrian Bunk

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=20041115020432.GK2249@stusta.de \
    --to=bunk@stusta.de \
    --cc=James.Bottomley@SteelEye.com \
    --cc=linux-kernel@vger.kernel.org \
    --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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox