diff --git a/configure b/configure index bbf8956db2..199518010c 100755 --- a/configure +++ b/configure @@ -5137,6 +5137,20 @@ if compile_prog "" "" ; then have_fsxattr=yes fi +########################################## +# check if sys/mount.h conflicts with linux/fs.h + +have_sysmount_fs=no +cat > $TMPC << EOF +#include +int main(void) { + return FSCONFIG_SET_FLAG; +} +EOF +if compile_prog "" "" ; then + have_sysmount_fs=yes +fi + ########################################## # check if rtnetlink.h exists and is useful have_rtnetlink=no @@ -6501,6 +6515,10 @@ if test "$rdma" = "yes" ; then echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak fi +if test "$have_sysmount_fs" = "yes" ; then + echo "CONFIG_SYS_MOUNT_FS=y" >> $config_host_mak +fi + if test "$have_rtnetlink" = "yes" ; then echo "CONFIG_RTNETLINK=y" >> $config_host_mak fi diff --git a/linux-user/syscall.c b/linux-user/syscall.c index f9bc06a0dd..676bb0375a 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -98,7 +98,24 @@ #include #include #include +#ifdef CONFIG_SYS_MOUNT_FS +/* + * glibc >= 2.36 linux/mount.h conflicts with sys/mount.h, + * which in turn prevents use of linux/fs.h. So we have to + * define the constants ourselves for now. + */ +#define FS_IOC_GETFLAGS _IOR('f', 1, long) +#define FS_IOC_SETFLAGS _IOW('f', 2, long) +#define FS_IOC_GETVERSION _IOR('v', 1, long) +#define FS_IOC_SETVERSION _IOW('v', 2, long) +#define FS_IOC_FIEMAP _IOWR('f', 11, struct fiemap) +#define FS_IOC32_GETFLAGS _IOR('f', 1, int) +#define FS_IOC32_SETFLAGS _IOW('f', 2, int) +#define FS_IOC32_GETVERSION _IOR('v', 1, int) +#define FS_IOC32_SETVERSION _IOW('v', 2, int) +#else #include +#endif #if defined(CONFIG_FIEMAP) #include #endif