aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/scsi_logging.c
diff options
context:
space:
mode:
authorHannes Reinecke <hare@suse.de>2015-01-08 01:43:47 -0500
committerChristoph Hellwig <hch@lst.de>2015-01-09 09:44:31 -0500
commit026f8da8da4ce3423bf89e8e9091f55ae3863eda (patch)
treec4a4fef7a66a6ba9d331f3ea2e07b982d935e028 /drivers/scsi/scsi_logging.c
parent2104551969e8011e72788dc5674609d437448cf6 (diff)
scsi: use per-cpu buffer for formatting scsi_print_result()
Convert scsi_print_result() to use the per-cpu buffer for decoding the command result and disposition. Tested-by: Robert Elliott <elliott@hp.com> Reviewed-by: Robert Elliott <elliott@hp.com> Signed-off-by: Hannes Reinecke <hare@suse.de> Signed-off-by: Christoph Hellwig <hch@lst.de>
Diffstat (limited to 'drivers/scsi/scsi_logging.c')
-rw-r--r--drivers/scsi/scsi_logging.c59
1 files changed, 59 insertions, 0 deletions
diff --git a/drivers/scsi/scsi_logging.c b/drivers/scsi/scsi_logging.c
index c7cba3113f31..6128303f9c50 100644
--- a/drivers/scsi/scsi_logging.c
+++ b/drivers/scsi/scsi_logging.c
@@ -428,3 +428,62 @@ void scsi_print_sense(const struct scsi_cmnd *cmd)
428 cmd->sense_buffer, SCSI_SENSE_BUFFERSIZE); 428 cmd->sense_buffer, SCSI_SENSE_BUFFERSIZE);
429} 429}
430EXPORT_SYMBOL(scsi_print_sense); 430EXPORT_SYMBOL(scsi_print_sense);
431
432void scsi_print_result(const struct scsi_cmnd *cmd, const char *msg,
433 int disposition)
434{
435 char *logbuf;
436 size_t off, logbuf_len;
437 const char *mlret_string = scsi_mlreturn_string(disposition);
438 const char *hb_string = scsi_hostbyte_string(cmd->result);
439 const char *db_string = scsi_driverbyte_string(cmd->result);
440
441 logbuf = scsi_log_reserve_buffer(&logbuf_len);
442 if (!logbuf)
443 return;
444
445 off = sdev_format_header(logbuf, logbuf_len,
446 scmd_name(cmd), cmd->request->tag);
447
448 if (off >= logbuf_len)
449 goto out_printk;
450
451 if (msg) {
452 off += scnprintf(logbuf + off, logbuf_len - off,
453 "%s: ", msg);
454 if (WARN_ON(off >= logbuf_len))
455 goto out_printk;
456 }
457 if (mlret_string)
458 off += scnprintf(logbuf + off, logbuf_len - off,
459 "%s ", mlret_string);
460 else
461 off += scnprintf(logbuf + off, logbuf_len - off,
462 "UNKNOWN(0x%02x) ", disposition);
463 if (WARN_ON(off >= logbuf_len))
464 goto out_printk;
465
466 off += scnprintf(logbuf + off, logbuf_len - off, "Result: ");
467 if (WARN_ON(off >= logbuf_len))
468 goto out_printk;
469
470 if (hb_string)
471 off += scnprintf(logbuf + off, logbuf_len - off,
472 "hostbyte=%s ", hb_string);
473 else
474 off += scnprintf(logbuf + off, logbuf_len - off,
475 "hostbyte=0x%02x ", host_byte(cmd->result));
476 if (WARN_ON(off >= logbuf_len))
477 goto out_printk;
478
479 if (db_string)
480 off += scnprintf(logbuf + off, logbuf_len - off,
481 "driverbyte=%s", db_string);
482 else
483 off += scnprintf(logbuf + off, logbuf_len - off,
484 "driverbyte=0x%02x", driver_byte(cmd->result));
485out_printk:
486 dev_printk(KERN_INFO, &cmd->device->sdev_gendev, logbuf);
487 scsi_log_release_buffer(logbuf);
488}
489EXPORT_SYMBOL(scsi_print_result);