From: Darrick J. Wong Date: Tue, 10 Mar 2026 03:50:23 +0000 (-0700) Subject: xfs: test health monitoring code X-Git-Tag: v2026.03.20~15 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=79f6b1c3e4d8e5e859c63779af82d57c40222dfc;p=xfstests-dev.git xfs: test health monitoring code Add some functionality tests for the new health monitoring code. Signed-off-by: Darrick J. Wong Reviewed-by: Zorro Lang Signed-off-by: Zorro Lang --- diff --git a/common/module b/common/module index 697d76ba..c0529b65 100644 --- a/common/module +++ b/common/module @@ -225,3 +225,14 @@ _optional_reload_fs_module() _test_loadable_fs_module "$@" 2>&1 | \ sed -e '/patient module removal/d' } + +_require_module_refcount() +{ + local refcount_file="/sys/module/$1/refcnt" + test -e "$refcount_file" || _notrun "cannot find $1 module refcount" +} + +_module_refcount() +{ + cat "/sys/module/$1/refcnt" +} diff --git a/tests/xfs/654 b/tests/xfs/654 new file mode 100755 index 00000000..012f31a8 --- /dev/null +++ b/tests/xfs/654 @@ -0,0 +1,60 @@ +#! /bin/bash +# SPDX-License-Identifier: GPL-2.0 +# Copyright (c) 2024-2026 Oracle. All Rights Reserved. +# +# FS QA Test No. 654 +# +# Make sure that healthmon handles module refcount correctly. +# +. ./common/preamble +_begin_fstest auto selfhealing quick + +. ./common/filter +. ./common/module + +_cleanup() +{ + test -n "$healer_pid" && kill $healer_pid &>/dev/null + wait + cd / + rm -r -f $tmp.* +} + +_require_test +_require_xfs_io_command healthmon +_require_module_refcount xfs + +# Capture mod refcount without the test fs mounted +_test_unmount +init_refcount="$(_module_refcount xfs)" + +# Capture mod refcount with the test fs mounted +_test_mount +nomon_mount_refcount="$(_module_refcount xfs)" + +# Capture mod refcount with test fs mounted and the healthmon fd open. +# Pause the xfs_io process so that it doesn't actually respond to events. +$XFS_IO_PROG -c 'healthmon -c -v' $TEST_DIR >> $seqres.full & +healer_pid=$! +sleep 0.5 +kill -STOP $healer_pid +mon_mount_refcount="$(_module_refcount xfs)" + +# Capture mod refcount with only the healthmon fd open. +_test_unmount +mon_nomount_refcount="$(_module_refcount xfs)" + +# Capture mod refcount after continuing healthmon (which should exit due to the +# unmount) and killing it. +kill -CONT $healer_pid +kill $healer_pid +wait +unset healer_pid +nomon_nomount_refcount="$(_module_refcount xfs)" + +_within_tolerance "mount refcount" "$nomon_mount_refcount" "$((init_refcount + 1))" 0 -v +_within_tolerance "mount + healthmon refcount" "$mon_mount_refcount" "$((init_refcount + 2))" 0 -v +_within_tolerance "healthmon refcount" "$mon_nomount_refcount" "$((init_refcount + 1))" 0 -v +_within_tolerance "end refcount" "$nomon_nomount_refcount" "$init_refcount" 0 -v + +_exit 0 diff --git a/tests/xfs/654.out b/tests/xfs/654.out new file mode 100644 index 00000000..344d56bc --- /dev/null +++ b/tests/xfs/654.out @@ -0,0 +1,5 @@ +QA output created by 654 +mount refcount is in range +mount + healthmon refcount is in range +healthmon refcount is in range +end refcount is in range