Skip to contentSkip to conversation

Add interface to set default value to scsi timeout variables

PATCH New Takahiro Yasui 1 participant 1 message Jul 16, 2009 SCSI

lore
Share & tools
lore
#0 lore raw

PATCH 2/2 Add interface to set default value to scsi timeout variables

Introduce interfaces, scsi_mod module parameter (initparm) and procfs (scsi/initparm) to define default values, timeout and max_timeout_cnt, for the devices identified by vendor and model.

Default values can be registered through these interfaces with the format of "v:m:t:c[,v:m:t:c]"
(v:vendor, m:model, t=timeout, c=max_timeout_cnt)

Example:

* Load scsi module with default values, scsi timeout(10s) and maximum timeout count (1) for HITACHI/DF600.

    # insmod scsi_mod.ko initparm="HITACHI:DF600:10:1"

* Show current default settings

    # cat /proc/scsi/initparm
    'HITACHI' 'DF600' timeout=10 max_timeout_cnt=1
---
 drivers/scsi/Makefile        |    3 
 drivers/scsi/scsi.c          |    8 -
 drivers/scsi/scsi_initparm.c |  338 +++++++++++++++++++++++++++++++++++++++++++
 drivers/scsi/scsi_priv.h     |    5 
 drivers/scsi/scsi_scan.c     |    2 
 5 files changed, 354 insertions(+), 2 deletions(-)
drivers/scsi/Makefile +2 -1
Index: linux-2.6.31-rc2-scsi-rc-fixes-2.6/drivers/scsi/Makefile
===================================================================
@@ -151,7 +151,8 @@ obj-$(CONFIG_SCSI_WAIT_SCAN)	+= scsi_wai
 scsi_mod-y			+= scsi.o hosts.o scsi_ioctl.o constants.o \
 				   scsicam.o scsi_error.o scsi_lib.o
 scsi_mod-$(CONFIG_SCSI_DMA)	+= scsi_lib_dma.o
-scsi_mod-y			+= scsi_scan.o scsi_sysfs.o scsi_devinfo.o
+scsi_mod-y			+= scsi_scan.o scsi_sysfs.o scsi_devinfo.o \
+				   scsi_initparm.o
 scsi_mod-$(CONFIG_SCSI_NETLINK)	+= scsi_netlink.o
 scsi_mod-$(CONFIG_SYSCTL)	+= scsi_sysctl.o
 scsi_mod-$(CONFIG_SCSI_PROC_FS)	+= scsi_proc.o
drivers/scsi/scsi.c +7 -1
Index: linux-2.6.31-rc2-scsi-rc-fixes-2.6/drivers/scsi/scsi.c
===================================================================
@@ -1323,9 +1323,12 @@ static int __init init_scsi(void)
 	error = scsi_init_devinfo();
 	if (error)
 		goto cleanup_procfs;
-	error = scsi_init_hosts();
+	error = scsi_init_initparm();
 	if (error)
 		goto cleanup_devlist;
+	error = scsi_init_hosts();
+	if (error)
+		goto cleanup_config;
 	error = scsi_init_sysctl();
 	if (error)
 		goto cleanup_hosts;
@@ -1342,6 +1345,8 @@ cleanup_sysctl:
 	scsi_exit_sysctl();
 cleanup_hosts:
 	scsi_exit_hosts();
+cleanup_config:
+	scsi_exit_initparm();
 cleanup_devlist:
 	scsi_exit_devinfo();
 cleanup_procfs:
@@ -1360,6 +1365,7 @@ static void __exit exit_scsi(void)
 	scsi_exit_sysctl();
 	scsi_exit_hosts();
 	scsi_exit_devinfo();
+	scsi_exit_initparm();
 	scsi_exit_procfs();
 	scsi_exit_queue();
 }
drivers/scsi/scsi_initparm.c new file +338 -0

338 lines not on this page · raw message

drivers/scsi/scsi_priv.h +5 -0
Index: linux-2.6.31-rc2-scsi-rc-fixes-2.6/drivers/scsi/scsi_priv.h
===================================================================
@@ -61,6 +61,11 @@ extern int scsi_dev_info_remove_list(int
 extern int __init scsi_init_devinfo(void);
 extern void scsi_exit_devinfo(void);
 
+/* scsi_initparm.c */
+extern void scsi_override_parms(struct scsi_device *sdev);
+extern int __init scsi_init_initparm(void);
+extern void scsi_exit_initparm(void);
+
 /* scsi_error.c */
 extern enum blk_eh_timer_return scsi_times_out(struct request *req);
 extern int scsi_error_handler(void *host);
drivers/scsi/scsi_scan.c +2 -0
Index: linux-2.6.31-rc2-scsi-rc-fixes-2.6/drivers/scsi/scsi_scan.c
===================================================================
@@ -926,6 +926,8 @@ static int scsi_add_lun(struct scsi_devi
 	if (*bflags & BLIST_RETRY_HWERROR)
 		sdev->retry_hwerror = 1;
 
+	scsi_override_parms(sdev);
+
 	transport_configure_device(&sdev->sdev_gendev);
 
 	if (sdev->host->hostt->slave_configure) {