On 2/27/24 00:42, Meng Li wrote:
make -C tools/testing/selftests, compiling dev_in_maps fail. In file included from dev_in_maps.c:10: /usr/include/x86_64-linux-gnu/sys/mount.h:35:3: error: expected identifier before numeric constant 35 | MS_RDONLY = 1, /* Mount read-only. */ | ^~~~~~~~~
That sys/mount.h has to be included before linux/mount.h.
Signed-off-by: Meng Li li.meng@amd.com
tools/testing/selftests/filesystems/overlayfs/dev_in_maps.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
I don't see this problem when I build it on my system when I run:
make -C tools/testing/selftests or make -C tools/testing/selftests/filesystems/overlayfs
Are you running this after doing headers_install?
thanks, -- Shuah
On Tue, Feb 27, 2024 at 8:41 AM Shuah Khan skhan@linuxfoundation.org wrote:
On 2/27/24 00:42, Meng Li wrote:
make -C tools/testing/selftests, compiling dev_in_maps fail. In file included from dev_in_maps.c:10: /usr/include/x86_64-linux-gnu/sys/mount.h:35:3: error: expected identifier before numeric constant 35 | MS_RDONLY = 1, /* Mount read-only. */ | ^~~~~~~~~
That sys/mount.h has to be included before linux/mount.h.
Signed-off-by: Meng Li li.meng@amd.com
tools/testing/selftests/filesystems/overlayfs/dev_in_maps.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
I don't see this problem when I build it on my system when I run:
make -C tools/testing/selftests or make -C tools/testing/selftests/filesystems/overlayfs
Are you running this after doing headers_install?
It depends on libc headers. It can work with one libc and doesn't work with another one. I have seen many times when linux headers conflicted with libc headers. The only reliable way to avoid this sort of issues is to include just one linux or libc header.
In this case, we can do something like this:
diff --git a/tools/testing/selftests/filesystems/overlayfs/dev_in_maps.c b/tools/testing/selftests/filesystems/overlayfs/dev_in_maps.c index e19ab0e85709..f1ba82e52192 100644 --- a/tools/testing/selftests/filesystems/overlayfs/dev_in_maps.c +++ b/tools/testing/selftests/filesystems/overlayfs/dev_in_maps.c @@ -10,7 +10,6 @@ #include <linux/mount.h> #include <sys/syscall.h> #include <sys/stat.h> -#include <sys/mount.h> #include <sys/mman.h> #include <sched.h> #include <fcntl.h> @@ -40,6 +39,14 @@ static int sys_move_mount(int from_dfd, const char *from_pathname, return syscall(__NR_move_mount, from_dfd, from_pathname, to_dfd, to_pathname, flags); }
+static int sys_mount(const char *source, const char *target, + const char *filesystemtype, unsigned long mountflags, + const void *data) +{ + return syscall(__NR_mount, source, target, filesystemtype, mountflags, data); +} + + static long get_file_dev_and_inode(void *addr, struct statx *stx) { char buf[4096]; @@ -167,7 +174,7 @@ int main(int argc, char **argv) return 1; }
- if (mount(NULL, "/", NULL, MS_SLAVE | MS_REC, NULL) == -1) { + if (sys_mount(NULL, "/", NULL, MS_SLAVE | MS_REC, NULL) == -1) { pr_perror("mount"); return 1; }
Thanks, Andrei
On 2/27/24 14:20, Andrei Vagin wrote:
On Tue, Feb 27, 2024 at 8:41 AM Shuah Khan skhan@linuxfoundation.org wrote:
On 2/27/24 00:42, Meng Li wrote:
make -C tools/testing/selftests, compiling dev_in_maps fail. In file included from dev_in_maps.c:10: /usr/include/x86_64-linux-gnu/sys/mount.h:35:3: error: expected identifier before numeric constant 35 | MS_RDONLY = 1, /* Mount read-only. */ | ^~~~~~~~~
That sys/mount.h has to be included before linux/mount.h.
Signed-off-by: Meng Li li.meng@amd.com
tools/testing/selftests/filesystems/overlayfs/dev_in_maps.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
I don't see this problem when I build it on my system when I run:
make -C tools/testing/selftests or make -C tools/testing/selftests/filesystems/overlayfs
Are you running this after doing headers_install?
It depends on libc headers. It can work with one libc and doesn't work with another one. I have seen many times when linux headers conflicted with libc headers. The only reliable way to avoid this sort of issues is to include just one linux or libc header.
In this case, we can do something like this:
diff --git a/tools/testing/selftests/filesystems/overlayfs/dev_in_maps.c b/tools/testing/selftests/filesystems/overlayfs/dev_in_maps.c index e19ab0e85709..f1ba82e52192 100644 --- a/tools/testing/selftests/filesystems/overlayfs/dev_in_maps.c +++ b/tools/testing/selftests/filesystems/overlayfs/dev_in_maps.c @@ -10,7 +10,6 @@ #include <linux/mount.h> #include <sys/syscall.h> #include <sys/stat.h> -#include <sys/mount.h> #include <sys/mman.h> #include <sched.h> #include <fcntl.h> @@ -40,6 +39,14 @@ static int sys_move_mount(int from_dfd, const char *from_pathname, return syscall(__NR_move_mount, from_dfd, from_pathname, to_dfd, to_pathname, flags); }
+static int sys_mount(const char *source, const char *target,
const char *filesystemtype, unsigned long mountflags,
const void *data)
+{
return syscall(__NR_mount, source, target, filesystemtype,
mountflags, data); +}
- static long get_file_dev_and_inode(void *addr, struct statx *stx) { char buf[4096];
@@ -167,7 +174,7 @@ int main(int argc, char **argv) return 1; }
if (mount(NULL, "/", NULL, MS_SLAVE | MS_REC, NULL) == -1) {
if (sys_mount(NULL, "/", NULL, MS_SLAVE | MS_REC, NULL) == -1) { pr_perror("mount"); return 1; }
This is definitely better solution to this problem than reordering the includes only find another problem down the road.
thanks, -- Shuah
linux-kselftest-mirror@lists.linaro.org