[PATCH 3/3] selftests/mm: restore enable_soft_offline in hugetlb-soft-offline

From: Song Hu

Date: Wed Aug 12 2026 - 08:16:03 EST


hugetlb-soft-offline toggles /proc/sys/vm/enable_soft_offline between 1 and
0 (test_soft_offline_common(1) then (0)) and leaves it at 0 when it
finishes, silently disabling soft offlining for the whole system after the
run. Read the original value before the test and restore it before
ksft_finished().

Signed-off-by: Song Hu <husong@xxxxxxxxxx>
---
.../selftests/mm/hugetlb-soft-offline.c | 24 +++++++++++++++++++
1 file changed, 24 insertions(+)

diff --git a/tools/testing/selftests/mm/hugetlb-soft-offline.c b/tools/testing/selftests/mm/hugetlb-soft-offline.c
index bc202e4ed2bd..35dcf661b091 100644
--- a/tools/testing/selftests/mm/hugetlb-soft-offline.c
+++ b/tools/testing/selftests/mm/hugetlb-soft-offline.c
@@ -99,6 +99,23 @@ static int set_enable_soft_offline(int value)
return 0;
}

+static int get_enable_soft_offline(void)
+{
+ FILE *fp = fopen("/proc/sys/vm/enable_soft_offline", "r");
+ int value = -1;
+
+ if (!fp) {
+ ksft_perror(EPREFIX "failed to read enable_soft_offline");
+ return -1;
+ }
+ if (fscanf(fp, "%d", &value) != 1) {
+ ksft_perror(EPREFIX "failed to parse enable_soft_offline");
+ value = -1;
+ }
+ fclose(fp);
+ return value;
+}
+
static int create_hugetlbfs_file(struct statfs *file_stat)
{
int fd;
@@ -185,6 +202,8 @@ static void test_soft_offline_common(int enable_soft_offline)

int main(int argc, char **argv)
{
+ int orig;
+
ksft_print_header();

if (!hugetlb_setup_default(8))
@@ -192,8 +211,13 @@ int main(int argc, char **argv)

ksft_set_plan(2);

+ orig = get_enable_soft_offline();
+
test_soft_offline_common(1);
test_soft_offline_common(0);

+ if (orig >= 0)
+ set_enable_soft_offline(orig);
+
ksft_finished();
}
--
2.43.0