aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksandar Markovic <aleksandar.markovic@imgtec.com>2016-10-10 13:23:30 +0200
committerRiku Voipio <riku.voipio@linaro.org>2016-10-21 15:20:13 +0300
commit5a03cd009ae8d9c819c3f24f16695f8a334b8ad9 (patch)
treed86a30aef0ffce1c052152b0106ac6f61e44280d
parent38860a0343df894a1c3371597eb4d305078642fb (diff)
downloadqemu-5a03cd009ae8d9c819c3f24f16695f8a334b8ad9.zip
qemu-5a03cd009ae8d9c819c3f24f16695f8a334b8ad9.tar.gz
qemu-5a03cd009ae8d9c819c3f24f16695f8a334b8ad9.tar.bz2
linux-user: Add support for syncfs() syscall
This patch implements Qemu user mode syncfs() syscall support. Syscall syncfs() syncs the filesystem containing file determined by the open file descriptor passed as the argument to syncfs(). The implementation consists of a straightforward invocation of host's syncfs(). Configure and strace support is included as well. Signed-off-by: Aleksandar Markovic <aleksandar.markovic@imgtec.com> Signed-off-by: Riku Voipio <riku.voipio@linaro.org>
-rwxr-xr-xconfigure18
-rw-r--r--linux-user/strace.list2
-rw-r--r--linux-user/syscall.c5
3 files changed, 24 insertions, 1 deletions
diff --git a/configure b/configure
index 1ce3d00..d3dafcb 100755
--- a/configure
+++ b/configure
@@ -3926,6 +3926,21 @@ if compile_prog "" "" ; then
clock_adjtime=yes
fi
+# syncfs probe
+syncfs=no
+cat > $TMPC <<EOF
+#include <unistd.h>
+
+int main(void)
+{
+ return syncfs(0);
+}
+EOF
+syncfs=no
+if compile_prog "" "" ; then
+ syncfs=yes
+fi
+
# Check if tools are available to build documentation.
if test "$docs" != "no" ; then
if has makeinfo && has pod2man; then
@@ -5214,6 +5229,9 @@ fi
if test "$clock_adjtime" = "yes" ; then
echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
fi
+if test "$syncfs" = "yes" ; then
+ echo "CONFIG_SYNCFS=y" >> $config_host_mak
+fi
if test "$inotify" = "yes" ; then
echo "CONFIG_INOTIFY=y" >> $config_host_mak
fi
diff --git a/linux-user/strace.list b/linux-user/strace.list
index dcd3812..3b1282e 100644
--- a/linux-user/strace.list
+++ b/linux-user/strace.list
@@ -1459,7 +1459,7 @@
{ TARGET_NR_sync, "sync" , NULL, NULL, NULL },
#endif
#ifdef TARGET_NR_syncfs
-{ TARGET_NR_syncfs, "syncfs" , NULL, NULL, NULL },
+{ TARGET_NR_syncfs, "syncfs" , "%s(%d)", NULL, NULL },
#endif
#ifdef TARGET_NR_syscall
{ TARGET_NR_syscall, "syscall" , NULL, NULL, NULL },
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index 1492996..14c5207 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -8090,6 +8090,11 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
sync();
ret = 0;
break;
+#if defined(TARGET_NR_syncfs) && defined(CONFIG_SYNCFS)
+ case TARGET_NR_syncfs:
+ ret = get_errno(syncfs(arg1));
+ break;
+#endif
case TARGET_NR_kill:
ret = get_errno(safe_kill(arg1, target_to_host_signal(arg2)));
break;