Skip to content

Add windows tree support#3537

Merged
igaw merged 2 commits into
linux-nvme:masterfrom
igaw:add-tree-support
Jul 2, 2026
Merged

Add windows tree support#3537
igaw merged 2 commits into
linux-nvme:masterfrom
igaw:add-tree-support

Conversation

@igaw

@igaw igaw commented Jul 2, 2026

Copy link
Copy Markdown
Collaborator

This is #3440 just with a bit of reorganization of the patches and some whitespace changes. I know the formatting rules are a bit inconsistent but we started with the cleanup in nvme-cmds.h & co where this style has been used.

supersedes: #3440

diff --git a/libnvme/src/nvme/ctrl-map.c b/libnvme/src/nvme/ctrl-map.c
index 0fb970c7f58d..37101be5f60a 100644
--- a/libnvme/src/nvme/ctrl-map.c
+++ b/libnvme/src/nvme/ctrl-map.c
@@ -234,9 +234,8 @@ static char *find_or_create_subsys_name(const struct nvme_id_ctrl *id_ctrl)
 	return subsys_name;
 }
 
-static int libnvme_ctrl_map_add(DWORD ctrl_index,
-				const WCHAR *ctrl_path,
-				const struct nvme_id_ctrl *id_ctrl)
+static int libnvme_ctrl_map_add(DWORD ctrl_index, const WCHAR *ctrl_path,
+		const struct nvme_id_ctrl *id_ctrl)
 {
 	struct ctrl_map_entry *entry;
 	char *ctrl_name_copy;
@@ -334,8 +333,7 @@ static char *ctrl_name_extract(const char *ctrl_name)
  * Returns 0 on success with id_ctrl filled in, negative errno on failure.
  */
 static int identify_ctrl_from_handle(struct libnvme_global_ctx *ctx,
-				     libnvme_fd_t h,
-				     struct nvme_id_ctrl *id_ctrl)
+		libnvme_fd_t h, struct nvme_id_ctrl *id_ctrl)
 {
 	struct libnvme_transport_handle *hdl;
 	struct libnvme_passthru_cmd cmd;
@@ -410,9 +408,8 @@ static int get_adapter_bus_type(libnvme_fd_t h, STORAGE_BUS_TYPE *out_bus_type)
  *   -ENOMEM  allocation failure
  *   -ENOENT  no more items (enumeration complete)
  */
-static int get_device_interface_path(HDEVINFO hdev,
-				     DWORD index,
-				     WCHAR **device_interface_path)
+static int get_device_interface_path(HDEVINFO hdev, DWORD index,
+		WCHAR **device_interface_path)
 {
 	SP_DEVICE_INTERFACE_DATA if_data = {
 		.cbSize = sizeof(if_data),
@@ -533,7 +530,7 @@ int libnvme_ctrl_map_init(struct libnvme_global_ctx *ctx)
 }
 
 struct ctrl_map_entry *libnvme_ctrl_map_lookup(struct libnvme_global_ctx *ctx,
-					       const char *ctrl_name)
+		const char *ctrl_name)
 {
 	__cleanup_free char *ctrl_name_copy = NULL;
 
@@ -552,7 +549,7 @@ struct ctrl_map_entry *libnvme_ctrl_map_lookup(struct libnvme_global_ctx *ctx,
 
 const struct ctrl_map_entry *
 libnvme_ctrl_map_lookup_by_physdrive(struct libnvme_global_ctx *ctx,
-				     const char *drive_path)
+		const char *drive_path)
 {
 	DWORD target_num;
 	char *endptr;
@@ -606,7 +603,7 @@ libnvme_ctrl_map_lookup_by_physdrive(struct libnvme_global_ctx *ctx,
 }
 
 int libnvme_ctrl_map_entry_set_id_ctrl(struct ctrl_map_entry *entry,
-				       const struct nvme_id_ctrl *id)
+		const struct nvme_id_ctrl *id)
 {
 	if (!entry || !id)
 		return -EINVAL;
@@ -616,7 +613,7 @@ int libnvme_ctrl_map_entry_set_id_ctrl(struct ctrl_map_entry *entry,
 }
 
 const char *libnvme_ctrl_map_entry_get_ctrl_name(
-	const struct ctrl_map_entry *entry)
+		const struct ctrl_map_entry *entry)
 {
 	if (!entry || !entry->ctrl_name)
 		return NULL;
@@ -625,7 +622,7 @@ const char *libnvme_ctrl_map_entry_get_ctrl_name(
 }
 
 int libnvme_ctrl_map_entry_get_ctrl_path(const struct ctrl_map_entry *entry,
-					 char **ctrl_path)
+		char **ctrl_path)
 {
 	int path_len;
 	char *ctrl_path_copy;
@@ -655,7 +652,7 @@ int libnvme_ctrl_map_entry_get_ctrl_path(const struct ctrl_map_entry *entry,
 }
 
 int libnvme_ctrl_map_entry_get_pci_address(const struct ctrl_map_entry *entry,
-					   char **address)
+		char **address)
 {
 	WCHAR instance_id[MAX_DEVICE_ID_LEN];
 	WCHAR location_info[256];
@@ -740,9 +737,9 @@ static int get_device_number(libnvme_fd_t h, DWORD *device_number)
 }
 
 int libnvme_ctrl_map_entry_scan_device_numbers(
-	const struct ctrl_map_entry *entry,
-	DWORD **device_numbers,
-	int *count)
+		const struct ctrl_map_entry *entry,
+		DWORD **device_numbers,
+		int *count)
 {
 	WCHAR ctrl_instance_id[MAX_DEVICE_ID_LEN];
 	DEVPROPTYPE prop_type = 0;
@@ -866,9 +863,9 @@ int libnvme_ctrl_map_entry_scan_device_numbers(
 }
 
 int libnvme_ctrl_map_entry_map_nsid_to_drive_path(
-	const struct ctrl_map_entry *entry,
-	__u32 nsid,
-	char **drive_path)
+		const struct ctrl_map_entry *entry,
+		__u32 nsid,
+		char **drive_path)
 {
 	DWORD *device_numbers = NULL;
 	int dev_count = 0;
@@ -924,7 +921,7 @@ int libnvme_ctrl_map_entry_map_nsid_to_drive_path(
 }
 
 char *libnvme_ctrl_map_entry_get_subsys_name(
-	const struct ctrl_map_entry *entry)
+		const struct ctrl_map_entry *entry)
 {
 	char *subsysname;
 
diff --git a/libnvme/src/nvme/private-ctrl-map.h b/libnvme/src/nvme/private-ctrl-map.h
index 6604203c5304..f142ee754d66 100644
--- a/libnvme/src/nvme/private-ctrl-map.h
+++ b/libnvme/src/nvme/private-ctrl-map.h
@@ -71,7 +71,7 @@ libnvme_ctrl_map_lookup(struct libnvme_global_ctx *ctx, const char *ctrl_name);
  */
 const struct ctrl_map_entry *
 libnvme_ctrl_map_lookup_by_physdrive(struct libnvme_global_ctx *ctx,
-				     const char *drive_path);
+		const char *drive_path);
 
 /**
  * libnvme_ctrl_map_entry_set_id_ctrl() - Set id_ctrl for a entry
@@ -80,9 +80,8 @@ libnvme_ctrl_map_lookup_by_physdrive(struct libnvme_global_ctx *ctx,
  *
  * Return: 0 on success, -EINVAL for bad args
  */
-int libnvme_ctrl_map_entry_set_id_ctrl(
-	struct ctrl_map_entry *entry,
-	const struct nvme_id_ctrl *id);
+int libnvme_ctrl_map_entry_set_id_ctrl(struct ctrl_map_entry *entry,
+		const struct nvme_id_ctrl *id);
 
 /**
  * libnvme_ctrl_map_entry_get_ctrl_name() - Get UTF-8 controller name for
@@ -92,7 +91,7 @@ int libnvme_ctrl_map_entry_set_id_ctrl(
  * Return: UTF-8 controller name string, or NULL if unavailable
  */
 const char *libnvme_ctrl_map_entry_get_ctrl_name(
-	const struct ctrl_map_entry *entry);
+		const struct ctrl_map_entry *entry);
 
 /**
  * libnvme_ctrl_map_entry_get_ctrl_path() - Get UTF-8 device path for entry
@@ -102,7 +101,7 @@ const char *libnvme_ctrl_map_entry_get_ctrl_name(
  * Return: 0 on success, or a negative error code
  */
 int libnvme_ctrl_map_entry_get_ctrl_path(const struct ctrl_map_entry *entry,
-					 char **ctrl_path);
+		char **ctrl_path);
 
 /**
  * libnvme_ctrl_map_entry_get_pci_address() - Get PCI BDF address for a
@@ -116,7 +115,7 @@ int libnvme_ctrl_map_entry_get_ctrl_path(const struct ctrl_map_entry *entry,
  * Return: 0 on success, or a negative error code
  */
 int libnvme_ctrl_map_entry_get_pci_address(const struct ctrl_map_entry *entry,
-					   char **address);
+		char **address);
 
 /**
  * libnvme_ctrl_map_entry_scan_device_numbers() - Get device numbers for a
@@ -132,9 +131,8 @@ int libnvme_ctrl_map_entry_get_pci_address(const struct ctrl_map_entry *entry,
  * Return: 0 on success, or a negative error code
  */
 int libnvme_ctrl_map_entry_scan_device_numbers(
-	const struct ctrl_map_entry *entry,
-	DWORD **device_numbers,
-	int *count);
+		const struct ctrl_map_entry *entry, DWORD **device_numbers,
+		int *count);
 
 /**
  * libnvme_ctrl_map_entry_map_nsid_to_drive_path() - Map namespace ID to
@@ -150,9 +148,8 @@ int libnvme_ctrl_map_entry_scan_device_numbers(
  * code
  */
 int libnvme_ctrl_map_entry_map_nsid_to_drive_path(
-	const struct ctrl_map_entry *entry,
-	__u32 nsid,
-	char **drive_path);
+		const struct ctrl_map_entry *entry, __u32 nsid,
+		char **drive_path);
 
 /**
  * libnvme_ctrl_map_entry_get_subsys_name() - Get UTF-8 subsystem name for
@@ -162,7 +159,7 @@ int libnvme_ctrl_map_entry_map_nsid_to_drive_path(
  * Return: UTF-8 subsystem name string, or NULL if unavailable
  */
 char *libnvme_ctrl_map_entry_get_subsys_name(
-	const struct ctrl_map_entry *entry);
+		const struct ctrl_map_entry *entry);
 
 /**
  * libnvme_ctrl_map_entry_get_subnqn() - Get UTF-8 subsystem NQN for
diff --git a/libnvme/src/nvme/scan-win.c b/libnvme/src/nvme/scan-win.c
index 89d69feaea25..9d3f3a051a42 100644
--- a/libnvme/src/nvme/scan-win.c
+++ b/libnvme/src/nvme/scan-win.c
@@ -17,22 +17,22 @@
 #include "compiler-attributes.h"
 
 __libnvme_public int libnvme_scan_subsystems(
-	__libnvme_unused struct libnvme_global_ctx *ctx,
-	__libnvme_unused struct dirent ***subsys)
+		__libnvme_unused struct libnvme_global_ctx *ctx,
+		__libnvme_unused struct dirent ***subsys)
 {
 	return 0;
 }
 
 __libnvme_public int libnvme_scan_subsystem_namespaces(
-	__libnvme_unused libnvme_subsystem_t s,
-	__libnvme_unused struct dirent ***ns)
+		__libnvme_unused libnvme_subsystem_t s,
+		__libnvme_unused struct dirent ***ns)
 {
 	return 0;
 }
 
 __libnvme_public int libnvme_scan_ctrls(
-	struct libnvme_global_ctx *ctx,
-	__libnvme_unused struct dirent ***ctrls)
+		struct libnvme_global_ctx *ctx,
+		__libnvme_unused struct dirent ***ctrls)
 {
 	struct dirent **entries;
 	__cleanup_free const char **names = NULL;
@@ -80,15 +80,15 @@ __libnvme_public int libnvme_scan_ctrls(
 }
 
 __libnvme_public int libnvme_scan_ctrl_namespace_paths(
-	__libnvme_unused libnvme_ctrl_t c,
-	__libnvme_unused struct dirent ***paths)
+		__libnvme_unused libnvme_ctrl_t c,
+		__libnvme_unused struct dirent ***paths)
 {
 	return 0;
 }
 
 __libnvme_public int libnvme_scan_ctrl_namespaces(
-	__libnvme_unused libnvme_ctrl_t c,
-	__libnvme_unused struct dirent ***ns)
+		__libnvme_unused libnvme_ctrl_t c,
+		__libnvme_unused struct dirent ***ns)
 {
 	struct dirent **entries = NULL;
 	const struct ctrl_map_entry *ctrl_entry;
@@ -107,8 +107,7 @@ __libnvme_public int libnvme_scan_ctrl_namespaces(
 		return 0;
 
 	ret = libnvme_ctrl_map_entry_scan_device_numbers(ctrl_entry,
-							 &device_numbers,
-							 &dev_count);
+		&device_numbers, &dev_count);
 	if (ret)
 		return ret;
 
@@ -145,8 +144,8 @@ __libnvme_public int libnvme_scan_ctrl_namespaces(
 }
 
 __libnvme_public int libnvme_scan_ns_head_paths(
-	__libnvme_unused libnvme_ns_head_t head,
-	__libnvme_unused struct dirent ***paths)
+		__libnvme_unused libnvme_ns_head_t head,
+		__libnvme_unused struct dirent ***paths)
 {
 	return 0;
 }
diff --git a/libnvme/src/nvme/tree-win.c b/libnvme/src/nvme/tree-win.c
index a76e76f96c75..4e3b8d458214 100644
--- a/libnvme/src/nvme/tree-win.c
+++ b/libnvme/src/nvme/tree-win.c
@@ -116,7 +116,7 @@ int libnvme_reconfigure_ctrl(struct libnvme_global_ctx *ctx,
 }
 
 __libnvme_public int libnvme_get_host(struct libnvme_global_ctx *ctx,
-	const char *hostnqn, const char *hostid, libnvme_host_t *host)
+		const char *hostnqn, const char *hostid, libnvme_host_t *host)
 {
 	__cleanup_free char *hnqn = NULL;
 	__cleanup_free char *hid = NULL;
@@ -159,17 +159,17 @@ __libnvme_public const char *libnvme_ctrl_get_state(libnvme_ctrl_t c)
 }
 
 __libnvme_public int libnvme_init_ctrl(__libnvme_unused libnvme_host_t h,
-				       __libnvme_unused libnvme_ctrl_t c,
-				       __libnvme_unused int instance)
+		__libnvme_unused libnvme_ctrl_t c,
+		__libnvme_unused int instance)
 {
 	return -ENOTSUP;
 }
 
 int libnvme_get_ctrl_transport(struct libnvme_global_ctx *ctx,
-			       __libnvme_unused const char *path,
-			       const char *name, char **transport,
-			       char **traddr, char **addr, char **trsvcid,
-			       char **host_traddr, char **host_iface)
+		__libnvme_unused const char *path,
+		const char *name, char **transport,
+		char **traddr, char **addr, char **trsvcid,
+		char **host_traddr, char **host_iface)
 {
 	const struct ctrl_map_entry *ctrl_entry;
 	int ret;
@@ -244,7 +244,7 @@ static libnvme_subsystem_t libnvme_lookup_subsystem_windows(libnvme_host_t h,
 }
 
 __libnvme_public int libnvme_scan_ctrl(struct libnvme_global_ctx *ctx,
-				       const char *name, libnvme_ctrl_t *cp)
+		const char *name, libnvme_ctrl_t *cp)
 {
 	__cleanup_free char *path = NULL;
 	const struct ctrl_map_entry *ctrl_entry;
@@ -290,36 +290,36 @@ __libnvme_public int libnvme_scan_ctrl(struct libnvme_global_ctx *ctx,
 }
 
 __libnvme_public char *libnvme_get_subsys_attr(
-	__libnvme_unused libnvme_subsystem_t s,
-	__libnvme_unused const char *attr)
+		__libnvme_unused libnvme_subsystem_t s,
+		__libnvme_unused const char *attr)
 {
 	return NULL;
 }
 
 __libnvme_public char *libnvme_get_path_attr(
-	__libnvme_unused libnvme_path_t p,
-	__libnvme_unused const char *attr)
+		__libnvme_unused libnvme_path_t p,
+		__libnvme_unused const char *attr)
 {
 	return NULL;
 }
 
 __libnvme_public char *libnvme_get_attr(
-	__libnvme_unused const char *dir,
-	__libnvme_unused const char *attr)
+		__libnvme_unused const char *dir,
+		__libnvme_unused const char *attr)
 {
 	return NULL;
 }
 
 __libnvme_public char *libnvme_get_ctrl_attr(
-	__libnvme_unused libnvme_ctrl_t c,
-	__libnvme_unused const char *attr)
+		__libnvme_unused libnvme_ctrl_t c,
+		__libnvme_unused const char *attr)
 {
 	return NULL;
 }
 
 __libnvme_public char *libnvme_get_ns_attr(
-	__libnvme_unused libnvme_ns_t n,
-	__libnvme_unused const char *attr)
+		__libnvme_unused libnvme_ns_t n,
+		__libnvme_unused const char *attr)
 {
 	return NULL;
 }
@@ -358,8 +358,8 @@ int libnvme_ns_init(const char *path, struct libnvme_ns *ns)
 }
 
 int libnvme_ns_open(struct libnvme_global_ctx *ctx,
-		    __libnvme_unused const char *sys_path,
-		    const char *name, libnvme_ns_t *ns)
+		__libnvme_unused const char *sys_path,
+		const char *name, libnvme_ns_t *ns)
 {
 	const struct ctrl_map_entry *ctrl_entry;
 	struct libnvme_transport_handle *hdl;
@@ -448,8 +448,8 @@ int libnvme_ns_open(struct libnvme_global_ctx *ctx,
 }
 
 int __libnvme_scan_namespace(struct libnvme_global_ctx *ctx,
-			     __libnvme_unused const char *sysfs_dir,
-			     const char *name, libnvme_ns_t *ns)
+		__libnvme_unused const char *sysfs_dir,
+		const char *name, libnvme_ns_t *ns)
 {
 	struct libnvme_ns *n = NULL;
 	int ret;

bcapener added 2 commits July 2, 2026 13:53
The upcoming windows changes for tree.c needs the global context,
thus add it.

Signed-off-by: Brandon Capener <bcapener@micron.com>
[wagi: splitted out from 'tree: add windows tree support']
Signed-off-by: Daniel Wagner <wagi@kernel.org>
Add tree.c and lib.c support. Adds ctrl-map.c for mapping controller name,
nvmeX, to controller path, since windows controller paths might not fit
within the d_name field of the dirent struct.
The ctrl-map also creates a subsystem name to replicate
linux's nvme-subsysX naming.

Signed-off-by: Brandon Capener <bcapener@micron.com>
[wagi:
  - merged series into one commit
  - a bit of whitespace reformatting]
Signed-off-by: Daniel Wagner <wagi@kernel.org>
@igaw
igaw merged commit 7a4eb8f into linux-nvme:master Jul 2, 2026
31 of 32 checks passed
@igaw
igaw deleted the add-tree-support branch July 2, 2026 12:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants