]> www.infradead.org Git - users/sagi/nvme-cli.git/commitdiff
nvme: Remove invalid device node from nvme list
authorSteven Seungcheol Lee <sc108.lee@samsung.com>
Mon, 5 Apr 2021 06:07:27 +0000 (15:07 +0900)
committerKeith Busch <kbusch@kernel.org>
Mon, 5 Apr 2021 15:15:09 +0000 (09:15 -0600)
normal print result
Node             SN                   Model                                    Namespace Usage                      Format           FW Rev
---------------- -------------------- ---------------------------------------- --------- -------------------------- ---------------- --------
/dev/nvme0n1     S39XNX0J6C3BBA       91721190020910SAM0PM1725A0004T00035000   1           0.00   B /   4.19  TB      4 KiB +  0 B   MVP41G7A
/dev/nvme0n2     S39XNX0J6C3BBA       91721190020910SAM0PM1725A0004T00035000   2           4.19  MB /   4.19  MB      4 KiB +  0 B   MVP41G7A

json print result (nvme0c0n* are invaild devices name, so will be removed from list)
[root@localhost nvme-cli]# nvme list -o json
{
  "Devices" : [
    {
      "NameSpace" : 1,
      "DevicePath" : "/dev/nvme0c0n1",
      ...
      "SectorSize" : 1
    },
    {
      "NameSpace" : 2,
      "DevicePath" : "/dev/nvme0c0n2",
      ...
      "SectorSize" : 1
    },
    {
      "NameSpace" : 1,
      "DevicePath" : "/dev/nvme0n1",
      ...
      "SectorSize" : 4096
    },
    {
      "NameSpace" : 2,
      "DevicePath" : "/dev/nvme0n2",
      ...
      "SectorSize" : 4096
    }
  ]
}

Signed-off-by: Steven Seungcheol Lee <sc108.lee@samsung.com>
nvme-print.c

index 7828bdb4422c0a9e033ff360906d743b0cf0e7dc..e2b05c77cc15ac18fd6e7f0e2ecf943a615a696d 100755 (executable)
@@ -6054,13 +6054,18 @@ static void json_simple_ns(struct nvme_namespace *n, struct json_object *devices
        struct json_object *device_attrs;
        char formatter[41] = { 0 };
        double nsze, nuse;
-       int index = -1;
+       int ret, index = -1;
        long long lba;
        char *devnode;
+       struct stat st;
 
        if (asprintf(&devnode, "%s%s", n->ctrl->path, n->name) < 0)
                return;
 
+       ret = stat(devnode, &st);
+       if (ret < 0)
+               return;
+
        device_attrs = json_create_object();
        json_object_add_value_int(device_attrs, "NameSpace", n->nsid);