diff --git a/tests/Makefile b/tests/Makefile
index 001639b..b441031 100644
--- a/tests/Makefile
+++ b/tests/Makefile
@@ -4,6 +4,7 @@ SBINDIR ?= $(PREFIX)/sbin
 POLDEV ?= $(PREFIX)/share/selinux/devel
 INCLUDEDIR ?= $(PREFIX)/include
 SELINUXFS ?= /sys/fs/selinux
+FILESYSTEMS ?= ext4 xfs jfs vfat
 
 export CFLAGS+=-g -O0 -Wall -D_GNU_SOURCE
 
@@ -17,6 +18,9 @@ MOD_POL_VERS := $(shell $(CHECKMODULE) -V |cut -f 2 -d '-')
 MAX_KERNEL_POLICY := $(shell cat $(SELINUXFS)/policyvers)
 POL_TYPE := $(shell ./pol_detect $(SELINUXFS))
 
+# Filter out unavailable filesystems
+FILESYSTEMS := $(foreach fs,$(FILESYSTEMS),$(shell modprobe $(fs) && echo $(fs)))
+
 SUBDIRS:= domain_trans entrypoint execshare exectrace execute_no_trans \
 	fdreceive inherit link mkdir msg open ptrace readlink relabel rename \
 	rxdir sem setattr setnice shm sigkill stat sysctl task_create \
@@ -111,7 +115,7 @@ SUBDIRS += lockdown
 endif
 
 ifeq ($(shell grep -q filesystem $(POLDEV)/include/support/all_perms.spt && echo true),true)
-SUBDIRS += filesystem
+SUBDIRS += $(addprefix filesystem/,$(FILESYSTEMS))
 ifeq ($(shell grep -q all_filesystem_perms.*watch $(POLDEV)/include/support/all_perms.spt && echo true),true)
 export CFLAGS += -DHAVE_FS_WATCH_PERM
 endif
@@ -119,7 +123,7 @@ endif
 
 ifeq ($(shell grep -q filesystem $(POLDEV)/include/support/all_perms.spt && echo true),true)
 ifneq ($(shell ./kvercmp $$(uname -r) 5.2),-1)
-SUBDIRS += fs_filesystem
+SUBDIRS += $(addprefix fs_filesystem/,$(FILESYSTEMS))
 endif
 endif
 
diff --git a/tests/filesystem/ext4 b/tests/filesystem/ext4
new file mode 120000
index 0000000..945c9b4
--- /dev/null
+++ b/tests/filesystem/ext4
@@ -0,0 +1 @@
+.
\ No newline at end of file
diff --git a/tests/filesystem/jfs b/tests/filesystem/jfs
new file mode 120000
index 0000000..945c9b4
--- /dev/null
+++ b/tests/filesystem/jfs
@@ -0,0 +1 @@
+.
\ No newline at end of file
diff --git a/tests/filesystem/test b/tests/filesystem/test
index 7d4654d..6b37b76 100755
--- a/tests/filesystem/test
+++ b/tests/filesystem/test
@@ -12,6 +12,17 @@ BEGIN {
     $basedir = $0;
     $basedir =~ s|(.*)/[^/]*|$1|;
 
+    # extract test_name and move up one dir if started from a subdir
+    $test_name = $basedir;
+    $test_name =~ s|.*/([^/]*)|$1|;
+    if ( $test_name eq "fs_filesystem" ) {
+        $fs_type = " ";
+    }
+    else {
+        $fs_type = $test_name;
+        $basedir =~ s|(.*)/[^/]*|$1|;
+    }
+
     # Options: -v Verbose, -e enable udisks(8) daemon, -f filesystem type
     $v              = " ";
     $disable_udisks = 1;
@@ -20,8 +31,7 @@ BEGIN {
     $nfs_enabled    = 0;
     $vfat_enabled   = 0;
 
-    $i       = 0;
-    $fs_type = " ";
+    $i = 0;
     foreach $arg (@ARGV) {
         if ( $arg eq "-v" ) {
             $v = $arg;
diff --git a/tests/filesystem/vfat b/tests/filesystem/vfat
new file mode 120000
index 0000000..945c9b4
--- /dev/null
+++ b/tests/filesystem/vfat
@@ -0,0 +1 @@
+.
\ No newline at end of file
diff --git a/tests/filesystem/xfs b/tests/filesystem/xfs
new file mode 120000
index 0000000..945c9b4
--- /dev/null
+++ b/tests/filesystem/xfs
@@ -0,0 +1 @@
+.
\ No newline at end of file
diff --git a/tests/fs_filesystem/ext4 b/tests/fs_filesystem/ext4
new file mode 120000
index 0000000..945c9b4
--- /dev/null
+++ b/tests/fs_filesystem/ext4
@@ -0,0 +1 @@
+.
\ No newline at end of file
diff --git a/tests/fs_filesystem/jfs b/tests/fs_filesystem/jfs
new file mode 120000
index 0000000..945c9b4
--- /dev/null
+++ b/tests/fs_filesystem/jfs
@@ -0,0 +1 @@
+.
\ No newline at end of file
diff --git a/tests/fs_filesystem/test b/tests/fs_filesystem/test
index 5dedf83..ec71d92 100755
--- a/tests/fs_filesystem/test
+++ b/tests/fs_filesystem/test
@@ -12,6 +12,17 @@ BEGIN {
     $basedir = $0;
     $basedir =~ s|(.*)/[^/]*|$1|;
 
+    # extract test_name and move up one dir if started from a subdir
+    $test_name = $basedir;
+    $test_name =~ s|.*/([^/]*)|$1|;
+    if ( $test_name eq "fs_filesystem" ) {
+        $fs_type = " ";
+    }
+    else {
+        $fs_type = $test_name;
+        $basedir =~ s|(.*)/[^/]*|$1|;
+    }
+
     # Some code in tests/filesystem is reused
     $filesystem_dir = "$basedir/../filesystem";
 
@@ -23,8 +34,7 @@ BEGIN {
     $nfs_enabled    = 0;
     $vfat_enabled   = 0;
 
-    $i       = 0;
-    $fs_type = " ";
+    $i = 0;
     foreach $arg (@ARGV) {
         if ( $arg eq "-v" ) {
             $v = $arg;
diff --git a/tests/fs_filesystem/vfat b/tests/fs_filesystem/vfat
new file mode 120000
index 0000000..945c9b4
--- /dev/null
+++ b/tests/fs_filesystem/vfat
@@ -0,0 +1 @@
+.
\ No newline at end of file
diff --git a/tests/fs_filesystem/xfs b/tests/fs_filesystem/xfs
new file mode 120000
index 0000000..945c9b4
--- /dev/null
+++ b/tests/fs_filesystem/xfs
@@ -0,0 +1 @@
+.
\ No newline at end of file
