<div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div class="gmail_default" style="font-size:small">Hi Murphy,</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, May 1, 2019 at 7:59 AM Murphy Zhou <<a href="mailto:xzhou@redhat.com">xzhou@redhat.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">That means swapfile in the test filesystem is not supported.<br>
Add a test helper to do a FIBMAP ioctl test. Remove old fs type whitelist code.<br>
<br>
Signed-off-by: Murphy Zhou <<a href="mailto:xzhou@redhat.com" target="_blank">xzhou@redhat.com</a>><br>
---<br>
v2:<br>
   Test FIBMAP instead of fstype whitelist.<br>
v3:<br>
   Fix fs_type undeclared in swapoff01.c.<br>
<br>
 include/tst_fs.h                              |  5 +++<br>
 lib/tst_ioctl.c                               | 41 +++++++++++++++++++<br>
 testcases/kernel/syscalls/swapoff/swapoff01.c | 13 ++----<br>
 testcases/kernel/syscalls/swapoff/swapoff02.c | 11 +++--<br>
 testcases/kernel/syscalls/swapon/swapon01.c   | 13 ++----<br>
 testcases/kernel/syscalls/swapon/swapon02.c   | 16 ++------<br>
 testcases/kernel/syscalls/swapon/swapon03.c   | 20 ++-------<br>
 7 files changed, 65 insertions(+), 54 deletions(-)<br>
 create mode 100644 lib/tst_ioctl.c<br>
<br>
diff --git a/include/tst_fs.h b/include/tst_fs.h<br>
index b2b19ada6..cc38b3547 100644<br>
--- a/include/tst_fs.h<br>
+++ b/include/tst_fs.h<br>
@@ -172,6 +172,11 @@ const char **tst_get_supported_fs_types(void);<br>
  */<br>
 void tst_fill_fs(const char *path, int verbose);<br>
