systemd/SOURCES/1001-Fix-missing-netdev-for...

93 lines
4.2 KiB
Diff

From efe3164e83da693f87e832c087797be8d466c306 Mon Sep 17 00:00:00 2001
From: Tony Rodriguez <tony.rodriguez@oracle.com>
Date: Mon, 27 Feb 2023 19:30:00 +0100
Subject: Fix missing netdev for iscsi entry in fstab
Orabug: 25897792
To check every entry of fstab whether it is iscsi and then set it
to remote-fs.target on the corresponding ".mount' file. We use
find_device() to find the corresponding device using the udev
function.
Signed-off-by: Tony Lam <tony.l.lam@oracle.com>
Signed-off-by: Alex Burmashev <alexander.burmashev@oracle.com>
Signed-off-by: Darren Archibald <darren.archibald@oracle.com>
Signed-off-by: Tony Rodriguez <tony.rodriguez@oracle.com>
Reviewed-by: Laurence Rochfort <laurence.rochfort@oracle.com>
Reviewed-by: Aleksandr Burmashev <alexander.burmashev@oracle.com>
---
diff -Nur systemd-252.orig/meson.build systemd-252/meson.build
--- systemd-252.orig/meson.build 2023-02-27 12:30:47.814831419 -0800
+++ systemd-252/meson.build 2023-02-27 12:30:41.084646203 -0800
@@ -2351,7 +2351,9 @@
exe = executable(
'systemd-fstab-generator',
'src/fstab-generator/fstab-generator.c',
- include_directories : includes,
+ 'src/udev/udevadm-util.c',
+ 'src/libsystemd/sd-device/device-util.c',
+ include_directories : [includes, udev_includes],
link_with : [libshared],
install_rpath : rootpkglibdir,
install : true,
diff -Nur systemd-252.orig/src/fstab-generator/fstab-generator.c systemd-252/src/fstab-generator/fstab-generator.c
--- systemd-252.orig/src/fstab-generator/fstab-generator.c 2023-02-27 15:36:14.629052661 -0800
+++ systemd-252/src/fstab-generator/fstab-generator.c 2023-02-27 18:21:13.382354633 -0800
@@ -32,6 +32,8 @@
#include "util.h"
#include "virt.h"
#include "volatile-util.h"
+#include "device-util.h"
+#include "udevadm-util.h"
typedef enum MountPointFlags {
MOUNT_NOAUTO = 1 << 0,
@@ -735,6 +737,9 @@
k = add_swap(fstab, what, me, flags);
else {
bool rw_only, automount;
+ const char *name;
+ _cleanup_(sd_device_unrefp) sd_device *device = NULL;
+ int st;
rw_only = fstab_test_option(me->mnt_opts, "x-systemd.rw-only\0");
automount = fstab_test_option(me->mnt_opts,
@@ -749,6 +754,33 @@
mount_is_network(me) ? SPECIAL_REMOTE_FS_TARGET :
SPECIAL_LOCAL_FS_TARGET;
+ if (target_unit && strcmp(target_unit, SPECIAL_LOCAL_FS_TARGET) == 0){
+ st = find_device(what, NULL, &device);
+ if (st < 0 || !device) {
+ /* For local device, find_device() will always be successful. For iscsi,
+ during bootup time, find_device() may fail, so we set to REMOTE-FS
+ if find_device() failed */
+
+ target_unit = SPECIAL_REMOTE_FS_TARGET;
+ log_debug("set %s SPECIAL_REMOTE_FS_TARGET since device is NULL or find_device() return code is %d", what, st);
+ }
+ else {
+ log_debug("device found %s: %p", where, device);
+
+ FOREACH_DEVICE_DEVLINK(device, name) {
+ if (name && strstr(name, "iscsi")) {
+ target_unit = SPECIAL_REMOTE_FS_TARGET;
+ log_debug("set %s SPECIAL_REMOTE_FS_TARGET ", what);
+ break;
+ }
+ }
+
+ if (strcmp(target_unit, SPECIAL_LOCAL_FS_TARGET) == 0)
+ log_debug("set %s SPECIAL_LOCAL_FS_TARGET ", what);
+ }
+ }
+
+
k = add_mount(fstab,
arg_dest,
what,