diff --git a/libuuid-avoid-truncate-clocks.txt-to-improve-performance.patch b/libuuid-avoid-truncate-clocks.txt-to-improve-performance.patch new file mode 100644 index 0000000..23a8bf4 --- /dev/null +++ b/libuuid-avoid-truncate-clocks.txt-to-improve-performance.patch @@ -0,0 +1,51 @@ +From 1d98827edde4b88068d295bbd20c31333b2ad5d4 Mon Sep 17 00:00:00 2001 +From: Goldwyn Rodrigues +Date: Tue, 10 Oct 2023 18:08:59 -0500 +Subject: [PATCH] libuuid: avoid truncate clocks.txt to improve performance + +Instead of explicitly truncating clocks.txt file, pad with +whitespaces in the end of file. +This is done to improve performance of libuuid on xfs +filesystems. Instead of truncating the file, pad it with whitespaces. +This is anyways used as a failsafe method in case truncate fails. + +The reason why this regression was introduced was because of: +869ae85dae64 ("xfs: flush new eof page on truncate to avoid post-eof corruption") + +An attempt to move the clocks.txt to /run (tmpfs) has been attempted before +[1] and with commit ab2e7dd17 ("libuuid: move clock state file from +/var/lib to /var/run"). The latter was reverted. + +[1] https://www.spinics.net/lists/util-linux-ng/msg17331.html + +Signed-off-by: Goldwyn Rodrigues + +diff --git a/libuuid/src/gen_uuid.c b/libuuid/src/gen_uuid.c +index db793c374..826cd2245 100644 +--- a/libuuid/src/gen_uuid.c ++++ b/libuuid/src/gen_uuid.c +@@ -229,7 +229,6 @@ static int get_clock(uint32_t *clock_high, uint32_t *clock_low, + struct timeval tv; + uint64_t clock_reg; + mode_t save_umask; +- int len; + int ret = 0; + + if (state_fd == -1) +@@ -324,14 +323,10 @@ try_again: + + if (state_fd >= 0) { + rewind(state_f); +- len = fprintf(state_f, +- "clock: %04x tv: %016ld %08ld adj: %08d\n", ++ fprintf(state_f, ++ "clock: %04x tv: %016ld %08ld adj: %08d \n", + clock_seq, (long)last.tv_sec, (long)last.tv_usec, adjustment); + fflush(state_f); +- if (ftruncate(state_fd, len) < 0) { +- fprintf(state_f, " \n"); +- fflush(state_f); +- } + rewind(state_f); + flock(state_fd, LOCK_UN); + } diff --git a/util-linux.spec b/util-linux.spec index 1b1a91b..976ec1b 100644 --- a/util-linux.spec +++ b/util-linux.spec @@ -112,6 +112,8 @@ Patch4: 0001-Revert-libblkid-try-LUKS2-first-when-probing.patch Patch5: util-linux-fix-tests-with-64k-pagesize.patch Patch6: use-logind-not-utmp.patch Patch7: setterm-resize-uninit-flags.patch +# bsc#1207987 - regression fix for clock.txt on xfs (upstreamed) +Patch8: libuuid-avoid-truncate-clocks.txt-to-improve-performance.patch BuildRequires: audit-devel BuildRequires: bc