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 <[email protected]> --- .../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

