[PATCH V2 1/1] nvme: Add verbose error logging

Keith Busch kbusch at kernel.org
Mon Dec 27 08:07:32 PST 2021


On Thu, Dec 23, 2021 at 01:57:26PM -0800, Alan Adamson wrote:
> +
> +static const char * const nvme_errors[] = {
> +	"Success",
> +	"Invalid Command Opcode",
> +	"Invalid Field in Command",
> +	"Command ID Conflict",
> +	"Data Transfer Error",
> +	"Commands Aborted due to Power Loss Notification",
> +	"Internal Error",
> +	"Command Abort Requested",
> +	"Command Aborted due to SQ Deletion",
> +	"Command Aborted due to Failed Fused Command",
> +	"Command Aborted due to Missing Fused Command",
> +	"Invalid Namespace or Format",
> +	"Command Sequence Error",
> +	"Invalid SGL Segment Descriptor",
> +	"Invalid Number of SGL Descriptors",
> +	"Data SGL Length Invalid",
> +	"Metadata SGL Length Invalid",
> +	"SGL Descriptor Type Invalid",
> +	"Invalid Use of Controller Memory Buffer",
> +	"PRP Offset Invalid",
> +	"Atomic Write Unit Exceeded",
> +	"Operation Denied",
> +	"SGL Offset Invalid",
> +	"Reserved",
> +	"Host Identifier Inconsistent Format",
> +	"Keep Alive Timeout Expired",
> +	"Keep Alive Timeout Invalid",
> +	"Command Aborted due to Preempt and Abort",
> +	"Sanitize Failed",
> +	"Sanitize In Progress",
> +	"SGL Data Block Granularity Invalid",
> +	"Command Not Supported for Queue in CMB",
> +	"Namespace is Write Protected",
> +	"Command Interrupted",
> +	"Transient Transport Error",
> +	NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,

Tracking these NULL's is going to be problematic and error prone.

I recommend indexing the strings as you define them. For example:

static const char * const nvme_errors[] = {
	[NVME_SC_SUCCESS] = "Success",
	[NVME_SC_INVALID_OPCODE] = "Invalid Command Opcode",

etc...

Then you don't need to bother tracking the undefined indexes or making
sure everything is in order.



More information about the Linux-nvme mailing list