From c417596e8b815d946b6f56704cf46f8912eb834c Mon Sep 17 00:00:00 2001 From: MSVSphere Packaging Team Date: Thu, 21 Nov 2024 18:46:13 +0300 Subject: [PATCH] import sanlock-3.9.5-2.el10 --- .gitignore | 2 +- .sanlock.metadata | 2 +- ...ck-fix-invalid-strcpy-in-direct-dump.patch | 50 ------ ...k-around-race-with-udev-setting-soft.patch | 29 +++ ...k-new-NODELAY-flag-for-add_lockspace.patch | 167 ++++++++++++++++++ SPECS/sanlock.spec | 23 ++- 6 files changed, 215 insertions(+), 58 deletions(-) delete mode 100644 SOURCES/0001-sanlock-fix-invalid-strcpy-in-direct-dump.patch create mode 100644 SOURCES/0001-systemd-wdmd-work-around-race-with-udev-setting-soft.patch create mode 100644 SOURCES/0002-sanlock-new-NODELAY-flag-for-add_lockspace.patch diff --git a/.gitignore b/.gitignore index be493f4..a69559c 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1 @@ -SOURCES/sanlock-3.9.4.tar.gz +SOURCES/sanlock-3.9.5.tar.gz diff --git a/.sanlock.metadata b/.sanlock.metadata index a75f268..b176551 100644 --- a/.sanlock.metadata +++ b/.sanlock.metadata @@ -1 +1 @@ -044f58080f9b445b3761408e37953d60d8257d49 SOURCES/sanlock-3.9.4.tar.gz +4021b5ce81d08591d4ef992623a346e6dccb6ea1 SOURCES/sanlock-3.9.5.tar.gz diff --git a/SOURCES/0001-sanlock-fix-invalid-strcpy-in-direct-dump.patch b/SOURCES/0001-sanlock-fix-invalid-strcpy-in-direct-dump.patch deleted file mode 100644 index 22eb98b..0000000 --- a/SOURCES/0001-sanlock-fix-invalid-strcpy-in-direct-dump.patch +++ /dev/null @@ -1,50 +0,0 @@ -From 5b34da78d33c2fca7dc3d2c49ae6d395d90c48c1 Mon Sep 17 00:00:00 2001 -From: David Teigland -Date: Wed, 14 Aug 2024 11:51:17 -0500 -Subject: [PATCH] sanlock: fix invalid strcpy in direct dump - -If a lockspace or resource name is the full 48 characters -in length, then the ondisk name field does not contain a -terminating null character and strcpy fails. ---- - src/direct.c | 10 +++++----- - 1 file changed, 5 insertions(+), 5 deletions(-) - -diff --git a/src/direct.c b/src/direct.c -index f70dc19d5ef2..3bc7659e905c 100644 ---- a/src/direct.c -+++ b/src/direct.c -@@ -730,8 +730,8 @@ int direct_dump(struct task *task, char *dump_path, int force_mode) - if (!lr->owner_id && !lr->owner_generation) - continue; - -- strcpy(sname, lr->space_name); -- strcpy(rname, lr->resource_name); -+ memcpy(sname, lr->space_name, NAME_ID_SIZE); -+ memcpy(rname, lr->resource_name, NAME_ID_SIZE); - - printf("%08llu %36s %48s %010llu %04llu %04llu", - (unsigned long long)(start_offset + ((sector_nr + i) * sector_size)), -@@ -754,8 +754,8 @@ int direct_dump(struct task *task, char *dump_path, int force_mode) - leader_record_in(lr_end, &lr_in); - lr = &lr_in; - -- strcpy(sname, lr->space_name); -- strcpy(rname, lr->resource_name); -+ memcpy(sname, lr->space_name, NAME_ID_SIZE); -+ memcpy(rname, lr->resource_name, NAME_ID_SIZE); - - printf("%08llu %36s %48s %010llu %04llu %04llu %llu", - (unsigned long long)(start_offset + (sector_nr * sector_size)), -@@ -806,7 +806,7 @@ int direct_dump(struct task *task, char *dump_path, int force_mode) - rindex_header_in(rh_end, &rh_in); - rh = &rh_in; - -- strcpy(sname, rh->lockspace_name); -+ memcpy(sname, rh->lockspace_name, NAME_ID_SIZE); - - printf("%08llu %36s rindex_header 0x%x %d %u %llu\n", - (unsigned long long)(start_offset + (sector_nr * sector_size)), --- -2.46.0 - diff --git a/SOURCES/0001-systemd-wdmd-work-around-race-with-udev-setting-soft.patch b/SOURCES/0001-systemd-wdmd-work-around-race-with-udev-setting-soft.patch new file mode 100644 index 0000000..669ae76 --- /dev/null +++ b/SOURCES/0001-systemd-wdmd-work-around-race-with-udev-setting-soft.patch @@ -0,0 +1,29 @@ +From 9c626f97b25bf1973ece91c6f5dd67628bb0abd1 Mon Sep 17 00:00:00 2001 +From: David Teigland +Date: Fri, 18 Oct 2024 12:57:49 -0500 +Subject: [PATCH] systemd-wdmd: work around race with udev setting softdog + label + +After modprobe softdog, udev wants to set permission and/or label +on the watchdog device. Wait until that's done before trying to +test/probe the watchdog device. RHEL-56479 +--- + init.d/systemd-wdmd | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/init.d/systemd-wdmd b/init.d/systemd-wdmd +index 001609736287..c3126c408a89 100644 +--- a/init.d/systemd-wdmd ++++ b/init.d/systemd-wdmd +@@ -19,6 +19,8 @@ watchdog_check() { + if [ $retval -ne 0 ]; then + echo -n $"Loading the softdog kernel module: " + modprobe softdog ++ # handle delay in udev setting permission/label ++ udevadm settle + + watchdog_probe + retval=$? +-- +2.46.2 + diff --git a/SOURCES/0002-sanlock-new-NODELAY-flag-for-add_lockspace.patch b/SOURCES/0002-sanlock-new-NODELAY-flag-for-add_lockspace.patch new file mode 100644 index 0000000..4bdbd03 --- /dev/null +++ b/SOURCES/0002-sanlock-new-NODELAY-flag-for-add_lockspace.patch @@ -0,0 +1,167 @@ +From 6240d633b229e15d445868a8b1463fb8ee6ddbc6 Mon Sep 17 00:00:00 2001 +From: David Teigland +Date: Wed, 23 Oct 2024 14:51:04 -0500 +Subject: [PATCH] sanlock: new NODELAY flag for add_lockspace + +Forces the existing "no delay" path for acquiring a host_id +delta lease. This avoids delays in add_lockspace that are +used to detect machines using the same host_id. So, using +this flag is unsafe if multiple hosts may end up using the +same host_id. +--- + src/cmd.c | 3 ++- + src/delta_lease.c | 8 ++++++-- + src/delta_lease.h | 1 + + src/direct.c | 1 + + src/lockspace.c | 5 +++-- + src/lockspace.h | 2 +- + src/sanlock_admin.h | 1 + + src/sanlock_internal.h | 1 + + 8 files changed, 16 insertions(+), 6 deletions(-) + +diff --git a/src/cmd.c b/src/cmd.c +index e91da9d3eb41..47656bbb7f75 100644 +--- a/src/cmd.c ++++ b/src/cmd.c +@@ -1306,6 +1306,7 @@ static void cmd_add_lockspace(struct cmd_args *ca, uint32_t cmd) + struct space *sp; + uint32_t io_timeout; + int async = ca->header.cmd_flags & SANLK_ADD_ASYNC; ++ int nodelay = (ca->header.cmd_flags & SANLK_ADD_NODELAY) ? 1 : 0; + int fd, rv, result; + + fd = client[ca->ci_in].fd; +@@ -1329,7 +1330,7 @@ static void cmd_add_lockspace(struct cmd_args *ca, uint32_t cmd) + if (!io_timeout) + io_timeout = com.io_timeout; + +- rv = add_lockspace_start(&lockspace, io_timeout, &sp); ++ rv = add_lockspace_start(&lockspace, io_timeout, nodelay, &sp); + if (rv < 0) { + result = rv; + goto reply; +diff --git a/src/delta_lease.c b/src/delta_lease.c +index fb4a6402858d..144c0ea0ee11 100644 +--- a/src/delta_lease.c ++++ b/src/delta_lease.c +@@ -332,6 +332,7 @@ int delta_lease_acquire(struct task *task, + char *space_name, + char *our_host_name, + uint64_t host_id, ++ int nodelay, + struct leader_record *leader_ret) + { + struct leader_record leader; +@@ -394,13 +395,16 @@ int delta_lease_acquire(struct task *task, + no_delay = 1; + if (is_same && our_host_name_matches_product_uuid) + no_delay = 1; ++ if (nodelay) ++ no_delay = 1; + +- log_space(sp, "delta_acquire %s owner, %s free, %s our_product_uuid, %s delay, other_io_timeout %d", ++ log_space(sp, "delta_acquire %s owner, %s free, %s our_product_uuid, %s delay, other_io_timeout %d, flag_nodelay %d", + is_same ? "same" : "new", + is_free ? "is" : "not", + our_host_name_matches_product_uuid ? "is" : "not", + no_delay ? "no" : "short", +- other_io_timeout); ++ other_io_timeout, ++ nodelay); + + goto write_new; + } +diff --git a/src/delta_lease.h b/src/delta_lease.h +index ec1c3468bf72..22c6faa16995 100644 +--- a/src/delta_lease.h ++++ b/src/delta_lease.h +@@ -24,6 +24,7 @@ int delta_lease_acquire(struct task *task, + char *space_name, + char *our_host_name, + uint64_t host_id, ++ int nodelay, + struct leader_record *leader_ret); + + int delta_lease_renew(struct task *task, +diff --git a/src/direct.c b/src/direct.c +index 3bc7659e905c..1f4064795c4a 100644 +--- a/src/direct.c ++++ b/src/direct.c +@@ -364,6 +364,7 @@ static int do_delta_action(int action, + ls->name, + our_host_name, + ls->host_id, ++ 0, + &leader); + break; + case ACT_RENEW_ID: +diff --git a/src/lockspace.c b/src/lockspace.c +index a2bee3f478fd..1cea79d41618 100644 +--- a/src/lockspace.c ++++ b/src/lockspace.c +@@ -973,7 +973,7 @@ static void *lockspace_thread(void *arg_in) + + delta_result = delta_lease_acquire(&task, sp, &sp->host_id_disk, + sp->space_name, our_host_name_global, +- sp->host_id, &leader); ++ sp->host_id, sp->nodelay, &leader); + delta_length = monotime() - delta_begin; + + if (delta_result == SANLK_OK) +@@ -1152,7 +1152,7 @@ static void free_sp(struct space *sp) + free(sp); + } + +-int add_lockspace_start(struct sanlk_lockspace *ls, uint32_t io_timeout, struct space **sp_out) ++int add_lockspace_start(struct sanlk_lockspace *ls, uint32_t io_timeout, int nodelay, struct space **sp_out) + { + struct space *sp, *sp2; + int listnum = 0; +@@ -1178,6 +1178,7 @@ int add_lockspace_start(struct sanlk_lockspace *ls, uint32_t io_timeout, struct + sp->host_id_disk.fd = -1; + sp->host_id = ls->host_id; + sp->io_timeout = io_timeout; ++ sp->nodelay = nodelay; + sp->set_bitmap_seconds = calc_set_bitmap_seconds(io_timeout); + pthread_mutex_init(&sp->mutex, NULL); + +diff --git a/src/lockspace.h b/src/lockspace.h +index 0c3cba324e31..790a5cc68499 100644 +--- a/src/lockspace.h ++++ b/src/lockspace.h +@@ -42,7 +42,7 @@ int check_our_lease(struct space *sp, int *check_all, char *check_buf); + void check_other_leases(struct space *sp, char *buf); + + /* locks spaces_mutex */ +-int add_lockspace_start(struct sanlk_lockspace *ls, uint32_t io_timeout, struct space **sp_out); ++int add_lockspace_start(struct sanlk_lockspace *ls, uint32_t io_timeout, int nodelay, struct space **sp_out); + + /* locks sp, locks spaces_mutex */ + int add_lockspace_wait(struct space *sp); +diff --git a/src/sanlock_admin.h b/src/sanlock_admin.h +index 685cce11d6f3..10bfc49b312b 100644 +--- a/src/sanlock_admin.h ++++ b/src/sanlock_admin.h +@@ -12,6 +12,7 @@ + + /* add flags */ + #define SANLK_ADD_ASYNC 0x00000001 ++#define SANLK_ADD_NODELAY 0x00000002 /* can be unsafe */ + + /* rem flags */ + #define SANLK_REM_ASYNC 0x00000001 +diff --git a/src/sanlock_internal.h b/src/sanlock_internal.h +index ebb0a9c319c1..e57127b17233 100644 +--- a/src/sanlock_internal.h ++++ b/src/sanlock_internal.h +@@ -217,6 +217,7 @@ struct space { + uint32_t renewal_read_extend_sec; /* defaults to io_timeout */ + uint32_t rindex_op; + unsigned int set_max_sectors_kb; ++ int nodelay; + int sector_size; + int align_size; + int max_hosts; +-- +2.46.2 + diff --git a/SPECS/sanlock.spec b/SPECS/sanlock.spec index f907c10..6853cfa 100644 --- a/SPECS/sanlock.spec +++ b/SPECS/sanlock.spec @@ -1,5 +1,5 @@ Name: sanlock -Version: 3.9.4 +Version: 3.9.5 Release: 2%{?dist} Summary: A shared storage lock manager License: GPL-2.0-only AND GPL-2.0-or-later AND LGPL-2.0-or-later @@ -10,6 +10,8 @@ BuildRequires: libblkid-devel BuildRequires: libuuid-devel BuildRequires: make BuildRequires: systemd-units +BuildRequires: systemd-rpm-macros +%{?sysusers_requires_compat} Requires: %{name}-lib = %{version}-%{release} Requires(post): systemd-units Requires(post): systemd-sysv @@ -17,7 +19,8 @@ Requires(preun): systemd-units Requires(postun): systemd-units Source0: https://releases.pagure.org/sanlock/%{name}-%{version}.tar.gz -Patch0: 0001-sanlock-fix-invalid-strcpy-in-direct-dump.patch +Patch0: 0001-systemd-wdmd-work-around-race-with-udev-setting-soft.patch +Patch1: 0002-sanlock-new-NODELAY-flag-for-add_lockspace.patch %description The sanlock daemon manages leases for applications on hosts using shared storage. @@ -25,6 +28,7 @@ The sanlock daemon manages leases for applications on hosts using shared storage %prep %setup -q %patch0 -p1 -b .backup0 +%patch1 -p1 -b .backup1 %build %set_build_flags @@ -58,10 +62,9 @@ install -D -m 0644 init.d/wdmd.sysconfig \ $RPM_BUILD_ROOT/etc/sysconfig/wdmd install -Dd -m 0755 $RPM_BUILD_ROOT/etc/wdmd.d -install -Dd -m 0775 $RPM_BUILD_ROOT/%{_localstatedir}/run/sanlock %pre -%sysusers_create_compat sanlock.sysusers +%sysusers_create_compat src/sanlock.sysusers %post %systemd_post wdmd.service sanlock.service @@ -80,7 +83,6 @@ install -Dd -m 0775 $RPM_BUILD_ROOT/%{_localstatedir}/run/sanlock %{_sbindir}/wdmd %dir %{_sysconfdir}/wdmd.d %dir %{_sysconfdir}/sanlock -%dir %attr(-,sanlock,sanlock) %{_localstatedir}/run/sanlock %{_mandir}/man8/wdmd* %{_mandir}/man8/sanlock* %config(noreplace) %{_sysconfdir}/logrotate.d/sanlock @@ -126,9 +128,18 @@ developing applications that use %{name}. %{_libdir}/pkgconfig/libsanlock_client.pc %changelog -* Fri Oct 25 2024 MSVSphere Packaging Team - 3.9.4-2 +* Fri Oct 25 2024 MSVSphere Packaging Team - 3.9.5-2 - Rebuilt for MSVSphere 10 +* Wed Oct 23 2024 David Teigland - 3.9.5-2 +- new nodelay flag for add_lockspace + +* Tue Oct 22 2024 David Teigland - 3.9.5-1 +- new upstream release + +* Thu Oct 03 2024 David Teigland - 3.9.4-3 +- fix install of sanlock.sysusers + * Wed Aug 14 2024 David Teigland - 3.9.4-2 - fix invalid strcpy in direct dump