diff --git a/src/nvme/tree.c b/src/nvme/tree.c index d79707439..4553fa2b3 100644 --- a/src/nvme/tree.c +++ b/src/nvme/tree.c @@ -1417,7 +1417,8 @@ struct nvme_ctrl *nvme_create_ctrl(nvme_root_t r, return NULL; } if (strncmp(transport, "loop", 4) && - strncmp(transport, "pcie", 4) && !traddr) { + strncmp(transport, "pcie", 4) && + strncmp(transport, "apple-nvme", 10) && !traddr) { nvme_msg(r, LOG_ERR, "No transport address for '%s'\n", transport); errno = EINVAL; @@ -2166,7 +2167,8 @@ static nvme_ctrl_t nvme_ctrl_alloc(nvme_root_t r, nvme_subsystem_t s, goto skip_address; /* Older kernel don't support pcie transport addresses */ - if (strcmp(transport, "pcie")) { + if (strcmp(transport, "pcie") && + strcmp(transport, "apple-nvme")) { errno = ENXIO; return NULL; } @@ -2187,7 +2189,8 @@ static nvme_ctrl_t nvme_ctrl_alloc(nvme_root_t r, nvme_subsystem_t s, } if (p) addr = strdup(p); - } else if (!strcmp(transport, "pcie")) { + } else if (!strcmp(transport, "pcie") || + !strcmp(transport, "apple-nvme")) { /* The 'address' string is the transport address */ traddr = addr; } else { diff --git a/test/sysfs/data/tree-apple-nvme.out b/test/sysfs/data/tree-apple-nvme.out new file mode 100644 index 000000000..9207575ad --- /dev/null +++ b/test/sysfs/data/tree-apple-nvme.out @@ -0,0 +1,49 @@ +{ + "hosts":[ + { + "hostnqn":"nqn.2014-08.org.nvmexpress:uuid:ce4fee3e-c02c-11ee-8442-830d068a36c6", + "hostid":"ce4fee3e-c02c-11ee-8442-830d068a36c6", + "subsystems":[ + { + "name":"nvme-subsys0", + "nqn":"nqn.2014.08.org.nvmexpress:106b106b0ba01e49841cc620 APPLE SSD AP2048Z", + "namespaces":[ + { + "nsid":1, + "name":"nvme0n1", + "controller":[ + { + "name":"nvme0", + "transport":"apple-nvme", + "traddr":"27bcc0000.nvme" + } + ] + }, + { + "nsid":2, + "name":"nvme0n2", + "controller":[ + { + "name":"nvme0", + "transport":"apple-nvme", + "traddr":"27bcc0000.nvme" + } + ] + }, + { + "nsid":3, + "name":"nvme0n3", + "controller":[ + { + "name":"nvme0", + "transport":"apple-nvme", + "traddr":"27bcc0000.nvme" + } + ] + } + ] + } + ] + } + ] +} diff --git a/test/sysfs/data/tree-apple-nvme.tar.xz b/test/sysfs/data/tree-apple-nvme.tar.xz new file mode 100644 index 000000000..a6fecde4d Binary files /dev/null and b/test/sysfs/data/tree-apple-nvme.tar.xz differ diff --git a/test/sysfs/meson.build b/test/sysfs/meson.build index 2a7e8e3cd..7cb543f58 100644 --- a/test/sysfs/meson.build +++ b/test/sysfs/meson.build @@ -16,6 +16,7 @@ if diff.found() tree_data = [ 'tree-pcie', + 'tree-apple-nvme', ] tree_diff = find_program('tree-diff.sh')