sg descriptor sense cleanup lk 2.6.11-rc1-bk1
Subsystems (2)
PATCH 1/1 sg descriptor sense cleanup lk 2.6.11-rc1-bk1
Continuation of descriptor sense data expansion to sg driver.
Next will be the sd driver which awaits a
new utility function in constants.c to read the
sense data information field for medium/hardware
errors.
Changelog:
- expand sense data handling to descriptor format
- make module parameters visible in /sys/modules/sg/parameters
- add "readable" SCSI commands: READ(16), REPORT LUNS, SERVICE_ACTION_IN, RECEIVE_DIAGNOSTIC, READ_LONG and MAINTENANCE_IN_CMD to list
drivers/scsi/sg.c2611rc1bk1des renamed from drivers/scsi/sg.c +19 -11
@@ -7,7 +7,7 @@ * Original driver (sg.c): * Copyright (C) 1992 Lawrence Foard * Version 2 and 3 extensions to driver: - * Copyright (C) 1998 - 2004 Douglas Gilbert + * Copyright (C) 1998 - 2005 Douglas Gilbert * * Modified 19-JAN-1998 Richard Gooch <[email protected]> Devfs support *
@@ -18,8 +18,8 @@ * */ -static int sg_version_num = 30531; /* 2 digits for each component */ -#define SG_VERSION_STR "3.5.31" +static int sg_version_num = 30532; /* 2 digits for each component */ +#define SG_VERSION_STR "3.5.32" /* * D. P. Gilbert ([email protected], [email protected]), notes:
@@ -60,7 +60,7 @@ #ifdef CONFIG_SCSI_PROC_FS #include <linux/proc_fs.h> -static char *sg_version_date = "20040516"; +static char *sg_version_date = "20050117"; static int sg_proc_init(void); static void sg_proc_cleanup(void);
@@ -1282,6 +1282,8 @@ srp->header.duration = jiffies_to_msecs(jiffies - srp->header.duration); if (0 != SRpnt->sr_result) { + struct scsi_sense_hdr sshdr; + memcpy(srp->sense_b, SRpnt->sr_sense_buffer, sizeof (srp->sense_b)); srp->header.status = 0xff & SRpnt->sr_result;
@@ -1296,11 +1298,12 @@ /* Following if statement is a patch supplied by Eric Youngdale */ if (driver_byte(SRpnt->sr_result) != 0 - && (SRpnt->sr_sense_buffer[0] & 0x7f) == 0x70 - && (SRpnt->sr_sense_buffer[2] & 0xf) == UNIT_ATTENTION + && scsi_command_normalize_sense(SCpnt, &sshdr) + && !scsi_sense_is_deferred(&sshdr) + && sshdr.sense_key == UNIT_ATTENTION && sdp->device->removable) { - /* Detected disc change. Set the bit - this may be used if */ - /* there are filesystems using this device. */ + /* Detected possible disc change. Set the bit - this */ + /* may be used if there are filesystems using this device */ sdp->device->changed = 1; } }
@@ -1573,8 +1576,8 @@ * of sysfs parameters (which module_param doesn't yet support). * Sysfs parameters defined explicitly below. */ -module_param_named(def_reserved_size, def_reserved_size, int, 0); -module_param_named(allow_dio, sg_allow_dio, int, 0); +module_param_named(def_reserved_size, def_reserved_size, int, S_IRUGO); +module_param_named(allow_dio, sg_allow_dio, int, S_IRUGO | S_IWUSR); MODULE_AUTHOR("Douglas Gilbert"); MODULE_DESCRIPTION("SCSI generic (sg) driver");
@@ -2606,9 +2609,14 @@ free_pages((unsigned long) buff, order); } +#ifndef MAINTENANCE_IN_CMD +#define MAINTENANCE_IN_CMD 0xa3 +#endif + static unsigned char allow_ops[] = { TEST_UNIT_READY, REQUEST_SENSE, INQUIRY, READ_CAPACITY, READ_BUFFER, READ_6, READ_10, READ_12, - MODE_SENSE, MODE_SENSE_10, LOG_SENSE + READ_16, MODE_SENSE, MODE_SENSE_10, LOG_SENSE, REPORT_LUNS, + SERVICE_ACTION_IN, RECEIVE_DIAGNOSTIC, READ_LONG, MAINTENANCE_IN_CMD }; static int
Quoted 16 lines · Douglas Gilbert
Continuation of descriptor sense data expansion to sg driver.
Next will be the sd driver which awaits a
new utility function inconstants.cto read the
sense data information field for medium/hardware
errors.Changelog:
- expand sense data handling to descriptor format
- make module parameters visible in/sys/modules/sg/parameters
- add "readable" SCSI commands: READ(16), REPORT LUNS,SERVICE_ACTION_IN,RECEIVE_DIAGNOSTIC,READ_LONGandMAINTENANCE_IN_CMDto list
Quoted 1 line
Signed-off-by Douglas Gilbert <[email protected]>
+#ifndef MAINTENANCE_IN_CMD
+#define MAINTENANCE_IN_CMD 0xa3
+#endif
Shouldn't we put it into <scsi/scsi.h> ?
Quoted 25 lines · Christoph Hellwig
Quoted 17 lines · Douglas Gilbert
Continuation of descriptor sense data expansion to sg driver.
Next will be the sd driver which awaits a
new utility function inconstants.cto read the
sense data information field for medium/hardware
errors.Changelog:
- expand sense data handling to descriptor format
- make module parameters visible in/sys/modules/sg/parameters
- add "readable" SCSI commands: READ(16), REPORT LUNS,SERVICE_ACTION_IN,RECEIVE_DIAGNOSTIC,READ_LONGandMAINTENANCE_IN_CMDto listSigned-off-by Douglas Gilbert <[email protected]>drivers/scsi/sg.c2611rc1bk1des renamed from drivers/scsi/sg.c +3
-0+#ifndef MAINTENANCE_IN_CMD +#define MAINTENANCE_IN_CMD 0xa3 +#endif
Quoted 1 line
Shouldn't we put it into <
scsi/scsi.h> ?
Yes it should. For a larger list of missing "byte 0" opcodes see the top of constants.c
The opcodes with a "in" suffix retrieve data from the device so are generally safe to use when the device is opened O_RDONLY.
So the various SCSI command sets are not limited in number to 256, more use is being made of service actions. Maintanance In contains these commands (or at least they are documented separately in SPC-3):
Report device identifier [a3/5]
Report target port groups [a3/a]
Report aliases [a3/b]
Report supported operation codes [a3/c] Report supported task management functions [a3/d] Report priority [a3/e]
And sooner or later we will need to support variable length commands.
Doug Gilbert