Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package nfs-utils for openSUSE:Factory checked in at 2026-03-05 17:13:48 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/nfs-utils (Old) and /work/SRC/openSUSE:Factory/.nfs-utils.new.561 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "nfs-utils" Thu Mar 5 17:13:48 2026 rev:189 rq:1336168 version:unknown Changes: -------- --- /work/SRC/openSUSE:Factory/nfs-utils/nfs-utils.changes 2025-10-02 19:18:44.990814309 +0200 +++ /work/SRC/openSUSE:Factory/.nfs-utils.new.561/nfs-utils.changes 2026-03-05 17:14:56.822148110 +0100 @@ -1,0 +2,36 @@ +Tue Mar 3 15:18:50 UTC 2026 - Anthony Iliopoulos <[email protected]> + +- Fix nfs-utils package for immutable mode (jsc#PED-14731) + + Prepare package so that it can be installable in transactional mode, + by moving creation of all state-related paths and files to systemd + tmpfiles mechanism. + + - Drop nfs-kernel-server.tmpfiles.conf + - Add nfs-utils.tmpfiles.conf + +------------------------------------------------------------------- +Mon Mar 2 15:49:18 UTC 2026 - Anthony Iliopoulos <[email protected]> + +- Update to 2.8.5: + https://mirrors.edge.kernel.org/pub/linux/utils/nfs-utils/2.8.5/2.8.5-Changelog + * statd: fix a typo in a debug message + * nfsd: fix a typo in man page + * mountd: fix a typo in man page + * nfs.man: fix a typo in man page + * gssd: fix typos in man page + * exports: fix a typo in man page + * rpcctl: fix a typo in man page + * nfsiostat: fix typos in man page + * mountstats: fix a typo in man page + * nfs.conf: fix a typo in man page + * nfsdctl: add support for min-threads parameter + * systemd: drop Wants=network-online.target for rpc-statd-notify + * nfsiostat: normalize the mountpoints passed in from the command line + * Rename CONFIG_NFSV41 to CONFIG_BLKMAPD and disable by default + * nfsdctl: ignore ipv6 listener creation error + * locktest: use correct build flags + * sm-notify: Do not drop privileges if running as non-root user + * gssd: protect kerberos ticket cache access + +------------------------------------------------------------------- Old: ---- nfs-kernel-server.tmpfiles.conf nfs-utils-2.8.4.tar.sign nfs-utils-2.8.4.tar.xz New: ---- nfs-utils-2.8.5.tar.sign nfs-utils-2.8.5.tar.xz nfs-utils.tmpfiles.conf ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ nfs-utils.spec ++++++ --- /var/tmp/diff_new_pack.xh5aum/_old 2026-03-05 17:14:57.706184856 +0100 +++ /var/tmp/diff_new_pack.xh5aum/_new 2026-03-05 17:14:57.710185022 +0100 @@ -1,7 +1,7 @@ # # spec file for package nfs-utils # -# Copyright (c) 2025 SUSE LLC and contributors +# Copyright (c) 2026 SUSE LLC and contributors # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -22,7 +22,7 @@ %endif Name: nfs-utils -Version: 2.8.4 +Version: 2.8.5 Release: 0 Summary: Support Utilities for Kernel nfsd License: GPL-2.0-or-later @@ -42,7 +42,7 @@ Source24: rpc-statd-notify.options.conf Source25: rpc-svcgssd.options.conf Source26: nfs.conf -Source27: nfs-kernel-server.tmpfiles.conf +Source27: nfs-utils.tmpfiles.conf BuildRequires: e2fsprogs-devel BuildRequires: gcc-c++ BuildRequires: libtool @@ -140,6 +140,7 @@ %configure \ --with-systemd \ --enable-nfsv4 \ + --enable-blkmapd \ --enable-gss \ --enable-svcgss \ --enable-ipv6 \ @@ -166,7 +167,7 @@ install -D -m 644 %{SOURCE26} %{buildroot}%{_prefix}%{_sysconfdir}/nfs.conf mkdir -p -m 755 %{buildroot}%{_prefix}%{_sysconfdir}/nfs.conf.d mkdir -p -m 755 %{buildroot}%{_sysconfdir}/nfs.conf.d -install -D -m 644 %{SOURCE27} %{buildroot}%{_prefix}/lib/tmpfiles.d/nfs-kernel-server.conf +install -D -m 644 %{SOURCE27} %{buildroot}%{_prefix}/lib/tmpfiles.d/nfs-utils.conf # sysconfig-data mkdir -p %{buildroot}%{_fillupdir} install -m 644 %{SOURCE4} %{buildroot}%{_fillupdir} @@ -174,13 +175,6 @@ install -D -m 644 %{SOURCE11} %{buildroot}%{_prefix}%{_sysconfdir}/idmapd.conf mkdir -p -m 755 %{buildroot}%{_prefix}%{_sysconfdir}/idmapd.conf.d mkdir -p -m 755 %{buildroot}%{_sysconfdir}/idmapd.conf.d -mkdir -p -m 755 %{buildroot}%{_localstatedir}/lib/nfs/rpc_pipefs -mkdir -p -m 755 %{buildroot}%{_localstatedir}/lib/nfs/v4recovery -# sm-notify state -mkdir -p -m 755 %{buildroot}%{_localstatedir}/lib/nfs/sm -mkdir -p -m 755 %{buildroot}%{_localstatedir}/lib/nfs/sm.bak -touch %{buildroot}%{_localstatedir}/lib/nfs/state -mkdir -p %{buildroot}%{_sysconfdir}/sysconfig/SuSEfirewall2.d/services mkdir -p -m 755 %{buildroot}%{_prefix}%{_sysconfdir}/nfsmount.conf.d mkdir -p -m 755 %{buildroot}%{_sysconfdir}/nfsmount.conf.d # @@ -194,18 +188,7 @@ %service_add_pre auth-rpcgss-module.service nfs-idmapd.service nfs-blkmap.service rpc-statd-notify.service rpc-gssd.service rpc-statd.service rpc-svcgssd.service %post -n nfs-client -# lib/nfs must be root-owned. -# sm and sm.back and contents should be statd:statd, -# but only chown if the dirs are currently root-owned. -# This is needed for some upgraded, but chown is best avoided -# when not necessary -chown root:root %{_localstatedir}/lib/nfs > /dev/null 2>&1 || : -for i in sm sm.bak; do - p=%{_localstatedir}/lib/nfs/$i - if [ -d "$b" -a -n "`chown 2> /dev/null -c --from root statd:statd $p`" ]; then - chown -R statd:statd $p > /dev/null 2>&1 || : - fi -done + ### migrate from /var/lock/subsys [ -d /run/nfs ] || mkdir /run/nfs if [ -f %{_localstatedir}/lock/subsys/nfs-rpc.idmapd ]; then @@ -214,6 +197,9 @@ if [ -f %{_localstatedir}/lock/subsys/nfsserver-rpc.idmapd ]; then mv %{_localstatedir}/lock/subsys/nfsserver-rpc.idmapd /run/nfs fi + +%tmpfiles_create nfs-utils.conf + ### %{fillup_only -n nfs nfs} # @@ -248,8 +234,6 @@ fi ### %service_add_post nfs-mountd.service nfs-server.service nfsdcld.service -%tmpfiles_create nfs-kernel-server.conf -%set_permissions /var/lib/nfs/rmtab %postun -n nfs-kernel-server %service_del_postun nfs-mountd.service nfs-server.service nfsdcld.service @@ -258,7 +242,6 @@ %postun -n libnfsidmap1 -p /sbin/ldconfig %verifyscript -n nfs-kernel-server -%verify_permissions -e /var/lib/nfs/rmtab %files -n nfs-client %license COPYING @@ -346,11 +329,14 @@ %{_mandir}/man8/umount.nfs.8%{ext_man} %{_fillupdir}/sysconfig.nfs %{_sysusersdir}/statd-user.conf -%dir %{_localstatedir}/lib/nfs -%dir %{_localstatedir}/lib/nfs/rpc_pipefs -%dir %{_localstatedir}/lib/nfs/v4recovery -%attr(0700,statd,statd) %dir %{_localstatedir}/lib/nfs/sm -%attr(0700,statd,statd) %dir %{_localstatedir}/lib/nfs/sm.bak +%{_prefix}/lib/tmpfiles.d/nfs-utils.conf +%ghost %dir %{_localstatedir}/lib/nfs +%ghost %dir %{_localstatedir}/lib/nfs/sm +%ghost %dir %{_localstatedir}/lib/nfs/sm.bak +%ghost %dir %{_localstatedir}/lib/nfs/rpc_pipefs +%ghost %dir %{_localstatedir}/lib/nfs/v4recovery +%ghost %{_localstatedir}/lib/nfs/etab +%ghost %{_localstatedir}/lib/nfs/rmtab %ghost %{_localstatedir}/lib/nfs/state %{_libexecdir}/nfsrahead @@ -360,7 +346,6 @@ %{_unitdir}/nfs-server.service %{_unitdir}/nfs-server.service.d %{_unitdir}/proc-fs-nfsd.mount -%{_prefix}/lib/tmpfiles.d/nfs-kernel-server.conf %{_sbindir}/exportfs %{_sbindir}/fsidd %{_sbindir}/rpc.mountd @@ -380,8 +365,6 @@ %{_mandir}/man8/rpc.nfsd.8%{ext_man} %{_mandir}/man8/nfsdctl.8%{ext_man} %{_mandir}/man8/nfsdcltrack.8%{ext_man} -%config(noreplace) %{_localstatedir}/lib/nfs/etab -%config(noreplace) %{_localstatedir}/lib/nfs/rmtab %files -n libnfsidmap1 %{_libdir}/libnfsidmap-1.0.0/ ++++++ nfs-utils-2.8.4.tar.xz -> nfs-utils-2.8.5.tar.xz ++++++ ++++ 3391 lines of diff (skipped) ++++ retrying with extended exclude list diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/nfs-utils-2.8.4/compile new/nfs-utils-2.8.5/compile --- old/nfs-utils-2.8.4/compile 2025-09-12 13:56:40.000000000 +0200 +++ new/nfs-utils-2.8.5/compile 2026-02-02 11:46:13.000000000 +0100 @@ -1,9 +1,9 @@ #! /bin/sh # Wrapper for compilers which do not understand '-c -o'. -scriptversion=2024-06-19.01; # UTC +scriptversion=2025-06-18.21; # UTC -# Copyright (C) 1999-2024 Free Software Foundation, Inc. +# Copyright (C) 1999-2025 Free Software Foundation, Inc. # Written by Tom Tromey <[email protected]>. # # This program is free software; you can redistribute it and/or modify @@ -37,11 +37,11 @@ file_conv= -# func_file_conv build_file lazy +# func_file_conv build_file unneeded_conversions # Convert a $build file to $host form and store it in $file # Currently only supports Windows hosts. If the determined conversion -# type is listed in (the comma separated) LAZY, no conversion will -# take place. +# type is listed in (the comma separated) UNNEEDED_CONVERSIONS, no +# conversion will take place. func_file_conv () { file=$1 @@ -51,9 +51,20 @@ # lazily determine how to convert abs files case `uname -s` in MINGW*) - file_conv=mingw + if test -n "$MSYSTEM" && (cygpath --version) >/dev/null 2>&1; then + # MSYS2 environment. + file_conv=cygwin + else + # Original MinGW environment. + file_conv=mingw + fi ;; - CYGWIN* | MSYS*) + MSYS*) + # Old MSYS environment, or MSYS2 with 32-bit MSYS2 shell. + file_conv=cygwin + ;; + CYGWIN*) + # Cygwin environment. file_conv=cygwin ;; *) @@ -63,12 +74,14 @@ fi case $file_conv/,$2, in *,$file_conv,*) + # This is the optimization mentioned above: + # If UNNEEDED_CONVERSIONS contains $file_conv, don't convert. ;; mingw/*) file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` ;; - cygwin/* | msys/*) - file=`cygpath -m "$file" || echo "$file"` + cygwin/*) + file=`cygpath -w "$file" || echo "$file"` ;; wine/*) file=`winepath -w "$file" || echo "$file"` @@ -343,9 +356,9 @@ # Local Variables: # mode: shell-script # sh-indentation: 2 -# eval: (add-hook 'before-save-hook 'time-stamp) +# eval: (add-hook 'before-save-hook 'time-stamp nil t) # time-stamp-start: "scriptversion=" -# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-format: "%Y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/nfs-utils-2.8.4/configure.ac new/nfs-utils-2.8.5/configure.ac --- old/nfs-utils-2.8.4/configure.ac 2025-09-12 13:55:27.000000000 +0200 +++ new/nfs-utils-2.8.5/configure.ac 2026-02-02 11:44:34.000000000 +0100 @@ -1,6 +1,6 @@ dnl Process this file with autoconf to produce a configure script. dnl -AC_INIT([linux nfs-utils],[2.8.4],[[email protected]],[nfs-utils]) +AC_INIT([linux nfs-utils],[2.8.5],[[email protected]],[nfs-utils]) AC_CANONICAL_BUILD([]) AC_CANONICAL_HOST([]) AC_CONFIG_MACRO_DIR(aclocal) @@ -85,22 +85,22 @@ AC_SUBST(enable_nfsv4) AM_CONDITIONAL(CONFIG_NFSV4, [test "$enable_nfsv4" = "yes"]) -AC_ARG_ENABLE(nfsv41, - [AS_HELP_STRING([--disable-nfsv41],[disable support for NFSv41 @<:@default=no@:>@])], - enable_nfsv41=$enableval, - enable_nfsv41=yes) - if test "$enable_nfsv41" = yes; then +AC_ARG_ENABLE(blkmapd, + [AS_HELP_STRING([--enable-blkmapd],[enable support for blkmapd @<:@default=no@:>@])], + enable_blkmapd=$enableval, + enable_blkmapd=no) + if test "$enable_blkmapd" = yes; then if test "$enable_nfsv4" != yes; then - AC_MSG_WARN([NFS v4 is not enabled. Disabling NFS v4.1]) - enable_nfsv41=no + AC_MSG_WARN([NFS v4 is not enabled. Disabling blkmapd.]) + enable_blkmapd=no fi BLKMAPD=blkmapd else - enable_nfsv41= + enable_blkmapd= BLKMAPD= fi - AC_SUBST(enable_nfsv41) - AM_CONDITIONAL(CONFIG_NFSV41, [test "$enable_nfsv41" = "yes"]) + AC_SUBST(enable_blkmapd) + AM_CONDITIONAL(CONFIG_BLKMAPD, [test "$enable_blkmapd" = "yes"]) AC_ARG_ENABLE(gss, [AS_HELP_STRING([--disable-gss],[disable client support for rpcsec_gss @<:@default=no@:>@])], @@ -262,6 +262,8 @@ PKG_CHECK_MODULES(LIBNLGENL3, libnl-genl-3.0 >= 3.1) PKG_CHECK_MODULES(LIBREADLINE, readline) AC_CHECK_HEADERS(linux/nfsd_netlink.h) + AC_CHECK_DECLS([NFSD_A_SERVER_MIN_THREADS], , , + [#include <linux/nfsd_netlink.h>]) # ensure we have the pool-mode commands AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <linux/nfsd_netlink.h>]], @@ -398,7 +400,7 @@ enable_nfsdcltrack="no" fi -if test "$enable_nfsv41" = yes; then +if test "$enable_blkmapd" = yes; then AC_CHECK_LIB([devmapper], [dm_task_create], [LIBDEVMAPPER="-ldevmapper"], AC_MSG_ERROR([libdevmapper needed])) AC_CHECK_HEADER(libdevmapper.h, , AC_MSG_ERROR([Cannot find devmapper header file libdevmapper.h])) AC_CHECK_HEADER(sys/inotify.h, , AC_MSG_ERROR([Cannot find header file sys/inotify.h])) @@ -620,7 +622,6 @@ # include <sys/socket.h> #endif]) - dnl ************************************************************* dnl Export some path names to config.h dnl ************************************************************* diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/nfs-utils-2.8.4/missing new/nfs-utils-2.8.5/missing --- old/nfs-utils-2.8.4/missing 2025-09-12 13:56:40.000000000 +0200 +++ new/nfs-utils-2.8.5/missing 2026-02-02 11:46:13.000000000 +0100 @@ -1,11 +1,11 @@ #! /bin/sh # Common wrapper for a few potentially missing GNU and other programs. -scriptversion=2024-06-07.14; # UTC +scriptversion=2025-06-18.21; # UTC # shellcheck disable=SC2006,SC2268 # we must support pre-POSIX shells -# Copyright (C) 1996-2024 Free Software Foundation, Inc. +# Copyright (C) 1996-2025 Free Software Foundation, Inc. # Originally written by Fran,cois Pinard <[email protected]>, 1996. # This program is free software; you can redistribute it and/or modify @@ -228,9 +228,9 @@ exit $st # Local variables: -# eval: (add-hook 'before-save-hook 'time-stamp) +# eval: (add-hook 'before-save-hook 'time-stamp nil t) # time-stamp-start: "scriptversion=" -# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-format: "%Y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/nfs-utils-2.8.4/support/include/config.h.in new/nfs-utils-2.8.5/support/include/config.h.in --- old/nfs-utils-2.8.4/support/include/config.h.in 2025-09-12 13:56:40.000000000 +0200 +++ new/nfs-utils-2.8.5/support/include/config.h.in 2026-02-02 11:46:13.000000000 +0100 @@ -43,6 +43,10 @@ /* Define to 1 if you have the <com_err.h> header file. */ #undef HAVE_COM_ERR_H +/* Define to 1 if you have the declaration of 'NFSD_A_SERVER_MIN_THREADS', and + to 0 if you don't. */ +#undef HAVE_DECL_NFSD_A_SERVER_MIN_THREADS + /* Define to 1 if you have the <dirent.h> header file, and it defines 'DIR'. */ #undef HAVE_DIRENT_H diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/nfs-utils-2.8.4/support/nsm/file.c new/nfs-utils-2.8.5/support/nsm/file.c --- old/nfs-utils-2.8.4/support/nsm/file.c 2025-09-12 13:55:27.000000000 +0200 +++ new/nfs-utils-2.8.5/support/nsm/file.c 2026-02-02 11:44:34.000000000 +0100 @@ -394,6 +394,7 @@ nsm_drop_privileges(const int pidfd) { struct stat st; + uid_t uid; (void)umask(S_IRWXO); @@ -408,6 +409,16 @@ return false; } + /* + * Check if we are running as non-root user and we are the owner of + * the monitor directory. Then there is no reason to drop privileges + * and change groups etc. + */ + uid = getuid(); + if (uid != 0 && uid == st.st_uid) { + return true; + } + if (!prune_bounding_set()) return false; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/nfs-utils-2.8.4/systemd/Makefile.am new/nfs-utils-2.8.5/systemd/Makefile.am --- old/nfs-utils-2.8.4/systemd/Makefile.am 2025-09-12 13:55:27.000000000 +0200 +++ new/nfs-utils-2.8.5/systemd/Makefile.am 2026-02-02 11:44:34.000000000 +0100 @@ -32,7 +32,7 @@ nfsv4-server.service endif -if CONFIG_NFSV41 +if CONFIG_BLKMAPD unit_files += \ nfs-blkmap.service endif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/nfs-utils-2.8.4/systemd/nfs.conf.man new/nfs-utils-2.8.5/systemd/nfs.conf.man --- old/nfs-utils-2.8.4/systemd/nfs.conf.man 2025-09-12 13:55:27.000000000 +0200 +++ new/nfs-utils-2.8.5/systemd/nfs.conf.man 2026-02-02 11:44:34.000000000 +0100 @@ -162,6 +162,7 @@ .B nfsd Recognized values: .BR threads , +.BR min-threads , .BR host , .BR scope , .BR port , @@ -179,7 +180,7 @@ Version and protocol values are Boolean values as described above, and are also used by .BR rpc.mountd . -Threads and the two times are integers. +Threads, min-threads and the two times are integers. .B port and .B rdma @@ -301,7 +302,7 @@ See .BR nfsrahead (5) -for deatils. +for details. .SH FILES .I /usr/etc/nfs.conf diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/nfs-utils-2.8.4/systemd/rpc-statd-notify.service new/nfs-utils-2.8.5/systemd/rpc-statd-notify.service --- old/nfs-utils-2.8.4/systemd/rpc-statd-notify.service 2025-09-12 13:55:27.000000000 +0200 +++ new/nfs-utils-2.8.5/systemd/rpc-statd-notify.service 2026-02-02 11:44:34.000000000 +0100 @@ -2,7 +2,6 @@ Description=Notify NFS peers of a restart Documentation=man:sm-notify(8) man:rpc.statd(8) DefaultDependencies=no -Wants=network-online.target After=local-fs.target network-online.target nss-lookup.target # if we run an nfs server, it needs to be running before we diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/nfs-utils-2.8.4/test-driver new/nfs-utils-2.8.5/test-driver --- old/nfs-utils-2.8.4/test-driver 2025-09-12 13:56:40.000000000 +0200 +++ new/nfs-utils-2.8.5/test-driver 2026-02-02 11:46:13.000000000 +0100 @@ -1,9 +1,9 @@ #! /bin/sh # test-driver - basic testsuite driver script. -scriptversion=2024-06-19.01; # UTC +scriptversion=2025-06-18.21; # UTC -# Copyright (C) 2011-2024 Free Software Foundation, Inc. +# Copyright (C) 2011-2025 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -152,9 +152,9 @@ # Local Variables: # mode: shell-script # sh-indentation: 2 -# eval: (add-hook 'before-save-hook 'time-stamp) +# eval: (add-hook 'before-save-hook 'time-stamp nil t) # time-stamp-start: "scriptversion=" -# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-format: "%Y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/nfs-utils-2.8.4/tools/locktest/Makefile.am new/nfs-utils-2.8.5/tools/locktest/Makefile.am --- old/nfs-utils-2.8.4/tools/locktest/Makefile.am 2025-09-12 13:55:27.000000000 +0200 +++ new/nfs-utils-2.8.5/tools/locktest/Makefile.am 2026-02-02 11:44:34.000000000 +0100 @@ -2,8 +2,5 @@ noinst_PROGRAMS = testlk testlk_SOURCES = testlk.c -testlk_CFLAGS=$(CFLAGS_FOR_BUILD) -testlk_CPPFLAGS=$(CPPFLAGS_FOR_BUILD) -testlk_LDFLAGS=$(LDFLAGS_FOR_BUILD) MAINTAINERCLEANFILES = Makefile.in diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/nfs-utils-2.8.4/tools/locktest/testlk.c new/nfs-utils-2.8.5/tools/locktest/testlk.c --- old/nfs-utils-2.8.4/tools/locktest/testlk.c 2025-09-12 13:55:27.000000000 +0200 +++ new/nfs-utils-2.8.5/tools/locktest/testlk.c 2026-02-02 11:44:34.000000000 +0100 @@ -28,6 +28,7 @@ switch (c) { case 'h': usage(0); + break; case 'r': cmd = F_SETLK; typ = F_RDLCK; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/nfs-utils-2.8.4/tools/mountstats/mountstats.man new/nfs-utils-2.8.5/tools/mountstats/mountstats.man --- old/nfs-utils-2.8.4/tools/mountstats/mountstats.man 2025-09-12 13:55:27.000000000 +0200 +++ new/nfs-utils-2.8.5/tools/mountstats/mountstats.man 2026-02-02 11:44:34.000000000 +0100 @@ -47,7 +47,7 @@ .RI [ mountpoint ] ... .P .SH DESCRIPTION -.RB "The " mountstats " command displays various NFS client statisitics for each given" +.RB "The " mountstats " command displays various NFS client statistics for each given" .IR mountpoint . .P .RI "If no " mountpoint " is given, statistics will be displayed for all NFS mountpoints on the client." diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/nfs-utils-2.8.4/tools/nfs-iostat/nfs-iostat.py new/nfs-utils-2.8.5/tools/nfs-iostat/nfs-iostat.py --- old/nfs-utils-2.8.4/tools/nfs-iostat/nfs-iostat.py 2025-09-12 13:55:27.000000000 +0200 +++ new/nfs-utils-2.8.5/tools/nfs-iostat/nfs-iostat.py 2026-02-02 11:44:34.000000000 +0100 @@ -589,8 +589,8 @@ (options, args) = parser.parse_args(sys.argv) for arg in args[1:]: - if arg in mountstats: - origdevices += [arg] + if os.path.normpath(arg) in mountstats: + origdevices += [os.path.normpath(arg)] elif not interval_seen: try: interval = int(arg) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/nfs-utils-2.8.4/tools/nfs-iostat/nfsiostat.man new/nfs-utils-2.8.5/tools/nfs-iostat/nfsiostat.man --- old/nfs-utils-2.8.4/tools/nfs-iostat/nfsiostat.man 2025-09-12 13:55:27.000000000 +0200 +++ new/nfs-utils-2.8.5/tools/nfs-iostat/nfsiostat.man 2026-02-02 11:44:34.000000000 +0100 @@ -9,7 +9,7 @@ .SH DESCRIPTION The .B nfsiostat -command displays NFS client per-mount statisitics. +command displays NFS client per-mount statistics. .TP <interval> specifies the amount of time in seconds between each report. @@ -106,7 +106,7 @@ .RE .RE .TP -Note that if an interval is used as argument to \fBnfsiostat\fR, then the diffrence from previous interval will be displayed, otherwise the results will be from the time that the share was mounted. +Note that if an interval is used as argument to \fBnfsiostat\fR, then the difference from previous interval will be displayed, otherwise the results will be from the time that the share was mounted. .SH OPTIONS .TP diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/nfs-utils-2.8.4/tools/rpcctl/rpcctl.man new/nfs-utils-2.8.5/tools/rpcctl/rpcctl.man --- old/nfs-utils-2.8.4/tools/rpcctl/rpcctl.man 2025-09-12 13:55:27.000000000 +0200 +++ new/nfs-utils-2.8.5/tools/rpcctl/rpcctl.man 2026-02-02 11:44:34.000000000 +0100 @@ -31,7 +31,7 @@ .P .SS rpcctl switch \fR- \fBCommands operating on groups of transports .IP "\fBadd-xprt \fISWITCH" -Add an aditional transport to the \fISWITCH\fR. +Add an additional transport to the \fISWITCH\fR. Note that the new transport will take its values from the "main" transport. .IP "\fBset \fISWITCH \fBdstaddr \fINEWADDR" Change the destination address of all transports in the \fISWITCH \fRto \fINEWADDR\fR. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/nfs-utils-2.8.4/utils/Makefile.am new/nfs-utils-2.8.5/utils/Makefile.am --- old/nfs-utils-2.8.4/utils/Makefile.am 2025-09-12 13:55:27.000000000 +0200 +++ new/nfs-utils-2.8.5/utils/Makefile.am 2026-02-02 11:44:34.000000000 +0100 @@ -11,7 +11,7 @@ OPTDIRS += exportd endif -if CONFIG_NFSV41 +if CONFIG_BLKMAPD OPTDIRS += blkmapd endif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/nfs-utils-2.8.4/utils/exportfs/exports.man new/nfs-utils-2.8.5/utils/exportfs/exports.man --- old/nfs-utils-2.8.4/utils/exportfs/exports.man 2025-09-12 13:55:27.000000000 +0200 +++ new/nfs-utils-2.8.5/utils/exportfs/exports.man 2026-02-02 11:44:34.000000000 +0100 @@ -488,7 +488,7 @@ to exported NFS shares. The fsid and path relations are stored in a SQLite database. If .IR auto-fsidnum -is selected, the fsid is also autmatically allocated. +is selected, the fsid is also automatically allocated. .IR predefined-fsidnum assumes pre-allocated fsid numbers and will just look them up. This option depends also on the kernel, you will need at least kernel version diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/nfs-utils-2.8.4/utils/gssd/gssd.man new/nfs-utils-2.8.5/utils/gssd/gssd.man --- old/nfs-utils-2.8.4/utils/gssd/gssd.man 2025-09-12 13:55:27.000000000 +0200 +++ new/nfs-utils-2.8.5/utils/gssd/gssd.man 2026-02-02 11:44:34.000000000 +0100 @@ -190,7 +190,7 @@ it is the server name in the "servername:/path" mount request. Only if this servername appears to be an IP address (IPv4 or IPv6) or an unqualified name (no dots) will a reverse DNS lookup -will be performed to get the canoncial server name. +will be performed to get the canonical server name. If .B \-D @@ -244,7 +244,7 @@ .B rpc.gssd searches for credential files. The default value is .IR /tmp:/run/user/%U . -The literal sequence "%U" can be specified to substitue the UID +The literal sequence "%U" can be specified to substitute the UID of the user for whom credentials are being searched. .TP .B -M @@ -404,7 +404,7 @@ provides on behalf of the NFS server. For more information, see .BR https://github.com/gssapi/gssproxy/blob/main/docs/NFS.md#nfs-client . .P -In addtion, the following value is recognized from the +In addition, the following value is recognized from the .B [general] section: .TP diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/nfs-utils-2.8.4/utils/gssd/krb5_util.c new/nfs-utils-2.8.5/utils/gssd/krb5_util.c --- old/nfs-utils-2.8.4/utils/gssd/krb5_util.c 2025-09-12 13:55:27.000000000 +0200 +++ new/nfs-utils-2.8.5/utils/gssd/krb5_util.c 2026-02-02 11:44:34.000000000 +0100 @@ -456,12 +456,14 @@ krb5_get_init_creds_opt_set_tkt_life(opts, 5*60); #endif + pthread_mutex_lock(&ple_lock); if ((code = krb5_get_init_creds_opt_set_out_ccache(context, opts, ccache))) { k5err = gssd_k5_err_msg(context, code); printerr(1, "WARNING: %s while initializing ccache for " "principal '%s' using keytab '%s'\n", k5err, pname ? pname : "<unparsable>", kt_name); + pthread_mutex_unlock(&ple_lock); goto out; } if ((code = krb5_get_init_creds_keytab(context, &my_creds, ple->princ, @@ -470,10 +472,10 @@ printerr(1, "WARNING: %s while getting initial ticket for " "principal '%s' using keytab '%s'\n", k5err, pname ? pname : "<unparsable>", kt_name); + pthread_mutex_unlock(&ple_lock); goto out; } - pthread_mutex_lock(&ple_lock); ple->endtime = my_creds.times.endtime; pthread_mutex_unlock(&ple_lock); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/nfs-utils-2.8.4/utils/mount/nfs.man new/nfs-utils-2.8.5/utils/mount/nfs.man --- old/nfs-utils-2.8.4/utils/mount/nfs.man 2025-09-12 13:55:27.000000000 +0200 +++ new/nfs-utils-2.8.5/utils/mount/nfs.man 2026-02-02 11:44:34.000000000 +0100 @@ -557,7 +557,7 @@ .BR pos " or " positive is specified, the client assumes positive entries are valid until their parent directory's cached attributes expire, but -always revalidates negative entires before an application +always revalidates negative entries before an application can use them. .IP If diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/nfs-utils-2.8.4/utils/mountd/mountd.man new/nfs-utils-2.8.5/utils/mountd/mountd.man --- old/nfs-utils-2.8.4/utils/mountd/mountd.man 2025-09-12 13:55:27.000000000 +0200 +++ new/nfs-utils-2.8.5/utils/mountd/mountd.man 2026-02-02 11:44:34.000000000 +0100 @@ -55,7 +55,7 @@ daemon registers every successful MNT request by adding an entry to the .I /var/lib/nfs/rmtab file. -When receivng a UMNT request from an NFS client, +When receiving a UMNT request from an NFS client, .B rpc.mountd simply removes the matching entry from .IR /var/lib/nfs/rmtab , diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/nfs-utils-2.8.4/utils/nfsd/nfsd.man new/nfs-utils-2.8.5/utils/nfsd/nfsd.man --- old/nfs-utils-2.8.4/utils/nfsd/nfsd.man 2025-09-12 13:55:27.000000000 +0200 +++ new/nfs-utils-2.8.5/utils/nfsd/nfsd.man 2026-02-02 11:44:34.000000000 +0100 @@ -43,7 +43,7 @@ by the clients to detect if two connections are to the same server. By default Linux NFSD uses the host name as the scope. .sp -It is particularly important for high-availablity configurations to ensure +It is particularly important for high-availability configurations to ensure that all potential server nodes report the same server scope. .TP .B \-p " or " \-\-port port diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/nfs-utils-2.8.4/utils/nfsdctl/nfsdctl.8 new/nfs-utils-2.8.5/utils/nfsdctl/nfsdctl.8 --- old/nfs-utils-2.8.4/utils/nfsdctl/nfsdctl.8 2025-09-12 13:55:27.000000000 +0200 +++ new/nfs-utils-2.8.5/utils/nfsdctl/nfsdctl.8 2026-02-02 11:44:34.000000000 +0100 @@ -2,12 +2,12 @@ .\" Title: nfsdctl .\" Author: Jeff Layton .\" Generator: Asciidoctor 2.0.20 -.\" Date: 2025-01-09 +.\" Date: 2026-01-12 .\" Manual: \ \& .\" Source: \ \& .\" Language: English .\" -.TH "NFSDCTL" "8" "2025-01-09" "\ \&" "\ \&" +.TH "NFSDCTL" "8" "2026-01-12" "\ \&" "\ \&" .ie \n(.g .ds Aq \(aq .el .ds Aq ' .ss \n[.ss] 0 @@ -147,6 +147,22 @@ get the current number of running threads in each pool. .RE .sp +.if n .RS 4 +.nf +.fam C +These options are specific to the "threads" subcommand: + +\-m, \-\-min\-threads= + If set to a positive, non\-zero value, then dynamic threading is enabled for + nfsd. In this mode, the traditional "threads" values are treated as a maximum + number of threads. This specifies the minimum number of threads per pool. The + kernel will start the minimum number and dynamically start and stop threads as + needed. If the minimum is larger than the maximum, then dynamic threadis is + disabled, and the maximum number is started. +.fam +.fi +.if n .RE +.sp \fBversion\fP .RS 4 Get/set the enabled NFS versions for the server. Run without arguments to diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/nfs-utils-2.8.4/utils/nfsdctl/nfsdctl.adoc new/nfs-utils-2.8.5/utils/nfsdctl/nfsdctl.adoc --- old/nfs-utils-2.8.4/utils/nfsdctl/nfsdctl.adoc 2025-09-12 13:55:27.000000000 +0200 +++ new/nfs-utils-2.8.5/utils/nfsdctl/nfsdctl.adoc 2026-02-02 11:44:34.000000000 +0100 @@ -84,6 +84,19 @@ value of 0 will shut down the NFS server. Run this without arguments to get the current number of running threads in each pool. +[source,bash] +---- +These options are specific to the "threads" subcommand: + +-m, --min-threads= + If set to a positive, non-zero value, then dynamic threading is enabled for + nfsd. In this mode, the traditional "threads" values are treated as a maximum + number of threads. This specifies the minimum number of threads per pool. The + kernel will start the minimum number and dynamically start and stop threads as + needed. If the minimum is larger than the maximum, then dynamic threadis is + disabled, and the maximum number is started. +---- + *version*:: Get/set the enabled NFS versions for the server. Run without arguments to diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/nfs-utils-2.8.4/utils/nfsdctl/nfsdctl.c new/nfs-utils-2.8.5/utils/nfsdctl/nfsdctl.c --- old/nfs-utils-2.8.4/utils/nfsdctl/nfsdctl.c 2025-09-12 13:55:27.000000000 +0200 +++ new/nfs-utils-2.8.5/utils/nfsdctl/nfsdctl.c 2026-02-02 11:44:34.000000000 +0100 @@ -19,6 +19,7 @@ #include <string.h> #include <sched.h> #include <sys/queue.h> +#include <limits.h> #include <netlink/genl/family.h> #include <netlink/genl/ctrl.h> @@ -323,6 +324,11 @@ case NFSD_A_SERVER_THREADS: pool_threads[i++] = nla_get_u32(attr); break; +#if HAVE_DECL_NFSD_A_SERVER_MIN_THREADS + case NFSD_A_SERVER_MIN_THREADS: + printf("min-threads: %u\n", nla_get_u32(attr)); + break; +#endif default: break; } @@ -518,7 +524,7 @@ } static int threads_doit(struct nl_sock *sock, int cmd, int grace, int lease, - int pool_count, int *pool_threads, char *scope) + int pool_count, int *pool_threads, char *scope, int minthreads) { struct genlmsghdr *ghdr; struct nlmsghdr *nlh; @@ -540,6 +546,10 @@ nla_put_u32(msg, NFSD_A_SERVER_LEASETIME, lease); if (scope) nla_put_string(msg, NFSD_A_SERVER_SCOPE, scope); +#if HAVE_DECL_NFSD_A_SERVER_MIN_THREADS + if (minthreads >= 0) + nla_put_u32(msg, NFSD_A_SERVER_MIN_THREADS, minthreads); +#endif for (i = 0; i < pool_count; ++i) nla_put_u32(msg, NFSD_A_SERVER_THREADS, pool_threads[i]); } @@ -580,23 +590,49 @@ static void threads_usage(void) { - printf("Usage: %s threads [ pool0_count ] [ pool1_count ] ...\n", taskname); + printf("Usage: %s threads { --min-threads=X } [ pool0_count ] [ pool1_count ] ...\n", taskname); +#if HAVE_DECL_NFSD_A_SERVER_MIN_THREADS + printf(" --min-threads= set the minimum thread count per pool to value\n"); +#endif printf(" pool0_count: thread count for pool0, etc...\n"); printf("Omit any arguments to show current thread counts.\n"); } +#if HAVE_DECL_NFSD_A_SERVER_MIN_THREADS +static const struct option threads_options[] = { + { "help", no_argument, NULL, 'h' }, + { "min-threads", required_argument, NULL, 'm' }, + { }, +}; +#define THREADS_OPTSTRING "hm:" +#else +#define threads_options help_only_options +#define THREADS_OPTSTRING "h" +#endif + static int threads_func(struct nl_sock *sock, int argc, char **argv) { uint8_t cmd = NFSD_CMD_THREADS_GET; int *pool_threads = NULL; + int minthreads = -1; int opt, pools = 0; optind = 1; - while ((opt = getopt_long(argc, argv, "h", help_only_options, NULL)) != -1) { + while ((opt = getopt_long(argc, argv, THREADS_OPTSTRING, threads_options, NULL)) != -1) { switch (opt) { case 'h': threads_usage(); return 0; +#if HAVE_DECL_NFSD_A_SERVER_MIN_THREADS + case 'm': + errno = 0; + minthreads = strtoul(optarg, NULL, 0); + if (minthreads == ULONG_MAX && errno != 0) { + fprintf(stderr, "Bad --min-threads value."); + return 1; + } + break; +#endif } } @@ -624,7 +660,7 @@ } } } - return threads_doit(sock, cmd, 0, 0, pools, pool_threads, NULL); + return threads_doit(sock, cmd, 0, 0, pools, pool_threads, NULL, minthreads); } /* @@ -967,6 +1003,17 @@ } } +static bool ipv6_is_enabled(void) +{ + int s; + + s = socket(AF_INET6, SOCK_STREAM, 0); + if (s < 0) + return false; + close(s); + return true; +} + /* * Format is <+/-><netid>:<address>:port * @@ -1081,7 +1128,8 @@ continue; case AF_INET6: if (r6->sin6_port != l6->sin6_port || - memcmp(&r6->sin6_addr, &l6->sin6_addr, sizeof(l6->sin6_addr))) + memcmp(&r6->sin6_addr, &l6->sin6_addr, sizeof(l6->sin6_addr)) || + !ipv6_is_enabled()) continue; default: @@ -1127,6 +1175,11 @@ struct server_socket *sock = &nfsd_sockets[i]; struct nlattr *a; + if (sock->ss.ss_family == AF_INET6 && !ipv6_is_enabled()) { + xlog(L_WARNING, "IPv6 isn't enabled, skip IPv6 " + "listener\n"); + continue; + } if (sock->ss.ss_family == 0) break; @@ -1578,7 +1631,7 @@ static int autostart_func(struct nl_sock *sock, int argc, char ** argv) { - int *threads, grace, lease, idx, ret, opt, pools; + int *threads, grace, lease, idx, ret, opt, pools, minthreads; struct conf_list *thread_str; struct conf_list_node *n; char *scope, *pool_mode; @@ -1659,9 +1712,10 @@ lease = conf_get_num("nfsd", "lease-time", 0); scope = conf_get_str("nfsd", "scope"); + minthreads = conf_get_num("nfsd", "min-threads", 0); ret = threads_doit(sock, NFSD_CMD_THREADS_SET, grace, lease, pools, - threads, scope); + threads, scope, minthreads); out: free(threads); return ret; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/nfs-utils-2.8.4/utils/statd/simulate.c new/nfs-utils-2.8.5/utils/statd/simulate.c --- old/nfs-utils-2.8.4/utils/statd/simulate.c 2025-09-12 13:55:27.000000000 +0200 +++ new/nfs-utils-2.8.5/utils/statd/simulate.c 2026-02-02 11:44:34.000000000 +0100 @@ -219,7 +219,7 @@ { static char *result; - xlog (D_GENERAL, "Recieved state %d for mon_name %s (opaque \"%s\")", + xlog (D_GENERAL, "Received state %d for mon_name %s (opaque \"%s\")", argp->state, argp->mon_name, argp->priv); svc_exit (); return ((void *)&result); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/nfs-utils-2.8.4/utils/statd/sm-notify.man new/nfs-utils-2.8.5/utils/statd/sm-notify.man --- old/nfs-utils-2.8.4/utils/statd/sm-notify.man 2025-09-12 13:55:27.000000000 +0200 +++ new/nfs-utils-2.8.5/utils/statd/sm-notify.man 2026-02-02 11:44:34.000000000 +0100 @@ -275,7 +275,7 @@ .SH SECURITY The .B sm-notify -command must be started as root to acquire privileges needed +command is, generally, started as root to acquire privileges needed to access the state information database. It drops root privileges as soon as it starts up to reduce the risk of a privilege escalation attack. @@ -290,6 +290,14 @@ .BR chown (1) to set the owner of the state directory. +.PP +The +.B sm-notify +command can also be started by the user ID that owns the state directory. +That is useful for the situation when it is called from an rpc-stat +ha-callout program that is already running as the +non-privileged user. The non-root user will not have the capabilities +to drop the root privileges as described above. .SH ADDITIONAL NOTES Lock recovery after a reboot is critical to maintaining data integrity and preventing unnecessary application hangs. ++++++ nfs-utils.tmpfiles.conf ++++++ # See tmpfiles.d(5) for details # Type Path Mode UID GID Age Argument d /var/lib/nfs 0755 root root - - d /var/lib/nfs/sm 0700 statd statd - - d /var/lib/nfs/sm.bak 0700 statd statd - - f /var/lib/nfs/state 0644 root root - - d /var/lib/nfs/rpc_pipefs 0755 root root - - d /var/lib/nfs/v4recovery 0755 root root - - f /var/lib/nfs/etab 0644 root root - - f /var/lib/nfs/rmtab 0644 root root - -
