.. | .. |
---|
| 1 | +// SPDX-License-Identifier: GPL-2.0-only |
---|
1 | 2 | /* |
---|
2 | 3 | * scsi_logging.c |
---|
3 | 4 | * |
---|
4 | 5 | * Copyright (C) 2014 SUSE Linux Products GmbH |
---|
5 | 6 | * Copyright (C) 2014 Hannes Reinecke <hare@suse.de> |
---|
6 | | - * |
---|
7 | | - * This file is released under the GPLv2 |
---|
8 | 7 | */ |
---|
9 | 8 | |
---|
10 | 9 | #include <linux/kernel.h> |
---|
.. | .. |
---|
206 | 205 | /* Print opcode in one line and use separate lines for CDB */ |
---|
207 | 206 | off += scnprintf(logbuf + off, logbuf_len - off, "\n"); |
---|
208 | 207 | dev_printk(KERN_INFO, &cmd->device->sdev_gendev, "%s", logbuf); |
---|
209 | | - scsi_log_release_buffer(logbuf); |
---|
210 | 208 | for (k = 0; k < cmd->cmd_len; k += 16) { |
---|
211 | 209 | size_t linelen = min(cmd->cmd_len - k, 16); |
---|
212 | 210 | |
---|
213 | | - logbuf = scsi_log_reserve_buffer(&logbuf_len); |
---|
214 | | - if (!logbuf) |
---|
215 | | - break; |
---|
216 | 211 | off = sdev_format_header(logbuf, logbuf_len, |
---|
217 | 212 | scmd_name(cmd), |
---|
218 | 213 | cmd->request->tag); |
---|
.. | .. |
---|
225 | 220 | } |
---|
226 | 221 | dev_printk(KERN_INFO, &cmd->device->sdev_gendev, "%s", |
---|
227 | 222 | logbuf); |
---|
228 | | - scsi_log_release_buffer(logbuf); |
---|
229 | 223 | } |
---|
230 | | - return; |
---|
| 224 | + goto out; |
---|
231 | 225 | } |
---|
232 | 226 | if (!WARN_ON(off > logbuf_len - 49)) { |
---|
233 | 227 | off += scnprintf(logbuf + off, logbuf_len - off, " "); |
---|
.. | .. |
---|
237 | 231 | } |
---|
238 | 232 | out_printk: |
---|
239 | 233 | dev_printk(KERN_INFO, &cmd->device->sdev_gendev, "%s", logbuf); |
---|
| 234 | +out: |
---|
240 | 235 | scsi_log_release_buffer(logbuf); |
---|
241 | 236 | } |
---|
242 | 237 | EXPORT_SYMBOL(scsi_print_command); |
---|
.. | .. |
---|
391 | 386 | const char *mlret_string = scsi_mlreturn_string(disposition); |
---|
392 | 387 | const char *hb_string = scsi_hostbyte_string(cmd->result); |
---|
393 | 388 | const char *db_string = scsi_driverbyte_string(cmd->result); |
---|
| 389 | + unsigned long cmd_age = (jiffies - cmd->jiffies_at_alloc) / HZ; |
---|
394 | 390 | |
---|
395 | 391 | logbuf = scsi_log_reserve_buffer(&logbuf_len); |
---|
396 | 392 | if (!logbuf) |
---|
.. | .. |
---|
432 | 428 | |
---|
433 | 429 | if (db_string) |
---|
434 | 430 | off += scnprintf(logbuf + off, logbuf_len - off, |
---|
435 | | - "driverbyte=%s", db_string); |
---|
| 431 | + "driverbyte=%s ", db_string); |
---|
436 | 432 | else |
---|
437 | 433 | off += scnprintf(logbuf + off, logbuf_len - off, |
---|
438 | | - "driverbyte=0x%02x", driver_byte(cmd->result)); |
---|
| 434 | + "driverbyte=0x%02x ", |
---|
| 435 | + driver_byte(cmd->result)); |
---|
| 436 | + |
---|
| 437 | + off += scnprintf(logbuf + off, logbuf_len - off, |
---|
| 438 | + "cmd_age=%lus", cmd_age); |
---|
| 439 | + |
---|
439 | 440 | out_printk: |
---|
440 | 441 | dev_printk(KERN_INFO, &cmd->device->sdev_gendev, "%s", logbuf); |
---|
441 | 442 | scsi_log_release_buffer(logbuf); |
---|