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 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 --- 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, \