Re: [PATCH V6 01/13] _check_xfs_filesystem: sync fs before running scrub

Darrick J. Wong
2021-03-09T05:04:43Z

On Tue, Mar 09, 2021 at 10:31:12AM +0530, Chandan Babu R wrote:
> Tests can create a scenario in which a call to syncfs() issued at the end of
> the execution of the test script would return an error code. xfs_scrub
> internally calls syncfs() before starting the actual online consistency check
> operation. Since this call to syncfs() fails, xfs_scrub ends up returning
> without performing consistency checks on the test filesystem. This can mask a
> possible on-disk data structure corruption.
>
> To fix the above stated problem, this commit invokes syncfs() prior to
> executing xfs_scrub.
>
> Suggested-by: Darrick J. Wong <djwong@kernel.org>
> Signed-off-by: Chandan Babu R <chandanrlinux@gmail.com>

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

--D

> ---
> common/xfs | 11 +++++++++++
> 1 file changed, 11 insertions(+)
>
> diff --git a/common/xfs b/common/xfs
> index 2156749d..41dd8676 100644
> --- a/common/xfs
> +++ b/common/xfs
> @@ -467,6 +467,17 @@ _check_xfs_filesystem()
> # Run online scrub if we can.
> mntpt="$(_is_dev_mounted $device)"
> if [ -n "$mntpt" ] && _supports_xfs_scrub "$mntpt" "$device"; then
> + # Tests can create a scenario in which a call to syncfs() issued
> + # at the end of the execution of the test script would return an
> + # error code. xfs_scrub internally calls syncfs() before
> + # starting the actual online consistency check operation. Since
> + # such a call to syncfs() fails, xfs_scrub ends up returning
> + # without performing consistency checks on the test
> + # filesystem. This can mask a possible on-disk data structure
> + # corruption. Hence consume such a possible syncfs() failure
> + # before executing a scrub operation.
> + $XFS_IO_PROG -c syncfs $mntpt >> $seqres.full 2>&1
> +
> "$XFS_SCRUB_PROG" $scrubflag -v -d -n $mntpt > $tmp.scrub 2>&1
> if [ $? -ne 0 ]; then
> _log_err "_check_xfs_filesystem: filesystem on $device failed scrub"
> --
> 2.29.2
>