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=d9af2bbdff8613c3... https://src.fedoraproject.org/cgit/rpms/qemu.git/commit/?id=13e7c30edf2da5fa... https://src.fedoraproject.org/cgit/rpms/qemu.git/commit/?id=3c0f9e810a0b22b4....
Change: +%ifarch %{arm} aarch64 -%ifarch %{kernel_arches} -%ifarch s390
Thanks.
Full change: ============
commit d9af2bbdff8613c35c44d4a0ea29abcbf0065b68 Author: Daniel P. Berrangé berrange@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@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@redhat.com - 5.1.0-4 - Add btrfs ioctls to linux-user (rhbz #1872918)
commit f2839fea71ecc8dbe7e38c0ec09e3e9ef6edb831 Author: Daniel P. Berrangé berrange@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@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@redhat.com - 5.1.0-4 - Add btrfs ioctls to linux-user (rhbz #1872918)
commit af50bf7b783cee59cdf348e9263d5bb4a848148b Author: Daniel P. Berrangé berrange@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@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@redhat.com - 5.1.0-4 - Add btrfs ioctls to linux-user (rhbz #1872918)
commit 13e7c30edf2da5fac2a78ec93d00039cf49b92b4 Author: Daniel P. Berrangé berrange@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@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@redhat.com - 5.1.0-4 - Add btrfs ioctls to linux-user (rhbz #1872918)
commit 4e321e2f5cf77ed4387d86d41762848074cfaf8f Author: Daniel P. Berrangé berrange@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@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@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@redhat.com - 5.1.0-4 - Add btrfs ioctls to linux-user (rhbz #1872918)
commit 458e07e8d7d455559d8432b04e6c270e4053469b Author: Daniel P. Berrangé berrange@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@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@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@redhat.com - 5.1.0-4 - Add btrfs ioctls to linux-user (rhbz #1872918)
commit 3c0f9e810a0b22b439681cedcba6073a20f13d88 Author: Daniel P. Berrangé berrange@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@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@redhat.com - 5.1.0-5 +- Drop conditions for ppc, ppc64, mips64 and s390 arches + * Thu Sep 3 2020 Daniel P. Berrangé berrange@redhat.com - 5.1.0-4 - Add btrfs ioctls to linux-user (rhbz #1872918)
commit dc03f389d339a92a50a6206b62af58ad50e6bd80 Author: Daniel P. Berrangé berrange@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@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@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@vivier.eu +Message-Id: 20200902125752.1033524-1-laurent@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@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@syrmia.com +Tested-by: Daniel P. Berrangé berrange@redhat.com +Message-Id: 20200823195014.116226-2-Filip.Bozuta@syrmia.com +Signed-off-by: Laurent Vivier laurent@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@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@syrmia.com +Tested-by: Daniel P. Berrangé berrange@redhat.com +Message-Id: 20200823195014.116226-3-Filip.Bozuta@syrmia.com +Signed-off-by: Laurent Vivier laurent@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@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@syrmia.com +Tested-by: Daniel P. Berrangé berrange@redhat.com +Message-Id: 20200823195014.116226-4-Filip.Bozuta@syrmia.com +Signed-off-by: Laurent Vivier laurent@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@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@syrmia.com +Tested-by: Daniel P. Berrangé berrange@redhat.com +Message-Id: 20200823195014.116226-5-Filip.Bozuta@syrmia.com +Signed-off-by: Laurent Vivier laurent@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@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@syrmia.com +Tested-by: Daniel P. Berrangé berrange@redhat.com +Message-Id: 20200823195014.116226-6-Filip.Bozuta@syrmia.com +Signed-off-by: Laurent Vivier laurent@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@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@syrmia.com +Tested-by: Daniel P. Berrangé berrange@redhat.com +Message-Id: 20200823195014.116226-7-Filip.Bozuta@syrmia.com +Signed-off-by: Laurent Vivier laurent@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@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#L6... + +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@syrmia.com +Tested-by: Daniel P. Berrangé berrange@redhat.com +Message-Id: 20200823195014.116226-8-Filip.Bozuta@syrmia.com +Signed-off-by: Laurent Vivier laurent@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@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#L1... + +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@syrmia.com +Tested-by: Daniel P. Berrangé berrange@redhat.com +Message-Id: 20200823195014.116226-9-Filip.Bozuta@syrmia.com +Signed-off-by: Laurent Vivier laurent@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/%%7Bname%7D-%%7Bversion%7D%%7B?rcstr%7...
+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@redhat.com - 5.1.0-4 +- Add btrfs ioctls to linux-user (rhbz #1872918) + * Tue Aug 18 2020 Tom Stellard tstellar@redhat.com - 5.1.0-3 - Add BuildRequires: gcc - https://fedoraproject.org/wiki/Packaging:C_and_C%2B%2B#BuildRequires_and_Req...
commit 3927dda1185b1d7a82e9427936cf5bd828934ef9 Author: Cole Robinson crobinso@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@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@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_Req...
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@redhat.com - 5.1.0-3 +- Add BuildRequires: gcc +- https://fedoraproject.org/wiki/Packaging:C_and_C%2B%2B#BuildRequires_and_Req... + * Mon Aug 17 2020 Cole Robinson aintdiscole@gmail.com - 5.1.0-2 - Disable dtrace generation to fix use of modules (bz 1869339)
arch-excludes@lists.fedoraproject.org