]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
udev: do not set ID_PATH and by-path symlink for nvmf disks
authorYu Watanabe <watanabe.yu+github@gmail.com>
Wed, 10 May 2023 06:47:44 +0000 (15:47 +0900)
committerMike Yuan <me@yhndnzj.com>
Wed, 10 May 2023 11:42:49 +0000 (19:42 +0800)
Prompted by #27391.

src/udev/udev-builtin-path_id.c

index 8e4d57ee72d6533d153f93163ecb6b92621dc025..ff6682cad9532c05e04ba51eccafe95e380cb8f6 100644 (file)
@@ -545,7 +545,7 @@ static sd_device *handle_ap(sd_device *parent, char **path) {
 
 static int find_real_nvme_parent(sd_device *dev, sd_device **ret) {
         _cleanup_(sd_device_unrefp) sd_device *nvme = NULL;
-        const char *sysname, *end;
+        const char *sysname, *end, *devpath;
         int r;
 
         /* If the device belongs to "nvme-subsystem" (not to be confused with "nvme"), which happens when
@@ -577,6 +577,14 @@ static int find_real_nvme_parent(sd_device *dev, sd_device **ret) {
         if (r < 0)
                 return r;
 
+        r = sd_device_get_devpath(nvme, &devpath);
+        if (r < 0)
+                return r;
+
+        /* If the 'real parent' is (still) virtual, e.g. for nvmf disks, refuse to set ID_PATH. */
+        if (path_startswith(devpath, "/devices/virtual/"))
+                return -ENXIO;
+
         *ret = TAKE_PTR(nvme);
         return 0;
 }