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    -   -

Reply via email to