]> www.infradead.org Git - users/sagi/libnvme.git/commitdiff
Export single namespace open
authorKeith Busch <kbusch@kernel.org>
Fri, 27 Mar 2020 23:43:22 +0000 (16:43 -0700)
committerKeith Busch <kbusch@kernel.org>
Sat, 28 Mar 2020 00:05:42 +0000 (17:05 -0700)
Signed-off-by: Keith Busch <kbusch@kernel.org>
Makefile
examples/Makefile
src/Makefile
src/libnvme.map
src/nvme/tree.c
src/nvme/tree.h

index 030f9abf0561d0e94de54781d6643a58bd34c5f8..ef470beffec0ab1a2897f144ce802c110cd1e80d 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -32,7 +32,7 @@ include config-host.mak
 endif
 
 SED_PROCESS = \
-       $(SED) -e "s%@prefix@%$(prefix)%g" \
+       sed -e "s%@prefix@%$(prefix)%g" \
                -e "s%@libdir@%$(libdir)%g" \
                -e "s%@includedir@%$(includedir)%g" \
                -e "s%@NAME@%$(NAME)%g" \
index 3731d4ac27bb30fca4edd708c6d34e0665bdcd82..be867a76485c67aa4bc046a92f352d2def68427a 100644 (file)
@@ -1,5 +1,5 @@
 CFLAGS ?= -g -O2
-override CFLAGS += -Wall -D_GNU_SOURCE -L../src/ -I../src/
+override CFLAGS += -Wall -D_GNU_SOURCE
 
 include ../Makefile.quiet
 
index 8977e72a6291a070690cd4b0378480de6ebad854..129e624d7474dc61e5317762d8861b740452d742 100644 (file)
@@ -47,7 +47,7 @@ libccan_sobjs := $(patsubst %.c,%.os,$(libccan_srcs))
 $(libccan_objs) $(libccan_sobjs): $(libccan_headers) $(CCANDIR)config.h
 
 libnvme_priv := nvme/private.h
-libnvme_api := libnvme.h nvme/types.h nvme/ioctl.h nvme/filters.h nvme/tree.h nvme/util.h
+libnvme_api := libnvme.h nvme/types.h nvme/ioctl.h nvme/filters.h nvme/tree.h nvme/util.h nvme/fabrics.h
 libnvme_srcs := nvme/ioctl.c nvme/filters.c nvme/fabrics.c nvme/util.c nvme/tree.c
 libnvme_objs := $(patsubst %.c,%.ol,$(libnvme_srcs))
 libnvme_sobjs := $(patsubst %.c,%.os,$(libnvme_srcs))
index 6fb0c9e2c92414fab887bf8fe60fdc92caf7edee..64c04b0a596206de82a5bbf31cb5f5caa4eeb696 100644 (file)
                nvme_path_get_ana_state;
                nvme_ns_get_sysfs_dir;
                nvme_ns_get_name;
+               nvme_ns_open;
                nvme_status_type;
                nvme_status_to_string;
                nvme_status_to_errno;
                nvme_fw_download_seq;
                nvme_get_telemetry_log;
+               nvme_get_ctrl_telemetry;
                nvme_setup_id_ns;
                nvme_setup_ctrl_list;
                nvme_dsm_range;
index 05bfe74b3b0e9f0e75ed4eb835692367f8e3c5c9..d850aa73cf3ae8b7a00ab1aae436261872460cdc 100644 (file)
@@ -13,6 +13,7 @@
 #include <stdio.h>
 #include <string.h>
 #include <fcntl.h>
+#include <libgen.h>
 #include <unistd.h>
 
 #include <ccan/list/list.h>
@@ -51,6 +52,7 @@ struct nvme_ns {
        char *sysfs_dir;
        int nsid;
 
+       int lba_shift;
        int lba_size;
        int meta_size;
        uint64_t lba_count;
@@ -668,8 +670,8 @@ static int nvme_bytes_to_lba(nvme_ns_t n, off_t offset, size_t count,
                return -1;
        }
 
-       *lba = offset / bs;
-       *nlb = (count / bs) - 1;
+       *lba = offset >> n->lba_shift;
+       *nlb = (count >> n->lba_shift) - 1;
        return 0;
 }
 
@@ -807,32 +809,27 @@ static void nvme_ns_init(struct nvme_ns *n)
        if (nvme_ns_identify(n, &ns) != 0)
                return;
 
-       n->lba_size = 1 << ns.lbaf[ns.flbas & NVME_NS_FLBAS_LBA_MASK].ds;
+       n->lba_shift = ns.lbaf[ns.flbas & NVME_NS_FLBAS_LBA_MASK].ds;
+       n->lba_size = 1 << n->lba_shift;
        n->lba_count = le64_to_cpu(ns.nsze);
        n->lba_util = le64_to_cpu(ns.nuse);
 }
 
-static struct nvme_ns *__nvme_scan_namespace(const char *sysfs_dir, char *name)
+
+nvme_ns_t nvme_ns_open(char *name)
 {
+       char *b = basename(name);
        struct nvme_ns *n;
-       char *path;
-       int ret;
-
-       ret = asprintf(&path, "%s/%s", sysfs_dir, name);
-       if (ret < 0) {
-               errno = ENOMEM;
-               return NULL;
-       }
 
        n = calloc(1, sizeof(*n));
        if (!n) {
                errno = ENOMEM;
-               goto free_path;
+               return NULL;
        }
 
-       n->name = strdup(name);
-       n->sysfs_dir = path;
-       n->fd = nvme_open(name);
+       n->name = strdup(b);
+       n->fd = nvme_open(b);
+
        if (n->fd < 0)
                goto free_ns;
 
@@ -849,6 +846,28 @@ close_fd:
        close(n->fd);
 free_ns:
        free(n);
+       return NULL;
+}
+
+static struct nvme_ns *__nvme_scan_namespace(const char *sysfs_dir, char *name)
+{
+       struct nvme_ns *n;
+       char *path;
+       int ret;
+
+       ret = asprintf(&path, "%s/%s", sysfs_dir, name);
+       if (ret < 0) {
+               errno = ENOMEM;
+               return NULL;
+       }
+
+       n = nvme_ns_open(name);
+       if (!n)
+               goto free_path;
+
+       n->sysfs_dir = path;
+       return n;
+
 free_path:
        free(path);
        return NULL;
index 172196a0f4bc5c234d6e632ab0de52956f130000..6cce9224472664dad35d6d86f425fdf52401e875 100644 (file)
@@ -51,6 +51,12 @@ 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: