From ac140ed586271276426bdcde2c533be07f342ae6 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Tue, 9 Mar 2021 15:56:23 +0000 Subject: syscalls/swapon/swapoff: Move common library to libs/ There is a race/determinism issue with libswapon currently as depending on which makefile path builds it, the debug paths may be "../swapon/libswapon.c" or "libswapon.c". To avoid the determinism issue, move libswapon to libs/ and use it from the shared location. The header is moved to the common includes directory to match and the Makefile.inc fragment can be dropped. Signed-off-by: Richard Purdie Reviewed-by: Cyril Hrubis --- libs/libltpswapon/Makefile | 12 ++++++ libs/libltpswapon/libswapon.c | 90 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 102 insertions(+) create mode 100644 libs/libltpswapon/Makefile create mode 100644 libs/libltpswapon/libswapon.c (limited to 'libs') diff --git a/libs/libltpswapon/Makefile b/libs/libltpswapon/Makefile new file mode 100644 index 000000000..8f738338b --- /dev/null +++ b/libs/libltpswapon/Makefile @@ -0,0 +1,12 @@ +# SPDX-License-Identifier: GPL-2.0-or-later +# +# Copyright (C) Richard Purdie + +top_srcdir ?= ../.. + +include $(top_srcdir)/include/mk/env_pre.mk + +INTERNAL_LIB := libltpswapon.a + +include $(top_srcdir)/include/mk/lib.mk +include $(top_srcdir)/include/mk/generic_leaf_target.mk diff --git a/libs/libltpswapon/libswapon.c b/libs/libltpswapon/libswapon.c new file mode 100644 index 000000000..a4f0bef28 --- /dev/null +++ b/libs/libltpswapon/libswapon.c @@ -0,0 +1,90 @@ +/* + * Copyright (c) 2013 Oracle and/or its affiliates. All Rights Reserved. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it would be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + * Author: Stanislav Kholmanskikh + * + */ + +#include +#include "lapi/syscalls.h" +#include "test.h" +#include "libswapon.h" + +/* + * Make a swap file + */ +int make_swapfile(void (cleanup)(void), const char *swapfile, int safe) +{ + if (!tst_fs_has_free(NULL, ".", sysconf(_SC_PAGESIZE) * 10, + TST_BYTES)) { + tst_brkm(TBROK, cleanup, + "Insufficient disk space to create swap file"); + } + + /* create file */ + if (tst_fill_file(swapfile, 0, + sysconf(_SC_PAGESIZE), 10) != 0) { + tst_brkm(TBROK, cleanup, "Failed to create swapfile"); + } + + /* make the file swapfile */ + const char *argv[2 + 1]; + argv[0] = "mkswap"; + argv[1] = swapfile; + argv[2] = NULL; + + return tst_cmd(cleanup, argv, "/dev/null", "/dev/null", safe); +} + +/* + * Check swapon/swapoff support status of filesystems or files + * we are testing on. + */ +void is_swap_supported(void (cleanup)(void), const char *filename) +{ + int fibmap = tst_fibmap(filename); + long fs_type = tst_fs_type(cleanup, filename); + const char *fstype = tst_fs_type_name(fs_type); + + int ret = make_swapfile(NULL, filename, 1); + if (ret != 0) { + if (fibmap == 1) { + tst_brkm(TCONF, cleanup, + "mkswap on %s not supported", fstype); + } else { + tst_brkm(TFAIL, cleanup, + "mkswap on %s failed", fstype); + } + } + + TEST(ltp_syscall(__NR_swapon, filename, 0)); + if (TEST_RETURN == -1) { + if (fibmap == 1 && errno == EINVAL) { + tst_brkm(TCONF, cleanup, + "Swapfile on %s not implemented", fstype); + } else { + tst_brkm(TFAIL | TERRNO, cleanup, + "swapon on %s failed", fstype); + } + } + + TEST(ltp_syscall(__NR_swapoff, filename, 0)); + if (TEST_RETURN == -1) { + tst_brkm(TFAIL | TTERRNO, cleanup, + "swapoff on %s failed", fstype); + } +} -- cgit v1.2.3