!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
|
||||
Url: https://www.freedesktop.org/wiki/Software/systemd
|
||||
Version: 243
|
||||
Release: 54
|
||||
Release: 55
|
||||
License: MIT and LGPLv2+ and GPLv2+
|
||||
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
|
||||
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
|
||||
Patch0127: backport-udev-rename-the-persistent-link-for-ATA-devices.patch
|
||||
|
||||
|
||||
#openEuler
|
||||
@ -1560,18 +1561,22 @@ fi
|
||||
%exclude /usr/share/man/man3/*
|
||||
|
||||
%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
|
||||
|
||||
* 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
|
||||
|
||||
* 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
|
||||
2.udevadm fix --tag-match
|
||||
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
|
||||
|
||||
* Fri Dec 3 2021 yangmingtai <yangmingtai@huawei.com> - 243-50
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user