diff options
Diffstat (limited to 'dev-python/btrfs/files/13-004-add-Block-Group-Tree.patch')
| -rw-r--r-- | dev-python/btrfs/files/13-004-add-Block-Group-Tree.patch | 110 |
1 files changed, 0 insertions, 110 deletions
diff --git a/dev-python/btrfs/files/13-004-add-Block-Group-Tree.patch b/dev-python/btrfs/files/13-004-add-Block-Group-Tree.patch deleted file mode 100644 index 8e21581237bc..000000000000 --- a/dev-python/btrfs/files/13-004-add-Block-Group-Tree.patch +++ /dev/null @@ -1,110 +0,0 @@ - -Patch from: -https://github.com/knorrie/python-btrfs/commit/7d8dca5bf1211843d8fd5c02b118afddaa53bee8 - -From 7d8dca5bf1211843d8fd5c02b118afddaa53bee8 Mon Sep 17 00:00:00 2001 -From: Hans van Kranenburg <hans@knorrie.org> -Date: Sun, 21 May 2023 17:46:06 +0200 -Subject: [PATCH] WIP ctree,ioctl,utils: Add Block Group Tree - -When the block_group_tree feature is enabled on a filesystem, we have to -look up Block Group metadata items in the new Block Group Tree, instead -of the Extent Tree, where they always were located before. - -WIP: We don't want to call the get_features ioctl *every* time we look -up 1 block group object, but we also cannot just cache the result of it, -since some feature flags can change while the fs is mounted. - -So, this needs some extra work in the features department first to make -this more nice. ---- a/btrfs/ctree.py -+++ b/btrfs/ctree.py -@@ -91,6 +91,7 @@ def _struct_format(s): - QUOTA_TREE_OBJECTID = 8 #: Quota tree - UUID_TREE_OBJECTID = 9 #: Subvolume UUID tree - FREE_SPACE_TREE_OBJECTID = 10 #: Free space tree -+BLOCK_GROUP_TREE_OBJECTID = 11 #: Block group tree - - DEV_STATS_OBJECTID = 0 #: Object ID of device statistics in the Device tree. - BALANCE_OBJECTID = ULL(-4) #: Object ID to store balance status. (-4) -@@ -346,6 +347,7 @@ def _qgroup_objectid(level, subvid): - QUOTA_TREE_OBJECTID: 'QUOTA_TREE', - UUID_TREE_OBJECTID: 'UUID_TREE', - FREE_SPACE_TREE_OBJECTID: 'FREE_SPACE_TREE', -+ BLOCK_GROUP_TREE_OBJECTID: 'BLOCK_GROUP_TREE', - BALANCE_OBJECTID: 'BALANCE', - ORPHAN_OBJECTID: 'ORPHAN', - TREE_LOG_OBJECTID: 'TREE_LOG', -@@ -765,6 +767,11 @@ def __init__(self, path): - self.fsid = _fs_info.fsid - self.nodesize = _fs_info.nodesize - self.sectorsize = _fs_info.sectorsize -+ # TEMP cached feature flag for block_group_tree TEMP -+ _features = self.features() -+ self._block_group_tree = self.features().compat_ro_flags & \ -+ btrfs.ioctl.FEATURE_COMPAT_RO_BLOCK_GROUP_TREE != 0 -+ # TEMP cached feature flag for block_group_tree TEMP - - def __enter__(self): - return self -@@ -870,7 +877,10 @@ def block_group(self, vaddr, length=None): - :raises: :class:`ItemNotFoundError` if no Block Group Item can be found - at the address. - """ -- tree = EXTENT_TREE_OBJECTID -+ if not self._block_group_tree: -+ tree = EXTENT_TREE_OBJECTID -+ else: -+ tree = BLOCK_GROUP_TREE_OBJECTID - min_offset = length if length is not None else 0 - max_offset = length if length is not None else ULLONG_MAX - min_key = Key(vaddr, BLOCK_GROUP_ITEM_KEY, min_offset) -@@ -1240,11 +1250,14 @@ class BlockGroupItem(ItemData): - The `Block Group` has a 1 to 1 relationship with a `Chunk` and tracks some - usage information about a range of virtual address space. - -- * Tree: `EXTENT_TREE_OBJECTID` (2) -+ * Tree: `EXTENT_TREE_OBJECTID` (2) or `BLOCK_GROUP_TREE_OBJECTID` (11) - * Key objectid: Virtual address. - * Key type: `BLOCK_GROUP_ITEM_KEY` (192) - * Key offset: Block Group length. - -+ If the block_group_tree feature is enabled on the filesystem, these items -+ can be found inside the Block Group Tree instead of the Extent Tree. -+ - :ivar int vaddr: Virtual address where the Bock Group starts (taken from - the objectid field of the item key). - :ivar int length: Block Group length in bytes (taken from the offset field ---- a/btrfs/ioctl.py -+++ b/btrfs/ioctl.py -@@ -1325,10 +1325,12 @@ def _compat_flags_str(flags): - - FEATURE_COMPAT_RO_FREE_SPACE_TREE = 1 << 0 - FEATURE_COMPAT_RO_FREE_SPACE_TREE_VALID = 1 << 1 -+FEATURE_COMPAT_RO_BLOCK_GROUP_TREE = 1 << 3 - - _feature_compat_ro_str_map = { - FEATURE_COMPAT_RO_FREE_SPACE_TREE: 'free_space_tree', - FEATURE_COMPAT_RO_FREE_SPACE_TREE_VALID: 'free_space_tree_valid', -+ FEATURE_COMPAT_RO_BLOCK_GROUP_TREE : 'block_group_tree', - } - - -@@ -1383,6 +1385,7 @@ class FeatureFlags(object): - - - FEATURE_COMPAT_RO_FREE_SPACE_TREE - - FEATURE_COMPAT_RO_FREE_SPACE_TREE_VALID -+ - FEATURE_COMPAT_RO_BLOCK_GROUP_TREE - - Known incompat_flags (available as attribute of this module) are: - ---- a/btrfs/utils.py -+++ b/btrfs/utils.py -@@ -436,6 +436,7 @@ def embedded_text_for_str(text): - 'quota': btrfs.ctree.QUOTA_TREE_OBJECTID, - 'uuid': btrfs.ctree.UUID_TREE_OBJECTID, - 'free_space': btrfs.ctree.FREE_SPACE_TREE_OBJECTID, -+ 'block_group': btrfs.ctree.BLOCK_GROUP_TREE_OBJECTID, - 'tree_log': btrfs.ctree.TREE_LOG_OBJECTID, - 'tree_log_fixup': btrfs.ctree.TREE_LOG_FIXUP_OBJECTID, - 'tree_reloc': btrfs.ctree.TREE_RELOC_OBJECTID, |
