summaryrefslogtreecommitdiff
path: root/lib/btrfs/btrfsitem/item_qgroupstatus.go
diff options
context:
space:
mode:
Diffstat (limited to 'lib/btrfs/btrfsitem/item_qgroupstatus.go')
-rw-r--r--lib/btrfs/btrfsitem/item_qgroupstatus.go43
1 files changed, 43 insertions, 0 deletions
diff --git a/lib/btrfs/btrfsitem/item_qgroupstatus.go b/lib/btrfs/btrfsitem/item_qgroupstatus.go
new file mode 100644
index 0000000..e7bd62c
--- /dev/null
+++ b/lib/btrfs/btrfsitem/item_qgroupstatus.go
@@ -0,0 +1,43 @@
+// Copyright (C) 2023 Luke Shumaker <lukeshu@lukeshu.com>
+//
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+package btrfsitem
+
+import (
+ "git.lukeshu.com/btrfs-progs-ng/lib/binstruct"
+ "git.lukeshu.com/btrfs-progs-ng/lib/btrfs/btrfsprim"
+ "git.lukeshu.com/btrfs-progs-ng/lib/btrfs/btrfsvol"
+ "git.lukeshu.com/btrfs-progs-ng/lib/fmtutil"
+)
+
+type QGroupStatusFlags uint64
+
+const (
+ QGroupStatusFlagOn QGroupStatusFlags = 1 << iota
+ QGroupStatusFlagRescan
+ QGroupStatusFlagInconsistent
+)
+
+var qgroupStatusFlagNames = []string{
+ "ON",
+ "RESCAN",
+ "INCONSISTENT",
+}
+
+func (f QGroupStatusFlags) Has(req QGroupStatusFlags) bool { return f&req == req }
+func (f QGroupStatusFlags) String() string {
+ return fmtutil.BitfieldString(f, qgroupStatusFlagNames, fmtutil.HexNone)
+}
+
+const QGroupStatusVersion uint64 = 1
+
+// key.objectid = 0
+// key.offset = 0
+type QGroupStatus struct { // QGROUP_STATUS=240
+ Version uint64 `bin:"off=0, siz=8"`
+ Generation btrfsprim.Generation `bin:"off=8, siz=8"`
+ Flags QGroupStatusFlags `bin:"off=16, siz=8"`
+ RescanProgress btrfsvol.LogicalAddr `bin:"off=24, siz=8"`
+ binstruct.End `bin:"off=32"`
+}