94 lines
3.3 KiB
Diff
94 lines
3.3 KiB
Diff
From 2f8a6ee294e070427a54cacce571d06062390e02 Mon Sep 17 00:00:00 2001
|
|
From: Qu Wenruo <wqu@suse.com>
|
|
Date: Sat, 8 Jun 2024 13:29:34 +0930
|
|
Subject: [PATCH] btrfs-progs: fix the conflicting super block flags
|
|
|
|
[BUG]
|
|
There is a bug report that a canceled checksum conversion (still
|
|
experimental feature) resulted in unexpected super flags:
|
|
|
|
csum_type 0 (crc32c)
|
|
csum_size 4
|
|
csum 0x14973811 [match]
|
|
bytenr 65536
|
|
flags 0x1000000001
|
|
( WRITTEN |
|
|
CHANGING_FSID_V2 )
|
|
magic _BHRfS_M [match]
|
|
|
|
While for a filesystem under checksum conversion it should have either
|
|
CHANGING_DATA_CSUM or CHANGING_META_CSUM.
|
|
|
|
[CAUSE]
|
|
It turns out that, due to btrfs-progs keeps its own extra flags inside
|
|
its own ctree.h headers, not the shared uapi headers, we have
|
|
conflicting super flags:
|
|
|
|
kernel-shared/uapi/btrfs_tree.h:#define BTRFS_SUPER_FLAG_METADUMP_V2 (1ULL << 34)
|
|
kernel-shared/uapi/btrfs_tree.h:#define BTRFS_SUPER_FLAG_CHANGING_FSID (1ULL << 35)
|
|
kernel-shared/uapi/btrfs_tree.h:#define BTRFS_SUPER_FLAG_CHANGING_FSID_V2 (1ULL << 36)
|
|
kernel-shared/ctree.h:#define BTRFS_SUPER_FLAG_CHANGING_DATA_CSUM (1ULL << 36)
|
|
kernel-shared/ctree.h:#define BTRFS_SUPER_FLAG_CHANGING_META_CSUM (1ULL << 37)
|
|
|
|
Note that CHANGING_FSID_V2 is conflicting with CHANGING_DATA_CSUM.
|
|
|
|
[FIX]
|
|
Cross port the proper updated uapi headers into btrfs-progs, and remove
|
|
the definition from ctree.h.
|
|
|
|
This would change the value for CHANGING_DATA_CSUM and
|
|
CHANGING_META_CSUM, but considering they are experimental features, and
|
|
kernel would reject them anyway, the damage is not that huge and we can
|
|
accept such change before exposing it to end users.
|
|
|
|
Pull-request: #810
|
|
Signed-off-by: Qu Wenruo <wqu@suse.com>
|
|
Signed-off-by: David Sterba <dsterba@suse.com>
|
|
---
|
|
kernel-shared/ctree.h | 10 ----------
|
|
kernel-shared/uapi/btrfs_tree.h | 7 +++++++
|
|
2 files changed, 7 insertions(+), 10 deletions(-)
|
|
|
|
diff --git a/kernel-shared/ctree.h b/kernel-shared/ctree.h
|
|
index bcf11d8..080c8c1 100644
|
|
--- a/kernel-shared/ctree.h
|
|
+++ b/kernel-shared/ctree.h
|
|
@@ -59,16 +59,6 @@ static inline unsigned long btrfs_chunk_item_size(int num_stripes)
|
|
sizeof(struct btrfs_stripe) * (num_stripes - 1);
|
|
}
|
|
|
|
-#define BTRFS_SUPER_FLAG_CHANGING_DATA_CSUM (1ULL << 36)
|
|
-#define BTRFS_SUPER_FLAG_CHANGING_META_CSUM (1ULL << 37)
|
|
-
|
|
-/*
|
|
- * The fs is undergoing block group tree feature change.
|
|
- * If no BLOCK_GROUP_TREE compat ro flag, it's changing from regular
|
|
- * bg item in extent tree to new bg tree.
|
|
- */
|
|
-#define BTRFS_SUPER_FLAG_CHANGING_BG_TREE (1ULL << 38)
|
|
-
|
|
static inline u32 __BTRFS_LEAF_DATA_SIZE(u32 nodesize)
|
|
{
|
|
return nodesize - sizeof(struct btrfs_header);
|
|
diff --git a/kernel-shared/uapi/btrfs_tree.h b/kernel-shared/uapi/btrfs_tree.h
|
|
index e2ac228..2713462 100644
|
|
--- a/kernel-shared/uapi/btrfs_tree.h
|
|
+++ b/kernel-shared/uapi/btrfs_tree.h
|
|
@@ -758,6 +758,13 @@ struct btrfs_free_space_header {
|
|
#define BTRFS_SUPER_FLAG_CHANGING_FSID (1ULL << 35)
|
|
#define BTRFS_SUPER_FLAG_CHANGING_FSID_V2 (1ULL << 36)
|
|
|
|
+/*
|
|
+ * Temporaray flags utilized by btrfs-progs to do offline conversion. They are
|
|
+ * rejected by kernel. Keep them all here to avoid conflicts.
|
|
+ */
|
|
+#define BTRFS_SUPER_FLAG_CHANGING_BG_TREE (1ULL << 38)
|
|
+#define BTRFS_SUPER_FLAG_CHANGING_DATA_CSUM (1ULL << 39)
|
|
+#define BTRFS_SUPER_FLAG_CHANGING_META_CSUM (1ULL << 40)
|
|
|
|
/*
|
|
* items in the extent btree are used to record the objectid of the
|
|
--
|
|
2.43.0
|
|
|