mirror of
https://github.com/kdave/btrfs-progs
synced 2025-04-26 13:07:55 +00:00
btrfs-progs: zoned: add new ZONED feature flag
With the zoned feature enabled, a zoned block device-aware btrfs allocates block groups aligned to the device zones and always written in sequential zones at the zone write pointer position. It also supports "emulated" zoned mode on a non-zoned device. In the emulated mode, btrfs emulates conventional zones by slicing the device into fixed-size zones. We don't support conversion from the ext4 volume with the zoned feature because we can't be sure all the converted block groups are aligned to zone boundaries. Signed-off-by: Naohiro Aota <naohiro.aota@wdc.com> Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
parent
7953f4357b
commit
242c8328bc
@ -100,6 +100,14 @@ static const struct btrfs_feature mkfs_features[] = {
|
|||||||
NULL, 0,
|
NULL, 0,
|
||||||
NULL, 0,
|
NULL, 0,
|
||||||
"RAID1 with 3 or 4 copies" },
|
"RAID1 with 3 or 4 copies" },
|
||||||
|
#ifdef BTRFS_ZONED
|
||||||
|
{ "zoned", BTRFS_FEATURE_INCOMPAT_ZONED,
|
||||||
|
"zoned",
|
||||||
|
VERSION_TO_STRING2(5,12),
|
||||||
|
NULL, 0,
|
||||||
|
NULL, 0,
|
||||||
|
"support zoned devices" },
|
||||||
|
#endif
|
||||||
/* Keep this one last */
|
/* Keep this one last */
|
||||||
{ "list-all", BTRFS_FEATURE_LIST_ALL, NULL }
|
{ "list-all", BTRFS_FEATURE_LIST_ALL, NULL }
|
||||||
};
|
};
|
||||||
|
@ -25,7 +25,7 @@
|
|||||||
| BTRFS_FEATURE_INCOMPAT_SKINNY_METADATA)
|
| BTRFS_FEATURE_INCOMPAT_SKINNY_METADATA)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Avoid multi-device features (RAID56) and mixed block groups
|
* Avoid multi-device features (RAID56), mixed block groups, and zoned mode
|
||||||
*/
|
*/
|
||||||
#define BTRFS_CONVERT_ALLOWED_FEATURES \
|
#define BTRFS_CONVERT_ALLOWED_FEATURES \
|
||||||
(BTRFS_FEATURE_INCOMPAT_MIXED_BACKREF \
|
(BTRFS_FEATURE_INCOMPAT_MIXED_BACKREF \
|
||||||
@ -35,7 +35,8 @@
|
|||||||
| BTRFS_FEATURE_INCOMPAT_BIG_METADATA \
|
| BTRFS_FEATURE_INCOMPAT_BIG_METADATA \
|
||||||
| BTRFS_FEATURE_INCOMPAT_EXTENDED_IREF \
|
| BTRFS_FEATURE_INCOMPAT_EXTENDED_IREF \
|
||||||
| BTRFS_FEATURE_INCOMPAT_SKINNY_METADATA \
|
| BTRFS_FEATURE_INCOMPAT_SKINNY_METADATA \
|
||||||
| BTRFS_FEATURE_INCOMPAT_NO_HOLES)
|
| BTRFS_FEATURE_INCOMPAT_NO_HOLES \
|
||||||
|
| BTRFS_FEATURE_INCOMPAT_ZONED)
|
||||||
|
|
||||||
#define BTRFS_FEATURE_LIST_ALL (1ULL << 63)
|
#define BTRFS_FEATURE_LIST_ALL (1ULL << 63)
|
||||||
|
|
||||||
|
@ -495,6 +495,7 @@ struct btrfs_super_block {
|
|||||||
#define BTRFS_FEATURE_INCOMPAT_NO_HOLES (1ULL << 9)
|
#define BTRFS_FEATURE_INCOMPAT_NO_HOLES (1ULL << 9)
|
||||||
#define BTRFS_FEATURE_INCOMPAT_METADATA_UUID (1ULL << 10)
|
#define BTRFS_FEATURE_INCOMPAT_METADATA_UUID (1ULL << 10)
|
||||||
#define BTRFS_FEATURE_INCOMPAT_RAID1C34 (1ULL << 11)
|
#define BTRFS_FEATURE_INCOMPAT_RAID1C34 (1ULL << 11)
|
||||||
|
#define BTRFS_FEATURE_INCOMPAT_ZONED (1ULL << 12)
|
||||||
|
|
||||||
#define BTRFS_FEATURE_COMPAT_SUPP 0ULL
|
#define BTRFS_FEATURE_COMPAT_SUPP 0ULL
|
||||||
|
|
||||||
@ -519,7 +520,8 @@ struct btrfs_super_block {
|
|||||||
BTRFS_FEATURE_INCOMPAT_SKINNY_METADATA | \
|
BTRFS_FEATURE_INCOMPAT_SKINNY_METADATA | \
|
||||||
BTRFS_FEATURE_INCOMPAT_NO_HOLES | \
|
BTRFS_FEATURE_INCOMPAT_NO_HOLES | \
|
||||||
BTRFS_FEATURE_INCOMPAT_RAID1C34 | \
|
BTRFS_FEATURE_INCOMPAT_RAID1C34 | \
|
||||||
BTRFS_FEATURE_INCOMPAT_METADATA_UUID)
|
BTRFS_FEATURE_INCOMPAT_METADATA_UUID | \
|
||||||
|
BTRFS_FEATURE_INCOMPAT_ZONED)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* A leaf is full of items. offset and size tell us where to find
|
* A leaf is full of items. offset and size tell us where to find
|
||||||
|
@ -1614,6 +1614,7 @@ static struct readable_flag_entry incompat_flags_array[] = {
|
|||||||
DEF_INCOMPAT_FLAG_ENTRY(NO_HOLES),
|
DEF_INCOMPAT_FLAG_ENTRY(NO_HOLES),
|
||||||
DEF_INCOMPAT_FLAG_ENTRY(METADATA_UUID),
|
DEF_INCOMPAT_FLAG_ENTRY(METADATA_UUID),
|
||||||
DEF_INCOMPAT_FLAG_ENTRY(RAID1C34),
|
DEF_INCOMPAT_FLAG_ENTRY(RAID1C34),
|
||||||
|
DEF_INCOMPAT_FLAG_ENTRY(ZONED),
|
||||||
};
|
};
|
||||||
static const int incompat_flags_num = sizeof(incompat_flags_array) /
|
static const int incompat_flags_num = sizeof(incompat_flags_array) /
|
||||||
sizeof(struct readable_flag_entry);
|
sizeof(struct readable_flag_entry);
|
||||||
|
Loading…
Reference in New Issue
Block a user