From 79cb12dde9352331c15724b7d0892fd4ce5ea342 Mon Sep 17 00:00:00 2001 From: Luke Shumaker Date: Sun, 12 Feb 2023 13:14:43 -0700 Subject: btrfsitem, btrfsinspect/print_tree: Implement the QGroup types --- lib/btrfs/btrfsitem/item_qgrouplimit.go | 46 +++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 lib/btrfs/btrfsitem/item_qgrouplimit.go (limited to 'lib/btrfs/btrfsitem/item_qgrouplimit.go') diff --git a/lib/btrfs/btrfsitem/item_qgrouplimit.go b/lib/btrfs/btrfsitem/item_qgrouplimit.go new file mode 100644 index 0000000..9d1e05f --- /dev/null +++ b/lib/btrfs/btrfsitem/item_qgrouplimit.go @@ -0,0 +1,46 @@ +// Copyright (C) 2023 Luke Shumaker +// +// 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/fmtutil" +) + +type QGroupLimitFlags uint64 + +const ( + QGroupLimitFlagMaxRfer = 1 << iota + QGroupLimitFlagMaxExcl + QGroupLimitFlagRsvRfer + QGroupLimitFlagRsvExcl + QGroupLimitFlagRferCmpr + QGroupLimitFlagExclCmpr +) + +var qgroupLimitFlagNames = []string{ + "MAX_RFER", + "MAX_EXCL", + "RSV_RFER", + "RSV_EXCL", + "RFER_CMPR", + "EXCL_CMPR", +} + +func (f QGroupLimitFlags) Has(req QGroupLimitFlags) bool { return f&req == req } +func (f QGroupLimitFlags) String() string { + return fmtutil.BitfieldString(f, qgroupLimitFlagNames, fmtutil.HexNone) +} + +// key.objectid = 0 +// key.offset = ID of the qgroup +type QGroupLimit struct { // QGROUP_LIMIT=244 + Flags QGroupLimitFlags `bin:"off=0, siz=8"` + MaxReferenced uint64 `bin:"off=8, siz=8"` + MaxExclusive uint64 `bin:"off=16, siz=8"` + RsvReferenced uint64 `bin:"off=24, siz=8"` + RsvExclusive uint64 `bin:"off=32, siz=8"` + binstruct.End `bin:"off=40"` +} -- cgit v1.2.3-2-g168b