storvsc: add logging for error/warning messages
Subsystems (2)
PATCH v2 1/1 storvsc: add logging for error/warning messages
Introduce a logging level for storvsc to log certain error/warning messages. Those messages are helpful in some environments, e.g. Microsoft Azure, for customer support and troubleshooting purposes.
--- drivers/scsi/storvsc_drv.c | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-)
drivers/scsi/storvsc_drv.c +33 -1
@@ -164,6 +164,26 @@ static int sense_buffer_size = PRE_WIN8_STORVSC_SENSE_BUFFER_SIZE;*/ static int vmstor_proto_version; +#define STORVSC_LOGGING_NONE 0 +#define STORVSC_LOGGING_ERROR 1 +#define STORVSC_LOGGING_WARN 2 + +static int logging_level =STORVSC_LOGGING_ERROR ; +module_param (logging_level, int,S_IRUGO |S_IWUSR ); +MODULE_PARM_DESC (logging_level, +"Logging level, 0 - None, 1 - Error (default), 2 - Warning." ); + +static inline bool do_logging (int level) +{ +return logging_level >= level; +} + +#define storvsc_log (dev, level, fmt, ...) \ +do { \ + if (do_logging(level)) \ + dev_warn(&(dev)->device, fmt, ##__VA_ARGS__); \ +} while (0) +struct vmscsi_win8_extension {/* * The following were added in Windows 8
@@ -1185,7 +1205,8 @@ static void storvsc_command_completion(struct storvsc_cmd_request *cmd_request)if (scmnd->result) {if (scsi_normalize_sense (scmnd->sense_buffer, -SCSI_SENSE_BUFFERSIZE , &sense_hdr)) +SCSI_SENSE_BUFFERSIZE , &sense_hdr) && +do_logging (STORVSC_LOGGING_ERROR ))scsi_print_sense_hdr (scmnd->device,"storvsc" , &sense_hdr); }
@@ -1239,6 +1260,13 @@ static void storvsc_on_io_completion(struct hv_device *device, stor_pkt->vm_srb.sense_info_length = vstor_packet->vm_srb.sense_info_length; +if (vstor_packet->vm_srb.scsi_status !=0 || + vstor_packet->vm_srb.srb_status !=SRB_STATUS_SUCCESS ) +storvsc_log (device,STORVSC_LOGGING_WARN , +"cmd 0x%x scsi status 0x%x srb status 0x%x\n" , + stor_pkt->vm_srb.cdb[0 ], + vstor_packet->vm_srb.scsi_status, + vstor_packet->vm_srb.srb_status);if ((vstor_packet->vm_srb.scsi_status &0xFF ) ==0x02 ) {/* CHECK_CONDITION */
@@ -1246,6 +1274,10 @@ static void storvsc_on_io_completion(struct hv_device *device, SRB_STATUS_AUTOSENSE_VALID) {/* autosense data available */ +storvsc_log (device,STORVSC_LOGGING_WARN , +"stor pkt %p autosense data valid - len %d\n" , + request, vstor_packet->vm_srb.sense_info_length); +memcpy (request->cmd->sense_buffer, vstor_packet->vm_srb.sense_data, vstor_packet->vm_srb.sense_info_length);
Signature · 1 line
1.8.5.6
Quoted 11 lines
-----Original Message-----
From: Long Li [mailto:[email protected]]
Sent: Friday, December 4, 2015 12:07 AM
To: KY Srinivasan <[email protected]>; Haiyang Zhang <[email protected]>; James E.J. Bottomley <[email protected]>
Cc: [email protected]; [email protected]; linux- [email protected]; Long Li <[email protected]>
Subject: [PATCH v2] storvsc: add logging for error/warning messages
Quoted 5 lines
Introduce a logging level for storvsc to log certain error/warning messages. Those messages are helpful in some environments, e.g. Microsoft Azure, for customer support and troubleshooting purposes.
Signed-off-by Long Li <[email protected]>
Quoted 78 lines
--- drivers/scsi/storvsc_drv.c | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-)drivers/scsi/storvsc_drv.c +20
-0@@ -164,6 +164,26 @@ static int sense_buffer_size =PRE_WIN8_STORVSC_SENSE_BUFFER_SIZE; */ static int vmstor_proto_version; +#define STORVSC_LOGGING_NONE 0 +#define STORVSC_LOGGING_ERROR 1 +#define STORVSC_LOGGING_WARN 2 + +static int logging_level =STORVSC_LOGGING_ERROR ; +module_param (logging_level, int,S_IRUGO |S_IWUSR ); +MODULE_PARM_DESC (logging_level, +"Logging level, 0 - None, 1 - Error (default), 2 - Warning." ); + +static inline bool do_logging (int level) +{ +return logging_level >= level; +} + +#define storvsc_log (dev, level, fmt, ...) \ +do { \ + if (do_logging(level)) \ + dev_warn(&(dev)->device, fmt, ##__VA_ARGS__); \ +} while (0) +struct vmscsi_win8_extension {/* drivers/scsi/storvsc_drv.c +2
-1* The following were added in Windows 8 @@ -1185,7 +1205,8 @@ static void storvsc_command_completion(struct storvsc_cmd_request *cmd_request)if (scmnd->result) {if (scsi_normalize_sense (scmnd->sense_buffer, -SCSI_SENSE_BUFFERSIZE , &sense_hdr)) +SCSI_SENSE_BUFFERSIZE , &sense_hdr) && +do_logging (STORVSC_LOGGING_ERROR ))scsi_print_sense_hdr (scmnd->device,"storvsc" , &sense_hdr);drivers/scsi/storvsc_drv.c +7
-0}@@ -1239,6 +1260,13 @@ static void storvsc_on_io_completion(struct hv_device *device, stor_pkt->vm_srb.sense_info_length = vstor_packet->vm_srb.sense_info_length; +if (vstor_packet->vm_srb.scsi_status !=0 || + vstor_packet->vm_srb.srb_status !=SRB_STATUS_SUCCESS ) +storvsc_log (device,STORVSC_LOGGING_WARN , +"cmd 0x%x scsi status 0x%x srb status 0x%x\n" , + stor_pkt->vm_srb.cdb[0 ], + vstor_packet->vm_srb.scsi_status, + vstor_packet->vm_srb.srb_status);if ((vstor_packet->vm_srb.scsi_status &0xFF ) ==0x02 ) {drivers/scsi/storvsc_drv.c +4
-0/* CHECK_CONDITION */ @@ -1246,6 +1274,10 @@ static void storvsc_on_io_completion(structhv_device *device, SRB_STATUS_AUTOSENSE_VALID) {/* autosense data available */ +storvsc_log (device ,STORVSC_LOGGING_WARN , + "stor pkt %p autosense data valid - len %d\n", + request, vstor_packet- >vm_srb.sense_info_length); +drivers/scsi/storvsc_drv.c +0
-1memcpy (request->cmd->sense_buffer, vstor_packet->vm_srb.sense_data, vstor_packet->vm_srb.sense_info_length); --1.8.5.6
Martin K. Petersen
AppliedQuoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
"Long" == Long Li <[email protected]> writes:
Long> Introduce a logging level for storvsc to log certain error/warning Long> messages. Those messages are helpful in some environments, Long> e.g. Microsoft Azure, for customer support and troubleshooting Long> purposes.
Applied to 4.5/scsi-queue.
Signature · 1 line
Martin K. Petersen Oracle Linux Engineering