2018-02-19 03:47:07 +01:00
|
|
|
commit 909fe47c7009aa9a75fe9470c5f8d3dd5b50917a
|
2018-02-18 20:33:43 +01:00
|
|
|
Author: Shea Levy <shea@shealevy.com>
|
|
|
|
Date: Sun Feb 18 13:50:11 2018 -0500
|
|
|
|
|
|
|
|
linux-user: Support f_flags in statfs when available.
|
|
|
|
|
|
|
|
Signed-off-by: Shea Levy <shea@shealevy.com>
|
|
|
|
|
|
|
|
diff --git a/configure b/configure
|
|
|
|
index 913e14839d..52fe2bf941 100755
|
|
|
|
--- a/configure
|
|
|
|
+++ b/configure
|
|
|
|
@@ -5303,6 +5303,22 @@ if compile_prog "" "" ; then
|
|
|
|
have_utmpx=yes
|
|
|
|
fi
|
|
|
|
|
|
|
|
+##########################################
|
|
|
|
+# Check for newer fields of struct statfs on Linux
|
|
|
|
+
|
|
|
|
+if test "$linux_user" = "yes"; then
|
|
|
|
+ cat > $TMPC <<EOF
|
|
|
|
+#include <sys/vfs.h>
|
|
|
|
+
|
|
|
|
+int main(void) {
|
|
|
|
+ struct statfs fs;
|
|
|
|
+ fs.f_flags = 0;
|
|
|
|
+}
|
|
|
|
+EOF
|
|
|
|
+ if compile_object ; then
|
|
|
|
+ have_statfs_flags=yes
|
|
|
|
+ fi
|
|
|
|
+fi
|
|
|
|
##########################################
|
|
|
|
# checks for sanitizers
|
|
|
|
|
|
|
|
@@ -6518,6 +6534,10 @@ if test "$have_utmpx" = "yes" ; then
|
|
|
|
echo "HAVE_UTMPX=y" >> $config_host_mak
|
|
|
|
fi
|
|
|
|
|
|
|
|
+if test "$have_statfs_flags" = "yes" ; then
|
|
|
|
+ echo "HAVE_STATFS_FLAGS=y" >> $config_host_mak
|
|
|
|
+fi
|
|
|
|
+
|
|
|
|
if test "$ivshmem" = "yes" ; then
|
|
|
|
echo "CONFIG_IVSHMEM=y" >> $config_host_mak
|
|
|
|
fi
|
|
|
|
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
|
|
|
|
index 82b35a6bdf..77481eca2c 100644
|
|
|
|
--- a/linux-user/syscall.c
|
|
|
|
+++ b/linux-user/syscall.c
|
|
|
|
@@ -9534,6 +9534,9 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
|
|
|
|
__put_user(stfs.f_fsid.__val[1], &target_stfs->f_fsid.val[1]);
|
|
|
|
__put_user(stfs.f_namelen, &target_stfs->f_namelen);
|
|
|
|
__put_user(stfs.f_frsize, &target_stfs->f_frsize);
|
|
|
|
+#ifdef HAVE_STATFS_FLAGS
|
|
|
|
+ __put_user(stfs.f_flags, &target_stfs->f_flags);
|
|
|
|
+#endif
|
|
|
|
memset(target_stfs->f_spare, 0, sizeof(target_stfs->f_spare));
|
|
|
|
unlock_user_struct(target_stfs, arg2, 1);
|
|
|
|
}
|
|
|
|
diff --git a/linux-user/syscall_defs.h b/linux-user/syscall_defs.h
|
2018-02-19 03:47:07 +01:00
|
|
|
index a35c52a60a..64aa49d3c5 100644
|
2018-02-18 20:33:43 +01:00
|
|
|
--- a/linux-user/syscall_defs.h
|
|
|
|
+++ b/linux-user/syscall_defs.h
|
|
|
|
@@ -362,7 +362,14 @@ struct kernel_statfs {
|
|
|
|
int f_ffree;
|
|
|
|
kernel_fsid_t f_fsid;
|
|
|
|
int f_namelen;
|
|
|
|
+#ifdef HAVE_STATFS_FLAGS
|
|
|
|
+ int f_frsize;
|
|
|
|
+ int f_flags;
|
|
|
|
+ int f_spare[4];
|
|
|
|
+#else
|
|
|
|
int f_spare[6];
|
|
|
|
+#endif
|
|
|
|
+
|
|
|
|
};
|
|
|
|
|
|
|
|
struct target_dirent {
|
2018-02-19 03:47:07 +01:00
|
|
|
@@ -2223,7 +2230,12 @@ struct target_statfs {
|
2018-02-18 20:33:43 +01:00
|
|
|
/* Linux specials */
|
|
|
|
target_fsid_t f_fsid;
|
|
|
|
int32_t f_namelen;
|
|
|
|
+#ifdef HAVE_STATFS_FLAGS
|
|
|
|
+ int32_t f_flags;
|
2018-02-19 03:47:07 +01:00
|
|
|
+ int32_t f_spare[5];
|
2018-02-18 20:33:43 +01:00
|
|
|
+#else
|
|
|
|
int32_t f_spare[6];
|
|
|
|
+#endif
|
|
|
|
};
|
|
|
|
#else
|
|
|
|
struct target_statfs {
|
2018-02-19 03:47:07 +01:00
|
|
|
@@ -2239,7 +2251,12 @@ struct target_statfs {
|
2018-02-18 20:33:43 +01:00
|
|
|
/* Linux specials */
|
|
|
|
target_fsid_t f_fsid;
|
|
|
|
abi_long f_namelen;
|
|
|
|
+#ifdef HAVE_STATFS_FLAGS
|
|
|
|
+ abi_long f_flags;
|
2018-02-19 03:47:07 +01:00
|
|
|
+ abi_long f_spare[5];
|
2018-02-18 20:33:43 +01:00
|
|
|
+#else
|
|
|
|
abi_long f_spare[6];
|
|
|
|
+#endif
|
|
|
|
};
|
|
|
|
#endif
|
|
|
|
|
2018-02-19 03:47:07 +01:00
|
|
|
@@ -2255,7 +2272,12 @@ struct target_statfs64 {
|
2018-02-18 20:33:43 +01:00
|
|
|
uint64_t f_bavail;
|
|
|
|
target_fsid_t f_fsid;
|
|
|
|
uint32_t f_namelen;
|
|
|
|
+#ifdef HAVE_STATFS_FLAGS
|
|
|
|
+ uint32_t f_flags;
|
2018-02-19 03:47:07 +01:00
|
|
|
+ uint32_t f_spare[5];
|
2018-02-18 20:33:43 +01:00
|
|
|
+#else
|
|
|
|
uint32_t f_spare[6];
|
|
|
|
+#endif
|
|
|
|
};
|
|
|
|
#elif (defined(TARGET_PPC64) || defined(TARGET_X86_64) || \
|
|
|
|
defined(TARGET_SPARC64) || defined(TARGET_AARCH64)) && \
|
2018-02-19 03:47:07 +01:00
|
|
|
@@ -2271,7 +2293,12 @@ struct target_statfs {
|
2018-02-18 20:33:43 +01:00
|
|
|
target_fsid_t f_fsid;
|
|
|
|
abi_long f_namelen;
|
|
|
|
abi_long f_frsize;
|
|
|
|
+#ifdef HAVE_STATFS_FLAGS
|
|
|
|
+ abi_long f_flags;
|
|
|
|
+ abi_long f_spare[4];
|
|
|
|
+#else
|
|
|
|
abi_long f_spare[5];
|
|
|
|
+#endif
|
|
|
|
};
|
|
|
|
|
|
|
|
struct target_statfs64 {
|
2018-02-19 03:47:07 +01:00
|
|
|
@@ -2285,7 +2312,12 @@ struct target_statfs64 {
|
2018-02-18 20:33:43 +01:00
|
|
|
target_fsid_t f_fsid;
|
|
|
|
abi_long f_namelen;
|
|
|
|
abi_long f_frsize;
|
|
|
|
+#ifdef HAVE_STATFS_FLAGS
|
|
|
|
+ abi_long f_flags;
|
|
|
|
+ abi_long f_spare[4];
|
|
|
|
+#else
|
|
|
|
abi_long f_spare[5];
|
|
|
|
+#endif
|
|
|
|
};
|
|
|
|
#elif defined(TARGET_S390X)
|
|
|
|
struct target_statfs {
|
2018-02-19 03:47:07 +01:00
|
|
|
@@ -2299,7 +2331,13 @@ struct target_statfs {
|
2018-02-18 20:33:43 +01:00
|
|
|
kernel_fsid_t f_fsid;
|
|
|
|
int32_t f_namelen;
|
|
|
|
int32_t f_frsize;
|
|
|
|
+#ifdef HAVE_STATFS_FLAGS
|
|
|
|
+ int32_t f_flags;
|
|
|
|
+ int32_t f_spare[4];
|
|
|
|
+#else
|
|
|
|
int32_t f_spare[5];
|
|
|
|
+#endif
|
|
|
|
+
|
|
|
|
};
|
|
|
|
|
|
|
|
struct target_statfs64 {
|
2018-02-19 03:47:07 +01:00
|
|
|
@@ -2313,7 +2351,12 @@ struct target_statfs64 {
|
2018-02-18 20:33:43 +01:00
|
|
|
kernel_fsid_t f_fsid;
|
|
|
|
int32_t f_namelen;
|
|
|
|
int32_t f_frsize;
|
|
|
|
+#ifdef HAVE_STATFS_FLAGS
|
|
|
|
+ int32_t f_flags;
|
|
|
|
+ int32_t f_spare[4];
|
|
|
|
+#else
|
|
|
|
int32_t f_spare[5];
|
|
|
|
+#endif
|
|
|
|
};
|
|
|
|
#else
|
|
|
|
struct target_statfs {
|
2018-02-19 03:47:07 +01:00
|
|
|
@@ -2327,7 +2370,12 @@ struct target_statfs {
|
2018-02-18 20:33:43 +01:00
|
|
|
target_fsid_t f_fsid;
|
|
|
|
uint32_t f_namelen;
|
|
|
|
uint32_t f_frsize;
|
|
|
|
+#ifdef HAVE_STATFS_FLAGS
|
|
|
|
+ uint32_t f_flags;
|
|
|
|
+ uint32_t f_spare[4];
|
|
|
|
+#else
|
|
|
|
uint32_t f_spare[5];
|
|
|
|
+#endif
|
|
|
|
};
|
|
|
|
|
|
|
|
struct target_statfs64 {
|
2018-02-19 03:47:07 +01:00
|
|
|
@@ -2341,7 +2389,12 @@ struct target_statfs64 {
|
2018-02-18 20:33:43 +01:00
|
|
|
target_fsid_t f_fsid;
|
|
|
|
uint32_t f_namelen;
|
|
|
|
uint32_t f_frsize;
|
|
|
|
+#ifdef HAVE_STATFS_FLAGS
|
|
|
|
+ uint32_t f_flags;
|
|
|
|
+ uint32_t f_spare[4];
|
|
|
|
+#else
|
|
|
|
uint32_t f_spare[5];
|
|
|
|
+#endif
|
|
|
|
};
|
|
|
|
#endif
|
|
|
|
|