summary refs log tree commit diff
path: root/pkgs/applications/virtualization/qemu/statfs-flags.patch
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/applications/virtualization/qemu/statfs-flags.patch')
-rw-r--r--pkgs/applications/virtualization/qemu/statfs-flags.patch200
1 files changed, 200 insertions, 0 deletions
diff --git a/pkgs/applications/virtualization/qemu/statfs-flags.patch b/pkgs/applications/virtualization/qemu/statfs-flags.patch
new file mode 100644
index 00000000000..c0f0162aacc
--- /dev/null
+++ b/pkgs/applications/virtualization/qemu/statfs-flags.patch
@@ -0,0 +1,200 @@
+commit d3282d2512774dc5027c98930a3852b2b6e8407a
+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
+index a35c52a60a..9f90451caf 100644
+--- 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 {
+@@ -2223,7 +2230,13 @@ struct target_statfs {
+ 	/* Linux specials */
+ 	target_fsid_t		f_fsid;
+ 	int32_t			f_namelen;
++#ifdef HAVE_STATFS_FLAGS
++	int32_t			f_frsize;
++	int32_t			f_flags;
++	int32_t			f_spare[4];
++#else
+ 	int32_t			f_spare[6];
++#endif
+ };
+ #else
+ struct target_statfs {
+@@ -2239,7 +2252,13 @@ struct target_statfs {
+ 	/* Linux specials */
+ 	target_fsid_t		f_fsid;
+ 	abi_long		f_namelen;
++#ifdef HAVE_STATFS_FLAGS
++	abi_long		f_frsize;
++	abi_long		f_flags;
++	abi_long		f_spare[4];
++#else
+ 	abi_long		f_spare[6];
++#endif
+ };
+ #endif
+ 
+@@ -2255,7 +2274,13 @@ struct target_statfs64 {
+ 	uint64_t	f_bavail;
+ 	target_fsid_t	f_fsid;
+ 	uint32_t	f_namelen;
++#ifdef HAVE_STATFS_FLAGS
++	uint32_t	f_frsize;
++	uint32_t	f_flags;
++	uint32_t	f_spare[4];
++#else
+ 	uint32_t	f_spare[6];
++#endif
+ };
+ #elif (defined(TARGET_PPC64) || defined(TARGET_X86_64) || \
+        defined(TARGET_SPARC64) || defined(TARGET_AARCH64)) && \
+@@ -2271,7 +2296,12 @@ struct target_statfs {
+ 	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 {
+@@ -2285,7 +2315,12 @@ struct target_statfs64 {
+ 	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 {
+@@ -2299,7 +2334,13 @@ struct target_statfs {
+     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 {
+@@ -2313,7 +2354,12 @@ struct target_statfs64 {
+     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 {
+@@ -2327,7 +2373,12 @@ struct target_statfs {
+ 	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 {
+@@ -2341,7 +2392,12 @@ struct target_statfs64 {
+ 	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
+