summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'sys-fs/btrfs-progs/files/btrfs-progs-6.1.1-ioctl-fix.patch')
-rw-r--r--sys-fs/btrfs-progs/files/btrfs-progs-6.1.1-ioctl-fix.patch87
1 files changed, 87 insertions, 0 deletions
diff --git a/sys-fs/btrfs-progs/files/btrfs-progs-6.1.1-ioctl-fix.patch b/sys-fs/btrfs-progs/files/btrfs-progs-6.1.1-ioctl-fix.patch
new file mode 100644
index 000000000000..d8149b6220ef
--- /dev/null
+++ b/sys-fs/btrfs-progs/files/btrfs-progs-6.1.1-ioctl-fix.patch
@@ -0,0 +1,87 @@
+https://bugs.gentoo.org/888579
+https://bugs.gentoo.org/889694
+https://github.com/kdave/btrfs-progs/issues/566
+https://github.com/kdave/btrfs-progs/commit/27bb4f6819df6ad7771e089e1fd3f1bd1163e437
+
+From 27bb4f6819df6ad7771e089e1fd3f1bd1163e437 Mon Sep 17 00:00:00 2001
+From: David Sterba <dsterba@suse.com>
+Date: Wed, 4 Jan 2023 16:34:51 +0100
+Subject: [PATCH] btrfs-progs: libbtrfs: revert to v6.0.2 ioctl.h
+
+The file ioctl.h has been copied to libbtrfs in 5fc1d0cd64ee
+("btrfs-progs: copy ioctl.h into libbtrfs") but that was after changes
+to the btrfs_qgroup_limit in 03451430de7c ("btrfs-progs: rename qgroup
+items to match the kernel naming scheme"). This caused build breakage
+but hasn't been fixed in v6.1.1.
+
+Revert the contents of libbtrfs/ioctl.h to be completely just v6.0.2
+though the other changes may not be needed, it's the version we know
+works.
+
+Issue: #566
+Signed-off-by: David Sterba <dsterba@suse.com>
+--- a/libbtrfs/ioctl.h
++++ b/libbtrfs/ioctl.h
+@@ -71,10 +71,10 @@ BUILD_ASSERT(sizeof(struct btrfs_ioctl_vol_args) == 4096);
+
+ struct btrfs_qgroup_limit {
+ __u64 flags;
+- __u64 max_rfer;
+- __u64 max_excl;
+- __u64 rsv_rfer;
+- __u64 rsv_excl;
++ __u64 max_referenced;
++ __u64 max_exclusive;
++ __u64 rsv_referenced;
++ __u64 rsv_exclusive;
+ };
+ BUILD_ASSERT(sizeof(struct btrfs_qgroup_limit) == 40);
+
+@@ -192,6 +192,7 @@ BUILD_ASSERT(sizeof(struct btrfs_ioctl_dev_replace_status_params) == 48);
+ #define BTRFS_IOCTL_DEV_REPLACE_CMD_START 0
+ #define BTRFS_IOCTL_DEV_REPLACE_CMD_STATUS 1
+ #define BTRFS_IOCTL_DEV_REPLACE_CMD_CANCEL 2
++#define BTRFS_IOCTL_DEV_REPLACE_RESULT_NO_RESULT -1
+ #define BTRFS_IOCTL_DEV_REPLACE_RESULT_NO_ERROR 0
+ #define BTRFS_IOCTL_DEV_REPLACE_RESULT_NOT_STARTED 1
+ #define BTRFS_IOCTL_DEV_REPLACE_RESULT_ALREADY_STARTED 2
+@@ -934,6 +935,38 @@ enum btrfs_err_code {
+ BTRFS_ERROR_DEV_RAID1C4_MIN_NOT_MET,
+ };
+
++/* An error code to error string mapping for the kernel
++* error codes
++*/
++static inline char *btrfs_err_str(enum btrfs_err_code err_code)
++{
++ switch (err_code) {
++ case BTRFS_ERROR_DEV_RAID1_MIN_NOT_MET:
++ return "unable to go below two devices on raid1";
++ case BTRFS_ERROR_DEV_RAID1C3_MIN_NOT_MET:
++ return "unable to go below three devices on raid1c3";
++ case BTRFS_ERROR_DEV_RAID1C4_MIN_NOT_MET:
++ return "unable to go below four devices on raid1c4";
++ case BTRFS_ERROR_DEV_RAID10_MIN_NOT_MET:
++ return "unable to go below four/two devices on raid10";
++ case BTRFS_ERROR_DEV_RAID5_MIN_NOT_MET:
++ return "unable to go below two devices on raid5";
++ case BTRFS_ERROR_DEV_RAID6_MIN_NOT_MET:
++ return "unable to go below three devices on raid6";
++ case BTRFS_ERROR_DEV_TGT_REPLACE:
++ return "unable to remove the dev_replace target dev";
++ case BTRFS_ERROR_DEV_MISSING_NOT_FOUND:
++ return "no missing devices found to remove";
++ case BTRFS_ERROR_DEV_ONLY_WRITABLE:
++ return "unable to remove the only writeable device";
++ case BTRFS_ERROR_DEV_EXCL_RUN_IN_PROGRESS:
++ return "add/delete/balance/replace/resize operation "
++ "in progress";
++ default:
++ return NULL;
++ }
++}
++
+ #define BTRFS_IOC_SNAP_CREATE _IOW(BTRFS_IOCTL_MAGIC, 1, \
+ struct btrfs_ioctl_vol_args)
+ #define BTRFS_IOC_DEFRAG _IOW(BTRFS_IOCTL_MAGIC, 2, \
+