For the buses, that don't have nfit support, they use to
return "No such file or directory" for start-scrub/
wait-scrub command.

Though, non-nfit support buses do not support start-scrub/
wait-scrub operation. I propose this patch to handle these
commands more gracefully by returning "Operation not
supported".

Previously:
$ ./ndctl start-scrub ndbus0
error starting scrub: No such file or directory

Now:
$ ./ndctl start-scrub ndbus0
error starting scrub: Operation not supported

Signed-off-by: Tarun Sahu <[email protected]>
---
 ndctl/lib/libndctl.c | 18 ++++++++++++++----
 1 file changed, 14 insertions(+), 4 deletions(-)

diff --git a/ndctl/lib/libndctl.c b/ndctl/lib/libndctl.c
index ccca8b5..8bfad6a 100644
--- a/ndctl/lib/libndctl.c
+++ b/ndctl/lib/libndctl.c
@@ -938,10 +938,14 @@ static void *add_bus(void *parent, int id, const char 
*ctl_base)
        if (!bus->wait_probe_path)
                goto err_read;
 
-       sprintf(path, "%s/device/nfit/scrub", ctl_base);
-       bus->scrub_path = strdup(path);
-       if (!bus->scrub_path)
-               goto err_read;
+       if (ndctl_bus_has_nfit(bus)) {
+               sprintf(path, "%s/device/nfit/scrub", ctl_base);
+               bus->scrub_path = strdup(path);
+               if (!bus->scrub_path)
+                       goto err_read;
+       } else {
+               bus->scrub_path = NULL;
+       }
 
        sprintf(path, "%s/device/firmware/activate", ctl_base);
        if (sysfs_read_attr(ctx, path, buf) < 0)
@@ -1377,6 +1381,9 @@ NDCTL_EXPORT int ndctl_bus_start_scrub(struct ndctl_bus 
*bus)
        struct ndctl_ctx *ctx = ndctl_bus_get_ctx(bus);
        int rc;
 
+       if (bus->scrub_path == NULL)
+               return -EOPNOTSUPP;
+
        rc = sysfs_write_attr(ctx, bus->scrub_path, "1\n");
 
        /*
@@ -1447,6 +1454,9 @@ NDCTL_EXPORT int ndctl_bus_poll_scrub_completion(struct 
ndctl_bus *bus,
        char in_progress;
        int fd = 0, rc;
 
+       if (bus->scrub_path == NULL)
+               return -EOPNOTSUPP;
+
        fd = open(bus->scrub_path, O_RDONLY|O_CLOEXEC);
        if (fd < 0)
                return -errno;
-- 
2.35.1


Reply via email to