[LTP] [PATCH v4 3/9] tst_supported_fs: Implement skip list
Petr Vorel
pvorel@suse.cz
Fri Sep 2 15:37:04 CEST 2022
as it will be needed for $ALL_FILESYSTEMS shell implementation in the
next commit. Pass tmpfs to LVM scripts (as it was required there),
but allow to use zram01.sh with tmpfs as it works with it.
Acked-by: Richard Palethorpe <rpalethorpe@suse.com>
Signed-off-by: Petr Vorel <pvorel@suse.cz>
---
Note, I'm not sure if changes in this commit in tst_supported_fs.c will
not be heavily rewritten due tracking minimal filesystem usage.
testcases/lib/tst_supported_fs.c | 56 +++++++++++++++++-----
testcases/misc/lvm/generate_lvm_runfile.sh | 2 +-
testcases/misc/lvm/prepare_lvm.sh | 2 +-
3 files changed, 46 insertions(+), 14 deletions(-)
diff --git a/testcases/lib/tst_supported_fs.c b/testcases/lib/tst_supported_fs.c
index 43eac194f..87be2b759 100644
--- a/testcases/lib/tst_supported_fs.c
+++ b/testcases/lib/tst_supported_fs.c
@@ -5,42 +5,74 @@
*/
#include <stdio.h>
+#include <stdlib.h>
#include <string.h>
+#define SKIP_DELIMITER ','
+
#define TST_NO_DEFAULT_MAIN
#include "tst_test.h"
#include "tst_fs.h"
static void usage(void)
{
- fprintf(stderr, "Usage: tst_supported_fs [fs_type]\n");
+ fprintf(stderr, "Usage: tst_supported_fs [-s skip_list] [fs_type]\n");
fprintf(stderr, " If fs_type is supported, return 0\n");
fprintf(stderr, " If fs_type isn't supported, return 1\n");
fprintf(stderr, " If fs_type isn't specified, print the list of supported filesystems\n");
fprintf(stderr, " fs_type - a specified filesystem type\n");
+ fprintf(stderr, " skip_list - filesystems to skip, delimiter: '%c'\n",
+ SKIP_DELIMITER);
}
int main(int argc, char *argv[])
{
- const char *skiplist[] = {"tmpfs", NULL};
const char *const *filesystems;
- int i;
+ int i, ret, cnt = 1;
+ char **skiplist = NULL;
+ char *fs;
- if (argc > 2) {
- fprintf(stderr, "Can't specify multiple fs_type\n");
- usage();
- return 2;
+ while ((ret = getopt(argc, argv, "hs:"))) {
+ if (ret < 0)
+ break;
+
+ switch (ret) {
+ case '?':
+ return 1;
+
+ case 'h':
+ usage();
+ return 0;
+
+ case 's':
+ fs = optarg;
+ for (i = 0; fs[i]; i++) {
+ if (optarg[i] == SKIP_DELIMITER)
+ cnt++;
+ }
+ skiplist = malloc(++cnt * sizeof(char *));
+ if (!skiplist) {
+ fprintf(stderr, "malloc() failed\n");
+ return 1;
+ }
+
+ fs = optarg;
+ for (i = 0; i < cnt; i++)
+ skiplist[i] = strtok_r(fs, TST_TO_STR(SKIP_DELIMITER), &fs);
+ break;
+ }
}
- if (argv[1] && !strcmp(argv[1], "-h")) {
+ if (argc - optind > 1) {
+ fprintf(stderr, "Can't specify multiple fs_type\n");
usage();
- return 0;
+ return 2;
}
- if (argv[1])
- return !tst_fs_is_supported(argv[1]);
+ if (optind < argc)
+ return !tst_fs_is_supported(argv[optind]);
- filesystems = tst_get_supported_fs_types(skiplist);
+ filesystems = tst_get_supported_fs_types((const char * const*)skiplist);
for (i = 0; filesystems[i]; i++)
printf("%s\n", filesystems[i]);
diff --git a/testcases/misc/lvm/generate_lvm_runfile.sh b/testcases/misc/lvm/generate_lvm_runfile.sh
index 477aed116..7f7e149d9 100755
--- a/testcases/misc/lvm/generate_lvm_runfile.sh
+++ b/testcases/misc/lvm/generate_lvm_runfile.sh
@@ -17,7 +17,7 @@ generate_runfile()
trap '[ $? -eq 0 ] || tst_brk TBROK "Cannot create LVM runfile"' EXIT
INFILE="$LTPROOT/testcases/data/lvm/runfile.tpl"
OUTFILE="$LTPROOT/runtest/lvm.local"
- FS_LIST=`tst_supported_fs`
+ FS_LIST=$(tst_supported_fs -s tmpfs)
echo -n "" >"$OUTFILE"
for fsname in $FS_LIST; do
diff --git a/testcases/misc/lvm/prepare_lvm.sh b/testcases/misc/lvm/prepare_lvm.sh
index d3ae4b23f..29f386df8 100755
--- a/testcases/misc/lvm/prepare_lvm.sh
+++ b/testcases/misc/lvm/prepare_lvm.sh
@@ -70,7 +70,7 @@ prepare_mounts()
prepare_lvm()
{
- FS_LIST=`tst_supported_fs | sort -u`
+ FS_LIST=$(tst_supported_fs -s tmpfs | sort -u)
ROD mkdir -p "$LVM_TMPDIR"
ROD mkdir -p "$LVM_IMGDIR"
chmod 777 "$LVM_TMPDIR"
--
2.37.2
More information about the ltp
mailing list