diff mbox series

[8/8,v2] xfs/189: systemd monitoring of /etc/fstab sucks

Message ID 20220603015413.GP227878@dread.disaster.area (mailing list archive)
State New, archived
Headers show
Series None | expand

Commit Message

Dave Chinner June 3, 2022, 1:54 a.m. UTC
From: Dave Chinner <dchinner@redhat.com>

On a recently upgraded system, xfs/189 still works just fine, but
every test run after it now gets spammed from mount/systemd
like so:

xfs/189 [not run] noattr2 mount option not supported on /dev/vdc
xfs/190 1s ... mount: (hint) your fstab has been modified, but systemd still uses
       the old version; use 'systemctl daemon-reload' to reload.
 1s
xfs/192 3s ... mount: (hint) your fstab has been modified, but systemd still uses
       the old version; use 'systemctl daemon-reload' to reload.
 2s
xfs/193 2s ... mount: (hint) your fstab has been modified, but systemd still uses
       the old version; use 'systemctl daemon-reload' to reload.
 2s
xfs/194 1s ... mount: (hint) your fstab has been modified, but systemd still uses
       the old version; use 'systemctl daemon-reload' to reload.

This is because xfs/189 modifies /etc/fstab during the test, then
restores it to it's original condition so there's nothing to update.
However, systemd is sees that the mtime of /etc/fstab has changed,
and assumes they sky has fallen and so everything must be reloaded
from scratch to silence the unnecessary "hint".

We can avoid this clumsiness by capturing the mtime of /etc/fstab
before we modify it, and restore it afterwards and that means
systemd doesn't even notice that we've being playing around with
/etc/fstab.

Signed-off-by: Dave Chinner <dchinner@redhat.com>
---
V2:
- use systemctl daemon-reload instead of mtime futzing as Darrick
  suggested.

 tests/xfs/189 | 26 +++++++++++++++++++++++++-
 1 file changed, 25 insertions(+), 1 deletion(-)

Comments

Darrick J. Wong June 3, 2022, 2:41 a.m. UTC | #1
On Fri, Jun 03, 2022 at 11:54:13AM +1000, Dave Chinner wrote:
> From: Dave Chinner <dchinner@redhat.com>
> 
> On a recently upgraded system, xfs/189 still works just fine, but
> every test run after it now gets spammed from mount/systemd
> like so:
> 
> xfs/189 [not run] noattr2 mount option not supported on /dev/vdc
> xfs/190 1s ... mount: (hint) your fstab has been modified, but systemd still uses
>        the old version; use 'systemctl daemon-reload' to reload.
>  1s
> xfs/192 3s ... mount: (hint) your fstab has been modified, but systemd still uses
>        the old version; use 'systemctl daemon-reload' to reload.
>  2s
> xfs/193 2s ... mount: (hint) your fstab has been modified, but systemd still uses
>        the old version; use 'systemctl daemon-reload' to reload.
>  2s
> xfs/194 1s ... mount: (hint) your fstab has been modified, but systemd still uses
>        the old version; use 'systemctl daemon-reload' to reload.
> 
> This is because xfs/189 modifies /etc/fstab during the test, then
> restores it to it's original condition so there's nothing to update.
> However, systemd is sees that the mtime of /etc/fstab has changed,
> and assumes they sky has fallen and so everything must be reloaded
> from scratch to silence the unnecessary "hint".
> 
> We can avoid this clumsiness by capturing the mtime of /etc/fstab
> before we modify it, and restore it afterwards and that means
> systemd doesn't even notice that we've being playing around with
> /etc/fstab.
> 
> Signed-off-by: Dave Chinner <dchinner@redhat.com>
> ---
> V2:
> - use systemctl daemon-reload instead of mtime futzing as Darrick
>   suggested.

Looks good,
Reviewed-by: Darrick J. Wong <djwong@kernel.org>

--D

