Skip to content

Commit e05fc01

Browse files
committed
tree: add namespace chrdev name to nvme_ns
Namespace device node is initialized into two different nodes: block device and character device which is a generic device used when block device is not available due to initialization failure in the kernel. This can be directly retrieved from the `struct nvme_ns` to print out the generic node in somewhere like `nvme list` command in nvme-cli. Signed-off-by: Minwoo Im <[email protected]>
1 parent 7db951f commit e05fc01

4 files changed

Lines changed: 31 additions & 0 deletions

File tree

src/libnvme.map

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,7 @@
182182
nvme_ns_get_model;
183183
nvme_ns_get_model;
184184
nvme_ns_get_name;
185+
nvme_ns_get_generic_name;
185186
nvme_ns_get_nguid;
186187
nvme_ns_get_nsid;
187188
nvme_ns_get_serial;

src/nvme/private.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ struct nvme_ns {
4545
int fd;
4646
__u32 nsid;
4747
char *name;
48+
char *generic_name;
4849
char *sysfs_dir;
4950

5051
int lba_shift;

src/nvme/tree.c

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1337,6 +1337,11 @@ const char *nvme_ns_get_name(nvme_ns_t n)
13371337
return n->name;
13381338
}
13391339

1340+
const char *nvme_ns_get_generic_name(nvme_ns_t n)
1341+
{
1342+
return n->generic_name;
1343+
}
1344+
13401345
const char *nvme_ns_get_model(nvme_ns_t n)
13411346
{
13421347
return n->c ? n->c->model : n->s->model;
@@ -1541,6 +1546,20 @@ static int nvme_ns_init(struct nvme_ns *n)
15411546
return 0;
15421547
}
15431548

1549+
static void nvme_ns_set_chrdev_name(struct nvme_ns *n, const char *name)
1550+
{
1551+
char generic_name[PATH_MAX];
1552+
int instance, head_instance;
1553+
int ret;
1554+
1555+
ret = sscanf(name, "nvme%dn%d", &instance, &head_instance);
1556+
if (ret != 2)
1557+
return;
1558+
1559+
sprintf(generic_name, "ng%dn%d", instance, head_instance);
1560+
n->generic_name = strdup(generic_name);
1561+
}
1562+
15441563
static nvme_ns_t nvme_ns_open(const char *name)
15451564
{
15461565
struct nvme_ns *n;
@@ -1556,6 +1575,8 @@ static nvme_ns_t nvme_ns_open(const char *name)
15561575
if (n->fd < 0)
15571576
goto free_ns;
15581577

1578+
nvme_ns_set_chrdev_name(n, name);
1579+
15591580
if (nvme_get_nsid(n->fd, &n->nsid) < 0)
15601581
goto close_fd;
15611582

src/nvme/tree.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -452,6 +452,14 @@ const char *nvme_ns_get_sysfs_dir(nvme_ns_t n);
452452
*/
453453
const char *nvme_ns_get_name(nvme_ns_t n);
454454

455+
/**
456+
* nvme_ns_get_generic_name() - Returns name of generic namesapce chardev.
457+
* @n: Namespace instance
458+
*
459+
* Return: Name of generic namespace chardev
460+
*/
461+
const char *nvme_ns_get_generic_name(nvme_ns_t n);
462+
455463
/**
456464
* nvme_ns_get_firmware() -
457465
* @n:

0 commit comments

Comments
 (0)