* [nfs-utils PATCH v2] rpc-statd.service: define dependency on both rpcbind.service and rpcbind.socket
@ 2025-09-09 13:17 Scott Mayhew
2025-09-10 2:00 ` NeilBrown
2025-09-11 11:29 ` Steve Dickson
0 siblings, 2 replies; 3+ messages in thread
From: Scott Mayhew @ 2025-09-09 13:17 UTC (permalink / raw)
To: steved; +Cc: neil, bcodding, yoyang, linux-nfs
In 91da135f ("systemd unit files: fix up dependencies on rpcbind"),
Neil laid out the rationale for how the nfs services should define their
dependencies on rpcbind. In a nutshell:
1. Dependencies should only be defined using rpcbind.socket
2. Ordering for dependencies should only be defined usint "After="
3. nfs-server.service should use "Wants=rpcbind.socket", to allow
rpcbind.socket to be masked in NFSv4-only setups.
4. rpc-statd.service should use "Requires=rpcbind.socket", as rpc.statd
is useless if it can't register with rpcbind.
Then in https://bugzilla.redhat.com/show_bug.cgi?id=2100395, Ben noted
that due to the way the dependencies are ordered, when 'systemctl stop
rpcbind.socket' is run, systemd first sends SIGTERM to rpcbind, then
SIGTERM to rpc.statd. On SIGTERM, rpcbind tears down /var/run/rpcbind.sock.
However, rpc-statd on SIGTERM attempts to unregister from rpcbind. This
results in a long delay:
[root@rawhide ~]# time systemctl restart rpcbind.socket
real 1m0.147s
user 0m0.004s
sys 0m0.003s
8a835ceb ("rpc-statd.service: Stop rpcbind and rpc.stat in an exit race")
fixed this by changing the dependency in rpc-statd.service to use
"After=rpcbind.service", bending rule #1 from above.
Yongcheng recently noted that when runnnig the following test:
[root@rawhide ~]# for i in `seq 10`; do systemctl reset-failed; \
systemctl stop rpcbind rpcbind.socket ; systemctl restart nfs-server ; \
systemctl status rpc-statd; done
rpc-statd.service would often fail to start:
× rpc-statd.service - NFS status monitor for NFSv2/3 locking.
Loaded: loaded (/usr/lib/systemd/system/rpc-statd.service; enabled-runtime; preset: disabled)
Drop-In: /usr/lib/systemd/system/service.d
└─10-timeout-abort.conf
Active: failed (Result: exit-code) since Fri 2025-09-05 18:01:15 EDT; 229ms ago
Duration: 228ms
Invocation: bafb2bb00761439ebc348000704e8fbb
Docs: man:rpc.statd(8)
Process: 29937 ExecStart=/usr/sbin/rpc.statd (code=exited, status=1/FAILURE)
Mem peak: 1.5M
CPU: 7ms
Sep 05 18:01:15 rawhide.smayhew.test rpc.statd[29938]: Version 2.8.2 starting
Sep 05 18:01:15 rawhide.smayhew.test rpc.statd[29938]: Flags: TI-RPC
Sep 05 18:01:15 rawhide.smayhew.test rpc.statd[29938]: Failed to register (statd, 1, udp): svc_reg() err: RPC: Remote system error - Connection refused
Sep 05 18:01:15 rawhide.smayhew.test rpc.statd[29938]: Failed to register (statd, 1, tcp): svc_reg() err: RPC: Success
Sep 05 18:01:15 rawhide.smayhew.test rpc.statd[29938]: Failed to register (statd, 1, udp6): svc_reg() err: RPC: Success
Sep 05 18:01:15 rawhide.smayhew.test rpc.statd[29938]: Failed to register (statd, 1, tcp6): svc_reg() err: RPC: Success
Sep 05 18:01:15 rawhide.smayhew.test rpc.statd[29938]: failed to create RPC listeners, exiting
Sep 05 18:01:15 rawhide.smayhew.test systemd[1]: rpc-statd.service: Control process exited, code=exited, status=1/FAILURE
Sep 05 18:01:15 rawhide.smayhew.test systemd[1]: rpc-statd.service: Failed with result 'exit-code'.
Sep 05 18:01:15 rawhide.smayhew.test systemd[1]: Failed to start rpc-statd.service - NFS status monitor for NFSv2/3 locking..
Define the dependency on both rpcbind.service and rpcbind.socket. As
Neil explains:
"After" declarations only have effect if the units are in the same
transaction. If the Unit is not being started or stopped, the After
declaration has no effect.
So on startup, this will ensure rpcbind.socket is started before
rpc-statd.service. On shutdown in a transaction that stops both
rpc-statd.service and rpcbind.service, rpcbind.service won't be
stopped until after rpc-statd.service is stopped.
Signed-off-by: Scott Mayhew <smayhew@redhat.com>
---
systemd/rpc-statd.service | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/systemd/rpc-statd.service b/systemd/rpc-statd.service
index 660ed861..96fd500d 100644
--- a/systemd/rpc-statd.service
+++ b/systemd/rpc-statd.service
@@ -6,7 +6,7 @@ Conflicts=umount.target
Requires=nss-lookup.target rpcbind.socket
Wants=network-online.target
Wants=rpc-statd-notify.service
-After=network-online.target nss-lookup.target rpcbind.service
+After=network-online.target nss-lookup.target rpcbind.service rpcbind.socket
PartOf=nfs-utils.service
IgnoreOnIsolate=yes
--
2.50.1
^ permalink raw reply related [flat|nested] 3+ messages in thread* Re: [nfs-utils PATCH v2] rpc-statd.service: define dependency on both rpcbind.service and rpcbind.socket
2025-09-09 13:17 [nfs-utils PATCH v2] rpc-statd.service: define dependency on both rpcbind.service and rpcbind.socket Scott Mayhew
@ 2025-09-10 2:00 ` NeilBrown
2025-09-11 11:29 ` Steve Dickson
1 sibling, 0 replies; 3+ messages in thread
From: NeilBrown @ 2025-09-10 2:00 UTC (permalink / raw)
To: Scott Mayhew; +Cc: steved, bcodding, yoyang, linux-nfs
On Tue, 09 Sep 2025, Scott Mayhew wrote:
> In 91da135f ("systemd unit files: fix up dependencies on rpcbind"),
> Neil laid out the rationale for how the nfs services should define their
> dependencies on rpcbind. In a nutshell:
>
> 1. Dependencies should only be defined using rpcbind.socket
> 2. Ordering for dependencies should only be defined usint "After="
> 3. nfs-server.service should use "Wants=rpcbind.socket", to allow
> rpcbind.socket to be masked in NFSv4-only setups.
> 4. rpc-statd.service should use "Requires=rpcbind.socket", as rpc.statd
> is useless if it can't register with rpcbind.
>
> Then in https://bugzilla.redhat.com/show_bug.cgi?id=2100395, Ben noted
> that due to the way the dependencies are ordered, when 'systemctl stop
> rpcbind.socket' is run, systemd first sends SIGTERM to rpcbind, then
> SIGTERM to rpc.statd. On SIGTERM, rpcbind tears down /var/run/rpcbind.sock.
> However, rpc-statd on SIGTERM attempts to unregister from rpcbind. This
> results in a long delay:
>
> [root@rawhide ~]# time systemctl restart rpcbind.socket
>
> real 1m0.147s
> user 0m0.004s
> sys 0m0.003s
>
> 8a835ceb ("rpc-statd.service: Stop rpcbind and rpc.stat in an exit race")
> fixed this by changing the dependency in rpc-statd.service to use
> "After=rpcbind.service", bending rule #1 from above.
>
> Yongcheng recently noted that when runnnig the following test:
>
> [root@rawhide ~]# for i in `seq 10`; do systemctl reset-failed; \
> systemctl stop rpcbind rpcbind.socket ; systemctl restart nfs-server ; \
> systemctl status rpc-statd; done
>
> rpc-statd.service would often fail to start:
>
> × rpc-statd.service - NFS status monitor for NFSv2/3 locking.
> Loaded: loaded (/usr/lib/systemd/system/rpc-statd.service; enabled-runtime; preset: disabled)
> Drop-In: /usr/lib/systemd/system/service.d
> └─10-timeout-abort.conf
> Active: failed (Result: exit-code) since Fri 2025-09-05 18:01:15 EDT; 229ms ago
> Duration: 228ms
> Invocation: bafb2bb00761439ebc348000704e8fbb
> Docs: man:rpc.statd(8)
> Process: 29937 ExecStart=/usr/sbin/rpc.statd (code=exited, status=1/FAILURE)
> Mem peak: 1.5M
> CPU: 7ms
>
> Sep 05 18:01:15 rawhide.smayhew.test rpc.statd[29938]: Version 2.8.2 starting
> Sep 05 18:01:15 rawhide.smayhew.test rpc.statd[29938]: Flags: TI-RPC
> Sep 05 18:01:15 rawhide.smayhew.test rpc.statd[29938]: Failed to register (statd, 1, udp): svc_reg() err: RPC: Remote system error - Connection refused
> Sep 05 18:01:15 rawhide.smayhew.test rpc.statd[29938]: Failed to register (statd, 1, tcp): svc_reg() err: RPC: Success
> Sep 05 18:01:15 rawhide.smayhew.test rpc.statd[29938]: Failed to register (statd, 1, udp6): svc_reg() err: RPC: Success
> Sep 05 18:01:15 rawhide.smayhew.test rpc.statd[29938]: Failed to register (statd, 1, tcp6): svc_reg() err: RPC: Success
> Sep 05 18:01:15 rawhide.smayhew.test rpc.statd[29938]: failed to create RPC listeners, exiting
> Sep 05 18:01:15 rawhide.smayhew.test systemd[1]: rpc-statd.service: Control process exited, code=exited, status=1/FAILURE
> Sep 05 18:01:15 rawhide.smayhew.test systemd[1]: rpc-statd.service: Failed with result 'exit-code'.
> Sep 05 18:01:15 rawhide.smayhew.test systemd[1]: Failed to start rpc-statd.service - NFS status monitor for NFSv2/3 locking..
>
> Define the dependency on both rpcbind.service and rpcbind.socket. As
> Neil explains:
>
> "After" declarations only have effect if the units are in the same
> transaction. If the Unit is not being started or stopped, the After
> declaration has no effect.
>
> So on startup, this will ensure rpcbind.socket is started before
> rpc-statd.service. On shutdown in a transaction that stops both
> rpc-statd.service and rpcbind.service, rpcbind.service won't be
> stopped until after rpc-statd.service is stopped.
>
> Signed-off-by: Scott Mayhew <smayhew@redhat.com>
Reviewed-by: NeilBrown <neil@brown.name>
Thanks,
NeilBrown
> ---
> systemd/rpc-statd.service | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/systemd/rpc-statd.service b/systemd/rpc-statd.service
> index 660ed861..96fd500d 100644
> --- a/systemd/rpc-statd.service
> +++ b/systemd/rpc-statd.service
> @@ -6,7 +6,7 @@ Conflicts=umount.target
> Requires=nss-lookup.target rpcbind.socket
> Wants=network-online.target
> Wants=rpc-statd-notify.service
> -After=network-online.target nss-lookup.target rpcbind.service
> +After=network-online.target nss-lookup.target rpcbind.service rpcbind.socket
>
> PartOf=nfs-utils.service
> IgnoreOnIsolate=yes
> --
> 2.50.1
>
>
^ permalink raw reply [flat|nested] 3+ messages in thread* Re: [nfs-utils PATCH v2] rpc-statd.service: define dependency on both rpcbind.service and rpcbind.socket
2025-09-09 13:17 [nfs-utils PATCH v2] rpc-statd.service: define dependency on both rpcbind.service and rpcbind.socket Scott Mayhew
2025-09-10 2:00 ` NeilBrown
@ 2025-09-11 11:29 ` Steve Dickson
1 sibling, 0 replies; 3+ messages in thread
From: Steve Dickson @ 2025-09-11 11:29 UTC (permalink / raw)
To: Scott Mayhew; +Cc: neil, bcodding, yoyang, linux-nfs
On 9/9/25 9:17 AM, Scott Mayhew wrote:
> In 91da135f ("systemd unit files: fix up dependencies on rpcbind"),
> Neil laid out the rationale for how the nfs services should define their
> dependencies on rpcbind. In a nutshell:
>
> 1. Dependencies should only be defined using rpcbind.socket
> 2. Ordering for dependencies should only be defined usint "After="
> 3. nfs-server.service should use "Wants=rpcbind.socket", to allow
> rpcbind.socket to be masked in NFSv4-only setups.
> 4. rpc-statd.service should use "Requires=rpcbind.socket", as rpc.statd
> is useless if it can't register with rpcbind.
>
> Then in https://bugzilla.redhat.com/show_bug.cgi?id=2100395, Ben noted
> that due to the way the dependencies are ordered, when 'systemctl stop
> rpcbind.socket' is run, systemd first sends SIGTERM to rpcbind, then
> SIGTERM to rpc.statd. On SIGTERM, rpcbind tears down /var/run/rpcbind.sock.
> However, rpc-statd on SIGTERM attempts to unregister from rpcbind. This
> results in a long delay:
>
> [root@rawhide ~]# time systemctl restart rpcbind.socket
>
> real 1m0.147s
> user 0m0.004s
> sys 0m0.003s
>
> 8a835ceb ("rpc-statd.service: Stop rpcbind and rpc.stat in an exit race")
> fixed this by changing the dependency in rpc-statd.service to use
> "After=rpcbind.service", bending rule #1 from above.
>
> Yongcheng recently noted that when runnnig the following test:
>
> [root@rawhide ~]# for i in `seq 10`; do systemctl reset-failed; \
> systemctl stop rpcbind rpcbind.socket ; systemctl restart nfs-server ; \
> systemctl status rpc-statd; done
>
> rpc-statd.service would often fail to start:
>
> × rpc-statd.service - NFS status monitor for NFSv2/3 locking.
> Loaded: loaded (/usr/lib/systemd/system/rpc-statd.service; enabled-runtime; preset: disabled)
> Drop-In: /usr/lib/systemd/system/service.d
> └─10-timeout-abort.conf
> Active: failed (Result: exit-code) since Fri 2025-09-05 18:01:15 EDT; 229ms ago
> Duration: 228ms
> Invocation: bafb2bb00761439ebc348000704e8fbb
> Docs: man:rpc.statd(8)
> Process: 29937 ExecStart=/usr/sbin/rpc.statd (code=exited, status=1/FAILURE)
> Mem peak: 1.5M
> CPU: 7ms
>
> Sep 05 18:01:15 rawhide.smayhew.test rpc.statd[29938]: Version 2.8.2 starting
> Sep 05 18:01:15 rawhide.smayhew.test rpc.statd[29938]: Flags: TI-RPC
> Sep 05 18:01:15 rawhide.smayhew.test rpc.statd[29938]: Failed to register (statd, 1, udp): svc_reg() err: RPC: Remote system error - Connection refused
> Sep 05 18:01:15 rawhide.smayhew.test rpc.statd[29938]: Failed to register (statd, 1, tcp): svc_reg() err: RPC: Success
> Sep 05 18:01:15 rawhide.smayhew.test rpc.statd[29938]: Failed to register (statd, 1, udp6): svc_reg() err: RPC: Success
> Sep 05 18:01:15 rawhide.smayhew.test rpc.statd[29938]: Failed to register (statd, 1, tcp6): svc_reg() err: RPC: Success
> Sep 05 18:01:15 rawhide.smayhew.test rpc.statd[29938]: failed to create RPC listeners, exiting
> Sep 05 18:01:15 rawhide.smayhew.test systemd[1]: rpc-statd.service: Control process exited, code=exited, status=1/FAILURE
> Sep 05 18:01:15 rawhide.smayhew.test systemd[1]: rpc-statd.service: Failed with result 'exit-code'.
> Sep 05 18:01:15 rawhide.smayhew.test systemd[1]: Failed to start rpc-statd.service - NFS status monitor for NFSv2/3 locking..
>
> Define the dependency on both rpcbind.service and rpcbind.socket. As
> Neil explains:
>
> "After" declarations only have effect if the units are in the same
> transaction. If the Unit is not being started or stopped, the After
> declaration has no effect.
>
> So on startup, this will ensure rpcbind.socket is started before
> rpc-statd.service. On shutdown in a transaction that stops both
> rpc-statd.service and rpcbind.service, rpcbind.service won't be
> stopped until after rpc-statd.service is stopped.
>
> Signed-off-by: Scott Mayhew <smayhew@redhat.com>
Committed... (tag: nfs-utils-2-8-4-rc4)
steved.
> ---
> systemd/rpc-statd.service | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/systemd/rpc-statd.service b/systemd/rpc-statd.service
> index 660ed861..96fd500d 100644
> --- a/systemd/rpc-statd.service
> +++ b/systemd/rpc-statd.service
> @@ -6,7 +6,7 @@ Conflicts=umount.target
> Requires=nss-lookup.target rpcbind.socket
> Wants=network-online.target
> Wants=rpc-statd-notify.service
> -After=network-online.target nss-lookup.target rpcbind.service
> +After=network-online.target nss-lookup.target rpcbind.service rpcbind.socket
>
> PartOf=nfs-utils.service
> IgnoreOnIsolate=yes
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2025-09-11 11:29 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-09-09 13:17 [nfs-utils PATCH v2] rpc-statd.service: define dependency on both rpcbind.service and rpcbind.socket Scott Mayhew
2025-09-10 2:00 ` NeilBrown
2025-09-11 11:29 ` Steve Dickson
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox