]> www.infradead.org Git - users/sagi/libnvme.git/commitdiff
have tree export directly opening namespaces
authorKeith Busch <kbusch@kernel.org>
Fri, 29 May 2020 20:43:52 +0000 (13:43 -0700)
committerKeith Busch <kbusch@kernel.org>
Fri, 29 May 2020 20:43:52 +0000 (13:43 -0700)
Signed-off-by: Keith Busch <kbusch@kernel.org>
src/nvme/filters.c
src/nvme/tree.c
src/nvme/tree.h

index 790ca64fbdad2580f561b4efdc4eb4bb409f64d0..06137f5f1a84eb90ccc2f47961e55203aa514bdb 100644 (file)
@@ -23,6 +23,7 @@
 #include "util.h"
 
 const char *nvme_ctrl_sysfs_dir = "/sys/class/nvme";
+const char *nvme_ns_sysfs_dir = "/sys/block";
 const char *nvme_subsys_sysfs_dir = "/sys/class/nvme-subsystem";
 
 int nvme_namespace_filter(const struct dirent *d)
index 620b74d8b5ce4699b625057d7e151160bec9cc56..835bb4396ac2b3d5f62e079e54ae8d51beb18afe 100644 (file)
 /* XXX: Make a place for private declarations */
 extern int nvme_set_attr(const char *dir, const char *attr, const char *value);
 
+void nvme_free_subsystem(struct nvme_subsystem *s);
+int nvme_subsystem_scan_namespace(struct nvme_subsystem *s, char *name);
+int nvme_scan_subsystem(struct nvme_root *r, char *name, nvme_scan_filter_t f);
+int nvme_subsystem_scan_ctrl(struct nvme_subsystem *s, char *name);
+int nvme_ctrl_scan_namespace(struct nvme_ctrl *c, char *name);
+int nvme_ctrl_scan_path(struct nvme_ctrl *c, char *name);
+
 struct nvme_path {
        struct list_node entry;
        struct list_node nentry;
@@ -102,20 +109,6 @@ struct nvme_root {
        struct list_head subsystems;
 };
 
-void nvme_free_ctrl(struct nvme_ctrl *c);
-void nvme_ctrl_free_ns(struct nvme_ns *n);
-void nvme_subsystem_free_ns(struct nvme_ns *n);
-void nvme_free_path(struct nvme_path *p);
-void nvme_free_subsystem(struct nvme_subsystem *s);
-
-int nvme_scan_subsystem(struct nvme_root *t, char *name, nvme_scan_filter_t f);
-int nvme_subsystem_scan_namespace(struct nvme_subsystem *s, char *name);
-int nvme_subsystem_scan_ctrls(struct nvme_subsystem *s);
-int nvme_subsystem_scan_ctrl(struct nvme_subsystem *s, char *name);
-
-int nvme_ctrl_scan_namespace(struct nvme_ctrl *c, char *name);
-int nvme_ctrl_scan_path(struct nvme_ctrl *c, char *name);
-
 static inline void nvme_free_dirents(struct dirent **d, int i)
 {
        while (i-- > 0)
@@ -229,7 +222,7 @@ nvme_ns_t nvme_subsystem_next_ns(nvme_subsystem_t s, nvme_ns_t n)
        return n ? list_next(&s->namespaces, n, entry) : NULL;
 }
 
-static void nvme_free_ns(struct nvme_ns *n)
+void nvme_free_ns(struct nvme_ns *n)
 {
        list_del_init(&n->entry);
        close(n->fd);
@@ -873,9 +866,8 @@ static void nvme_ns_init(struct nvme_ns *n)
                nvme_ns_parse_descriptors(n, descs);
 }
 
-nvme_ns_t nvme_ns_open(char *name)
+static nvme_ns_t nvme_ns_open(const char *name)
 {
-       char *b = basename(name);
        struct nvme_ns *n;
 
        n = calloc(1, sizeof(*n));
@@ -884,9 +876,8 @@ nvme_ns_t nvme_ns_open(char *name)
                return NULL;
        }
 
-       n->name = strdup(b);
-       n->fd = nvme_open(b);
-
+       n->name = strdup(name);
+       n->fd = nvme_open(n->name);
        if (n->fd < 0)
                goto free_ns;
 
@@ -895,6 +886,7 @@ nvme_ns_t nvme_ns_open(char *name)
                goto close_fd;
 
        list_head_init(&n->paths);
+       list_node_init(&n->entry);
        nvme_ns_init(n);
 
        return n;
@@ -902,11 +894,12 @@ nvme_ns_t nvme_ns_open(char *name)
 close_fd:
        close(n->fd);
 free_ns:
+       free(n->name);
        free(n);
        return NULL;
 }
 
-static struct nvme_ns *__nvme_scan_namespace(const char *sysfs_dir, char *name)
+static struct nvme_ns *__nvme_scan_namespace(const char *sysfs_dir, const char *name)
 {
        struct nvme_ns *n;
        char *path;
@@ -930,6 +923,11 @@ free_path:
        return NULL;
 }
 
+nvme_ns_t nvme_scan_namespace(const char *name)
+{
+       return __nvme_scan_namespace(nvme_ns_sysfs_dir, name);
+}
+
 int nvme_ctrl_scan_namespace(struct nvme_ctrl *c, char *name)
 {
        struct nvme_ns *n;
index b8e66fc4d7f59a3efc69af6fa549325ab512c4b5..86ecdc42e71e6ff00ef4dfbcd0f53e2520ec035d 100644 (file)
@@ -22,6 +22,7 @@
 
 extern const char *nvme_ctrl_sysfs_dir;
 extern const char *nvme_subsys_sysfs_dir;
+extern const char *nvme_ns_sysfs_dir;
 
 /**
  *
@@ -53,12 +54,6 @@ typedef struct nvme_root *nvme_root_t;
  */
 typedef bool (*nvme_scan_filter_t)(nvme_subsystem_t);
 
-
-/**
- *
- */
-nvme_ns_t nvme_ns_open(char *name);
-
 /**
  * nvme_first_subsystem() -
  * @r:
@@ -321,6 +316,12 @@ nvme_subsystem_t nvme_ns_get_subsystem(nvme_ns_t n);
  */
 nvme_ctrl_t nvme_ns_get_ctrl(nvme_ns_t n);
 
+/**
+ * nvme_free_ns() -
+ * @ns:
+ */
+void nvme_free_ns(struct nvme_ns *n);
+
 /**
  * nvme_ns_read() -
  * @n:
@@ -700,4 +701,6 @@ char *nvme_get_ns_attr(nvme_ns_t n, const char *attr);
  */
 char *nvme_get_path_attr(nvme_path_t p, const char *attr);
 
+nvme_ns_t nvme_scan_namespace(const char *name);
+
 #endif /* _LIBNVME_TREE_H */