Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
1 changed file
with
200 additions
and
0 deletions.
There are no files selected for viewing
200 changes: 200 additions & 0 deletions
200
pkgs/applications/virtualization/qemu/statfs-flags.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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 | ||
|