/* 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;
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)
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);
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));
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;
goto close_fd;
list_head_init(&n->paths);
+ list_node_init(&n->entry);
nvme_ns_init(n);
return n;
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;
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;
extern const char *nvme_ctrl_sysfs_dir;
extern const char *nvme_subsys_sysfs_dir;
+extern const char *nvme_ns_sysfs_dir;
/**
*
*/
typedef bool (*nvme_scan_filter_t)(nvme_subsystem_t);
-
-/**
- *
- */
-nvme_ns_t nvme_ns_open(char *name);
-
/**
* nvme_first_subsystem() -
* @r:
*/
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:
*/
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 */