Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 14 Jan 2008 19:19:27 +0200 (EET)
From:      Andriy Gapon <avg@icyb.net.ua>
To:        FreeBSD-gnats-submit@FreeBSD.org
Subject:   kern/119668: scsi/cam: certain errors are too verbose comparing to their importance
Message-ID:  <200801141719.m0EHJRh8074948@rein.cybervisiontech.com.ua>
Resent-Message-ID: <200801141720.m0EHK2I8014919@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help

>Number:         119668
>Category:       kern
>Synopsis:       scsi/cam: certain errors are too verbose comparing to their importance
>Confidential:   no
>Severity:       non-critical
>Priority:       medium
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Mon Jan 14 17:20:02 UTC 2008
>Closed-Date:
>Last-Modified:
>Originator:     Andriy Gapon
>Release:        FreeBSD 6.2-RELEASE-p6 amd64
>Organization:
>Environment:
System: FreeBSD 6.2-RELEASE-p6 amd64


	
>Description:
Rationale for this request is that kernel messages easily get spammed
with the error reports which do not really mean error conditions. Some
amount of such noise comes from the kernel-land actions, lots more can
come from user-land programs unwittingly trying to do certain things on
the devices with no media or wrong media (example: hald).

Examples of such conditions: empty slots in card reader, changed media,
attempts to read audio CD as data CD. Typical CAM messages:
ILLEGAL REQUEST Illegal mode for this track
ILLEGAL REQUEST Medium removal prevented
NOT READY       Medium not present
UNIT ATTENTION  Not ready to ready change, medium may have changed

All of the above don't really mean any problem with a device or media,
in this sense the conditions can be called normal operation situations.

The following is proposed:
1. introduce new scsi_sense_action_qualifier value
SSQ_PRINT_SENSE_VERBOSE, which would mean that detailed command and
response information is to be printed only if bootverbose==1;

2. introduce new define SS_FATAL_NORMAL with value of
(SS_FAIL|SSQ_PRINT_SENSE_VERBOSE), which would mean a fatal SCSI error
that can happen in "normal conditions", i.e. in the most cases the error
doesn't imply a problem with a peripheral device, media, bus,
controller, etc;

3. use the above SS_FATAL_NORMAL for at least the conditions mentioned above;

4. modify camperiphscsisenseerror() to honor the new flag defined above;

P.S. the names I used above are no very good but I couldn't come up
with anything better.

>How-To-Repeat:
Couple of links describing end-user experience (mine included):
http://lists.freebsd.org/pipermail/freebsd-gnome/2007-January/016544.html
http://forums.pcbsd.org/viewtopic.php?f=7&t=7044
http://lists.freebsd.org/pipermail/freebsd-gnome/2007-December/018816.html

>Fix:
The attached patch doesn't include code for 'Medium removal prevented'
condition.

	

--- verboseness.diff begins here ---
--- sys/cam/scsi/scsi_all.h.orig	Fri Dec 21 17:52:50 2007
+++ sys/cam/scsi/scsi_all.h	Fri Dec 21 17:57:29 2007
@@ -90,6 +90,7 @@ typedef enum {
 					    * and text.
 					    */
 	SSQ_PRINT_SENSE		= 0x0800,
+	SSQ_PRINT_SENSE_VERBOSE	= 0x1000,
 	SSQ_MASK		= 0xff00
 } scsi_sense_action_qualifier;
 
@@ -104,6 +105,12 @@ typedef enum {
 
 /* Fatal error action, with table specified error code */
 #define SS_FATAL	SS_FAIL|SSQ_PRINT_SENSE
+
+/* Fatal error action, with table specified error code */
+/* This type of error doesn't imply malfunction of hardware and
+ * and indicates conditions that can occur in "normal" circumstances
+ */
+#define SS_FATAL_NORMAL	SS_FAIL|SSQ_PRINT_SENSE_VERBOSE
 
 struct scsi_generic
 {
--- sys/cam/scsi/scsi_all.c.orig	Fri Dec 21 17:54:50 2007
+++ sys/cam/scsi/scsi_all.c	Tue Dec 25 14:07:45 2007
@@ -1102,7 +1102,7 @@ static struct asc_table_entry asc_table[
 			"Persistent write protect") },
 /*  T           */{SST(0x27, 0x05, SS_FATAL|EACCES,
 			"Permanent write protect") },
-/* DTLPWRSOMCAE */{SST(0x28, 0x00, SS_FATAL|ENXIO,
+/* DTLPWRSOMCAE */{SST(0x28, 0x00, SS_FATAL_NORMAL|ENXIO,
 			"Not ready to ready change, medium may have changed") },
 /* DTLPWRSOMCAE */{SST(0x28, 0x01, SS_FATAL|ENXIO,
 			"Import or export element accessed") },
@@ -1197,7 +1197,7 @@ static struct asc_table_entry asc_table[
 			"Rounded parameter") },
 /* DTL WRSOMCAE */{SST(0x39, 0x00, SS_RDEF,
 			"Saving parameters not supported") },
-/* DTL WRSOM    */{SST(0x3A, 0x00, SS_FATAL|ENXIO,
+/* DTL WRSOM    */{SST(0x3A, 0x00, SS_FATAL_NORMAL|ENXIO,
 			"Medium not present") },
 /* DT  WR OM    */{SST(0x3A, 0x01, SS_FATAL|ENXIO,
 			"Medium not present - tray closed") },
@@ -1395,7 +1395,7 @@ static struct asc_table_entry asc_table[
 			"End of user area encountered on this track") },
 /*      R       */{SST(0x63, 0x01, SS_FATAL|ENOSPC,
 			"Packet does not fit in available space") },
-/*      R       */{SST(0x64, 0x00, SS_FATAL|ENXIO,
+/*      R       */{SST(0x64, 0x00, SS_FATAL_NORMAL|ENXIO,
 			"Illegal mode for this track") },
 /*      R       */{SST(0x64, 0x01, SS_RDEF,
 			"Invalid packet size") },
--- sys/cam/cam_periph.c.orig	Fri Dec 21 17:57:53 2007
+++ sys/cam/cam_periph.c	Fri Dec 21 18:00:13 2007
@@ -1515,7 +1515,8 @@ camperiphscsisenseerror(union ccb *ccb, 
 		}
 
 sense_error_done:
-		if ((err_action & SSQ_PRINT_SENSE) != 0
+		if (((err_action & SSQ_PRINT_SENSE) != 0
+		    || ((err_action & SSQ_PRINT_SENSE_VERBOSE) != 0 && bootverbose))
 		 && (ccb->ccb_h.status & CAM_AUTOSNS_VALID) != 0) {
 			cam_error_print(print_ccb, CAM_ESF_ALL, CAM_EPF_ALL);
 			xpt_print_path(ccb->ccb_h.path);
--- verboseness.diff ends here ---


>Release-Note:
>Audit-Trail:
>Unformatted:



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200801141719.m0EHJRh8074948>