diff options
| author | James Bottomley <James.Bottomley@steeleye.com> | 2007-09-23 10:08:46 -0400 |
|---|---|---|
| committer | James Bottomley <jejb@mulgrave.localdomain> | 2007-10-12 14:51:56 -0400 |
| commit | 311b581e1d87be87f78e6e17fc50f468f2dec561 (patch) | |
| tree | 22ebbc79dd9f028875cf158531ed10b081020699 | |
| parent | 12a441622b753684cc73d1c6f225e9ac53e0bf77 (diff) | |
[SCSI] Fix device not ready printk
Because scsi_print_sense_hdr prefixes with KERN_INFO, the output from
scsi_io_completion looks like:
sd 0:0:0:0: [sdb] Device not ready: <6>: Sense Key : 0x2 [current]
: ASC=0x4 ASCQ=0x3
By using scsi_show_sense_hdr, we can get the much more appealing output:
sd 0:0:0:0: [sdb] Device not ready: Sense Key : 0x2 [current]
sd 0:0:0:0: [sdb] Device not ready: ASC=0x4 ASCQ=0x3
Acked-by: Matthew Wilcox <willy@linux.intel.com>
Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
| -rw-r--r-- | drivers/scsi/constants.c | 14 | ||||
| -rw-r--r-- | drivers/scsi/scsi_lib.c | 10 | ||||
| -rw-r--r-- | include/scsi/scsi_dbg.h | 2 |
3 files changed, 21 insertions, 5 deletions
diff --git a/drivers/scsi/constants.c b/drivers/scsi/constants.c index 7bdeed1c5a56..024553f9c247 100644 --- a/drivers/scsi/constants.c +++ b/drivers/scsi/constants.c | |||
| @@ -1235,6 +1235,20 @@ scsi_print_sense_hdr(const char *name, struct scsi_sense_hdr *sshdr) | |||
| 1235 | } | 1235 | } |
| 1236 | EXPORT_SYMBOL(scsi_print_sense_hdr); | 1236 | EXPORT_SYMBOL(scsi_print_sense_hdr); |
| 1237 | 1237 | ||
| 1238 | /* | ||
| 1239 | * Print normalized SCSI sense header with device information and a prefix. | ||
| 1240 | */ | ||
| 1241 | void | ||
| 1242 | scsi_cmd_print_sense_hdr(struct scsi_cmnd *scmd, const char *desc, | ||
| 1243 | struct scsi_sense_hdr *sshdr) | ||
| 1244 | { | ||
| 1245 | scmd_printk(KERN_INFO, scmd, "%s: ", desc); | ||
| 1246 | scsi_show_sense_hdr(sshdr); | ||
| 1247 | scmd_printk(KERN_INFO, scmd, "%s: ", desc); | ||
| 1248 | scsi_show_extd_sense(sshdr->asc, sshdr->ascq); | ||
| 1249 | } | ||
| 1250 | EXPORT_SYMBOL(scsi_cmd_print_sense_hdr); | ||
| 1251 | |||
| 1238 | static void | 1252 | static void |
| 1239 | scsi_decode_sense_buffer(const unsigned char *sense_buffer, int sense_len, | 1253 | scsi_decode_sense_buffer(const unsigned char *sense_buffer, int sense_len, |
| 1240 | struct scsi_sense_hdr *sshdr) | 1254 | struct scsi_sense_hdr *sshdr) |
diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c index 94d82cb96626..86fd3abe731a 100644 --- a/drivers/scsi/scsi_lib.c +++ b/drivers/scsi/scsi_lib.c | |||
| @@ -944,11 +944,11 @@ void scsi_io_completion(struct scsi_cmnd *cmd, unsigned int good_bytes) | |||
| 944 | break; | 944 | break; |
| 945 | } | 945 | } |
| 946 | } | 946 | } |
| 947 | if (!(req->cmd_flags & REQ_QUIET)) { | 947 | if (!(req->cmd_flags & REQ_QUIET)) |
| 948 | scmd_printk(KERN_INFO, cmd, | 948 | scsi_cmd_print_sense_hdr(cmd, |
| 949 | "Device not ready: "); | 949 | "Device not ready", |
| 950 | scsi_print_sense_hdr("", &sshdr); | 950 | &sshdr); |
| 951 | } | 951 | |
| 952 | scsi_end_request(cmd, 0, this_count, 1); | 952 | scsi_end_request(cmd, 0, this_count, 1); |
| 953 | return; | 953 | return; |
| 954 | case VOLUME_OVERFLOW: | 954 | case VOLUME_OVERFLOW: |
diff --git a/include/scsi/scsi_dbg.h b/include/scsi/scsi_dbg.h index 5a43a4cd96c6..e89844cc2cd3 100644 --- a/include/scsi/scsi_dbg.h +++ b/include/scsi/scsi_dbg.h | |||
| @@ -9,6 +9,8 @@ extern void __scsi_print_command(unsigned char *); | |||
| 9 | extern void scsi_show_extd_sense(unsigned char, unsigned char); | 9 | extern void scsi_show_extd_sense(unsigned char, unsigned char); |
| 10 | extern void scsi_show_sense_hdr(struct scsi_sense_hdr *); | 10 | extern void scsi_show_sense_hdr(struct scsi_sense_hdr *); |
| 11 | extern void scsi_print_sense_hdr(const char *, struct scsi_sense_hdr *); | 11 | extern void scsi_print_sense_hdr(const char *, struct scsi_sense_hdr *); |
| 12 | extern void scsi_cmd_print_sense_hdr(struct scsi_cmnd *, const char *, | ||
| 13 | struct scsi_sense_hdr *); | ||
| 12 | extern void scsi_print_sense(char *, struct scsi_cmnd *); | 14 | extern void scsi_print_sense(char *, struct scsi_cmnd *); |
| 13 | extern void __scsi_print_sense(const char *name, | 15 | extern void __scsi_print_sense(const char *name, |
| 14 | const unsigned char *sense_buffer, | 16 | const unsigned char *sense_buffer, |
