<div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div class="gmail_default" style="font-size:small">Hi,</div><div class="gmail_default" style="font-size:small"><br></div><div class="gmail_default" style="font-size:small">[CC Viresh Kumar]</div><div class="gmail_default" style="font-size:small"><br></div><div class="gmail_default" style="font-size:small">Patch v6 looks almost good besides tiny issues:</div><div class="gmail_default" style="font-size:small"><br></div><div class="gmail_default">I don't like the commit summary with kernel version number, can we just note as: </div><div class="gmail_default">    "syscalls/fsmount01: Add test for fsmount series API"?</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, Feb 7, 2020 at 10:41 PM Petr Vorel <<a href="mailto:pvorel@suse.cz" target="_blank">pvorel@suse.cz</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">From: Zorro Lang <<a href="mailto:zlang@redhat.com" target="_blank">zlang@redhat.com</a>><br>
<br>
Add basic tests tests for new mount API from kernel v5.2.<br>
Testing mount and umount filesystems with fsopen(), fsconfig(),<br>
fsmount() and move_mount().<br>
<br>
Signed-off-by: Zorro Lang <<a href="mailto:zlang@redhat.com" target="_blank">zlang@redhat.com</a>><br>
Reported-by: Cyril Hrubis <<a href="mailto:chrubis@suse.cz" target="_blank">chrubis@suse.cz</a>><br>
[ pvorel: cleanup autotools and other fixes ]<br>
Signed-off-by: Petr Vorel <<a href="mailto:pvorel@suse.cz" target="_blank">pvorel@suse.cz</a>><br>
---<br>
 <a href="http://configure.ac" rel="noreferrer" target="_blank">configure.ac</a>                                  |  4 +<br>
 include/lapi/newmount.h                       | 95 +++++++++++++++++++<br>
 include/lapi/syscalls/<a href="http://powerpc64.in" rel="noreferrer" target="_blank">powerpc64.in</a>            |  4 +<br></blockquote><div><br></div><div><div class="gmail_default" style="font-size:small">Is there any reason why only add syscall num for ppc64?</div></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
