Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Leap:15.5:Update
ppc64-diag.32143
diags-diag_nvme-call_home-command-fails-on-nvmf...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File diags-diag_nvme-call_home-command-fails-on-nvmf-driv.patch of Package ppc64-diag.32143
From db0c6d7974d7f8909878384d77ec02457759d6df Mon Sep 17 00:00:00 2001 From: Nilay Shroff <nilay@linux.ibm.com> Date: Tue, 16 Jan 2024 13:55:03 +0530 Subject: [PATCH] diags/diag_nvme: call_home command fails on nvmf drive The diag_nvme command needs to retrieve the VPD log page from NVMe for filling in the product data while generating the call-home event. However, call-home feature is supported for directly attached NVMe module. In the current diag_nvme implementation, if user doesn't provide NVMe device name for diagnostics then it(diag_nvme) loops through each NVMe moudle (directly connected to the system/LPAR as well as discovered over fabrics) and attempt retrieving the SMART log page as well as VPD page. Unfortunately, diag_nvme fails to retrieve the VPD page for NVMe connected over fabrics and that causes the diag_nvme to print "not-so-nice" failure messages on console. Henec fixed the diag_nvme code so that for call-home event reporting, it skips the NVMe which is connected over fabrics and prints a "nice-message" informing the user that it's skipping diagnosting for NVMe module connected over fabrics. In a nutshell, with this fix now diag_nvme would only diagnose the NVMe module which is directtly attached (over PCIe) to the system. Signed-off-by: Nilay Shroff <nilay@linux.ibm.com> --- diags/diag_nvme.c | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/diags/diag_nvme.c b/diags/diag_nvme.c index c1c0a20ddf14..e86786ccdccd 100644 --- a/diags/diag_nvme.c +++ b/diags/diag_nvme.c @@ -375,9 +375,40 @@ static int diagnose_nvme(char *device_name, struct notify *notify, char *file_pa char endurance_s[sizeof(vpd.endurance) + 1], capacity_s[sizeof(vpd.capacity)+1]; uint64_t event_id; uint8_t severity; + FILE *fp; + char tr_file_path[PATH_MAX]; uint32_t raw_data_len = 0; unsigned char *raw_data = NULL; + /* + * Skip diag test if NVMe is connected over fabric + */ + snprintf(tr_file_path, sizeof(tr_file_path), + NVME_SYS_PATH"/%s/%s", device_name, "transport"); + fp = fopen(tr_file_path, "r"); + if (fp) { + char buf[12]; + int n = fread(buf, 1, sizeof(buf), fp); + + if (n) { + /* + * If NVMe transport is anything but pcie then skip the diag test + */ + if (strncmp(buf, "pcie", 4) != 0) { + fprintf(stdout, "Skipping diagnostics for nvmf : %s\n", + device_name); + fclose(fp); + return 0; + } + } + fclose(fp); + } else { + fprintf(stderr, "Skipping diagnostics for %s:\n" + "Unable to find the nvme transport type\n", + device_name); + return -1; + } + tmp_rc = regex_controller(controller_name, device_name); if (tmp_rc != 0) return -1; -- 2.43.2
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor