!223 add backport-udev-rename-the-persistent-link-for-ATA-devices.patch
From: @wangyuhang27 Reviewed-by: @overweight Signed-off-by: @overweight
This commit is contained in:
commit
61aeb87d24
267
backport-udev-rename-the-persistent-link-for-ATA-devices.patch
Normal file
267
backport-udev-rename-the-persistent-link-for-ATA-devices.patch
Normal file
@ -0,0 +1,267 @@
|
|||||||
|
From 9b3278d90704416bfe51a05d5681caf99445fb2f Mon Sep 17 00:00:00 2001
|
||||||
|
From: Lidong Zhong <lidong.zhong@suse.com>
|
||||||
|
Date: Wed, 15 Apr 2020 00:54:57 +0800
|
||||||
|
Subject: [PATCH] udev: rename the persistent link for ATA devices
|
||||||
|
|
||||||
|
ATA devices should use the ATA ids like port number and (possibly)
|
||||||
|
master/slave or multiplier id, not the generic SCSI ID.
|
||||||
|
Currently only port number is included in the link. With this patch
|
||||||
|
the link would be able to support more cases, which are a) when the
|
||||||
|
device is behind a port multiplexer b) the distinction between master
|
||||||
|
and slave (distinguished by target id).
|
||||||
|
|
||||||
|
I tried to verify scenario a) with this patch, but I failed to find a
|
||||||
|
machine with PMP SATA devices attached. But the link below
|
||||||
|
https://github.com/systemd/systemd/issues/3943
|
||||||
|
could show what's the difference. Here is my test for scenario b)
|
||||||
|
|
||||||
|
Current version:
|
||||||
|
linux-ql21:~ # ll /sys/class/block/sd[ab]
|
||||||
|
lrwxrwxrwx 1 root root 0 May 8 20:46 /sys/class/block/sda ->
|
||||||
|
../../devices/pci0000:00/0000:00:01.1/ata4/host3/target3:0:0/3:0:0:0/block/sda
|
||||||
|
lrwxrwxrwx 1 root root 0 May 8 20:46 /sys/class/block/sdb ->
|
||||||
|
../../devices/pci0000:00/0000:00:01.1/ata4/host3/target3:0:1/3:0:1:0/block/sdb
|
||||||
|
linux-ql21:~ # ll /dev/disk/by-path/pci-0000\:00\:01.1-ata-1
|
||||||
|
lrwxrwxrwx 1 root root 9 May 8 20:44
|
||||||
|
/dev/disk/by-path/pci-0000:00:01.1-ata-1 -> ../../sdb
|
||||||
|
linux-ql21:~ # udevadm info /sys/class/block/sda |grep by-path
|
||||||
|
S: disk/by-path/pci-0000:00:01.1-ata-1
|
||||||
|
E: DEVLINKS=/dev/disk/by-id/ata-VBOX_HARDDISK_VB3649e885-3e0cdd64
|
||||||
|
/dev/disk/by-id/scsi-0ATA_VBOX_HARDDISK_VB3649e885-3e0cdd64
|
||||||
|
/dev/disk/by-id/scsi-1ATA_VBOX_HARDDISK_VB3649e885-3e0cdd64
|
||||||
|
/dev/disk/by-path/pci-0000:00:01.1-ata-1
|
||||||
|
/dev/disk/by-id/scsi-SATA_VBOX_HARDDISK_VB3649e885-3e0cdd64
|
||||||
|
linux-ql21:~ # udevadm info /sys/class/block/sdb |grep by-path
|
||||||
|
S: disk/by-path/pci-0000:00:01.1-ata-1
|
||||||
|
E: DEVLINKS=/dev/disk/by-id/ata-VBOX_HARDDISK_VBc53b2498-d84ae8de
|
||||||
|
/dev/disk/by-id/scsi-SATA_VBOX_HARDDISK_VBc53b2498-d84ae8de
|
||||||
|
/dev/disk/by-id/scsi-1ATA_VBOX_HARDDISK_VBc53b2498-d84ae8de
|
||||||
|
/dev/disk/by-id/scsi-0ATA_VBOX_HARDDISK_VBc53b2498-d84ae8de
|
||||||
|
/dev/disk/by-path/pci-0000:00:01.1-ata-1
|
||||||
|
|
||||||
|
After patch applied:
|
||||||
|
linux-ql21:~ # ll /sys/class/block/sd[ab]
|
||||||
|
lrwxrwxrwx 1 root root 0 May 8 21:07 /sys/class/block/sda ->
|
||||||
|
../../devices/pci0000:00/0000:00:01.1/ata4/host3/target3:0:0/3:0:0:0/block/sda
|
||||||
|
lrwxrwxrwx 1 root root 0 May 8 21:07 /sys/class/block/sdb ->
|
||||||
|
../../devices/pci0000:00/0000:00:01.1/ata4/host3/target3:0:1/3:0:1:0/block/sdb
|
||||||
|
linux-ql21:~ # ll /dev/disk/by-path/pci-0000\:00\:01.1-ata-*
|
||||||
|
lrwxrwxrwx 1 root root 9 May 8 21:07
|
||||||
|
/dev/disk/by-path/pci-0000:00:01.1-ata-1.0 -> ../../sda
|
||||||
|
lrwxrwxrwx 1 root root 9 May 8 21:07
|
||||||
|
/dev/disk/by-path/pci-0000:00:01.1-ata-1.1 -> ../../sdb
|
||||||
|
linux-ql21:~ # udevadm info /sys/class/block/sda |grep by-path
|
||||||
|
S: disk/by-path/pci-0000:00:01.1-ata-1.0
|
||||||
|
E: DEVLINKS=/dev/disk/by-id/scsi-1ATA_VBOX_HARDDISK_VB3649e885-3e0cdd64
|
||||||
|
/dev/disk/by-id/scsi-0ATA_VBOX_HARDDISK_VB3649e885-3e0cdd64
|
||||||
|
/dev/disk/by-id/ata-VBOX_HARDDISK_VB3649e885-3e0cdd64
|
||||||
|
/dev/disk/by-path/pci-0000:00:01.1-ata-1.0
|
||||||
|
/dev/disk/by-id/scsi-SATA_VBOX_HARDDISK_VB3649e885-3e0cdd64
|
||||||
|
linux-ql21:~ # udevadm info /sys/class/block/sdb |grep by-path
|
||||||
|
S: disk/by-path/pci-0000:00:01.1-ata-1.1
|
||||||
|
E: DEVLINKS=/dev/disk/by-id/scsi-0ATA_VBOX_HARDDISK_VBc53b2498-d84ae8de
|
||||||
|
/dev/disk/by-id/ata-VBOX_HARDDISK_VBc53b2498-d84ae8de
|
||||||
|
/dev/disk/by-id/scsi-1ATA_VBOX_HARDDISK_VBc53b2498-d84ae8de
|
||||||
|
/dev/disk/by-id/scsi-SATA_VBOX_HARDDISK_VBc53b2498-d84ae8de
|
||||||
|
/dev/disk/by-path/pci-0000:00:01.1-ata-1.1
|
||||||
|
|
||||||
|
Changelog:
|
||||||
|
v5: add another parameter compat_link in handle_scsi()
|
||||||
|
v4: comment for ID_PATH_ATA_COMPAT
|
||||||
|
get string length with pointer difference
|
||||||
|
(suggested by Franck Bui<fbui@suse.com>)
|
||||||
|
v3: creating compatible link from env
|
||||||
|
variables type change
|
||||||
|
v2: remove udev rules modification for compatible link
|
||||||
|
setup a test scenario of master/slave ATA devices
|
||||||
|
v1: initial patch
|
||||||
|
|
||||||
|
Conflict: directory "rules.d" does not exist, and the file "60-persistent-storage.rules" is in the directory "rules"
|
||||||
|
Reference:https://github.com/systemd/systemd/commit/9b3278d90704416bfe51a05d5681caf99445fb2f
|
||||||
|
---
|
||||||
|
rules/60-persistent-storage.rules | 3 ++
|
||||||
|
src/udev/udev-builtin-path_id.c | 55 +++++++++++++++++++++++++----
|
||||||
|
2 files changed, 52 insertions(+), 6 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/rules/60-persistent-storage.rules b/rules/60-persistent-storage.rules
|
||||||
|
index 01586690bd..821e9db86f 100644
|
||||||
|
--- a/rules/60-persistent-storage.rules
|
||||||
|
+++ b/rules/60-persistent-storage.rules
|
||||||
|
@@ -93,6 +93,9 @@ ENV{DEVTYPE}=="disk", DEVPATH!="*/virtual/*", IMPORT{builtin}="path_id"
|
||||||
|
KERNEL=="mmcblk[0-9]boot[0-9]", ENV{DEVTYPE}=="disk", ENV{ID_PATH}=="?*", SYMLINK+="disk/by-path/$env{ID_PATH}-boot%n"
|
||||||
|
KERNEL!="mmcblk[0-9]boot[0-9]", ENV{DEVTYPE}=="disk", ENV{ID_PATH}=="?*", SYMLINK+="disk/by-path/$env{ID_PATH}"
|
||||||
|
ENV{DEVTYPE}=="partition", ENV{ID_PATH}=="?*", SYMLINK+="disk/by-path/$env{ID_PATH}-part%n"
|
||||||
|
+# compatible links for ATA devices
|
||||||
|
+KERNEL!="mmcblk[0-9]boot[0-9]", ENV{DEVTYPE}=="disk", ENV{ID_PATH_ATA_COMPAT}=="?*", SYMLINK+="disk/by-path/$env{ID_PATH_ATA_COMPAT}"
|
||||||
|
+ENV{DEVTYPE}=="partition", ENV{ID_PATH_ATA_COMPAT}=="?*", SYMLINK+="disk/by-path/$env{ID_PATH_ATA_COMPAT}-part%n"
|
||||||
|
|
||||||
|
# legacy virtio-pci by-path links (deprecated)
|
||||||
|
KERNEL=="vd*[!0-9]", ENV{ID_PATH}=="pci-*", SYMLINK+="disk/by-path/virtio-$env{ID_PATH}"
|
||||||
|
diff --git a/src/udev/udev-builtin-path_id.c b/src/udev/udev-builtin-path_id.c
|
||||||
|
index ca38f56087..48e9500548 100644
|
||||||
|
--- a/src/udev/udev-builtin-path_id.c
|
||||||
|
+++ b/src/udev/udev-builtin-path_id.c
|
||||||
|
@@ -253,14 +253,20 @@ static sd_device *handle_scsi_iscsi(sd_device *parent, char **path) {
|
||||||
|
return parent;
|
||||||
|
}
|
||||||
|
|
||||||
|
-static sd_device *handle_scsi_ata(sd_device *parent, char **path) {
|
||||||
|
+static sd_device *handle_scsi_ata(sd_device *parent, char **path, char **compat_path) {
|
||||||
|
sd_device *targetdev, *target_parent;
|
||||||
|
_cleanup_(sd_device_unrefp) sd_device *atadev = NULL;
|
||||||
|
- const char *port_no, *sysname;
|
||||||
|
+ const char *port_no, *sysname, *name;
|
||||||
|
+ unsigned host, bus, target, lun;
|
||||||
|
|
||||||
|
assert(parent);
|
||||||
|
assert(path);
|
||||||
|
|
||||||
|
+ if (sd_device_get_sysname(parent, &name) < 0)
|
||||||
|
+ return NULL;
|
||||||
|
+ if (sscanf(name, "%u:%u:%u:%u", &host, &bus, &target, &lun) != 4)
|
||||||
|
+ return NULL;
|
||||||
|
+
|
||||||
|
if (sd_device_get_parent_with_subsystem_devtype(parent, "scsi", "scsi_host", &targetdev) < 0)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
@@ -275,7 +281,17 @@ static sd_device *handle_scsi_ata(sd_device *parent, char **path) {
|
||||||
|
if (sd_device_get_sysattr_value(atadev, "port_no", &port_no) < 0)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
- path_prepend(path, "ata-%s", port_no);
|
||||||
|
+ if (bus != 0)
|
||||||
|
+ /* Devices behind port multiplier have a bus != 0*/
|
||||||
|
+ path_prepend(path, "ata-%s.%u.0", port_no, bus);
|
||||||
|
+ else
|
||||||
|
+ /* Master/slave are distinguished by target id */
|
||||||
|
+ path_prepend(path, "ata-%s.%u", port_no, target);
|
||||||
|
+
|
||||||
|
+ /* old compatible persistent link for ATA devices */
|
||||||
|
+ if (compat_path)
|
||||||
|
+ path_prepend(compat_path, "ata-%s", port_no);
|
||||||
|
+
|
||||||
|
return parent;
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -392,7 +408,7 @@ static sd_device *handle_scsi_hyperv(sd_device *parent, char **path, size_t guid
|
||||||
|
return parent;
|
||||||
|
}
|
||||||
|
|
||||||
|
-static sd_device *handle_scsi(sd_device *parent, char **path, bool *supported_parent) {
|
||||||
|
+static sd_device *handle_scsi(sd_device *parent, char **path, char **compat_path, bool *supported_parent) {
|
||||||
|
const char *devtype, *id, *name;
|
||||||
|
|
||||||
|
if (sd_device_get_devtype(parent, &devtype) < 0 ||
|
||||||
|
@@ -426,7 +442,7 @@ static sd_device *handle_scsi(sd_device *parent, char **path, bool *supported_pa
|
||||||
|
}
|
||||||
|
|
||||||
|
if (strstr(name, "/ata"))
|
||||||
|
- return handle_scsi_ata(parent, path);
|
||||||
|
+ return handle_scsi_ata(parent, path, compat_path);
|
||||||
|
|
||||||
|
if (strstr(name, "/vmbus_"))
|
||||||
|
return handle_scsi_hyperv(parent, path, 37);
|
||||||
|
@@ -520,6 +536,7 @@ static sd_device *handle_ap(sd_device *parent, char **path) {
|
||||||
|
static int builtin_path_id(sd_device *dev, int argc, char *argv[], bool test) {
|
||||||
|
sd_device *parent;
|
||||||
|
_cleanup_free_ char *path = NULL;
|
||||||
|
+ _cleanup_free_ char *compat_path = NULL;
|
||||||
|
bool supported_transport = false;
|
||||||
|
bool supported_parent = false;
|
||||||
|
const char *subsystem;
|
||||||
|
@@ -537,7 +554,7 @@ static int builtin_path_id(sd_device *dev, int argc, char *argv[], bool test) {
|
||||||
|
} else if (streq(subsys, "scsi_tape")) {
|
||||||
|
handle_scsi_tape(parent, &path);
|
||||||
|
} else if (streq(subsys, "scsi")) {
|
||||||
|
- parent = handle_scsi(parent, &path, &supported_parent);
|
||||||
|
+ parent = handle_scsi(parent, &path, &compat_path, &supported_parent);
|
||||||
|
supported_transport = true;
|
||||||
|
} else if (streq(subsys, "cciss")) {
|
||||||
|
parent = handle_cciss(parent, &path);
|
||||||
|
@@ -557,19 +574,27 @@ static int builtin_path_id(sd_device *dev, int argc, char *argv[], bool test) {
|
||||||
|
}
|
||||||
|
} else if (streq(subsys, "pci")) {
|
||||||
|
path_prepend(&path, "pci-%s", sysname);
|
||||||
|
+ if (compat_path)
|
||||||
|
+ path_prepend(&compat_path, "pci-%s", sysname);
|
||||||
|
parent = skip_subsystem(parent, "pci");
|
||||||
|
supported_parent = true;
|
||||||
|
} else if (streq(subsys, "platform")) {
|
||||||
|
path_prepend(&path, "platform-%s", sysname);
|
||||||
|
+ if (compat_path)
|
||||||
|
+ path_prepend(&compat_path, "platform-%s", sysname);
|
||||||
|
parent = skip_subsystem(parent, "platform");
|
||||||
|
supported_transport = true;
|
||||||
|
supported_parent = true;
|
||||||
|
} else if (streq(subsys, "acpi")) {
|
||||||
|
path_prepend(&path, "acpi-%s", sysname);
|
||||||
|
+ if (compat_path)
|
||||||
|
+ path_prepend(&compat_path, "acpi-%s", sysname);
|
||||||
|
parent = skip_subsystem(parent, "acpi");
|
||||||
|
supported_parent = true;
|
||||||
|
} else if (streq(subsys, "xen")) {
|
||||||
|
path_prepend(&path, "xen-%s", sysname);
|
||||||
|
+ if (compat_path)
|
||||||
|
+ path_prepend(&compat_path, "xen-%s", sysname);
|
||||||
|
parent = skip_subsystem(parent, "xen");
|
||||||
|
supported_parent = true;
|
||||||
|
} else if (streq(subsys, "virtio")) {
|
||||||
|
@@ -577,16 +602,22 @@ static int builtin_path_id(sd_device *dev, int argc, char *argv[], bool test) {
|
||||||
|
supported_transport = true;
|
||||||
|
} else if (streq(subsys, "scm")) {
|
||||||
|
path_prepend(&path, "scm-%s", sysname);
|
||||||
|
+ if (compat_path)
|
||||||
|
+ path_prepend(&compat_path, "scm-%s", sysname);
|
||||||
|
parent = skip_subsystem(parent, "scm");
|
||||||
|
supported_transport = true;
|
||||||
|
supported_parent = true;
|
||||||
|
} else if (streq(subsys, "ccw")) {
|
||||||
|
path_prepend(&path, "ccw-%s", sysname);
|
||||||
|
+ if (compat_path)
|
||||||
|
+ path_prepend(&compat_path, "ccw-%s", sysname);
|
||||||
|
parent = skip_subsystem(parent, "ccw");
|
||||||
|
supported_transport = true;
|
||||||
|
supported_parent = true;
|
||||||
|
} else if (streq(subsys, "ccwgroup")) {
|
||||||
|
path_prepend(&path, "ccwgroup-%s", sysname);
|
||||||
|
+ if (compat_path)
|
||||||
|
+ path_prepend(&compat_path, "ccwgroup-%s", sysname);
|
||||||
|
parent = skip_subsystem(parent, "ccwgroup");
|
||||||
|
supported_transport = true;
|
||||||
|
supported_parent = true;
|
||||||
|
@@ -596,6 +627,8 @@ static int builtin_path_id(sd_device *dev, int argc, char *argv[], bool test) {
|
||||||
|
supported_parent = true;
|
||||||
|
} else if (streq(subsys, "iucv")) {
|
||||||
|
path_prepend(&path, "iucv-%s", sysname);
|
||||||
|
+ if (compat_path)
|
||||||
|
+ path_prepend(&compat_path, "iucv-%s", sysname);
|
||||||
|
parent = skip_subsystem(parent, "iucv");
|
||||||
|
supported_transport = true;
|
||||||
|
supported_parent = true;
|
||||||
|
@@ -604,6 +637,8 @@ static int builtin_path_id(sd_device *dev, int argc, char *argv[], bool test) {
|
||||||
|
|
||||||
|
if (sd_device_get_sysattr_value(dev, "nsid", &nsid) >= 0) {
|
||||||
|
path_prepend(&path, "nvme-%s", nsid);
|
||||||
|
+ if (compat_path)
|
||||||
|
+ path_prepend(&compat_path, "nvme-%s", nsid);
|
||||||
|
parent = skip_subsystem(parent, "nvme");
|
||||||
|
supported_parent = true;
|
||||||
|
supported_transport = true;
|
||||||
|
@@ -671,6 +706,14 @@ static int builtin_path_id(sd_device *dev, int argc, char *argv[], bool test) {
|
||||||
|
udev_builtin_add_property(dev, test, "ID_PATH_TAG", tag);
|
||||||
|
}
|
||||||
|
|
||||||
|
+ /*
|
||||||
|
+ * Compatible link generation for ATA devices
|
||||||
|
+ * we assign compat_link to the env variable
|
||||||
|
+ * ID_PATH_ATA_COMPAT
|
||||||
|
+ */
|
||||||
|
+ if (compat_path)
|
||||||
|
+ udev_builtin_add_property(dev, test, "ID_PATH_ATA_COMPAT", compat_path);
|
||||||
|
+
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
--
|
||||||
|
2.27.0
|
||||||
|
|
||||||
15
systemd.spec
15
systemd.spec
@ -16,7 +16,7 @@
|
|||||||
Name: systemd
|
Name: systemd
|
||||||
Url: https://www.freedesktop.org/wiki/Software/systemd
|
Url: https://www.freedesktop.org/wiki/Software/systemd
|
||||||
Version: 243
|
Version: 243
|
||||||
Release: 54
|
Release: 55
|
||||||
License: MIT and LGPLv2+ and GPLv2+
|
License: MIT and LGPLv2+ and GPLv2+
|
||||||
Summary: System and Service Manager
|
Summary: System and Service Manager
|
||||||
|
|
||||||
@ -171,6 +171,7 @@ Patch0123: backport-0012-CVE-2020-13776-parse-util-make-return-parameter-op
|
|||||||
Patch0124: backport-0013-CVE-2020-13776-parse-util-rewrite-parse_mode-on-top-of-safe_atou_fu.patch
|
Patch0124: backport-0013-CVE-2020-13776-parse-util-rewrite-parse_mode-on-top-of-safe_atou_fu.patch
|
||||||
Patch0125: backport-0014-CVE-2020-13776-user-util-be-stricter-in-parse_uid.patch
|
Patch0125: backport-0014-CVE-2020-13776-user-util-be-stricter-in-parse_uid.patch
|
||||||
Patch0126: backport-0015-CVE-2020-13776-parse-util-also-parse-integers-prefixed-with-0b-and-.patch
|
Patch0126: backport-0015-CVE-2020-13776-parse-util-also-parse-integers-prefixed-with-0b-and-.patch
|
||||||
|
Patch0127: backport-udev-rename-the-persistent-link-for-ATA-devices.patch
|
||||||
|
|
||||||
|
|
||||||
#openEuler
|
#openEuler
|
||||||
@ -1560,18 +1561,22 @@ fi
|
|||||||
%exclude /usr/share/man/man3/*
|
%exclude /usr/share/man/man3/*
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
* Wed Feb 16 2021 yangmingtai <yangmingtai@huawei.com> - 243-54
|
* Mon Feb 28 2022 yangmingtai <yangmingtai@huawei.com> - 243-54
|
||||||
|
- add backport-udev-rename-the-persistent-link-for-ATA-devices.patch
|
||||||
|
for the link of ATA devices
|
||||||
|
|
||||||
|
* Wed Feb 16 2022 yangmingtai <yangmingtai@huawei.com> - 243-54
|
||||||
- fix CVE-2020-13776
|
- fix CVE-2020-13776
|
||||||
|
|
||||||
* Wed Jan 26 2021 yangmingtai <yangmingtai@huawei.com> - 243-53
|
* Wed Jan 26 2022 yangmingtai <yangmingtai@huawei.com> - 243-53
|
||||||
- fix ConditionDirectoryNotEmpty,ConditionPathIsReadWrite and DirectoryNotEmpty
|
- fix ConditionDirectoryNotEmpty,ConditionPathIsReadWrite and DirectoryNotEmpty
|
||||||
|
|
||||||
* Wed Jan 26 2021 yangmingtai <yangmingtai@huawei.com> - 243-52
|
* Wed Jan 26 2022 yangmingtai <yangmingtai@huawei.com> - 243-52
|
||||||
- fix some issue: 1.fix set blkio.bfq.weight
|
- fix some issue: 1.fix set blkio.bfq.weight
|
||||||
2.udevadm fix --tag-match
|
2.udevadm fix --tag-match
|
||||||
3.fix check of Listen* arguments
|
3.fix check of Listen* arguments
|
||||||
|
|
||||||
* Tue Jan 18 2021 yangmingtai <yangmingtai@huawei.com> - 243-51
|
* Tue Jan 18 2022 yangmingtai <yangmingtai@huawei.com> - 243-51
|
||||||
- CVE:fix CVE-2021-3997
|
- CVE:fix CVE-2021-3997
|
||||||
|
|
||||||
* Fri Dec 3 2021 yangmingtai <yangmingtai@huawei.com> - 243-50
|
* Fri Dec 3 2021 yangmingtai <yangmingtai@huawei.com> - 243-50
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user