diff --git a/<a href="http://configure.ac" rel="noreferrer" target="_blank">configure.ac</a> b/<a href="http://configure.ac" rel="noreferrer" target="_blank">configure.ac</a><br>
index df4e8c832..05b7d0a72 100644<br>
--- a/<a href="http://configure.ac" rel="noreferrer" target="_blank">configure.ac</a><br>
+++ b/<a href="http://configure.ac" rel="noreferrer" target="_blank">configure.ac</a><br>
@@ -80,6 +80,9 @@ AC_CHECK_FUNCS([ \<br>
     execveat \<br>
     fallocate \<br>
     fchownat \<br>
+    fsconfig \<br>
+    fsmount \<br>
+    fsopen \<br>
     fstatat \<br>
     getdents \<br>
     getdents64 \<br>
@@ -88,6 +91,7 @@ AC_CHECK_FUNCS([ \<br>
     mkdirat \<br>
     mknodat \<br>
     modify_ldt \<br>
+    move_mount \<br>
     name_to_handle_at \<br>
     openat \<br>
     pidfd_open \<br>
diff --git a/include/lapi/newmount.h b/include/lapi/newmount.h<br>
new file mode 100644<br>
index 000000000..d4efdb300<br>
--- /dev/null<br>
+++ b/include/lapi/newmount.h<br></blockquote><div><br></div><div class="gmail_default" style="font-size:small">Maybe rename to fsmount.h is better? Now we think it new since mainline v5.2 is new to us, one year later it probably not new actually, to use a name can indicate the functionality is wiser I guess.</div><div class="gmail_default" style="font-size:small"><br></div><div class="gmail_default" style="font-size:small">BTW, I like the way Viresh Kumar gives in his fsmount.h, it looks more tidy and clean.</div><div class="gmail_default" style="font-size:small"><a href="http://lists.linux.it/pipermail/ltp/2020-February/015413.html" target="_blank">http://lists.linux.it/pipermail/ltp/2020-February/015413.html</a><br></div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
--- /dev/null<br>
+++ b/testcases/kernel/syscalls/fsmount/fsmount01.c<br>
@@ -0,0 +1,94 @@<br>
+// SPDX-License-Identifier: GPL-2.0-or-later<br>
+/*<br>
+ * Copyright (C) 2019 Red Hat, Inc.  All rights reserved.<br>
+ * Author: Zorro Lang <<a href="mailto:zlang@redhat.com" target="_blank">zlang@redhat.com</a>><br>
+ *<br>
+ * Use new mount API from v5.2 (fsopen(), fsconfig(), fsmount(), move_mount())<br>
+ * to mount a filesystem without any specified mount options.<br>
+ */<br>
+<br>
+#include <sys/mount.h><br>
+<br>
+#include "tst_test.h"<br>
+#include "lapi/newmount.h"<br>
+#include "tst_safe_stdio.h"<br>
+<br>
+#define LINELENGTH 256<br>
+#define MNTPOINT "newmount_point"<br>
+static int sfd, mfd, is_mounted;<br>
+<br>
+static int ismount(char *mntpoint)<br>
+{<br>
+       int ret = 0;<br>
+       FILE *file;<br>
+       char line[LINELENGTH];<br>
+<br>
+       file = SAFE_FOPEN("/proc/mounts", "r");<br>
+<br>
+       while (fgets(line, sizeof(line), file)) {<br>
+               if (strstr(line, mntpoint) != NULL) {<br>
+                       ret = 1;<br>
+                       break;<br>
+               }<br>
+       }<br>
+       SAFE_FCLOSE(file);<br>
+       return ret;<br>
+}<br>
+<br>
+static void cleanup(void)<br>
+{<br>
+       if (is_mounted)<br>
+               SAFE_UMOUNT(MNTPOINT);<br>
+}<br>
+<br>
+static void test_newmount(void)<br></blockquote><div> </div><div><span class="gmail_default" style="font-size:small">static void test_fsmount(void)? O</span>r<span class="gmail_default" style="font-size:small">,</span> static void run(void)<span class="gmail_default" style="font-size:small">.</span></div><div><span class="gmail_default" style="font-size:small"></span> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
+{<br>
+       TEST(fsopen(tst_device->fs_type, FSOPEN_CLOEXEC));<br>
+       if (TST_RET < 0)<br>
+               tst_brk(TBROK | TTERRNO, "fsopen %s", tst_device->fs_type);<br>
+       sfd = TST_RET;<br>
+       tst_res(TPASS, "fsopen %s", tst_device->fs_type);<br>
+<br>
+       TEST(fsconfig(sfd, FSCONFIG_SET_STRING, "source", tst_device->dev, 0));<br>
+       if (TST_RET < 0)<br>
+               tst_brk(TBROK | TTERRNO,<br>
+                       "fsconfig set source to %s", tst_device->dev);<br>
+       tst_res(TPASS, "fsconfig set source to %s", tst_device->dev);<br>
+<br>
+<br>
+       TEST(fsconfig(sfd, FSCONFIG_CMD_CREATE, NULL, NULL, 0));<br>
+       if (TST_RET < 0)<br>
+               tst_brk(TBROK | TTERRNO, "fsconfig create superblock");<br>
+       tst_res(TPASS, "fsconfig create superblock");<br>
+<br>
+       TEST(fsmount(sfd, FSMOUNT_CLOEXEC, 0));<br>
+       if (TST_RET < 0)<br>
+               tst_brk(TBROK | TTERRNO, "fsmount");<br>
+       mfd = TST_RET;<br>
+       tst_res(TPASS, "fsmount");<br>
+       SAFE_CLOSE(sfd);<br>
+<br>
+       TEST(move_mount(mfd, "", AT_FDCWD, MNTPOINT, MOVE_MOUNT_F_EMPTY_PATH));<br>
+       if (TST_RET < 0)<br>
+               tst_brk(TBROK | TTERRNO, "move_mount attach to mount point");<br>
+       is_mounted = 1;<br>
+       tst_res(TPASS, "move_mount attach to mount point");<br>
+       SAFE_CLOSE(mfd);<br>
+<br>
+       if (ismount(MNTPOINT)) {<br>
+               tst_res(TPASS, "new mount API from v5.2 works");<br></blockquote><div><br></div><div><div class="gmail_default" style="font-size:small">Can we avoid appearance the v5.2? I guess many Enterprise Linux Distributions will backport the fsmount() series API, v5.2 in test log looks strange if the kernel is older than it.</div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
+               SAFE_UMOUNT(MNTPOINT);<br>
+               is_mounted = 0;<br>
+       } else<br>
+               tst_res(TFAIL, "new mount API from v5.2 works");<br></blockquote><div><span class="gmail_default" style="font-size:small">no v5.2</span></div><div><span class="gmail_default" style="font-size:small"></span> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
+}<br>
+<br>
+static struct tst_test test = {<br>
+       .test_all = test_newmount,<br>
+       .cleanup = cleanup,<br>
+       .needs_root = 1,<br>
+       .mntpoint = MNTPOINT,<br>
+       .format_device = 1,<br>
+       .all_filesystems = 1,<br>
+       .dev_fs_flags = TST_FS_SKIP_FUSE,<br>
+};<br>
-- <br>
2.24.1<br>
<br>
</blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr"><div dir="ltr"><div>Regards,<br></div><div>Li Wang<br></div></div></div></div></div></div>