summaryrefslogtreecommitdiff
path: root/pkg
diff options
context:
space:
mode:
authorLuke Shumaker <lukeshu@lukeshu.com>2022-06-04 22:53:09 -0600
committerLuke Shumaker <lukeshu@lukeshu.com>2022-06-04 22:53:09 -0600
commit67aab484a523dfcbf32f4fc68ace2474ade96a5f (patch)
tree64093a2d351b1b3c4a4b1612e39ee9de8a2bc7c4 /pkg
parent02fccc8c29d6f638efee0302868242d805bd7711 (diff)
more
Diffstat (limited to 'pkg')
-rw-r--r--pkg/btrfs/btrfsitem/item_blockgroup.go38
-rw-r--r--pkg/btrfs/btrfsitem/item_chunk.go18
2 files changed, 47 insertions, 9 deletions
diff --git a/pkg/btrfs/btrfsitem/item_blockgroup.go b/pkg/btrfs/btrfsitem/item_blockgroup.go
new file mode 100644
index 0000000..162adb1
--- /dev/null
+++ b/pkg/btrfs/btrfsitem/item_blockgroup.go
@@ -0,0 +1,38 @@
+package btrfsitem
+
+import (
+ "lukeshu.com/btrfs-tools/pkg/util"
+)
+
+type BlockGroupFlags uint64
+
+const (
+ BLOCK_GROUP_DATA = BlockGroupFlags(1 << iota)
+ BLOCK_GROUP_SYSTEM
+ BLOCK_GROUP_METADATA
+ BLOCK_GROUP_RAID0
+ BLOCK_GROUP_RAID1
+ BLOCK_GROUP_DUP
+ BLOCK_GROUP_RAID10
+ BLOCK_GROUP_RAID5
+ BLOCK_GROUP_RAID6
+ BLOCK_GROUP_RAID1C3
+ BLOCK_GROUP_RAID1C4
+)
+
+var blockGroupFlagNames = []string{
+ "DATA",
+ "SYSTEM",
+ "METADATA",
+ "RAID0",
+ "RAID1",
+ "DUP",
+ "RAID10",
+ "RAID5",
+ "RAID6",
+ "RAID1C3",
+ "RAID1C4",
+}
+
+func (f BlockGroupFlags) Has(req BlockGroupFlags) bool { return f&req == req }
+func (f BlockGroupFlags) String() string { return util.BitfieldString(f, blockGroupFlagNames) }
diff --git a/pkg/btrfs/btrfsitem/item_chunk.go b/pkg/btrfs/btrfsitem/item_chunk.go
index 7bb65b1..826ecc6 100644
--- a/pkg/btrfs/btrfsitem/item_chunk.go
+++ b/pkg/btrfs/btrfsitem/item_chunk.go
@@ -9,15 +9,15 @@ import (
type Chunk struct { // CHUNK_ITEM=228
// Maps logical address to physical.
- Size uint64 `bin:"off=0x0, siz=0x8"` // size of chunk (bytes)
- Owner internal.ObjID `bin:"off=0x8, siz=0x8"` // root referencing this chunk (2)
- StripeLen uint64 `bin:"off=0x10, siz=0x8"` // stripe length
- Type uint64 `bin:"off=0x18, siz=0x8"` // type (same as flags for block group?)
- IOOptimalAlign uint32 `bin:"off=0x20, siz=0x4"` // optimal io alignment
- IOOptimalWidth uint32 `bin:"off=0x24, siz=0x4"` // optimal io width
- IoMinSize uint32 `bin:"off=0x28, siz=0x4"` // minimal io size (sector size)
- NumStripes uint16 `bin:"off=0x2c, siz=0x2"` // number of stripes
- SubStripes uint16 `bin:"off=0x2e, siz=0x2"` // sub stripes
+ Size uint64 `bin:"off=0x0, siz=0x8"` // size of chunk (bytes)
+ Owner internal.ObjID `bin:"off=0x8, siz=0x8"` // root referencing this chunk (2)
+ StripeLen uint64 `bin:"off=0x10, siz=0x8"` // stripe length
+ Type BlockGroupFlags `bin:"off=0x18, siz=0x8"` // type (same as flags for block group?)
+ IOOptimalAlign uint32 `bin:"off=0x20, siz=0x4"` // optimal io alignment
+ IOOptimalWidth uint32 `bin:"off=0x24, siz=0x4"` // optimal io width
+ IOMinSize uint32 `bin:"off=0x28, siz=0x4"` // minimal io size (sector size)
+ NumStripes uint16 `bin:"off=0x2c, siz=0x2"` // number of stripes
+ SubStripes uint16 `bin:"off=0x2e, siz=0x2"` // sub stripes
binstruct.End `bin:"off=0x30"`
Stripes []ChunkStripe `bin:"-"`
}