> 
>  tests/xfs/189 | 26 +++++++++++++++++++++++++-
>  1 file changed, 25 insertions(+), 1 deletion(-)
> 
> diff --git a/tests/xfs/189 b/tests/xfs/189
> index e601881a..bc7ccca5 100755
> --- a/tests/xfs/189
> +++ b/tests/xfs/189
> @@ -32,6 +32,23 @@
>  #
>  # <---- Normal programming is resumed ---->
>  #
> +# <---- Bbbzzzzzzztttt ---->
> +#
> +# < systemd enters the chat >
> +#
> +# xfs/189 [not run] noattr2 mount option not supported on /dev/vdc
> +# xfs/190 1s ... mount: (hint) your fstab has been modified, but systemd still uses
> +#        the old version; use 'systemctl daemon-reload' to reload.
> +#  1s
> +#  xfs/192 3s ... mount: (hint) your fstab has been modified, but systemd still uses
> +#        the old version; use 'systemctl daemon-reload' to reload.
> +#
> +# mount/systemd sees that /etc/fstab has changed (because mtime changed)
> +# and so it whines that systemd needs updating on every mount from this point
> +# onwards. Yes, that's totally obnoxious behaviour from mount/systemd but we
> +# have to work around it.
> +#
> +# < systemd leaves the chat >
>  #
>  . ./common/preamble
>  _begin_fstest mount auto quick
> @@ -190,6 +207,10 @@ ENDL
>  # Example fstab entry
>  # /dev/sdb2            /mnt/scratch1        xfs       defaults 0 0
>  #
> +# Note that to avoid mnt/systemd whining about /etc/fstab being modified, we
> +# need to ensure that it reloads it's state once we restore the fstab to
> +# original.
> +#
>  _add_scratch_fstab()
>  {
>  	# comment out any existing SCRATCH_DEV
> @@ -201,7 +222,7 @@ _add_scratch_fstab()
>  
>  _modify_scratch_fstab()
>  {
> -	opts=$1
> +	local opts=$1
>  
>  	# modify our fstab entry that we added
>  	# modify opts by looking for last word which has non-space chars
> @@ -215,6 +236,9 @@ _putback_scratch_fstab()
>  
>  	# remove the one we added at the end
>  	$SED_PROG -i "/# $tag/d" /etc/fstab
> +
> +	# stop mount/systemd whining that /etcfstab was changed.
> +	command -v systemctl > /dev/null 2>&1 && systemctl daemon-reload
>  }
>  
>  # Import common functions.
> -- 
> Dave Chinner
> david@fromorbit.com
diff mbox series

Patch

diff --git a/tests/xfs/189 b/tests/xfs/189
index e601881a..bc7ccca5 100755
--- a/tests/xfs/189
+++ b/tests/xfs/189
@@ -32,6 +32,23 @@ 
 #
 # <---- Normal programming is resumed ---->
 #
+# <---- Bbbzzzzzzztttt ---->
+#
+# < systemd enters the chat >
+#
+# xfs/189 [not run] noattr2 mount option not supported on /dev/vdc
+# xfs/190 1s ... mount: (hint) your fstab has been modified, but systemd still uses
+#        the old version; use 'systemctl daemon-reload' to reload.
+#  1s
+#  xfs/192 3s ... mount: (hint) your fstab has been modified, but systemd still uses
+#        the old version; use 'systemctl daemon-reload' to reload.
+#
+# mount/systemd sees that /etc/fstab has changed (because mtime changed)
+# and so it whines that systemd needs updating on every mount from this point
+# onwards. Yes, that's totally obnoxious behaviour from mount/systemd but we
+# have to work around it.
+#
+# < systemd leaves the chat >
 #
 . ./common/preamble
 _begin_fstest mount auto quick
@@ -190,6 +207,10 @@  ENDL
 # Example fstab entry
 # /dev/sdb2            /mnt/scratch1        xfs       defaults 0 0
 #
+# Note that to avoid mnt/systemd whining about /etc/fstab being modified, we
+# need to ensure that it reloads it's state once we restore the fstab to
+# original.
+#
 _add_scratch_fstab()
 {
 	# comment out any existing SCRATCH_DEV
@@ -201,7 +222,7 @@  _add_scratch_fstab()
 
 _modify_scratch_fstab()
 {
-	opts=$1
+	local opts=$1
 
 	# modify our fstab entry that we added
 	# modify opts by looking for last word which has non-space chars
@@ -215,6 +236,9 @@  _putback_scratch_fstab()
 
 	# remove the one we added at the end
 	$SED_PROG -i "/# $tag/d" /etc/fstab
+
+	# stop mount/systemd whining that /etcfstab was changed.
+	command -v systemctl > /dev/null 2>&1 && systemctl daemon-reload
 }
 
 # Import common functions.