anitazha / rpms / ndctl

Forked from rpms/ndctl a year ago
Clone

Blame 0172-ndctl-bus-Handle-missing-scrub-commands-more-gracefu.patch

Jeff Moyer 2c91dc
From 3e17210345482ec9795f1046c766564d3b8a0795 Mon Sep 17 00:00:00 2001
Jeff Moyer 2c91dc
From: Tarun Sahu <tsahu@linux.ibm.com>
Jeff Moyer 2c91dc
Date: Mon, 2 May 2022 12:34:54 +0530
Jeff Moyer 2c91dc
Subject: [PATCH 172/217] ndctl/bus: Handle missing scrub commands more
Jeff Moyer 2c91dc
 gracefully
Jeff Moyer 2c91dc
Jeff Moyer 2c91dc
Buses that don't have nfit support return "No such file or directory"
Jeff Moyer 2c91dc
for start-scrub/wait-scrub command.
Jeff Moyer 2c91dc
Jeff Moyer 2c91dc
Presently, non-nfit support buses do not support start-scrub/ wait-scrub
Jeff Moyer 2c91dc
operation. This patch is to handle these commands more gracefully by
Jeff Moyer 2c91dc
returning" Operation not supported".
Jeff Moyer 2c91dc
Jeff Moyer 2c91dc
This has been tested on PPC64le lpar with nvdimm that does not support
Jeff Moyer 2c91dc
scrub.
Jeff Moyer 2c91dc
Jeff Moyer 2c91dc
Previously:
Jeff Moyer 2c91dc
  $ ./ndctl start-scrub ndbus0
Jeff Moyer 2c91dc
  error starting scrub: No such file or directory
Jeff Moyer 2c91dc
Jeff Moyer 2c91dc
Now:
Jeff Moyer 2c91dc
  $ ./ndctl start-scrub ndbus0
Jeff Moyer 2c91dc
  error starting scrub: Operation not supported
Jeff Moyer 2c91dc
Jeff Moyer 2c91dc
- Invalid ndbus
Jeff Moyer 2c91dc
  $ sudo ./ndctl start-scrub ndbus5
Jeff Moyer 2c91dc
  error starting scrub: No such device or address
Jeff Moyer 2c91dc
Jeff Moyer 2c91dc
Link: https://lore.kernel.org/r/20220502070454.179153-1-tsahu@linux.ibm.com
Jeff Moyer 2c91dc
Tested-by: Vaibhav Jain <vaibhav@linux.ibm.com>
Jeff Moyer 2c91dc
Reviewed-by: Vaibhav Jain <vaibhav@linux.ibm.com>
Jeff Moyer 2c91dc
Signed-off-by: Tarun Sahu <tsahu@linux.ibm.com>
Jeff Moyer 2c91dc
Signed-off-by: Vishal Verma <vishal.l.verma@intel.com>
Jeff Moyer 2c91dc
---
Jeff Moyer 2c91dc
 ndctl/lib/libndctl.c | 18 ++++++++++++++----
Jeff Moyer 2c91dc
 1 file changed, 14 insertions(+), 4 deletions(-)
Jeff Moyer 2c91dc
Jeff Moyer 2c91dc
diff --git a/ndctl/lib/libndctl.c b/ndctl/lib/libndctl.c
Jeff Moyer 2c91dc
index 110d8a5..ad54f06 100644
Jeff Moyer 2c91dc
--- a/ndctl/lib/libndctl.c
Jeff Moyer 2c91dc
+++ b/ndctl/lib/libndctl.c
Jeff Moyer 2c91dc
@@ -938,10 +938,14 @@ static void *add_bus(void *parent, int id, const char *ctl_base)
Jeff Moyer 2c91dc
 	if (!bus->wait_probe_path)
Jeff Moyer 2c91dc
 		goto err_read;
Jeff Moyer 2c91dc
 
Jeff Moyer 2c91dc
-	sprintf(path, "%s/device/nfit/scrub", ctl_base);
Jeff Moyer 2c91dc
-	bus->scrub_path = strdup(path);
Jeff Moyer 2c91dc
-	if (!bus->scrub_path)
Jeff Moyer 2c91dc
-		goto err_read;
Jeff Moyer 2c91dc
+	if (ndctl_bus_has_nfit(bus)) {
Jeff Moyer 2c91dc
+		sprintf(path, "%s/device/nfit/scrub", ctl_base);
Jeff Moyer 2c91dc
+		bus->scrub_path = strdup(path);
Jeff Moyer 2c91dc
+		if (!bus->scrub_path)
Jeff Moyer 2c91dc
+			goto err_read;
Jeff Moyer 2c91dc
+	} else {
Jeff Moyer 2c91dc
+		bus->scrub_path = NULL;
Jeff Moyer 2c91dc
+	}
Jeff Moyer 2c91dc
 
Jeff Moyer 2c91dc
 	sprintf(path, "%s/device/firmware/activate", ctl_base);
Jeff Moyer 2c91dc
 	if (sysfs_read_attr(ctx, path, buf) < 0)
Jeff Moyer 2c91dc
@@ -1377,6 +1381,9 @@ NDCTL_EXPORT int ndctl_bus_start_scrub(struct ndctl_bus *bus)
Jeff Moyer 2c91dc
 	struct ndctl_ctx *ctx = ndctl_bus_get_ctx(bus);
Jeff Moyer 2c91dc
 	int rc;
Jeff Moyer 2c91dc
 
Jeff Moyer 2c91dc
+	if (bus->scrub_path == NULL)
Jeff Moyer 2c91dc
+		return -EOPNOTSUPP;
Jeff Moyer 2c91dc
+
Jeff Moyer 2c91dc
 	rc = sysfs_write_attr(ctx, bus->scrub_path, "1\n");
Jeff Moyer 2c91dc
 
Jeff Moyer 2c91dc
 	/*
Jeff Moyer 2c91dc
@@ -1447,6 +1454,9 @@ NDCTL_EXPORT int ndctl_bus_poll_scrub_completion(struct ndctl_bus *bus,
Jeff Moyer 2c91dc
 	char in_progress;
Jeff Moyer 2c91dc
 	int fd = 0, rc;
Jeff Moyer 2c91dc
 
Jeff Moyer 2c91dc
+	if (bus->scrub_path == NULL)
Jeff Moyer 2c91dc
+		return -EOPNOTSUPP;
Jeff Moyer 2c91dc
+
Jeff Moyer 2c91dc
 	fd = open(bus->scrub_path, O_RDONLY|O_CLOEXEC);
Jeff Moyer 2c91dc
 	if (fd < 0)
Jeff Moyer 2c91dc
 		return -errno;
Jeff Moyer 2c91dc
-- 
Jeff Moyer 2c91dc
2.27.0
Jeff Moyer 2c91dc