Skip to content

Commit 51bc794

Browse files
ikegami-tigaw
authored andcommitted
nvme: allow char dev filter for show-topology and list-subsys commands
Previously only the block device can be set for the commands filter. This allows the filer for both the nvme and ng character devices. Signed-off-by: Tokunori Ikegami <[email protected]>
1 parent 733f477 commit 51bc794

1 file changed

Lines changed: 16 additions & 4 deletions

File tree

nvme.c

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3456,19 +3456,29 @@ static int create_ns(int argc, char **argv, struct command *acmd, struct plugin
34563456
return err;
34573457
}
34583458

3459+
static bool nvme_match_devname(char *devname, nvme_ns_t ns)
3460+
{
3461+
if (!strcmp(devname, nvme_ns_get_name(ns)) ||
3462+
!strcmp(devname, nvme_ctrl_get_name(nvme_ns_get_ctrl(ns))) ||
3463+
!strcmp(devname, nvme_ns_get_generic_name(ns)))
3464+
return true;
3465+
3466+
return false;
3467+
}
3468+
34593469
static bool nvme_match_device_filter(nvme_subsystem_t s,
34603470
nvme_ctrl_t c, nvme_ns_t ns, void *f_args)
34613471
{
34623472
char *devname = f_args;
34633473
nvme_ns_t n;
34643474

3465-
if (ns && !strcmp(devname, nvme_ns_get_name(ns)))
3475+
if (ns && nvme_match_devname(devname, ns))
34663476
return true;
34673477

34683478
if (c) {
34693479
s = nvme_ctrl_get_subsystem(c);
34703480
nvme_ctrl_for_each_ns(c, n) {
3471-
if (!strcmp(devname, nvme_ns_get_name(n)))
3481+
if (nvme_match_devname(devname, n))
34723482
return true;
34733483
}
34743484
}
@@ -3524,7 +3534,8 @@ static int list_subsys(int argc, char **argv, struct command *acmd,
35243534
if (devname) {
35253535
int subsys_num;
35263536

3527-
if (sscanf(devname, "nvme%dn%d", &subsys_num, &nsid) != 2) {
3537+
if (sscanf(devname, "nvme%dn%d", &subsys_num, &nsid) < 1 &&
3538+
sscanf(devname, "ng%dn%d", &subsys_num, &nsid) != 2) {
35283539
nvme_show_error("Invalid device name %s", devname);
35293540
return -EINVAL;
35303541
}
@@ -10397,7 +10408,8 @@ static int show_topology_cmd(int argc, char **argv, struct command *acmd, struct
1039710408
if (devname) {
1039810409
int subsys_id, nsid;
1039910410

10400-
if (sscanf(devname, "nvme%dn%d", &subsys_id, &nsid) != 2) {
10411+
if (sscanf(devname, "nvme%dn%d", &subsys_id, &nsid) < 1 &&
10412+
sscanf(devname, "ng%dn%d", &subsys_id, &nsid) != 2) {
1040110413
nvme_show_error("Invalid device name %s\n", devname);
1040210414
return -EINVAL;
1040310415
}

0 commit comments

Comments
 (0)