The package rpms/qemu.git has added or updated architecture specific content in its
spec file (ExclusiveArch/ExcludeArch or %ifarch/%ifnarch) in commit(s):
https://src.fedoraproject.org/cgit/rpms/qemu.git/commit/?id=d9af2bbdff861...
https://src.fedoraproject.org/cgit/rpms/qemu.git/commit/?id=13e7c30edf2da...
https://src.fedoraproject.org/cgit/rpms/qemu.git/commit/?id=3c0f9e810a0b2....
Change:
+%ifarch %{arm} aarch64
-%ifarch %{kernel_arches}
-%ifarch s390
Thanks.
Full change:
============
commit d9af2bbdff8613c35c44d4a0ea29abcbf0065b68
Author: Daniel P. Berrangé <berrange(a)redhat.com>
Date: Fri Sep 4 11:03:27 2020 +0100
Make QEMU sanity check a build blocker
If it ever breaks, it can be skipped by setting the %qemu_sanity_check
variable to 0.
This ensures it does not bit-rot again in future and actually adds some
value to the build.
It has to be skipped for ARM for now due to inability to select the
machine type.
Signed-off-by: Daniel P. Berrangé <berrange(a)redhat.com>
diff --git a/qemu.spec b/qemu.spec
index 0eb999d..0a78ac8 100644
--- a/qemu.spec
+++ b/qemu.spec
@@ -86,6 +86,13 @@
%endif
%endif
+# QEMU sanity check doesn't know how to pick machine type
+# which is needed on ARM as there is no defualt
+#
https://bugzilla.redhat.com/show_bug.cgi?id=1875763
+%ifarch %{arm} aarch64
+%global qemu_sanity_check 0
+%endif
+
# All modules should be listed here.
%ifarch %{ix86} %{arm}
%define with_block_rbd 0
@@ -1414,10 +1421,9 @@ if [ -x "$b" ]; then "$b" -help; fi
%if %{qemu_sanity_check}
# Sanity-check current kernel can boot on this qemu.
-# The results are advisory only.
KERNEL=`find /lib/modules -name vmlinuz | head -1`
echo "Trying to boot kernel $KERNEL with %{?hostqemu}"
-qemu-sanity-check --qemu=%{?hostqemu} --kernel=$KERNEL ||:
+qemu-sanity-check --qemu=%{?hostqemu} --kernel=$KERNEL
%endif
%endif
@@ -1906,6 +1912,7 @@ getent passwd qemu >/dev/null || \
- Fix conditionals for enabling QEMU sanity check
- Check whether emulator works before doing sanity check
- Provide explicit kernel path for QEMU sanity check
+- Make QEMU sanity check a build blocker
* Thu Sep 3 2020 Daniel P. Berrangé <berrange(a)redhat.com> - 5.1.0-4
- Add btrfs ioctls to linux-user (rhbz #1872918)
commit f2839fea71ecc8dbe7e38c0ec09e3e9ef6edb831
Author: Daniel P. Berrangé <berrange(a)redhat.com>
Date: Fri Sep 4 10:49:53 2020 +0100
Provide explicit kernel path to QEMU sanity check
In a mock build root the kernel probably won't exist in /boot and the
QEMU sanity check script won't search /lib/modules. So we must find the
vmlinuz file and pass it explicitly.
Signed-off-by: Daniel P. Berrangé <berrange(a)redhat.com>
diff --git a/qemu.spec b/qemu.spec
index 2aa30f8..0eb999d 100644
--- a/qemu.spec
+++ b/qemu.spec
@@ -1415,7 +1415,9 @@ if [ -x "$b" ]; then "$b" -help; fi
%if %{qemu_sanity_check}
# Sanity-check current kernel can boot on this qemu.
# The results are advisory only.
-qemu-sanity-check --qemu=%{?hostqemu} ||:
+KERNEL=`find /lib/modules -name vmlinuz | head -1`
+echo "Trying to boot kernel $KERNEL with %{?hostqemu}"
+qemu-sanity-check --qemu=%{?hostqemu} --kernel=$KERNEL ||:
%endif
%endif
@@ -1903,6 +1905,7 @@ getent passwd qemu >/dev/null || \
- Re-enable kernel BR for QEMU sanity check
- Fix conditionals for enabling QEMU sanity check
- Check whether emulator works before doing sanity check
+- Provide explicit kernel path for QEMU sanity check
* Thu Sep 3 2020 Daniel P. Berrangé <berrange(a)redhat.com> - 5.1.0-4
- Add btrfs ioctls to linux-user (rhbz #1872918)
commit af50bf7b783cee59cdf348e9263d5bb4a848148b
Author: Daniel P. Berrangé <berrange(a)redhat.com>
Date: Fri Sep 4 10:44:52 2020 +0100
Check whether emulator works before doing sanity check
If the emulator binary can't run, then the sanity check is never going
to work either.
Signed-off-by: Daniel P. Berrangé <berrange(a)redhat.com>
diff --git a/qemu.spec b/qemu.spec
index 9530011..2aa30f8 100644
--- a/qemu.spec
+++ b/qemu.spec
@@ -1408,16 +1408,16 @@ pushd build-dynamic
make check V=1
%endif
+# Check the binary runs (see eg RHBZ#998722).
+b="./x86_64-softmmu/qemu-system-x86_64"
+if [ -x "$b" ]; then "$b" -help; fi
+
%if %{qemu_sanity_check}
# Sanity-check current kernel can boot on this qemu.
# The results are advisory only.
qemu-sanity-check --qemu=%{?hostqemu} ||:
%endif
-# Check the binary runs (see eg RHBZ#998722).
-b="./x86_64-softmmu/qemu-system-x86_64"
-if [ -x "$b" ]; then "$b" -help; fi
-
%endif
popd
@@ -1902,6 +1902,7 @@ getent passwd qemu >/dev/null || \
- Fix host qemu binary path for aarch64
- Re-enable kernel BR for QEMU sanity check
- Fix conditionals for enabling QEMU sanity check
+- Check whether emulator works before doing sanity check
* Thu Sep 3 2020 Daniel P. Berrangé <berrange(a)redhat.com> - 5.1.0-4
- Add btrfs ioctls to linux-user (rhbz #1872918)
commit 13e7c30edf2da5fac2a78ec93d00039cf49b92b4
Author: Daniel P. Berrangé <berrange(a)redhat.com>
Date: Fri Sep 4 10:42:55 2020 +0100
Fix conditionals for enabling QEMU sanity check
One part of the spec file checked %{kernel_arches} while the other
checked %{hostqemu}. In fact both conditions need to be valid in
order to be able to run the sanity check. Introduce an explicit
%{qemu_sanity_check} variable to express this rule.
Signed-off-by: Daniel P. Berrangé <berrange(a)redhat.com>
diff --git a/qemu.spec b/qemu.spec
index 46ff04c..9530011 100644
--- a/qemu.spec
+++ b/qemu.spec
@@ -79,6 +79,13 @@
%global hostqemu x86_64-softmmu/qemu-system-x86_64
%endif
+%global qemu_sanity_check 0
+%ifarch x %{?kernel_arches}
+%if 0%{?hostqemu:1}
+%global qemu_sanity_check 1
+%endif
+%endif
+
# All modules should be listed here.
%ifarch %{ix86} %{arm}
%define with_block_rbd 0
@@ -210,8 +217,7 @@ BuildRequires: gcc
BuildRequires: texinfo
# For /usr/bin/pod2man
BuildRequires: perl-podlators
-%ifarch %{kernel_arches}
-# For sanity test
+%if %{qemu_sanity_check}
BuildRequires: qemu-sanity-check-nodeps
BuildRequires: kernel
%endif
@@ -1402,7 +1408,7 @@ pushd build-dynamic
make check V=1
%endif
-%if 0%{?hostqemu:1}
+%if %{qemu_sanity_check}
# Sanity-check current kernel can boot on this qemu.
# The results are advisory only.
qemu-sanity-check --qemu=%{?hostqemu} ||:
@@ -1895,6 +1901,7 @@ getent passwd qemu >/dev/null || \
- Drop conditions for ppc, ppc64, mips64 and s390 arches
- Fix host qemu binary path for aarch64
- Re-enable kernel BR for QEMU sanity check
+- Fix conditionals for enabling QEMU sanity check
* Thu Sep 3 2020 Daniel P. Berrangé <berrange(a)redhat.com> - 5.1.0-4
- Add btrfs ioctls to linux-user (rhbz #1872918)
commit 4e321e2f5cf77ed4387d86d41762848074cfaf8f
Author: Daniel P. Berrangé <berrange(a)redhat.com>
Date: Fri Sep 4 10:40:00 2020 +0100
Re-enable kernel BR for qemu sanity check
Signed-off-by: Daniel P. Berrangé <berrange(a)redhat.com>
diff --git a/qemu.spec b/qemu.spec
index eda3911..46ff04c 100644
--- a/qemu.spec
+++ b/qemu.spec
@@ -213,8 +213,7 @@ BuildRequires: perl-podlators
%ifarch %{kernel_arches}
# For sanity test
BuildRequires: qemu-sanity-check-nodeps
-# 2020-08-12: Disable due to new f34 missing kernel package
-#BuildRequires: kernel
+BuildRequires: kernel
%endif
%if %{have_iasl}
# For acpi compilation
@@ -1895,6 +1894,7 @@ getent passwd qemu >/dev/null || \
* Fri Sep 4 2020 Daniel P. Berrangé <berrange(a)redhat.com> - 5.1.0-5
- Drop conditions for ppc, ppc64, mips64 and s390 arches
- Fix host qemu binary path for aarch64
+- Re-enable kernel BR for QEMU sanity check
* Thu Sep 3 2020 Daniel P. Berrangé <berrange(a)redhat.com> - 5.1.0-4
- Add btrfs ioctls to linux-user (rhbz #1872918)
commit 458e07e8d7d455559d8432b04e6c270e4053469b
Author: Daniel P. Berrangé <berrange(a)redhat.com>
Date: Fri Sep 4 10:38:10 2020 +0100
Fix host qemu binary path for aarch64
Signed-off-by: Daniel P. Berrangé <berrange(a)redhat.com>
diff --git a/qemu.spec b/qemu.spec
index ac02483..eda3911 100644
--- a/qemu.spec
+++ b/qemu.spec
@@ -70,7 +70,7 @@
%global hostqemu arm-softmmu/qemu-system-arm
%endif
%ifarch aarch64
-%global hostqemu arm-softmmu/qemu-system-aarch64
+%global hostqemu aarch64-softmmu/qemu-system-aarch64
%endif
%ifarch %{ix86}
%global hostqemu i386-softmmu/qemu-system-i386
@@ -1894,6 +1894,7 @@ getent passwd qemu >/dev/null || \
%changelog
* Fri Sep 4 2020 Daniel P. Berrangé <berrange(a)redhat.com> - 5.1.0-5
- Drop conditions for ppc, ppc64, mips64 and s390 arches
+- Fix host qemu binary path for aarch64
* Thu Sep 3 2020 Daniel P. Berrangé <berrange(a)redhat.com> - 5.1.0-4
- Add btrfs ioctls to linux-user (rhbz #1872918)
commit 3c0f9e810a0b22b439681cedcba6073a20f13d88
Author: Daniel P. Berrangé <berrange(a)redhat.com>
Date: Fri Sep 4 10:04:15 2020 +0100
Drop references to obsolete arches
s390, ppc, ppc64 and mips64 are no longer valid Fedora primary
or alternative architectures.
Signed-off-by: Daniel P. Berrangé <berrange(a)redhat.com>
diff --git a/qemu.spec b/qemu.spec
index 6d5b368..ac02483 100644
--- a/qemu.spec
+++ b/qemu.spec
@@ -33,7 +33,7 @@
# Matches numactl ExcludeArch
%global have_numactl 1
-%ifarch s390 %{arm}
+%ifarch %{arm}
%global have_numactl 0
%endif
@@ -43,7 +43,7 @@
#
#
https://bugzilla.redhat.com/show_bug.cgi?id=1332449
%global have_iasl 1
-%ifnarch s390 s390x ppc ppc64
+%ifnarch s390x
%global have_iasl 0
%endif
@@ -170,7 +170,7 @@
Summary: QEMU is a FAST! processor emulator
Name: qemu
Version: 5.1.0
-Release: 4%{?rcrel}%{?dist}
+Release: 5%{?rcrel}%{?dist}
Epoch: 2
License: GPLv2 and BSD and MIT and CC-BY
URL:
http://www.qemu.org/
@@ -1002,14 +1002,8 @@ pathfix.py -pni "%{__python3} %{py3_shbang_opts}"
scripts/qemu-trace-stap
# Disable LTO since it caused lots of strange assert failures.
%define _lto_cflags %{nil}
-# drop -g flag to prevent memory exhaustion by linker
-%ifarch s390
-%global optflags %(echo %{optflags} | sed 's/-g//')
-sed -i.debug 's/"-g $CFLAGS"/"$CFLAGS"/g' configure
-%endif
-
# OOM killer breaks builds with parallel make on s390(x)
-%ifarch s390 s390x
+%ifarch s390x
%global _smp_mflags %{nil}
%endif
@@ -1198,9 +1192,6 @@ run_configure \
--enable-modules \
--enable-mpath \
%{spiceflag} \
-%ifarch s390 %{mips64}
- --enable-tcg-interpreter \
-%endif
--enable-slirp=system
echo "config-host.mak contents:"
@@ -1399,13 +1390,6 @@ chmod +x %{buildroot}%{_libdir}/qemu/*.so
# Enable this temporarily if tests are broken
%global tests_nofail 0
-# Tests are hanging on s390 as of 2.3.0
-#
https://bugzilla.redhat.com/show_bug.cgi?id=1206057
-# Tests seem to be a recurring problem on s390, leave them disabled.
-%ifarch s390
-%global tests_skip 1
-%endif
-
# 2020-08-31: tests passing, but s390x fails due to
# spurious warning breaking an iotest case
#
https://lists.gnu.org/archive/html/qemu-devel/2020-08/msg03279.html
@@ -1908,6 +1892,9 @@ getent passwd qemu >/dev/null || \
%changelog
+* Fri Sep 4 2020 Daniel P. Berrangé <berrange(a)redhat.com> - 5.1.0-5
+- Drop conditions for ppc, ppc64, mips64 and s390 arches
+
* Thu Sep 3 2020 Daniel P. Berrangé <berrange(a)redhat.com> - 5.1.0-4
- Add btrfs ioctls to linux-user (rhbz #1872918)
commit dc03f389d339a92a50a6206b62af58ad50e6bd80
Author: Daniel P. Berrangé <berrange(a)redhat.com>
Date: Thu Sep 3 11:02:04 2020 +0100
Add btrfs ioctls to linux-user (rhbz #1872918)
Signed-off-by: Daniel P. Berrangé <berrange(a)redhat.com>
diff --git a/0001-linux-user-fix-implicit-conversion-from-enumeration-.patch
b/0001-linux-user-fix-implicit-conversion-from-enumeration-.patch
new file mode 100644
index 0000000..3e53419
--- /dev/null
+++ b/0001-linux-user-fix-implicit-conversion-from-enumeration-.patch
@@ -0,0 +1,35 @@
+From 44716867275c9a5cdead2d70e6187b5af4087f07 Mon Sep 17 00:00:00 2001
+From: Laurent Vivier <laurent(a)vivier.eu>
+Date: Thu, 3 Sep 2020 01:26:53 +0200
+Subject: [PATCH 1/9] linux-user: fix implicit conversion from enumeration type
+ error
+
+MK_ARRAY(type,size) is used to fill the field_types buffer, and if the
+"size" parameter is an enum type, clang [-Werror,-Wenum-conversion] reports
+an error when it is assigned to field_types which is also an enum, argtypes.
+
+To avoid that, convert "size" to "int" in MK_ARRAY(). "int"
is the type
+used for the size evaluation in thunk_type_size().
+
+Signed-off-by: Laurent Vivier <laurent(a)vivier.eu>
+Message-Id: <20200902125752.1033524-1-laurent(a)vivier.eu>
+---
+ include/exec/user/thunk.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/include/exec/user/thunk.h b/include/exec/user/thunk.h
+index 7992475c9f..2099482cff 100644
+--- a/include/exec/user/thunk.h
++++ b/include/exec/user/thunk.h
+@@ -42,7 +42,7 @@ typedef enum argtype {
+ } argtype;
+
+ #define MK_PTR(type) TYPE_PTR, type
+-#define MK_ARRAY(type, size) TYPE_ARRAY, size, type
++#define MK_ARRAY(type, size) TYPE_ARRAY, (int)(size), type
+ #define MK_STRUCT(id) TYPE_STRUCT, id
+
+ #define THUNK_TARGET 0
+--
+2.26.2
+
diff --git a/0002-linux-user-Add-support-for-a-group-of-btrfs-ioctls-u.patch
b/0002-linux-user-Add-support-for-a-group-of-btrfs-ioctls-u.patch
new file mode 100644
index 0000000..e8106ed
--- /dev/null
+++ b/0002-linux-user-Add-support-for-a-group-of-btrfs-ioctls-u.patch
@@ -0,0 +1,264 @@
+From e0eab99255d34c9dbaac7b73a1a2a79f823a7da9 Mon Sep 17 00:00:00 2001
+From: Filip Bozuta <Filip.Bozuta(a)syrmia.com>
+Date: Thu, 3 Sep 2020 01:26:54 +0200
+Subject: [PATCH 2/9] linux-user: Add support for a group of btrfs ioctls used
+ for subvolumes
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+This patch implements functionality of following ioctls:
+
+BTRFS_IOC_SUBVOL_CREATE - Creating a btrfs subvolume
+
+ Create a btrfs subvolume. The subvolume is created using the ioctl's
+ third argument which represents a pointer to a following structure
+ type:
+
+ struct btrfs_ioctl_vol_args {
+ __s64 fd;
+ char name[BTRFS_PATH_NAME_MAX + 1];
+ };
+
+ Before calling this ioctl, the fields of this structure should be filled
+ with aproppriate values. The fd field represents the file descriptor
+ value of the subvolume and the name field represents the subvolume
+ path.
+
+BTRFS_IOC_SUBVOL_GETFLAGS - Getting subvolume flags
+
+ Read the flags of the btrfs subvolume. The flags are read using
+ the ioctl's third argument that is a pointer of __u64 (unsigned long).
+ The third argument represents a bit mask that can be composed of following
+ values:
+ BTRFS_SUBVOL_RDONLY (1ULL << 1)
+ BTRFS_SUBVOL_QGROUP_INHERIT (1ULL << 2)
+ BTRFS_DEVICE_SPEC_BY_ID (1ULL << 3)
+ BTRFS_SUBVOL_SPEC_BY_ID (1ULL << 4)
+
+BTRFS_IOC_SUBVOL_SETFLAGS - Setting subvolume flags
+
+ Set the flags of the btrfs subvolume. The flags are set using the
+ ioctl's third argument that is a pointer of __u64 (unsigned long).
+ The third argument represents a bit mask that can be composed of same
+ values as in the case of previous ioctl (BTRFS_IOC_SUBVOL_GETFLAGS).
+
+BTRFS_IOC_SUBVOL_GETINFO - Getting subvolume information
+
+ Read information about the subvolume. The subvolume information is
+ returned in the ioctl's third argument which represents a pointer to
+ a following structure type:
+
+ struct btrfs_ioctl_get_subvol_info_args {
+ /* Id of this subvolume */
+ __u64 treeid;
+
+ /* Name of this subvolume, used to get the real name at mount point */
+ char name[BTRFS_VOL_NAME_MAX + 1];
+
+ /*
+ * Id of the subvolume which contains this subvolume.
+ * Zero for top-level subvolume or a deleted subvolume.
+ */
+ __u64 parent_id;
+
+ /*
+ * Inode number of the directory which contains this subvolume.
+ * Zero for top-level subvolume or a deleted subvolume
+ */
+ __u64 dirid;
+
+ /* Latest transaction id of this subvolume */
+ __u64 generation;
+
+ /* Flags of this subvolume */
+ __u64 flags;
+
+ /* UUID of this subvolume */
+ __u8 uuid[BTRFS_UUID_SIZE];
+
+ /*
+ * UUID of the subvolume of which this subvolume is a snapshot.
+ * All zero for a non-snapshot subvolume.
+ */
+ __u8 parent_uuid[BTRFS_UUID_SIZE];
+
+ /*
+ * UUID of the subvolume from which this subvolume was received.
+ * All zero for non-received subvolume.
+ */
+ __u8 received_uuid[BTRFS_UUID_SIZE];
+
+ /* Transaction id indicating when change/create/send/receive happened */
+ __u64 ctransid;
+ __u64 otransid;
+ __u64 stransid;
+ __u64 rtransid;
+ /* Time corresponding to c/o/s/rtransid */
+ struct btrfs_ioctl_timespec ctime;
+ struct btrfs_ioctl_timespec otime;
+ struct btrfs_ioctl_timespec stime;
+ struct btrfs_ioctl_timespec rtime;
+
+ /* Must be zero */
+ __u64 reserved[8];
+ };
+
+ All of the fields of this structure are filled after the ioctl call.
+
+Implementation notes:
+
+ Ioctls BTRFS_IOC_SUBVOL_CREATE and BTRFS_IOC_SUBVOL_GETINFO have structure
+ types as third arguments. That is the reason why a corresponding definition
+ are added in file 'linux-user/syscall_types.h'.
+
+ The line '#include <linux/btrfs.h>' is added in file
'linux-user/syscall.c' to
+ recognise preprocessor definitions for these ioctls. Since the file
"linux/btrfs.h"
+ was added in the kernel version 3.9, it is enwrapped in an #ifdef statement
+ with parameter CONFIG_BTRFS which is defined in 'configure' if the
+ header file is present.
+
+Signed-off-by: Filip Bozuta <Filip.Bozuta(a)syrmia.com>
+Tested-by: Daniel P. Berrangé <berrange(a)redhat.com>
+Message-Id: <20200823195014.116226-2-Filip.Bozuta(a)syrmia.com>
+Signed-off-by: Laurent Vivier <laurent(a)vivier.eu>
+---
+ configure | 9 +++++++++
+ linux-user/ioctls.h | 15 +++++++++++++++
+ linux-user/syscall.c | 3 +++
+ linux-user/syscall_defs.h | 8 ++++++++
+ linux-user/syscall_types.h | 32 ++++++++++++++++++++++++++++++++
+ 5 files changed, 67 insertions(+)
+
+diff --git a/configure b/configure
+index 2acc4d1465..1cba4e0b80 100755
+--- a/configure
++++ b/configure
+@@ -5079,6 +5079,12 @@ if check_include sys/kcov.h ; then
+ kcov=yes
+ fi
+
++# check for btrfs filesystem support (kernel must be 3.9+)
++btrfs=no
++if check_include linux/btrfs.h ; then
++ btrfs=yes
++fi
++
+ # If we're making warnings fatal, apply this to Sphinx runs as well
+ sphinx_werror=""
+ if test "$werror" = "yes"; then
+@@ -7330,6 +7336,9 @@ fi
+ if test "$kcov" = "yes" ; then
+ echo "CONFIG_KCOV=y" >> $config_host_mak
+ fi
++if test "$btrfs" = "yes" ; then
++ echo "CONFIG_BTRFS=y" >> $config_host_mak
++fi
+ if test "$inotify" = "yes" ; then
+ echo "CONFIG_INOTIFY=y" >> $config_host_mak
+ fi
+diff --git a/linux-user/ioctls.h b/linux-user/ioctls.h
+index 0713ae1311..12d1444224 100644
+--- a/linux-user/ioctls.h
++++ b/linux-user/ioctls.h
+@@ -174,6 +174,21 @@
+ IOCTL(FS_IOC32_GETVERSION, IOC_R, MK_PTR(TYPE_INT))
+ IOCTL(FS_IOC32_SETVERSION, IOC_W, MK_PTR(TYPE_INT))
+
++#ifdef BTRFS_IOC_SUBVOL_CREATE
++ IOCTL(BTRFS_IOC_SUBVOL_CREATE, IOC_W,
++ MK_PTR(MK_STRUCT(STRUCT_btrfs_ioctl_vol_args)))
++#endif
++#ifdef BTRFS_IOC_SUBVOL_GETFLAGS
++ IOCTL(BTRFS_IOC_SUBVOL_GETFLAGS, IOC_R, MK_PTR(TYPE_ULONGLONG))
++#endif
++#ifdef BTRFS_IOC_SUBVOL_SETFLAGS
++ IOCTL(BTRFS_IOC_SUBVOL_SETFLAGS, IOC_W, MK_PTR(TYPE_ULONGLONG))
++#endif
++#ifdef BTRFS_IOC_GET_SUBVOL_INFO
++ IOCTL(BTRFS_IOC_GET_SUBVOL_INFO, IOC_R,
++ MK_PTR(MK_STRUCT(STRUCT_btrfs_ioctl_get_subvol_info_args)))
++#endif
++
+ #ifdef CONFIG_USBFS
+ /* USB ioctls */
+ IOCTL(USBDEVFS_CONTROL, IOC_RW,
+diff --git a/linux-user/syscall.c b/linux-user/syscall.c
+index 945fc25279..36777c91b0 100644
+--- a/linux-user/syscall.c
++++ b/linux-user/syscall.c
+@@ -112,6 +112,9 @@
+ #include <linux/if_alg.h>
+ #include <linux/rtc.h>
+ #include <sound/asound.h>
++#ifdef CONFIG_BTRFS
++#include <linux/btrfs.h>
++#endif
+ #ifdef HAVE_DRM_H
+ #include <libdrm/drm.h>
+ #endif
+diff --git a/linux-user/syscall_defs.h b/linux-user/syscall_defs.h
+index 3c261cff0e..2757956dfa 100644
+--- a/linux-user/syscall_defs.h
++++ b/linux-user/syscall_defs.h
+@@ -967,6 +967,14 @@ struct target_rtc_pll_info {
+ #define TARGET_FS_IOC32_GETVERSION TARGET_IOR('v', 1, int)
+ #define TARGET_FS_IOC32_SETVERSION TARGET_IOW('v', 2, int)
+
++/* btrfs ioctls */
++#define TARGET_BTRFS_IOC_SUBVOL_CREATE TARGET_IOWU(BTRFS_IOCTL_MAGIC, 14)
++#define TARGET_BTRFS_IOC_SUBVOL_GETFLAGS TARGET_IOR(BTRFS_IOCTL_MAGIC, 25,\
++ abi_ullong)
++#define TARGET_BTRFS_IOC_SUBVOL_SETFLAGS TARGET_IOW(BTRFS_IOCTL_MAGIC, 26,\
++ abi_ullong)
++#define TARGET_BTRFS_IOC_GET_SUBVOL_INFO TARGET_IORU(BTRFS_IOCTL_MAGIC, 60)
++
+ /* usb ioctls */
+ #define TARGET_USBDEVFS_CONTROL TARGET_IOWRU('U', 0)
+ #define TARGET_USBDEVFS_BULK TARGET_IOWRU('U', 2)
+diff --git a/linux-user/syscall_types.h b/linux-user/syscall_types.h
+index 3f1f033464..db61dbc1b3 100644
+--- a/linux-user/syscall_types.h
++++ b/linux-user/syscall_types.h
+@@ -354,6 +354,38 @@ STRUCT(blkpg_partition,
+ MK_ARRAY(TYPE_CHAR, BLKPG_DEVNAMELTH), /* devname */
+ MK_ARRAY(TYPE_CHAR, BLKPG_VOLNAMELTH)) /* volname */
+
++#ifdef BTRFS_IOC_SUBVOL_CREATE
++STRUCT(btrfs_ioctl_vol_args,
++ TYPE_LONGLONG, /* fd */
++ MK_ARRAY(TYPE_CHAR, BTRFS_PATH_NAME_MAX + 1)) /* name */
++#endif
++
++#ifdef BTRFS_IOC_GET_SUBVOL_INFO
++STRUCT(btrfs_ioctl_timespec,
++ TYPE_ULONGLONG, /* sec */
++ TYPE_INT) /* nsec */
++
++STRUCT(btrfs_ioctl_get_subvol_info_args,
++ TYPE_ULONGLONG, /* treeid */
++ MK_ARRAY(TYPE_CHAR, BTRFS_VOL_NAME_MAX + 1),
++ TYPE_ULONGLONG, /* parentid */
++ TYPE_ULONGLONG, /* dirid */
++ TYPE_ULONGLONG, /* generation */
++ TYPE_ULONGLONG, /* flags */
++ MK_ARRAY(TYPE_CHAR, BTRFS_UUID_SIZE), /* uuid */
++ MK_ARRAY(TYPE_CHAR, BTRFS_UUID_SIZE), /* parent_uuid */
++ MK_ARRAY(TYPE_CHAR, BTRFS_UUID_SIZE), /* received_uuid */
++ TYPE_ULONGLONG, /* ctransid */
++ TYPE_ULONGLONG, /* otransid */
++ TYPE_ULONGLONG, /* stransid */
++ TYPE_ULONGLONG, /* rtransid */
++ MK_STRUCT(STRUCT_btrfs_ioctl_timespec), /* ctime */
++ MK_STRUCT(STRUCT_btrfs_ioctl_timespec), /* otime */
++ MK_STRUCT(STRUCT_btrfs_ioctl_timespec), /* stime */
++ MK_STRUCT(STRUCT_btrfs_ioctl_timespec), /* rtime */
++ MK_ARRAY(TYPE_ULONGLONG, 8)) /* reserved */
++#endif
++
+ STRUCT(rtc_time,
+ TYPE_INT, /* tm_sec */
+ TYPE_INT, /* tm_min */
+--
+2.26.2
+
diff --git a/0003-linux-user-Add-support-for-a-group-of-btrfs-ioctls-u.patch
b/0003-linux-user-Add-support-for-a-group-of-btrfs-ioctls-u.patch
new file mode 100644
index 0000000..2a6a230
--- /dev/null
+++ b/0003-linux-user-Add-support-for-a-group-of-btrfs-ioctls-u.patch
@@ -0,0 +1,98 @@
+From 40fdd783ec707e61c285e081816bd2df54dfede4 Mon Sep 17 00:00:00 2001
+From: Filip Bozuta <Filip.Bozuta(a)syrmia.com>
+Date: Thu, 3 Sep 2020 01:26:55 +0200
+Subject: [PATCH 3/9] linux-user: Add support for a group of btrfs ioctls used
+ for snapshots
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+This patch implements functionality for following ioctls:
+
+BTRFS_IOC_SNAP_CREATE - Creating a subvolume snapshot
+
+ Create a snapshot of a btrfs subvolume. The snapshot is created using the
+ ioctl's third argument that is a pointer to a 'struct
btrfs_ioctl_vol_args'
+ (which was mentioned in the previous patch). Before calling this ioctl,
+ the fields of the structure should be filled with aproppriate values for
+ the file descriptor and path of the subvolume for which the snapshot is to
+ be created.
+
+BTRFS_IOC_SNAP_DESTROY - Removing a subvolume snapshot
+
+ Delete a snapshot of a btrfs subvolume. The snapshot is deleted using the
+ ioctl's third argument that is a pointer to a 'struct
btrfs_ioctl_vol_args'
+ (which was mentioned in the previous patch). Before calling this ioctl,
+ the fields of the structure should be filled with aproppriate values for
+ the file descriptor and path of the subvolume for which the snapshot is to
+ be deleted.
+
+Implementation notes:
+
+ Since the thunk type 'struct btrfs_ioctl_vol_args' is defined in the
+ previous patch, the implementation for these ioctls was straightforward.
+
+Signed-off-by: Filip Bozuta <Filip.Bozuta(a)syrmia.com>
+Tested-by: Daniel P. Berrangé <berrange(a)redhat.com>
+Message-Id: <20200823195014.116226-3-Filip.Bozuta(a)syrmia.com>
+Signed-off-by: Laurent Vivier <laurent(a)vivier.eu>
+---
+ linux-user/ioctls.h | 8 ++++++++
+ linux-user/syscall_defs.h | 2 ++
+ linux-user/syscall_types.h | 3 ++-
+ 3 files changed, 12 insertions(+), 1 deletion(-)
+
+diff --git a/linux-user/ioctls.h b/linux-user/ioctls.h
+index 12d1444224..f33a99f8b6 100644
+--- a/linux-user/ioctls.h
++++ b/linux-user/ioctls.h
+@@ -174,10 +174,18 @@
+ IOCTL(FS_IOC32_GETVERSION, IOC_R, MK_PTR(TYPE_INT))
+ IOCTL(FS_IOC32_SETVERSION, IOC_W, MK_PTR(TYPE_INT))
+
++#ifdef BTRFS_IOC_SNAP_CREATE
++ IOCTL(BTRFS_IOC_SNAP_CREATE, IOC_W,
++ MK_PTR(MK_STRUCT(STRUCT_btrfs_ioctl_vol_args)))
++#endif
+ #ifdef BTRFS_IOC_SUBVOL_CREATE
+ IOCTL(BTRFS_IOC_SUBVOL_CREATE, IOC_W,
+ MK_PTR(MK_STRUCT(STRUCT_btrfs_ioctl_vol_args)))
+ #endif
++#ifdef BTRFS_IOC_SNAP_DESTROY
++ IOCTL(BTRFS_IOC_SNAP_DESTROY, IOC_W,
++ MK_PTR(MK_STRUCT(STRUCT_btrfs_ioctl_vol_args)))
++#endif
+ #ifdef BTRFS_IOC_SUBVOL_GETFLAGS
+ IOCTL(BTRFS_IOC_SUBVOL_GETFLAGS, IOC_R, MK_PTR(TYPE_ULONGLONG))
+ #endif
+diff --git a/linux-user/syscall_defs.h b/linux-user/syscall_defs.h
+index 2757956dfa..a945e12547 100644
+--- a/linux-user/syscall_defs.h
++++ b/linux-user/syscall_defs.h
+@@ -968,7 +968,9 @@ struct target_rtc_pll_info {
+ #define TARGET_FS_IOC32_SETVERSION TARGET_IOW('v', 2, int)
+
+ /* btrfs ioctls */
++#define TARGET_BTRFS_IOC_SNAP_CREATE TARGET_IOWU(BTRFS_IOCTL_MAGIC, 1)
+ #define TARGET_BTRFS_IOC_SUBVOL_CREATE TARGET_IOWU(BTRFS_IOCTL_MAGIC, 14)
++#define TARGET_BTRFS_IOC_SNAP_DESTROY TARGET_IOWU(BTRFS_IOCTL_MAGIC, 15)
+ #define TARGET_BTRFS_IOC_SUBVOL_GETFLAGS TARGET_IOR(BTRFS_IOCTL_MAGIC, 25,\
+ abi_ullong)
+ #define TARGET_BTRFS_IOC_SUBVOL_SETFLAGS TARGET_IOW(BTRFS_IOCTL_MAGIC, 26,\
+diff --git a/linux-user/syscall_types.h b/linux-user/syscall_types.h
+index db61dbc1b3..038cd7869b 100644
+--- a/linux-user/syscall_types.h
++++ b/linux-user/syscall_types.h
+@@ -354,7 +354,8 @@ STRUCT(blkpg_partition,
+ MK_ARRAY(TYPE_CHAR, BLKPG_DEVNAMELTH), /* devname */
+ MK_ARRAY(TYPE_CHAR, BLKPG_VOLNAMELTH)) /* volname */
+
+-#ifdef BTRFS_IOC_SUBVOL_CREATE
++#if defined(BTRFS_IOC_SUBVOL_CREATE) || defined(BTRFS_IOC_SNAP_CREATE) || \
++ defined(BTRFS_IOC_SNAP_DESTROY)
+ STRUCT(btrfs_ioctl_vol_args,
+ TYPE_LONGLONG, /* fd */
+ MK_ARRAY(TYPE_CHAR, BTRFS_PATH_NAME_MAX + 1)) /* name */
+--
+2.26.2
+
diff --git a/0004-linux-user-Add-support-for-btrfs-ioctls-used-to-mani.patch
b/0004-linux-user-Add-support-for-btrfs-ioctls-used-to-mani.patch
new file mode 100644
index 0000000..a6a0095
--- /dev/null
+++ b/0004-linux-user-Add-support-for-btrfs-ioctls-used-to-mani.patch
@@ -0,0 +1,222 @@
+From ead1cdc1e4bb9fa4d09ca4d8af94c2687e7f5d36 Mon Sep 17 00:00:00 2001
+From: Filip Bozuta <Filip.Bozuta(a)syrmia.com>
+Date: Thu, 3 Sep 2020 01:26:56 +0200
+Subject: [PATCH 4/9] linux-user: Add support for btrfs ioctls used to
+ manipulate with devices
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+This patch implements functionality for following ioctls:
+
+BTRFS_IOC_SCAN_DEV - Scanning device for a btrfs filesystem
+
+ Scan a device for a btrfs filesystem. The device that is to
+ be scanned is passed in the ioctl's third argument which
+ represents a pointer to a 'struct ioc_vol_args' (which was
+ mentioned in a previous patch). Before calling this ioctl,
+ the name field of this structure should be filled with the
+ aproppriate name value which represents a path for the device.
+ If the device contains a btrfs filesystem, the ioctl returns 0,
+ otherwise a negative value is returned.
+
+BTRFS_IOC_ADD_DEV - Adding a device to a btrfs filesystem
+
+ Add a device to a btrfs filesystem. The device that is to be
+ added is passed in the ioctl's third argument which represents
+ a pointer to a 'struct ioc_vol_args' (which was mentioned in
+ a previous patch). Before calling this ioctl, the name field of
+ this structure should be filled with the aproppriate name value
+ which represents a path for the device.
+
+BTRFS_IOC_RM_DEV - Removing a device from a btrfs filesystem
+
+ Remove a device from a btrfs filesystem. The device that is to be
+ removed is passed in the ioctl's third argument which represents
+ a pointer to a 'struct ioc_vol_args' (which was mentioned in
+ a previous patch). Before calling this ioctl, the name field of
+ this structure should be filled with the aproppriate name value
+ which represents a path for the device.
+
+BTRFS_IOC_DEV_INFO - Getting information about a device
+
+ Obtain information for device in a btrfs filesystem. The information
+ is gathered in the ioctl's third argument which represents a pointer
+ to a following structure type:
+
+ struct btrfs_ioctl_dev_info_args {
+ __u64 devid; /* in/out */
+ __u8 uuid[BTRFS_UUID_SIZE]; /* in/out */
+ __u64 bytes_used; /* out */
+ __u64 total_bytes; /* out */
+ __u64 unused[379]; /* pad to 4k */
+ __u8 path[BTRFS_DEVICE_PATH_NAME_MAX]; /* out */
+ };
+
+ Before calling this ioctl, field "devid" should be set with the id value
+ for the device for which the information is to be obtained. If this field
+ is not aproppriately set, the errno ENODEV ("No such device") is returned.
+
+BTRFS_IOC_GET_DEV_STATS - Getting device statistics
+
+ Obtain stats informatin for device in a btrfs filesystem. The information
+ is gathered in the ioctl's third argument which represents a pointer to
+ a following structure type:
+
+ struct btrfs_ioctl_get_dev_stats {
+ __u64 devid; /* in */
+ __u64 nr_items; /* in/out */
+ __u64 flags; /* in/out */
+
+ /* out values: */
+ __u64 values[BTRFS_DEV_STAT_VALUES_MAX];
+
+ /*
+ * This pads the struct to 1032 bytes. It was originally meant to pad to
+ * 1024 bytes, but when adding the flags field, the padding calculation
+ * was not adjusted.
+ */
+ __u64 unused[128 - 2 - BTRFS_DEV_STAT_VALUES_MAX];
+ };
+
+ Before calling this ioctl, field "devid" should be set with the id value
+ for the device for which the information is to be obtained. If this field
+ is not aproppriately set, the errno ENODEV ("No such device") is returned.
+
+BTRFS_IOC_FORGET_DEV - Remove unmounted devices
+
+ Search and remove all stale devices (devices which are not mounted).
+ The third ioctl argument is a pointer to a 'struct btrfs_ioctl_vol_args'.
+ The ioctl call will release all unmounted devices which match the path
+ which is specified in the "name" field of the structure. If an empty
+ path ("") is specified, all unmounted devices will be released.
+
+Implementation notes:
+
+ Ioctls BTRFS_IOC_DEV_INFO and BTRFS_IOC_GET_DEV_STATS use types
+ 'struct btrfs_ioctl_dev_info_args' and ' struct
btrfs_ioctl_get_dev_stats'
+ as third argument types. That is the reason why corresponding structure
+ definitions were added in file 'linux-user/syscall_types.h'.
+ Since the thunk type for 'struct ioc_vol_args' was already added in a
+ previous patch, the rest of the implementation was straightforward.
+
+Signed-off-by: Filip Bozuta <Filip.Bozuta(a)syrmia.com>
+Tested-by: Daniel P. Berrangé <berrange(a)redhat.com>
+Message-Id: <20200823195014.116226-4-Filip.Bozuta(a)syrmia.com>
+Signed-off-by: Laurent Vivier <laurent(a)vivier.eu>
+---
+ linux-user/ioctls.h | 24 ++++++++++++++++++++++++
+ linux-user/syscall_defs.h | 6 ++++++
+ linux-user/syscall_types.h | 24 +++++++++++++++++++++++-
+ 3 files changed, 53 insertions(+), 1 deletion(-)
+
+diff --git a/linux-user/ioctls.h b/linux-user/ioctls.h
+index f33a99f8b6..55a6cbeca5 100644
+--- a/linux-user/ioctls.h
++++ b/linux-user/ioctls.h
+@@ -178,6 +178,22 @@
+ IOCTL(BTRFS_IOC_SNAP_CREATE, IOC_W,
+ MK_PTR(MK_STRUCT(STRUCT_btrfs_ioctl_vol_args)))
+ #endif
++#ifdef BTRFS_IOC_SCAN_DEV
++ IOCTL(BTRFS_IOC_SCAN_DEV, IOC_W,
++ MK_PTR(MK_STRUCT(STRUCT_btrfs_ioctl_vol_args)))
++#endif
++#ifdef BTRFS_IOC_FORGET_DEV
++ IOCTL(BTRFS_IOC_FORGET_DEV, IOC_W,
++ MK_PTR(MK_STRUCT(STRUCT_btrfs_ioctl_vol_args)))
++#endif
++#ifdef BTRFS_IOC_ADD_DEV
++ IOCTL(BTRFS_IOC_ADD_DEV, IOC_W,
++ MK_PTR(MK_STRUCT(STRUCT_btrfs_ioctl_vol_args)))
++#endif
++#ifdef BTRFS_IOC_RM_DEV
++ IOCTL(BTRFS_IOC_RM_DEV, IOC_W,
++ MK_PTR(MK_STRUCT(STRUCT_btrfs_ioctl_vol_args)))
++#endif
+ #ifdef BTRFS_IOC_SUBVOL_CREATE
+ IOCTL(BTRFS_IOC_SUBVOL_CREATE, IOC_W,
+ MK_PTR(MK_STRUCT(STRUCT_btrfs_ioctl_vol_args)))
+@@ -192,6 +208,14 @@
+ #ifdef BTRFS_IOC_SUBVOL_SETFLAGS
+ IOCTL(BTRFS_IOC_SUBVOL_SETFLAGS, IOC_W, MK_PTR(TYPE_ULONGLONG))
+ #endif
++#ifdef BTRFS_IOC_DEV_INFO
++ IOCTL(BTRFS_IOC_DEV_INFO, IOC_RW,
++ MK_PTR(MK_STRUCT(STRUCT_btrfs_ioctl_dev_info_args)))
++#endif
++#ifdef BTRFS_IOC_GET_DEV_STATS
++ IOCTL(BTRFS_IOC_GET_DEV_STATS, IOC_RW,
++ MK_PTR(MK_STRUCT(STRUCT_btrfs_ioctl_get_dev_stats)))
++#endif
+ #ifdef BTRFS_IOC_GET_SUBVOL_INFO
+ IOCTL(BTRFS_IOC_GET_SUBVOL_INFO, IOC_R,
+ MK_PTR(MK_STRUCT(STRUCT_btrfs_ioctl_get_subvol_info_args)))
+diff --git a/linux-user/syscall_defs.h b/linux-user/syscall_defs.h
+index a945e12547..4c7bfa0391 100644
+--- a/linux-user/syscall_defs.h
++++ b/linux-user/syscall_defs.h
+@@ -969,12 +969,18 @@ struct target_rtc_pll_info {
+
+ /* btrfs ioctls */
+ #define TARGET_BTRFS_IOC_SNAP_CREATE TARGET_IOWU(BTRFS_IOCTL_MAGIC, 1)
++#define TARGET_BTRFS_IOC_SCAN_DEV TARGET_IOWU(BTRFS_IOCTL_MAGIC, 4)
++#define TARGET_BTRFS_IOC_FORGET_DEV TARGET_IOWU(BTRFS_IOCTL_MAGIC, 5)
++#define TARGET_BTRFS_IOC_ADD_DEV TARGET_IOWU(BTRFS_IOCTL_MAGIC, 10)
++#define TARGET_BTRFS_IOC_RM_DEV TARGET_IOWU(BTRFS_IOCTL_MAGIC, 11)
+ #define TARGET_BTRFS_IOC_SUBVOL_CREATE TARGET_IOWU(BTRFS_IOCTL_MAGIC, 14)
+ #define TARGET_BTRFS_IOC_SNAP_DESTROY TARGET_IOWU(BTRFS_IOCTL_MAGIC, 15)
+ #define TARGET_BTRFS_IOC_SUBVOL_GETFLAGS TARGET_IOR(BTRFS_IOCTL_MAGIC, 25,\
+ abi_ullong)
+ #define TARGET_BTRFS_IOC_SUBVOL_SETFLAGS TARGET_IOW(BTRFS_IOCTL_MAGIC, 26,\
+ abi_ullong)
++#define TARGET_BTRFS_IOC_DEV_INFO TARGET_IOWRU(BTRFS_IOCTL_MAGIC, 30)
++#define TARGET_BTRFS_IOC_GET_DEV_STATS TARGET_IOWRU(BTRFS_IOCTL_MAGIC, 52)
+ #define TARGET_BTRFS_IOC_GET_SUBVOL_INFO TARGET_IORU(BTRFS_IOCTL_MAGIC, 60)
+
+ /* usb ioctls */
+diff --git a/linux-user/syscall_types.h b/linux-user/syscall_types.h
+index 038cd7869b..ea6898979b 100644
+--- a/linux-user/syscall_types.h
++++ b/linux-user/syscall_types.h
+@@ -355,7 +355,9 @@ STRUCT(blkpg_partition,
+ MK_ARRAY(TYPE_CHAR, BLKPG_VOLNAMELTH)) /* volname */
+
+ #if defined(BTRFS_IOC_SUBVOL_CREATE) || defined(BTRFS_IOC_SNAP_CREATE) || \
+- defined(BTRFS_IOC_SNAP_DESTROY)
++ defined(BTRFS_IOC_SNAP_DESTROY) || defined(BTRFS_IOC_SCAN_DEV) || \
++ defined(BTRFS_IOC_FORGET_DEV) || defined(BTRFS_IOC_ADD_DEV) || \
++ defined(BTRFS_IOC_RM_DEV) || defined(BTRFS_IOC_DEV_INFO)
+ STRUCT(btrfs_ioctl_vol_args,
+ TYPE_LONGLONG, /* fd */
+ MK_ARRAY(TYPE_CHAR, BTRFS_PATH_NAME_MAX + 1)) /* name */
+@@ -387,6 +389,26 @@ STRUCT(btrfs_ioctl_get_subvol_info_args,
+ MK_ARRAY(TYPE_ULONGLONG, 8)) /* reserved */
+ #endif
+
++#ifdef BTRFS_IOC_DEV_INFO
++STRUCT(btrfs_ioctl_dev_info_args,
++ TYPE_ULONGLONG, /* devid */
++ MK_ARRAY(TYPE_CHAR, BTRFS_UUID_SIZE), /* uuid */
++ TYPE_ULONGLONG, /* bytes_used */
++ TYPE_ULONGLONG, /* total_bytes */
++ MK_ARRAY(TYPE_ULONGLONG, 379), /* unused */
++ MK_ARRAY(TYPE_CHAR, BTRFS_DEVICE_PATH_NAME_MAX)) /* path */
++#endif
++
++#ifdef BTRFS_IOC_GET_DEV_STATS
++STRUCT(btrfs_ioctl_get_dev_stats,
++ TYPE_ULONGLONG, /* devid */
++ TYPE_ULONGLONG, /* nr_items */
++ TYPE_ULONGLONG, /* flags */
++ MK_ARRAY(TYPE_ULONGLONG, BTRFS_DEV_STAT_VALUES_MAX), /* values */
++ MK_ARRAY(TYPE_ULONGLONG,
++ 128 - 2 - BTRFS_DEV_STAT_VALUES_MAX)) /* unused */
++#endif
++
+ STRUCT(rtc_time,
+ TYPE_INT, /* tm_sec */
+ TYPE_INT, /* tm_min */
+--
+2.26.2
+
diff --git a/0005-linux-user-Add-support-for-btrfs-ioctls-used-to-get-.patch
b/0005-linux-user-Add-support-for-btrfs-ioctls-used-to-get-.patch
new file mode 100644
index 0000000..cfcd47a
--- /dev/null
+++ b/0005-linux-user-Add-support-for-btrfs-ioctls-used-to-get-.patch
@@ -0,0 +1,120 @@
+From 5793eb73d4d6d37293c6ca95ed85414fcccb9662 Mon Sep 17 00:00:00 2001
+From: Filip Bozuta <Filip.Bozuta(a)syrmia.com>
+Date: Thu, 3 Sep 2020 01:26:57 +0200
+Subject: [PATCH 5/9] linux-user: Add support for btrfs ioctls used to get/set
+ features
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+This patch implements functionality for following ioctls:
+
+BTRFS_IOC_GET_FEATURES - Getting feature flags
+
+ Read feature flags for a btrfs filesystem. The feature flags
+ are returned inside the ioctl's third argument which represents
+ a pointer to a following structure type:
+
+ struct btrfs_ioctl_feature_flags {
+ __u64 compat_flags;
+ __u64 compat_ro_flags;
+ __u64 incompat_flags;
+ };
+
+ All of the structure field represent bit masks that can be composed
+ of values which can be found on:
+
https://elixir.bootlin.com/linux/latest/source/fs/btrfs/ctree.h#L282
+
+BTRFS_IOC_SET_FEATURES - Setting feature flags
+
+ Set and clear feature flags for a btrfs filesystem. The feature flags
+ are set using the ioctl's third argument which represents a
+ 'struct btrfs_ioctl_feature_flags[2]' array. The first element of the
+ array represent flags which are to be cleared and the second element of
+ the array represent flags which are to be set. The second element has the
+ priority over the first, which means that if there are matching flags
+ in the elements, they will be set in the filesystem. If the flag values
+ in the third argument aren't correctly set to be composed of the available
+ predefined flag values, errno ENOPERM ("Operation not permitted") is
returned.
+
+BTRFS_IOC_GET_SUPPORTED_FEATURES - Getting supported feature flags
+
+ Read supported feature flags for a btrfs filesystem. The supported
+ feature flags are read using the ioctl's third argument which represents
+ a 'struct btrfs_ioctl_feature_flags[3]' array. The first element of this
+ array represents all of the supported flags in the btrfs filesystem.
+ The second element represents flags that can be safely set and third element
+ represent flags that can be safely clearead.
+
+Implementation notes:
+
+ All of the implemented ioctls use 'struct btrfs_ioctl_feature_flags' as
+ third argument. That is the reason why a corresponding defintion was added
+ in file 'linux-user/syscall_types.h'.
+
+Signed-off-by: Filip Bozuta <Filip.Bozuta(a)syrmia.com>
+Tested-by: Daniel P. Berrangé <berrange(a)redhat.com>
+Message-Id: <20200823195014.116226-5-Filip.Bozuta(a)syrmia.com>
+Signed-off-by: Laurent Vivier <laurent(a)vivier.eu>
+---
+ linux-user/ioctls.h | 12 ++++++++++++
+ linux-user/syscall_defs.h | 3 +++
+ linux-user/syscall_types.h | 5 +++++
+ 3 files changed, 20 insertions(+)
+
+diff --git a/linux-user/ioctls.h b/linux-user/ioctls.h
+index 55a6cbeca5..50fae1e33b 100644
+--- a/linux-user/ioctls.h
++++ b/linux-user/ioctls.h
+@@ -216,6 +216,18 @@
+ IOCTL(BTRFS_IOC_GET_DEV_STATS, IOC_RW,
+ MK_PTR(MK_STRUCT(STRUCT_btrfs_ioctl_get_dev_stats)))
+ #endif
++#ifdef BTRFS_IOC_GET_FEATURES
++ IOCTL(BTRFS_IOC_GET_FEATURES, IOC_R,
++ MK_PTR(MK_STRUCT(STRUCT_btrfs_ioctl_feature_flags)))
++#endif
++#ifdef BTRFS_IOC_SET_FEATURES
++ IOCTL(BTRFS_IOC_SET_FEATURES, IOC_W,
++ MK_PTR(MK_ARRAY(MK_STRUCT(STRUCT_btrfs_ioctl_feature_flags), 2)))
++#endif
++#ifdef BTRFS_IOC_GET_SUPPORTED_FEATURES
++ IOCTL(BTRFS_IOC_GET_SUPPORTED_FEATURES, IOC_R,
++ MK_PTR(MK_ARRAY(MK_STRUCT(STRUCT_btrfs_ioctl_feature_flags), 3)))
++#endif
+ #ifdef BTRFS_IOC_GET_SUBVOL_INFO
+ IOCTL(BTRFS_IOC_GET_SUBVOL_INFO, IOC_R,
+ MK_PTR(MK_STRUCT(STRUCT_btrfs_ioctl_get_subvol_info_args)))
+diff --git a/linux-user/syscall_defs.h b/linux-user/syscall_defs.h
+index 4c7bfa0391..44811fdcbb 100644
+--- a/linux-user/syscall_defs.h
++++ b/linux-user/syscall_defs.h
+@@ -981,6 +981,9 @@ struct target_rtc_pll_info {
+ abi_ullong)
+ #define TARGET_BTRFS_IOC_DEV_INFO TARGET_IOWRU(BTRFS_IOCTL_MAGIC, 30)
+ #define TARGET_BTRFS_IOC_GET_DEV_STATS TARGET_IOWRU(BTRFS_IOCTL_MAGIC, 52)
++#define TARGET_BTRFS_IOC_GET_FEATURES TARGET_IORU(BTRFS_IOCTL_MAGIC, 57)
++#define TARGET_BTRFS_IOC_SET_FEATURES TARGET_IOWU(BTRFS_IOCTL_MAGIC, 57)
++#define TARGET_BTRFS_IOC_GET_SUPPORTED_FEATURES TARGET_IORU(BTRFS_IOCTL_MAGIC, 57)
+ #define TARGET_BTRFS_IOC_GET_SUBVOL_INFO TARGET_IORU(BTRFS_IOCTL_MAGIC, 60)
+
+ /* usb ioctls */
+diff --git a/linux-user/syscall_types.h b/linux-user/syscall_types.h
+index ea6898979b..925054cfd4 100644
+--- a/linux-user/syscall_types.h
++++ b/linux-user/syscall_types.h
+@@ -409,6 +409,11 @@ STRUCT(btrfs_ioctl_get_dev_stats,
+ 128 - 2 - BTRFS_DEV_STAT_VALUES_MAX)) /* unused */
+ #endif
+
++STRUCT(btrfs_ioctl_feature_flags,
++ TYPE_ULONGLONG, /* compat_flags */
++ TYPE_ULONGLONG, /* compat_ro_flags */
++ TYPE_ULONGLONG) /* incompat_flags */
++
+ STRUCT(rtc_time,
+ TYPE_INT, /* tm_sec */
+ TYPE_INT, /* tm_min */
+--
+2.26.2
+
diff --git a/0006-linux-user-Add-support-for-a-group-of-btrfs-inode-io.patch
b/0006-linux-user-Add-support-for-a-group-of-btrfs-inode-io.patch
new file mode 100644
index 0000000..a953a23
--- /dev/null
+++ b/0006-linux-user-Add-support-for-a-group-of-btrfs-inode-io.patch
@@ -0,0 +1,236 @@
+From 79116330e3eea392dec9a1f38fddf3449ad0195a Mon Sep 17 00:00:00 2001
+From: Filip Bozuta <Filip.Bozuta(a)syrmia.com>
+Date: Thu, 3 Sep 2020 01:26:58 +0200
+Subject: [PATCH 6/9] linux-user: Add support for a group of btrfs inode ioctls
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+This patch implements functionality of following ioctls:
+
+BTRFS_IOC_INO_LOOKUP - Reading tree root id and path
+
+ Read tree root id and path for a given file or directory.
+ The name and tree root id are returned in an ioctl's third
+ argument that represents a pointer to a following type:
+
+ struct btrfs_ioctl_ino_lookup_args {
+ __u64 treeid;
+ __u64 objectid;
+ char name[BTRFS_INO_LOOKUP_PATH_MAX];
+ };
+
+ Before calling this ioctl, field 'objectid' should be filled
+ with the object id value for which the tree id and path are
+ to be read. Value 'BTRFS_FIRST_FREE_OBJECTID' represents the
+ object id for the first available btrfs object (directory or
+ file).
+
+BTRFS_IOC_INO_PATHS - Reading paths to all files
+
+ Read path to all files with a certain inode number. The paths
+ are returned in the ioctl's third argument which represents
+ a pointer to a following type:
+
+ struct btrfs_ioctl_ino_path_args {
+ __u64 inum; /* in */
+ __u64 size; /* in */
+ __u64 reserved[4];
+ /* struct btrfs_data_container *fspath; out */
+ __u64 fspath; /* out */
+ };
+
+ Before calling this ioctl, the 'inum' and 'size' field should
+ be filled with the aproppriate inode number and size of the
+ directory where file paths should be looked for. For now, the
+ paths are returned in an '__u64' (unsigned long long) value
+ 'fspath'.
+
+BTRFS_IOC_LOGICAL_INO - Reading inode numbers
+
+ Read inode numbers for files on a certain logical adress. The
+ inode numbers are returned in the ioctl's third argument which
+ represents a pointer to a following type:
+
+ struct btrfs_ioctl_logical_ino_args {
+ __u64 logical; /* in */
+ __u64 size; /* in */
+ __u64 reserved[3]; /* must be 0 for now */
+ __u64 flags; /* in, v2 only */
+ /* struct btrfs_data_container *inodes; out */
+ __u64 inodes;
+ };
+
+ Before calling this ioctl, the 'logical' and 'size' field should
+ be filled with the aproppriate logical adress and size of where
+ the inode numbers of files should be looked for. For now, the
+ inode numbers are returned in an '__u64' (unsigned long long)
+ value 'inodes'.
+
+BTRFS_IOC_LOGICAL_INO_V2 - Reading inode numbers
+
+ Same as the above mentioned ioctl except that it allows passing
+ a flags 'BTRFS_LOGICAL_INO_ARGS_IGNORE_OFFSET'.
+
+BTRFS_IOC_INO_LOOKUP_USER - Reading subvolume name and path
+
+ Read name and path of a subvolume. The tree root id and
+ path are read in an ioctl's third argument which represents a
+ pointer to a following type:
+
+ struct btrfs_ioctl_ino_lookup_user_args {
+ /* in, inode number containing the subvolume of 'subvolid' */
+ __u64 dirid;
+ /* in */
+ __u64 treeid;
+ /* out, name of the subvolume of 'treeid' */
+ char name[BTRFS_VOL_NAME_MAX + 1];
+ /*
+ * out, constructed path from the directory with which the ioctl is
+ * called to dirid
+ */
+ char path[BTRFS_INO_LOOKUP_USER_PATH_MAX];
+ };
+
+ Before calling this ioctl, the 'dirid' and 'treeid' field should
+ be filled with aproppriate values which represent the inode number
+ of the directory that contains the subvolume and treeid of the
+ subvolume.
+
+Implementation notes:
+
+ All of the ioctls in this patch use structure types as third arguments.
+ That is the reason why aproppriate thunk definitions were added in file
+ 'syscall_types.h'.
+
+Signed-off-by: Filip Bozuta <Filip.Bozuta(a)syrmia.com>
+Tested-by: Daniel P. Berrangé <berrange(a)redhat.com>
+Message-Id: <20200823195014.116226-6-Filip.Bozuta(a)syrmia.com>
+Signed-off-by: Laurent Vivier <laurent(a)vivier.eu>
+---
+ linux-user/ioctls.h | 20 ++++++++++++++++++++
+ linux-user/syscall_defs.h | 5 +++++
+ linux-user/syscall_types.h | 32 ++++++++++++++++++++++++++++++++
+ 3 files changed, 57 insertions(+)
+
+diff --git a/linux-user/ioctls.h b/linux-user/ioctls.h
+index 50fae1e33b..169f98f7a3 100644
+--- a/linux-user/ioctls.h
++++ b/linux-user/ioctls.h
+@@ -202,6 +202,10 @@
+ IOCTL(BTRFS_IOC_SNAP_DESTROY, IOC_W,
+ MK_PTR(MK_STRUCT(STRUCT_btrfs_ioctl_vol_args)))
+ #endif
++#ifdef BTRFS_IOC_INO_LOOKUP
++ IOCTL(BTRFS_IOC_INO_LOOKUP, IOC_RW,
++ MK_PTR(MK_STRUCT(STRUCT_btrfs_ioctl_ino_lookup_args)))
++#endif
+ #ifdef BTRFS_IOC_SUBVOL_GETFLAGS
+ IOCTL(BTRFS_IOC_SUBVOL_GETFLAGS, IOC_R, MK_PTR(TYPE_ULONGLONG))
+ #endif
+@@ -212,6 +216,14 @@
+ IOCTL(BTRFS_IOC_DEV_INFO, IOC_RW,
+ MK_PTR(MK_STRUCT(STRUCT_btrfs_ioctl_dev_info_args)))
+ #endif
++#ifdef BTRFS_IOC_INO_PATHS
++ IOCTL(BTRFS_IOC_INO_PATHS, IOC_RW,
++ MK_PTR(MK_STRUCT(STRUCT_btrfs_ioctl_ino_path_args)))
++#endif
++#ifdef BTRFS_IOC_LOGICAL_INO
++ IOCTL(BTRFS_IOC_LOGICAL_INO, IOC_RW,
++ MK_PTR(MK_STRUCT(STRUCT_btrfs_ioctl_logical_ino_args)))
++#endif
+ #ifdef BTRFS_IOC_GET_DEV_STATS
+ IOCTL(BTRFS_IOC_GET_DEV_STATS, IOC_RW,
+ MK_PTR(MK_STRUCT(STRUCT_btrfs_ioctl_get_dev_stats)))
+@@ -228,10 +240,18 @@
+ IOCTL(BTRFS_IOC_GET_SUPPORTED_FEATURES, IOC_R,
+ MK_PTR(MK_ARRAY(MK_STRUCT(STRUCT_btrfs_ioctl_feature_flags), 3)))
+ #endif
++#ifdef BTRFS_IOC_LOGICAL_INO_V2
++ IOCTL(BTRFS_IOC_LOGICAL_INO_V2, IOC_RW,
++ MK_PTR(MK_STRUCT(STRUCT_btrfs_ioctl_logical_ino_args)))
++#endif
+ #ifdef BTRFS_IOC_GET_SUBVOL_INFO
+ IOCTL(BTRFS_IOC_GET_SUBVOL_INFO, IOC_R,
+ MK_PTR(MK_STRUCT(STRUCT_btrfs_ioctl_get_subvol_info_args)))
+ #endif
++#ifdef BTRFS_IOC_INO_LOOKUP_USER
++ IOCTL(BTRFS_IOC_INO_LOOKUP_USER, IOC_RW,
++ MK_PTR(MK_STRUCT(STRUCT_btrfs_ioctl_ino_lookup_user_args)))
++#endif
+
+ #ifdef CONFIG_USBFS
+ /* USB ioctls */
+diff --git a/linux-user/syscall_defs.h b/linux-user/syscall_defs.h
+index 44811fdcbb..a6a9454b85 100644
+--- a/linux-user/syscall_defs.h
++++ b/linux-user/syscall_defs.h
+@@ -975,16 +975,21 @@ struct target_rtc_pll_info {
+ #define TARGET_BTRFS_IOC_RM_DEV TARGET_IOWU(BTRFS_IOCTL_MAGIC, 11)
+ #define TARGET_BTRFS_IOC_SUBVOL_CREATE TARGET_IOWU(BTRFS_IOCTL_MAGIC, 14)
+ #define TARGET_BTRFS_IOC_SNAP_DESTROY TARGET_IOWU(BTRFS_IOCTL_MAGIC, 15)
++#define TARGET_BTRFS_IOC_INO_LOOKUP TARGET_IOWRU(BTRFS_IOCTL_MAGIC, 18)
+ #define TARGET_BTRFS_IOC_SUBVOL_GETFLAGS TARGET_IOR(BTRFS_IOCTL_MAGIC, 25,\
+ abi_ullong)
+ #define TARGET_BTRFS_IOC_SUBVOL_SETFLAGS TARGET_IOW(BTRFS_IOCTL_MAGIC, 26,\
+ abi_ullong)
+ #define TARGET_BTRFS_IOC_DEV_INFO TARGET_IOWRU(BTRFS_IOCTL_MAGIC, 30)
++#define TARGET_BTRFS_IOC_INO_PATHS TARGET_IOWRU(BTRFS_IOCTL_MAGIC, 35)
++#define TARGET_BTRFS_IOC_LOGICAL_INO TARGET_IOWRU(BTRFS_IOCTL_MAGIC, 36)
+ #define TARGET_BTRFS_IOC_GET_DEV_STATS TARGET_IOWRU(BTRFS_IOCTL_MAGIC, 52)
+ #define TARGET_BTRFS_IOC_GET_FEATURES TARGET_IORU(BTRFS_IOCTL_MAGIC, 57)
+ #define TARGET_BTRFS_IOC_SET_FEATURES TARGET_IOWU(BTRFS_IOCTL_MAGIC, 57)
+ #define TARGET_BTRFS_IOC_GET_SUPPORTED_FEATURES TARGET_IORU(BTRFS_IOCTL_MAGIC, 57)
++#define TARGET_BTRFS_IOC_LOGICAL_INO_V2 TARGET_IOWRU(BTRFS_IOCTL_MAGIC, 59)
+ #define TARGET_BTRFS_IOC_GET_SUBVOL_INFO TARGET_IORU(BTRFS_IOCTL_MAGIC, 60)
++#define TARGET_BTRFS_IOC_INO_LOOKUP_USER TARGET_IOWRU(BTRFS_IOCTL_MAGIC, 62)
+
+ /* usb ioctls */
+ #define TARGET_USBDEVFS_CONTROL TARGET_IOWRU('U', 0)
+diff --git a/linux-user/syscall_types.h b/linux-user/syscall_types.h
+index 925054cfd4..b84e14235f 100644
+--- a/linux-user/syscall_types.h
++++ b/linux-user/syscall_types.h
+@@ -389,6 +389,38 @@ STRUCT(btrfs_ioctl_get_subvol_info_args,
+ MK_ARRAY(TYPE_ULONGLONG, 8)) /* reserved */
+ #endif
+
++#ifdef BTRFS_IOC_INO_LOOKUP
++STRUCT(btrfs_ioctl_ino_lookup_args,
++ TYPE_ULONGLONG, /* treeid */
++ TYPE_ULONGLONG, /* objectid */
++ MK_ARRAY(TYPE_CHAR, BTRFS_INO_LOOKUP_PATH_MAX)) /* name */
++#endif
++
++#ifdef BTRFS_IOC_INO_PATHS
++STRUCT(btrfs_ioctl_ino_path_args,
++ TYPE_ULONGLONG, /* inum */
++ TYPE_ULONGLONG, /* size */
++ MK_ARRAY(TYPE_ULONGLONG, 4), /* reserved */
++ TYPE_ULONGLONG) /* fspath */
++#endif
++
++#if defined(BTRFS_IOC_LOGICAL_INO) || defined(BTRFS_IOC_LOGICAL_INO_V2)
++STRUCT(btrfs_ioctl_logical_ino_args,
++ TYPE_ULONGLONG, /* logical */
++ TYPE_ULONGLONG, /* size */
++ MK_ARRAY(TYPE_ULONGLONG, 3), /* reserved */
++ TYPE_ULONGLONG, /* flags */
++ TYPE_ULONGLONG) /* inodes */
++#endif
++
++#ifdef BTRFS_IOC_INO_LOOKUP_USER
++STRUCT(btrfs_ioctl_ino_lookup_user_args,
++ TYPE_ULONGLONG, /* dirid */
++ TYPE_ULONGLONG, /* treeid */
++ MK_ARRAY(TYPE_CHAR, BTRFS_VOL_NAME_MAX + 1), /* name */
++ MK_ARRAY(TYPE_CHAR, BTRFS_INO_LOOKUP_USER_PATH_MAX)) /* path */
++#endif
++
+ #ifdef BTRFS_IOC_DEV_INFO
+ STRUCT(btrfs_ioctl_dev_info_args,
+ TYPE_ULONGLONG, /* devid */
+--
+2.26.2
+
diff --git a/0007-linux-user-Add-support-for-two-btrfs-ioctls-used-for.patch
b/0007-linux-user-Add-support-for-two-btrfs-ioctls-used-for.patch
new file mode 100644
index 0000000..e284817
--- /dev/null
+++ b/0007-linux-user-Add-support-for-two-btrfs-ioctls-used-for.patch
@@ -0,0 +1,132 @@
+From 58252f756d7fb2a8516c0815034c0bded4697852 Mon Sep 17 00:00:00 2001
+From: Filip Bozuta <Filip.Bozuta(a)syrmia.com>
+Date: Thu, 3 Sep 2020 01:26:59 +0200
+Subject: [PATCH 7/9] linux-user: Add support for two btrfs ioctls used for
+ subvolume
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+This patch implements functionality for following ioctl:
+
+BTRFS_IOC_DEFAULT_SUBVOL - Setting a default subvolume
+
+ Set a default subvolume for a btrfs filesystem. The third
+ ioctl's argument is a '__u64' (unsigned long long) which
+ represents the id of a subvolume that is to be set as
+ the default.
+
+BTRFS_IOC_GET_SUBVOL_ROOTREF - Getting tree and directory id of subvolumes
+
+ Read tree and directory id of subvolumes from a btrfs
+ filesystem. The tree and directory id's are returned in the
+ ioctl's third argument which represents a pointer to a
+ following type:
+
+ struct btrfs_ioctl_get_subvol_rootref_args {
+ /* in/out, minimum id of rootref's treeid to be searched */
+ __u64 min_treeid;
+
+ /* out */
+ struct {
+ __u64 treeid;
+ __u64 dirid;
+ } rootref[BTRFS_MAX_ROOTREF_BUFFER_NUM];
+
+ /* out, number of found items */
+ __u8 num_items;
+ __u8 align[7];
+ };
+
+ Before calling this ioctl, 'min_treeid' field should be filled
+ with value that represent the minimum value for the tree id.
+
+Implementation notes:
+
+ Ioctl BTRFS_IOC_GET_SUBVOL_ROOTREF uses the above mentioned structure
+ type as third argument. That is the reason why a aproppriate thunk
+ structure definition is added in file 'syscall_types.h'.
+
+Signed-off-by: Filip Bozuta <Filip.Bozuta(a)syrmia.com>
+Tested-by: Daniel P. Berrangé <berrange(a)redhat.com>
+Message-Id: <20200823195014.116226-7-Filip.Bozuta(a)syrmia.com>
+Signed-off-by: Laurent Vivier <laurent(a)vivier.eu>
+---
+ linux-user/ioctls.h | 7 +++++++
+ linux-user/syscall_defs.h | 3 +++
+ linux-user/syscall_types.h | 13 +++++++++++++
+ 3 files changed, 23 insertions(+)
+
+diff --git a/linux-user/ioctls.h b/linux-user/ioctls.h
+index 169f98f7a3..728880b9f3 100644
+--- a/linux-user/ioctls.h
++++ b/linux-user/ioctls.h
+@@ -206,6 +206,9 @@
+ IOCTL(BTRFS_IOC_INO_LOOKUP, IOC_RW,
+ MK_PTR(MK_STRUCT(STRUCT_btrfs_ioctl_ino_lookup_args)))
+ #endif
++#ifdef BTRFS_IOC_DEFAULT_SUBVOL
++ IOCTL(BTRFS_IOC_DEFAULT_SUBVOL, IOC_W, MK_PTR(TYPE_ULONGLONG))
++#endif
+ #ifdef BTRFS_IOC_SUBVOL_GETFLAGS
+ IOCTL(BTRFS_IOC_SUBVOL_GETFLAGS, IOC_R, MK_PTR(TYPE_ULONGLONG))
+ #endif
+@@ -248,6 +251,10 @@
+ IOCTL(BTRFS_IOC_GET_SUBVOL_INFO, IOC_R,
+ MK_PTR(MK_STRUCT(STRUCT_btrfs_ioctl_get_subvol_info_args)))
+ #endif
++#ifdef BTRFS_IOC_GET_SUBVOL_ROOTREF
++ IOCTL(BTRFS_IOC_GET_SUBVOL_ROOTREF, IOC_RW,
++ MK_PTR(MK_STRUCT(STRUCT_btrfs_ioctl_get_subvol_rootref_args)))
++#endif
+ #ifdef BTRFS_IOC_INO_LOOKUP_USER
+ IOCTL(BTRFS_IOC_INO_LOOKUP_USER, IOC_RW,
+ MK_PTR(MK_STRUCT(STRUCT_btrfs_ioctl_ino_lookup_user_args)))
+diff --git a/linux-user/syscall_defs.h b/linux-user/syscall_defs.h
+index a6a9454b85..1d0bfb5479 100644
+--- a/linux-user/syscall_defs.h
++++ b/linux-user/syscall_defs.h
+@@ -976,6 +976,8 @@ struct target_rtc_pll_info {
+ #define TARGET_BTRFS_IOC_SUBVOL_CREATE TARGET_IOWU(BTRFS_IOCTL_MAGIC, 14)
+ #define TARGET_BTRFS_IOC_SNAP_DESTROY TARGET_IOWU(BTRFS_IOCTL_MAGIC, 15)
+ #define TARGET_BTRFS_IOC_INO_LOOKUP TARGET_IOWRU(BTRFS_IOCTL_MAGIC, 18)
++#define TARGET_BTRFS_IOC_DEFAULT_SUBVOL TARGET_IOW(BTRFS_IOCTL_MAGIC, 19,\
++ abi_ullong)
+ #define TARGET_BTRFS_IOC_SUBVOL_GETFLAGS TARGET_IOR(BTRFS_IOCTL_MAGIC, 25,\
+ abi_ullong)
+ #define TARGET_BTRFS_IOC_SUBVOL_SETFLAGS TARGET_IOW(BTRFS_IOCTL_MAGIC, 26,\
+@@ -989,6 +991,7 @@ struct target_rtc_pll_info {
+ #define TARGET_BTRFS_IOC_GET_SUPPORTED_FEATURES TARGET_IORU(BTRFS_IOCTL_MAGIC, 57)
+ #define TARGET_BTRFS_IOC_LOGICAL_INO_V2 TARGET_IOWRU(BTRFS_IOCTL_MAGIC, 59)
+ #define TARGET_BTRFS_IOC_GET_SUBVOL_INFO TARGET_IORU(BTRFS_IOCTL_MAGIC, 60)
++#define TARGET_BTRFS_IOC_GET_SUBVOL_ROOTREF TARGET_IOWRU(BTRFS_IOCTL_MAGIC, 61)
+ #define TARGET_BTRFS_IOC_INO_LOOKUP_USER TARGET_IOWRU(BTRFS_IOCTL_MAGIC, 62)
+
+ /* usb ioctls */
+diff --git a/linux-user/syscall_types.h b/linux-user/syscall_types.h
+index b84e14235f..5566d101c2 100644
+--- a/linux-user/syscall_types.h
++++ b/linux-user/syscall_types.h
+@@ -431,6 +431,19 @@ STRUCT(btrfs_ioctl_dev_info_args,
+ MK_ARRAY(TYPE_CHAR, BTRFS_DEVICE_PATH_NAME_MAX)) /* path */
+ #endif
+
++#ifdef BTRFS_IOC_GET_SUBVOL_ROOTREF
++STRUCT(rootref,
++ TYPE_ULONGLONG, /* treeid */
++ TYPE_ULONGLONG) /* dirid */
++
++STRUCT(btrfs_ioctl_get_subvol_rootref_args,
++ TYPE_ULONGLONG, /* min_treeid */
++ MK_ARRAY(MK_STRUCT(STRUCT_rootref),
++ BTRFS_MAX_ROOTREF_BUFFER_NUM), /* rootref */
++ TYPE_CHAR, /* num_items */
++ MK_ARRAY(TYPE_CHAR, 7)) /* align */
++#endif
++
+ #ifdef BTRFS_IOC_GET_DEV_STATS
+ STRUCT(btrfs_ioctl_get_dev_stats,
+ TYPE_ULONGLONG, /* devid */
+--
+2.26.2
+
diff --git a/0008-linux-user-Add-support-for-btrfs-ioctls-used-to-mana.patch
b/0008-linux-user-Add-support-for-btrfs-ioctls-used-to-mana.patch
new file mode 100644
index 0000000..4871677
--- /dev/null
+++ b/0008-linux-user-Add-support-for-btrfs-ioctls-used-to-mana.patch
@@ -0,0 +1,235 @@
+From d62c16ff35a17743c2a0f8ebfb39f84064afcb3c Mon Sep 17 00:00:00 2001
+From: Filip Bozuta <Filip.Bozuta(a)syrmia.com>
+Date: Thu, 3 Sep 2020 01:27:00 +0200
+Subject: [PATCH 8/9] linux-user: Add support for btrfs ioctls used to manage
+ quota
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+This patch implements functionality for following ioctls:
+
+BTRFS_IOC_QUOTA_CTL - Enabling/Disabling quota support
+
+ Enable or disable quota support for a btrfs filesystem. Quota
+ support is enabled or disabled using the ioctls third argument
+ which represents a pointer to a following type:
+
+ struct btrfs_ioctl_quota_ctl_args {
+ __u64 cmd;
+ __u64 status;
+ };
+
+ Before calling this ioctl, the 'cmd' field should be filled
+ with one of the values 'BTRFS_QUOTA_CTL_ENABLE' (enabling quota)
+ 'BTRFS_QUOTA_CTL_DISABLE' (disabling quota).
+
+BTRFS_IOC_QGROUP_CREATE - Creating/Removing a subvolume quota group
+
+ Create or remove a subvolume quota group. The subvolume quota
+ group is created or removed using the ioctl's third argument which
+ represents a pointer to a following type:
+
+ struct btrfs_ioctl_qgroup_create_args {
+ __u64 create;
+ __u64 qgroupid;
+ };
+
+ Before calling this ioctl, the 'create' field should be filled
+ with the aproppriate value depending on if the user wants to
+ create or remove a quota group (0 for removing, everything else
+ for creating). Also, the 'qgroupid' field should be filled with
+ the value for the quota group id that is to be created.
+
+BTRFS_IOC_QGROUP_ASSIGN - Asigning or removing a quota group as child group
+
+ Asign or remove a quota group as child quota group of another
+ group in the btrfs filesystem. The asignment is done using the
+ ioctl's third argument which represents a pointert to a following type:
+
+ struct btrfs_ioctl_qgroup_assign_args {
+ __u64 assign;
+ __u64 src;
+ __u64 dst;
+ };
+
+ Before calling this ioctl, the 'assign' field should be filled with
+ the aproppriate value depending on if the user wants to asign or remove
+ a quota group as a child quota group of another group (0 for removing,
+ everythin else for asigning). Also, the 'src' and 'dst' fields
should
+ be filled with the aproppriate quota group id values depending on which
+ quota group needs to asigned or removed as child quota group of another
+ group ('src' gets asigned or removed as child group of 'dst').
+
+BTRFS_IOC_QGROUP_LIMIT - Limiting the size of a quota group
+
+ Limit the size of a quota group. The size of the quota group is limited
+ with the ioctls third argument which represents a pointer to a following
+ type:
+
+ struct btrfs_ioctl_qgroup_limit_args {
+ __u64 qgroupid;
+ struct btrfs_qgroup_limit lim;
+ };
+
+ Before calling this ioctl, the 'qgroup' id field should be filled with
+ aproppriate value of the quota group id for which the size is to be
+ limited. The second field is of following type:
+
+ struct btrfs_qgroup_limit {
+ __u64 flags;
+ __u64 max_rfer;
+ __u64 max_excl;
+ __u64 rsv_rfer;
+ __u64 rsv_excl;
+ };
+
+ The 'max_rfer' field should be filled with the size to which the quota
+ group should be limited. The 'flags' field can be used for passing
+ additional options and can have values which can be found on:
+
https://elixir.bootlin.com/linux/latest/source/include/uapi/linux/btrfs.h...
+
+BTRFS_IOC_QUOTA_RESCAN_STATUS - Checking status of running rescan operation
+
+ Check status of a running rescan operation. The status is checked using
+ the ioctl's third argument which represents a pointer to a following type:
+
+ struct btrfs_ioctl_quota_rescan_args {
+ __u64 flags;
+ __u64 progress;
+ __u64 reserved[6];
+ };
+
+ If there is a rescan operation running, 'flags' field is set to 1, and
+ 'progress' field is set to aproppriate value which represents the progress
+ of the operation.
+
+BTRFS_IOC_QUOTA_RESCAN - Starting a rescan operation
+
+ Start ar rescan operation to Trash all quota groups and scan the metadata
+ again with the current config. Before calling this ioctl,
+ BTRFS_IOC_QUOTA_RESCAN_STATUS sould be run to check if there is already a
+ rescan operation runing. After that ioctl call, the received
+ 'struct btrfs_ioctl_quota_rescan_args' should be than passed as this ioctls
+ third argument.
+
+BTRFS_IOC_QUOTA_RESCAN_WAIT - Waiting for a rescan operation to finish
+
+ Wait until a rescan operation is finished (if there is a rescan operation
+ running). The third ioctls argument is ignored.
+
+Implementation notes:
+
+ Almost all of the ioctls in this patch use structure types as third arguments.
+ That is the reason why aproppriate thunk definitions were added in file
+ 'syscall_types.h'.
+
+Signed-off-by: Filip Bozuta <Filip.Bozuta(a)syrmia.com>
+Tested-by: Daniel P. Berrangé <berrange(a)redhat.com>
+Message-Id: <20200823195014.116226-8-Filip.Bozuta(a)syrmia.com>
+Signed-off-by: Laurent Vivier <laurent(a)vivier.eu>
+---
+ linux-user/ioctls.h | 27 +++++++++++++++++++++++++++
+ linux-user/syscall_defs.h | 7 +++++++
+ linux-user/syscall_types.h | 29 +++++++++++++++++++++++++++++
+ 3 files changed, 63 insertions(+)
+
+diff --git a/linux-user/ioctls.h b/linux-user/ioctls.h
+index 728880b9f3..882bfb3e88 100644
+--- a/linux-user/ioctls.h
++++ b/linux-user/ioctls.h
+@@ -227,6 +227,33 @@
+ IOCTL(BTRFS_IOC_LOGICAL_INO, IOC_RW,
+ MK_PTR(MK_STRUCT(STRUCT_btrfs_ioctl_logical_ino_args)))
+ #endif
++#ifdef BTRFS_IOC_QUOTA_CTL
++ IOCTL(BTRFS_IOC_QUOTA_CTL, IOC_RW,
++ MK_PTR(MK_STRUCT(STRUCT_btrfs_ioctl_quota_ctl_args)))
++#endif
++#ifdef BTRFS_IOC_QGROUP_ASSIGN
++ IOCTL(BTRFS_IOC_QGROUP_ASSIGN, IOC_W,
++ MK_PTR(MK_STRUCT(STRUCT_btrfs_ioctl_qgroup_assign_args)))
++#endif
++#ifdef BTRFS_IOC_QGROUP_CREATE
++ IOCTL(BTRFS_IOC_QGROUP_CREATE, IOC_W,
++ MK_PTR(MK_STRUCT(STRUCT_btrfs_ioctl_qgroup_create_args)))
++#endif
++#ifdef BTRFS_IOC_QGROUP_LIMIT
++ IOCTL(BTRFS_IOC_QGROUP_LIMIT, IOC_R,
++ MK_PTR(MK_STRUCT(STRUCT_btrfs_ioctl_qgroup_limit_args)))
++#endif
++#ifdef BTRFS_IOC_QUOTA_RESCAN
++ IOCTL(BTRFS_IOC_QUOTA_RESCAN, IOC_W,
++ MK_PTR(MK_STRUCT(STRUCT_btrfs_ioctl_quota_rescan_args)))
++#endif
++#ifdef BTRFS_IOC_QUOTA_RESCAN_STATUS
++ IOCTL(BTRFS_IOC_QUOTA_RESCAN_STATUS, IOC_R,
++ MK_PTR(MK_STRUCT(STRUCT_btrfs_ioctl_quota_rescan_args)))
++#endif
++#ifdef BTRFS_IOC_QUOTA_RESCAN_WAIT
++ IOCTL(BTRFS_IOC_QUOTA_RESCAN_WAIT, 0, TYPE_NULL)
++#endif
+ #ifdef BTRFS_IOC_GET_DEV_STATS
+ IOCTL(BTRFS_IOC_GET_DEV_STATS, IOC_RW,
+ MK_PTR(MK_STRUCT(STRUCT_btrfs_ioctl_get_dev_stats)))
+diff --git a/linux-user/syscall_defs.h b/linux-user/syscall_defs.h
+index 1d0bfb5479..10a7f91016 100644
+--- a/linux-user/syscall_defs.h
++++ b/linux-user/syscall_defs.h
+@@ -985,6 +985,13 @@ struct target_rtc_pll_info {
+ #define TARGET_BTRFS_IOC_DEV_INFO TARGET_IOWRU(BTRFS_IOCTL_MAGIC, 30)
+ #define TARGET_BTRFS_IOC_INO_PATHS TARGET_IOWRU(BTRFS_IOCTL_MAGIC, 35)
+ #define TARGET_BTRFS_IOC_LOGICAL_INO TARGET_IOWRU(BTRFS_IOCTL_MAGIC, 36)
++#define TARGET_BTRFS_IOC_QUOTA_CTL TARGET_IOWRU(BTRFS_IOCTL_MAGIC, 40)
++#define TARGET_BTRFS_IOC_QGROUP_ASSIGN TARGET_IOWU(BTRFS_IOCTL_MAGIC, 41)
++#define TARGET_BTRFS_IOC_QGROUP_CREATE TARGET_IOWU(BTRFS_IOCTL_MAGIC, 42)
++#define TARGET_BTRFS_IOC_QGROUP_LIMIT TARGET_IORU(BTRFS_IOCTL_MAGIC, 43)
++#define TARGET_BTRFS_IOC_QUOTA_RESCAN TARGET_IOWU(BTRFS_IOCTL_MAGIC, 44)
++#define TARGET_BTRFS_IOC_QUOTA_RESCAN_STATUS TARGET_IORU(BTRFS_IOCTL_MAGIC, 45)
++#define TARGET_BTRFS_IOC_QUOTA_RESCAN_WAIT TARGET_IO(BTRFS_IOCTL_MAGIC, 46)
+ #define TARGET_BTRFS_IOC_GET_DEV_STATS TARGET_IOWRU(BTRFS_IOCTL_MAGIC, 52)
+ #define TARGET_BTRFS_IOC_GET_FEATURES TARGET_IORU(BTRFS_IOCTL_MAGIC, 57)
+ #define TARGET_BTRFS_IOC_SET_FEATURES TARGET_IOWU(BTRFS_IOCTL_MAGIC, 57)
+diff --git a/linux-user/syscall_types.h b/linux-user/syscall_types.h
+index 5566d101c2..d9b7106a69 100644
+--- a/linux-user/syscall_types.h
++++ b/linux-user/syscall_types.h
+@@ -454,6 +454,35 @@ STRUCT(btrfs_ioctl_get_dev_stats,
+ 128 - 2 - BTRFS_DEV_STAT_VALUES_MAX)) /* unused */
+ #endif
+
++STRUCT(btrfs_ioctl_quota_ctl_args,
++ TYPE_ULONGLONG, /* cmd */
++ TYPE_ULONGLONG) /* status */
++
++STRUCT(btrfs_ioctl_quota_rescan_args,
++ TYPE_ULONGLONG, /* flags */
++ TYPE_ULONGLONG, /* progress */
++ MK_ARRAY(TYPE_ULONGLONG, 6)) /* reserved */
++
++STRUCT(btrfs_ioctl_qgroup_assign_args,
++ TYPE_ULONGLONG, /* assign */
++ TYPE_ULONGLONG, /* src */
++ TYPE_ULONGLONG) /* dst */
++
++STRUCT(btrfs_ioctl_qgroup_create_args,
++ TYPE_ULONGLONG, /* create */
++ TYPE_ULONGLONG) /* qgroupid */
++
++STRUCT(btrfs_qgroup_limit,
++ TYPE_ULONGLONG, /* flags */
++ TYPE_ULONGLONG, /* max_rfer */
++ TYPE_ULONGLONG, /* max_excl */
++ TYPE_ULONGLONG, /* rsv_rfer */
++ TYPE_ULONGLONG) /* rsv_excl */
++
++STRUCT(btrfs_ioctl_qgroup_limit_args,
++ TYPE_ULONGLONG, /* qgroupid */
++ MK_STRUCT(STRUCT_btrfs_qgroup_limit)) /* lim */
++
+ STRUCT(btrfs_ioctl_feature_flags,
+ TYPE_ULONGLONG, /* compat_flags */
+ TYPE_ULONGLONG, /* compat_ro_flags */
+--
+2.26.2
+
diff --git a/0009-linux-user-Add-support-for-btrfs-ioctls-used-to-scru.patch
b/0009-linux-user-Add-support-for-btrfs-ioctls-used-to-scru.patch
new file mode 100644
index 0000000..c64a48e
--- /dev/null
+++ b/0009-linux-user-Add-support-for-btrfs-ioctls-used-to-scru.patch
@@ -0,0 +1,142 @@
+From 5695918e7c599f21fd6913a61160c482a0e41639 Mon Sep 17 00:00:00 2001
+From: Filip Bozuta <Filip.Bozuta(a)syrmia.com>
+Date: Thu, 3 Sep 2020 01:27:01 +0200
+Subject: [PATCH 9/9] linux-user: Add support for btrfs ioctls used to scrub a
+ filesystem
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+This patch implements functionality for following ioctls:
+
+BTRFS_IOC_SCRUB - Starting a btrfs filesystem scrub
+
+ Start a btrfs filesystem scrub. The third ioctls argument
+ is a pointer to a following type:
+
+ struct btrfs_ioctl_scrub_args {
+ __u64 devid; /* in */
+ __u64 start; /* in */
+ __u64 end; /* in */
+ __u64 flags; /* in */
+ struct btrfs_scrub_progress progress; /* out */
+ /* pad to 1k */
+ __u64 unused[(1024-32-sizeof(struct btrfs_scrub_progress))/8];
+ };
+
+ Before calling this ioctl, field 'devid' should be filled
+ with value that represents the device id of the btrfs filesystem
+ for which the scrub is to be started.
+
+BTRFS_IOC_SCRUB_CANCEL - Canceling scrub of a btrfs filesystem
+
+ Cancel a btrfs filesystem scrub if it is running. The third
+ ioctls argument is ignored.
+
+BTRFS_IOC_SCRUB_PROGRESS - Getting status of a running scrub
+
+ Read the status of a running btrfs filesystem scrub. The third
+ ioctls argument is a pointer to the above mentioned
+ 'struct btrfs_ioctl_scrub_args'. Similarly as with
'BTRFS_IOC_SCRUB',
+ the 'devid' field should be filled with value that represents the
+ id of the btrfs device for which the scrub has started. The status
+ of a running scrub is returned in the field 'progress' which is
+ of type 'struct btrfs_scrub_progress' and its definition can be
+ found at:
+
https://elixir.bootlin.com/linux/latest/source/include/uapi/linux/btrfs.h...
+
+Implementation nots:
+
+ Ioctls in this patch use type 'struct btrfs_ioctl_scrub_args' as their
+ third argument. That is the reason why an aproppriate thunk type
+ definition is added in file 'syscall_types.h'.
+
+Signed-off-by: Filip Bozuta <Filip.Bozuta(a)syrmia.com>
+Tested-by: Daniel P. Berrangé <berrange(a)redhat.com>
+Message-Id: <20200823195014.116226-9-Filip.Bozuta(a)syrmia.com>
+Signed-off-by: Laurent Vivier <laurent(a)vivier.eu>
+---
+ linux-user/ioctls.h | 11 +++++++++++
+ linux-user/syscall_defs.h | 3 +++
+ linux-user/syscall_types.h | 29 +++++++++++++++++++++++++++++
+ 3 files changed, 43 insertions(+)
+
+diff --git a/linux-user/ioctls.h b/linux-user/ioctls.h
+index 882bfb3e88..e3bfe78774 100644
+--- a/linux-user/ioctls.h
++++ b/linux-user/ioctls.h
+@@ -215,6 +215,17 @@
+ #ifdef BTRFS_IOC_SUBVOL_SETFLAGS
+ IOCTL(BTRFS_IOC_SUBVOL_SETFLAGS, IOC_W, MK_PTR(TYPE_ULONGLONG))
+ #endif
++#ifdef BTRFS_IOC_SCRUB
++ IOCTL(BTRFS_IOC_SCRUB, IOC_RW,
++ MK_PTR(MK_STRUCT(STRUCT_btrfs_ioctl_scrub_args)))
++#endif
++#ifdef BTRFS_IOC_SCRUB_CANCEL
++ IOCTL(BTRFS_IOC_SCRUB_CANCEL, 0, TYPE_NULL)
++#endif
++#ifdef BTRFS_IOC_SCRUB_PROGRESS
++ IOCTL(BTRFS_IOC_SCRUB_PROGRESS, IOC_RW,
++ MK_PTR(MK_STRUCT(STRUCT_btrfs_ioctl_scrub_args)))
++#endif
+ #ifdef BTRFS_IOC_DEV_INFO
+ IOCTL(BTRFS_IOC_DEV_INFO, IOC_RW,
+ MK_PTR(MK_STRUCT(STRUCT_btrfs_ioctl_dev_info_args)))
+diff --git a/linux-user/syscall_defs.h b/linux-user/syscall_defs.h
+index 10a7f91016..969377d622 100644
+--- a/linux-user/syscall_defs.h
++++ b/linux-user/syscall_defs.h
+@@ -982,6 +982,9 @@ struct target_rtc_pll_info {
+ abi_ullong)
+ #define TARGET_BTRFS_IOC_SUBVOL_SETFLAGS TARGET_IOW(BTRFS_IOCTL_MAGIC, 26,\
+ abi_ullong)
++#define TARGET_BTRFS_IOC_SCRUB TARGET_IOWRU(BTRFS_IOCTL_MAGIC, 27)
++#define TARGET_BTRFS_IOC_SCRUB_CANCEL TARGET_IO(BTRFS_IOCTL_MAGIC, 28)
++#define TARGET_BTRFS_IOC_SCRUB_PROGRESS TARGET_IOWRU(BTRFS_IOCTL_MAGIC, 29)
+ #define TARGET_BTRFS_IOC_DEV_INFO TARGET_IOWRU(BTRFS_IOCTL_MAGIC, 30)
+ #define TARGET_BTRFS_IOC_INO_PATHS TARGET_IOWRU(BTRFS_IOCTL_MAGIC, 35)
+ #define TARGET_BTRFS_IOC_LOGICAL_INO TARGET_IOWRU(BTRFS_IOCTL_MAGIC, 36)
+diff --git a/linux-user/syscall_types.h b/linux-user/syscall_types.h
+index d9b7106a69..789723cfb9 100644
+--- a/linux-user/syscall_types.h
++++ b/linux-user/syscall_types.h
+@@ -421,6 +421,35 @@ STRUCT(btrfs_ioctl_ino_lookup_user_args,
+ MK_ARRAY(TYPE_CHAR, BTRFS_INO_LOOKUP_USER_PATH_MAX)) /* path */
+ #endif
+
++#if defined(BTRFS_IOC_SCRUB) || defined(BTRFS_IOC_SCRUB_PROGRESS)
++STRUCT(btrfs_scrub_progress,
++ TYPE_ULONGLONG, /* data_extents_scrubbed */
++ TYPE_ULONGLONG, /* tree_extents_scrubbed */
++ TYPE_ULONGLONG, /* data_bytes_scrubbed */
++ TYPE_ULONGLONG, /* tree_bytes_scrubbed */
++ TYPE_ULONGLONG, /* read_errors */
++ TYPE_ULONGLONG, /* csum_errors */
++ TYPE_ULONGLONG, /* verify_errors */
++ TYPE_ULONGLONG, /* no_csum */
++ TYPE_ULONGLONG, /* csum_discards */
++ TYPE_ULONGLONG, /* super_errors */
++ TYPE_ULONGLONG, /* malloc_errors */
++ TYPE_ULONGLONG, /* uncorrectable_errors */
++ TYPE_ULONGLONG, /* corrected_er */
++ TYPE_ULONGLONG, /* last_physical */
++ TYPE_ULONGLONG) /* unverified_errors */
++
++STRUCT(btrfs_ioctl_scrub_args,
++ TYPE_ULONGLONG, /* devid */
++ TYPE_ULONGLONG, /* start */
++ TYPE_ULONGLONG, /* end */
++ TYPE_ULONGLONG, /* flags */
++ MK_STRUCT(STRUCT_btrfs_scrub_progress), /* progress */
++ MK_ARRAY(TYPE_ULONGLONG,
++ (1024 - 32 -
++ sizeof(struct btrfs_scrub_progress)) / 8)) /* unused */
++#endif
++
+ #ifdef BTRFS_IOC_DEV_INFO
+ STRUCT(btrfs_ioctl_dev_info_args,
+ TYPE_ULONGLONG, /* devid */
+--
+2.26.2
+
diff --git a/qemu.spec b/qemu.spec
index 00d85fb..6d5b368 100644
--- a/qemu.spec
+++ b/qemu.spec
@@ -170,13 +170,23 @@
Summary: QEMU is a FAST! processor emulator
Name: qemu
Version: 5.1.0
-Release: 3%{?rcrel}%{?dist}
+Release: 4%{?rcrel}%{?dist}
Epoch: 2
License: GPLv2 and BSD and MIT and CC-BY
URL:
http://www.qemu.org/
Source0:
http://wiki.qemu-project.org/download/%{name}-%{version}%{?rcstr}.tar.xz
+Patch1: 0001-linux-user-fix-implicit-conversion-from-enumeration-.patch
+Patch2: 0002-linux-user-Add-support-for-a-group-of-btrfs-ioctls-u.patch
+Patch3: 0003-linux-user-Add-support-for-a-group-of-btrfs-ioctls-u.patch
+Patch4: 0004-linux-user-Add-support-for-btrfs-ioctls-used-to-mani.patch
+Patch5: 0005-linux-user-Add-support-for-btrfs-ioctls-used-to-get-.patch
+Patch6: 0006-linux-user-Add-support-for-a-group-of-btrfs-inode-io.patch
+Patch7: 0007-linux-user-Add-support-for-two-btrfs-ioctls-used-for.patch
+Patch8: 0008-linux-user-Add-support-for-btrfs-ioctls-used-to-mana.patch
+Patch9: 0009-linux-user-Add-support-for-btrfs-ioctls-used-to-scru.patch
+
# guest agent service
Source10: qemu-guest-agent.service
Source17: qemu-ga.sysconfig
@@ -1898,6 +1908,9 @@ getent passwd qemu >/dev/null || \
%changelog
+* Thu Sep 3 2020 Daniel P. Berrangé <berrange(a)redhat.com> - 5.1.0-4
+- Add btrfs ioctls to linux-user (rhbz #1872918)
+
* Tue Aug 18 2020 Tom Stellard <tstellar(a)redhat.com> - 5.1.0-3
- Add BuildRequires: gcc
-
https://fedoraproject.org/wiki/Packaging:C_and_C%2B%2B#BuildRequires_and_...
commit 3927dda1185b1d7a82e9427936cf5bd828934ef9
Author: Cole Robinson <crobinso(a)redhat.com>
Date: Mon Aug 31 15:01:17 2020 -0400
spec: Fix test conditionals
And update the comment explaining why things are still disabled
Signed-off-by: Cole Robinson <crobinso(a)redhat.com>
diff --git a/qemu.spec b/qemu.spec
index fa48903..00d85fb 100644
--- a/qemu.spec
+++ b/qemu.spec
@@ -1396,11 +1396,13 @@ chmod +x %{buildroot}%{_libdir}/qemu/*.so
%global tests_skip 1
%endif
-# 2020-08-17: tests still failing locally but output is working
+# 2020-08-31: tests passing, but s390x fails due to
+# spurious warning breaking an iotest case
+#
https://lists.gnu.org/archive/html/qemu-devel/2020-08/msg03279.html
%global tests_nofail 1
pushd build-dynamic
-%if %{tests_skip}
+%if !%{tests_skip}
%if %{tests_nofail}
make check V=1 || :
%else
commit 3fa99d6aac869fad28b7a1ec8b4ea1ad417c98fa
Author: Tom Stellard <tstellar(a)redhat.com>
Date: Tue Aug 18 14:21:26 2020 +0000
Add BuildRequires: gcc
https://fedoraproject.org/wiki/Packaging:C_and_C%2B%2B#BuildRequires_and_...
diff --git a/qemu.spec b/qemu.spec
index 7dc7376..fa48903 100644
--- a/qemu.spec
+++ b/qemu.spec
@@ -170,7 +170,7 @@
Summary: QEMU is a FAST! processor emulator
Name: qemu
Version: 5.1.0
-Release: 2%{?rcrel}%{?dist}
+Release: 3%{?rcrel}%{?dist}
Epoch: 2
License: GPLv2 and BSD and MIT and CC-BY
URL:
http://www.qemu.org/
@@ -195,6 +195,7 @@ Source20: kvm-x86.modprobe.conf
Source21: 95-kvm-ppc64-memlock.conf
+BuildRequires: gcc
# documentation deps
BuildRequires: texinfo
# For /usr/bin/pod2man
@@ -1895,6 +1896,10 @@ getent passwd qemu >/dev/null || \
%changelog
+* Tue Aug 18 2020 Tom Stellard <tstellar(a)redhat.com> - 5.1.0-3
+- Add BuildRequires: gcc
+-
https://fedoraproject.org/wiki/Packaging:C_and_C%2B%2B#BuildRequires_and_...
+
* Mon Aug 17 2020 Cole Robinson <aintdiscole(a)gmail.com> - 5.1.0-2
- Disable dtrace generation to fix use of modules (bz 1869339)