This series adds missing support for syncfs(), fanotify_init() and fanotify_mark() syscalls
Tested on arm (BeagleBone Black), arm64 (Juno) and x86_64 architectures.
Bartosz Golaszewski (2): fanotify: add system call support syncfs: add system call support
include/unistd.h | 2 +- libc/sysdeps/linux/common/Makefile.in | 1 + libc/sysdeps/linux/common/fanotify.c | 32 +++++++++++++++++++++++++++ libc/sysdeps/linux/common/syncfs.c | 13 +++++++++++ libc/sysdeps/linux/common/sys/fanotify.h | 38 ++++++++++++++++++++++++++++++++ 5 files changed, 85 insertions(+), 1 deletion(-) create mode 100644 libc/sysdeps/linux/common/fanotify.c create mode 100644 libc/sysdeps/linux/common/syncfs.c create mode 100644 libc/sysdeps/linux/common/sys/fanotify.h
Add support for fanotify_init() and fanotify_mark() syscalls. The header file is taken from glibc.
Signed-off-by: Bartosz Golaszewski bartekgola@gmail.com --- libc/sysdeps/linux/common/Makefile.in | 1 + libc/sysdeps/linux/common/fanotify.c | 32 +++++++++++++++++++++++++++ libc/sysdeps/linux/common/sys/fanotify.h | 38 ++++++++++++++++++++++++++++++++ 3 files changed, 71 insertions(+) create mode 100644 libc/sysdeps/linux/common/fanotify.c create mode 100644 libc/sysdeps/linux/common/sys/fanotify.h
diff --git a/libc/sysdeps/linux/common/Makefile.in b/libc/sysdeps/linux/common/Makefile.in index 8252598..b75b712 100644 --- a/libc/sysdeps/linux/common/Makefile.in +++ b/libc/sysdeps/linux/common/Makefile.in @@ -27,6 +27,7 @@ CSRC-$(UCLIBC_LINUX_SPECIFIC) += \ eventfd.c \ eventfd_read.c \ eventfd_write.c \ + fanotify.c \ getrandom.c \ inotify.c \ ioperm.c \ diff --git a/libc/sysdeps/linux/common/fanotify.c b/libc/sysdeps/linux/common/fanotify.c new file mode 100644 index 0000000..431e0e5 --- /dev/null +++ b/libc/sysdeps/linux/common/fanotify.c @@ -0,0 +1,32 @@ +/* vi: set sw=4 ts=4: */ +/* + * fanotify interface for uClibc + * + * Copyright (C) 2015 by Bartosz Golaszewski bartekgola@gmail.com + * + * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. + */ + +#include <sys/syscall.h> +#include <sys/fanotify.h> + +#ifdef __NR_fanotify_init +_syscall2(int, fanotify_init, unsigned int, flags, unsigned int, event_f_flags) +#endif + +#ifdef __NR_fanotify_mark +# include <bits/wordsize.h> +# include <fcntl.h> + +# if __WORDSIZE == 64 +_syscall5(int, fanotify_mark, int, fanotify_fd, unsigned int, flags, + uint64_t, mask, int, dirfd, const char *, pathname) +# else +int fanotify_mark(int fanotify_fd, unsigned int flags, + uint64_t mask, int dirfd, const char *pathname) +{ + return INLINE_SYSCALL(fanotify_mark, 6, fanotify_fd, flags, + OFF64_HI_LO(mask), dirfd, pathname); +} +# endif +#endif diff --git a/libc/sysdeps/linux/common/sys/fanotify.h b/libc/sysdeps/linux/common/sys/fanotify.h new file mode 100644 index 0000000..5eec3e5 --- /dev/null +++ b/libc/sysdeps/linux/common/sys/fanotify.h @@ -0,0 +1,38 @@ +/* Copyright (C) 2010-2015 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + http://www.gnu.org/licenses/. */ + +#ifndef _SYS_FANOTIFY_H +#define _SYS_FANOTIFY_H 1 + +#include <stdint.h> +#include <linux/fanotify.h> + + +__BEGIN_DECLS + +/* Create and initialize fanotify group. */ +extern int fanotify_init (unsigned int __flags, unsigned int __event_f_flags) + __THROW; + +/* Add, remove, or modify an fanotify mark on a filesystem object. */ +extern int fanotify_mark (int __fanotify_fd, unsigned int __flags, + uint64_t __mask, int __dfd, const char *__pathname) + __THROW; + +__END_DECLS + +#endif /* sys/fanotify.h */
Bartosz, Waldemar,
On Wed, 14 Oct 2015 17:14:00 +0200, Bartosz Golaszewski wrote:
Add support for fanotify_init() and fanotify_mark() syscalls. The header file is taken from glibc.
Signed-off-by: Bartosz Golaszewski bartekgola@gmail.com
This commit breaks the uClibc-ng when fairly old (2.6.35) kernel headers are used, because the fanotify system call wasn't available at that time, so <linux/fanotify.h> doesn't exist.
See http://jenkins.free-electrons.com/job/buildroot/configurations=mx53loco_defc....
It started failing since we updated to uClibc-ng 1.0.8.
I am not sure what's the policy of uClibc-ng on that respect:
1/ Should the fanotify() implementation in uClibc-ng be made conditional on the availability of the corresponding system calls and header files in the kernel headers.
2/ Or should fanotify be behind some kconfig option?
I would personally prefer (1), so that it gets automatically enabled when available, and disabled otherwise. (2) would be less practical for projects like Buildroot.
Thanks,
Thomas
Hi Thomas, Thomas Petazzoni wrote,
Bartosz, Waldemar,
On Wed, 14 Oct 2015 17:14:00 +0200, Bartosz Golaszewski wrote:
Add support for fanotify_init() and fanotify_mark() syscalls. The header file is taken from glibc.
Signed-off-by: Bartosz Golaszewski bartekgola@gmail.com
This commit breaks the uClibc-ng when fairly old (2.6.35) kernel headers are used, because the fanotify system call wasn't available at that time, so <linux/fanotify.h> doesn't exist.
See http://jenkins.free-electrons.com/job/buildroot/configurations=mx53loco_defc....
It started failing since we updated to uClibc-ng 1.0.8.
I am not sure what's the policy of uClibc-ng on that respect:
1/ Should the fanotify() implementation in uClibc-ng be made conditional on the availability of the corresponding system calls and header files in the kernel headers.
2/ Or should fanotify be behind some kconfig option?
I would personally prefer (1), so that it gets automatically enabled when available, and disabled otherwise. (2) would be less practical for projects like Buildroot.
Yeah, I prefer 1), too. I don't like new kconfig symbols for just saving a few bytes. I think we should just include the required defines in fanotify.h, like musl is doing it? http://git.musl-libc.org/cgit/musl/tree/include/sys/fanotify.h
@Bartosz: what do you think?
best regards Waldemar
2015-11-06 4:27 GMT+01:00 Waldemar Brodkorb wbx@uclibc-ng.org:
Hi Thomas, Thomas Petazzoni wrote,
Bartosz, Waldemar,
On Wed, 14 Oct 2015 17:14:00 +0200, Bartosz Golaszewski wrote:
Add support for fanotify_init() and fanotify_mark() syscalls. The header file is taken from glibc.
Signed-off-by: Bartosz Golaszewski bartekgola@gmail.com
This commit breaks the uClibc-ng when fairly old (2.6.35) kernel headers are used, because the fanotify system call wasn't available at that time, so <linux/fanotify.h> doesn't exist.
See http://jenkins.free-electrons.com/job/buildroot/configurations=mx53loco_defc....
It started failing since we updated to uClibc-ng 1.0.8.
I am not sure what's the policy of uClibc-ng on that respect:
1/ Should the fanotify() implementation in uClibc-ng be made conditional on the availability of the corresponding system calls and header files in the kernel headers.
2/ Or should fanotify be behind some kconfig option?
I would personally prefer (1), so that it gets automatically enabled when available, and disabled otherwise. (2) would be less practical for projects like Buildroot.
Yeah, I prefer 1), too. I don't like new kconfig symbols for just saving a few bytes. I think we should just include the required defines in fanotify.h, like musl is doing it? http://git.musl-libc.org/cgit/musl/tree/include/sys/fanotify.h
@Bartosz: what do you think?
best regards Waldemar
Hi Waldemar, Thomas,
in fanotify.c we have:
#ifdef __NR_fanotify_init (...) #endif
and
#ifdef __NR_fanotify_mark (...) #endif
What about making #include <linux/fanotify.h> conditional with:
#if defined(__NR_fanotify_init) && defined(__NR_fanotify_mark) # include <linux/fanotify.h> (...) #endif
Otherwise including fanotify defines like musl does sounds good.
Add support for the syncfs() system call.
Signed-off-by: Bartosz Golaszewski bartekgola@gmail.com --- include/unistd.h | 2 +- libc/sysdeps/linux/common/syncfs.c | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 libc/sysdeps/linux/common/syncfs.c
diff --git a/include/unistd.h b/include/unistd.h index 3793d2d..4701dab 100644 --- a/include/unistd.h +++ b/include/unistd.h @@ -1073,7 +1073,7 @@ extern char *getpass (const char *__prompt) __nonnull ((1)); extern int fsync (int __fd); #endif /* Use BSD || X/Open || Unix98. */
-#if 0 /*def __USE_GNU */ +#if __USE_GNU /* Make all changes done to all files on the file system associated * with FD actually appear on disk. */ extern int syncfs (int __fd) __THROW; diff --git a/libc/sysdeps/linux/common/syncfs.c b/libc/sysdeps/linux/common/syncfs.c new file mode 100644 index 0000000..831f765 --- /dev/null +++ b/libc/sysdeps/linux/common/syncfs.c @@ -0,0 +1,13 @@ +/* vi: set sw=4 ts=4: */ +/* + * Copyright (C) 2015 Bartosz Golaszewski bartekgola@gmail.com + * + * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. + */ + +#include <sys/syscall.h> + +#if defined(__NR_syncfs) && __USE_GNU +#include <unistd.h> +_syscall1(int, syncfs, int, fd) +#endif
2015-10-14 17:13 GMT+02:00 Bartosz Golaszewski bartekgola@gmail.com:
This series adds missing support for syncfs(), fanotify_init() and fanotify_mark() syscalls
Tested on arm (BeagleBone Black), arm64 (Juno)
Oops, got the wrong toolchain on Juno, it's not the uclibc-ng I tested, aarch64 not supported in master. So only arm and x86_64.
Hi Bartosz, Bartosz Golaszewski wrote,
This series adds missing support for syncfs(), fanotify_init() and fanotify_mark() syscalls
Tested on arm (BeagleBone Black), arm64 (Juno) and x86_64 architectures.
Bartosz Golaszewski (2): fanotify: add system call support syncfs: add system call support
Thanks, both applied and pushed, best regards Waldemar