<br>
+/*<br>
+ * test if FIBMAP ioctl is supported<br>
+ */<br>
+int tst_fibmap(void);<br>
+<br>
 #ifdef TST_TEST_H__<br>
 static inline long tst_fs_type(const char *path)<br>
 {<br>
diff --git a/lib/tst_ioctl.c b/lib/tst_ioctl.c<br>
new file mode 100644<br>
index 000000000..d468d5898<br>
--- /dev/null<br>
+++ b/lib/tst_ioctl.c<br>
@@ -0,0 +1,41 @@<br>
+// SPDX-License-Identifier: GPL-2.0-or-later<br>
+<br>
+#include <errno.h><br>
+#include <stdio.h><br>
+#include <stdlib.h><br>
+#include <sys/ioctl.h><br>
+#include <linux/fs.h><br>
+<br>
+#define TST_NO_DEFAULT_MAIN<br>
+<br>
+#include "tst_test.h"<br>
+<br>
+int tst_fibmap(void)<br>
+{<br>
+       /* test if FIBMAP ioctl is supported */<br>
+       int fd, block = 0;<br>
+       const char *tmpdir = getenv("TMPDIR");<br>
+       char buf[128];<br>
+<br>
+       tst_res(TINFO, "Testing if FIBMAP ioctl is supported in %s", tmpdir);<br>
+<br>
+       sprintf(buf, "%s/tst_fibmap", tmpdir);<br>
+<br>
+       fd = open(buf, O_RDWR | O_CREAT, 0666);<br>
+       if (fd < 0) {<br>
+               tst_res(TWARN | TERRNO,<br>
+                        "open(%s, O_RDWR | O_CREAT, 0666) failed", buf);<br>
+               return 1;<br>
+       }<br>
+<br>
+       if (ioctl(fd, FIBMAP, &block)) {<br>
+               close(fd);<br>
+               return 1;<br>
+       }<br>
+<br>
+       if (close(fd)) {<br>
+               tst_res(TWARN | TERRNO, "close(fd) failed");<br>
+               return 1;<br>
+       }<br>
+       return 0;<br>
+}<br>
diff --git a/testcases/kernel/syscalls/swapoff/swapoff01.c b/testcases/kernel/syscalls/swapoff/swapoff01.c<br>
index a63e661a5..a37cd9be1 100644<br>
--- a/testcases/kernel/syscalls/swapoff/swapoff01.c<br>
+++ b/testcases/kernel/syscalls/swapoff/swapoff01.c<br>
@@ -55,11 +55,6 @@ int main(int ac, char **av)<br>
 static void verify_swapoff(void)<br>
 {<br>
        if (ltp_syscall(__NR_swapon, "./swapfile01", 0) != 0) {<br>
-               if (fs_type == TST_BTRFS_MAGIC && errno == EINVAL) {<br>
-                       tst_brkm(TCONF, cleanup,<br>
-                                "Swapfiles on BTRFS are not implemented");<br>
-               }<br>
-<br>
                tst_resm(TBROK, "Failed to turn on the swap file"<br>
                         ", skipping test iteration");<br>
                return;<br>
@@ -86,13 +81,11 @@ static void setup(void)<br>
<br>
        tst_tmpdir();<br>
<br>
-       switch ((fs_type = tst_fs_type(cleanup, "."))) {<br>
-       case TST_NFS_MAGIC:<br>
-       case TST_TMPFS_MAGIC:<br>
+       fs_type = tst_fs_type(cleanup, ".");<br>
+       if (tst_fibmap()) {<br>
                tst_brkm(TCONF, cleanup,<br>
-                        "Cannot do swapoff on a file on %s filesystem",<br>
+                        "Cannot do FIBMAP ioctl on a file on %s filesystem",<br>
                         tst_fs_type_name(fs_type));<br>
-       break;<br>
        }<br>
<br>
        if (!tst_fs_has_free(NULL, ".", 64, TST_MB)) {<br>
diff --git a/testcases/kernel/syscalls/swapoff/swapoff02.c b/testcases/kernel/syscalls/swapoff/swapoff02.c<br>
index b5c6312a1..889f3c800 100644<br>
--- a/testcases/kernel/syscalls/swapoff/swapoff02.c<br>
+++ b/testcases/kernel/syscalls/swapoff/swapoff02.c<br>
@@ -43,6 +43,7 @@ char *TCID = "swapoff02";<br>
 int TST_TOTAL = 3;<br>
<br>
 static uid_t nobody_uid;<br>
+static long fs_type;<br>
<br>
 static struct test_case_t {<br>
        char *err_desc;<br>
@@ -138,13 +139,11 @@ static void setup(void)<br>
<br>
        tst_tmpdir();<br>
<br>
-       switch ((type = tst_fs_type(cleanup, "."))) {<br>
-       case TST_NFS_MAGIC:<br>
-       case TST_TMPFS_MAGIC:<br>
+       fs_type = tst_fs_type(cleanup, ".");<br>
+       if (tst_fibmap()) {<br>
                tst_brkm(TCONF, cleanup,<br>
-                        "Cannot do swapoff on a file on %s filesystem",<br>
-                        tst_fs_type_name(type));<br>
-       break;<br>
+                        "Cannot do FIBMAP ioctl on a file on %s filesystem",<br>
+                        tst_fs_type_name(fs_type));<br>
        }<br>
<br>
        if (!tst_fs_has_free(NULL, ".", 1, TST_KB)) {<br>
diff --git a/testcases/kernel/syscalls/swapon/swapon01.c b/testcases/kernel/syscalls/swapon/swapon01.c<br>
index 32538f82b..0a5a3de86 100644<br>
--- a/testcases/kernel/syscalls/swapon/swapon01.c<br>
+++ b/testcases/kernel/syscalls/swapon/swapon01.c<br>
@@ -39,11 +39,6 @@ static void verify_swapon(void)<br>
        TEST(ltp_syscall(__NR_swapon, "./swapfile01", 0));<br>
<br>
        if (TEST_RETURN == -1) {<br>
-               if (fs_type == TST_BTRFS_MAGIC && errno == EINVAL) {<br>
-                       tst_brkm(TCONF, cleanup,<br>
-                                "Swapfile on BTRFS not implemeted");<br>
-                       return;<br>
-               }<br>
                tst_resm(TFAIL | TTERRNO, "Failed to turn on swapfile");<br>
        } else {<br>
                tst_resm(TPASS, "Succeeded to turn on swapfile");<br>
@@ -84,13 +79,11 @@ static void setup(void)<br>
<br>
        tst_tmpdir();<br>
<br>
-       switch ((fs_type = tst_fs_type(cleanup, "."))) {<br>
-       case TST_NFS_MAGIC:<br>
-       case TST_TMPFS_MAGIC:<br>
+       fs_type = tst_fs_type(cleanup, ".");<br>
+       if (tst_fibmap()) {<br></blockquote><div><br></div><div class="gmail_default" style="font-size:small">I'm not sure whether FIBMAP ioctl FAIL means that swapfile is unsupportted on a filesystem.</div><div class="gmail_default" style="font-size:small">If that's true, shouldn't we verify FIBMAP ioctl on the swapfile?  Here you just test that in a tmp file, it probably not a correct way I guess.</div><div class="gmail_default" style="font-size:small"><br></div><div class="gmail_default" style="font-size:small">IMO, maybe we can define the function API as:</div><div class="gmail_default" style="font-size:small">    tst_fibmap(const char *filename);</div><div class="gmail_default" style="font-size:small">And calling it in behind of <span class="gmail_default"></span>make_swapfile(cleanup, "swapfile01");</div><div class="gmail_default" style="font-size:small"><br></div><div class="gmail_default" style="font-size:small">Beside that, there is another issue in this patch, since the getenv("TMPDIR"); depend on runltp script, so we cann't run the test independently. </div><div class="gmail_default" style="font-size:small"><br></div><div class="gmail_default" style="font-size:small"><div class="gmail_default"># ./swapon01 </div><div class="gmail_default">tst_ioctl.c:20: INFO: Testing if FIBMAP ioctl is supported in (null)</div><div class="gmail_default">tst_ioctl.c:27: WARN: open((null)/tst_fibmap, O_RDWR | O_CREAT, 0666) failed: ENOENT</div><div class="gmail_default">swapon01    1  TCONF  :  swapon01.c:86: Cannot do FIBMAP ioctl on a file on XFS filesystem</div><div class="gmail_default">swapon01    2  TCONF  :  swapon01.c:86: Remaining cases not appropriate for configuration</div><div><br></div></div></div>-- <br><div dir="ltr" class="gmail_signature"><div dir="ltr"><div><div dir="ltr">Regards,<br>Li Wang<br></div></div></div></div></div></div></div></div>