summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Shumaker <lukeshu@lukeshu.com>2022-06-05 10:36:03 -0600
committerLuke Shumaker <lukeshu@lukeshu.com>2022-06-05 10:36:03 -0600
commitfd100fd8425b82c09eba2e291d1dcbfcb1242774 (patch)
tree938e608438e512e939c505eaa6a86b0dc99c5d3d
parent30a2a24901e024dba8b40ca4102af9b4e64718c8 (diff)
more, fixup array init
-rw-r--r--cmd/btrfs-dump-tree/main.go33
-rw-r--r--pkg/btrfs/Makefile2
-rw-r--r--pkg/btrfs/btrfsitem/item_chunk.go1
-rw-r--r--pkg/btrfs/btrfsitem/item_dir.go1
-rw-r--r--pkg/btrfs/btrfsitem/item_inoderef.go1
-rw-r--r--pkg/btrfs/btrfsitem/item_uuid.go10
-rw-r--r--pkg/btrfs/internal/itemtype.go4
7 files changed, 37 insertions, 15 deletions
diff --git a/cmd/btrfs-dump-tree/main.go b/cmd/btrfs-dump-tree/main.go
index 52ee441..d96170b 100644
--- a/cmd/btrfs-dump-tree/main.go
+++ b/cmd/btrfs-dump-tree/main.go
@@ -263,20 +263,41 @@ func printTree(fs *btrfs.FS, root btrfs.LogicalAddr) error {
body.SeekSpeed, body.Bandwidth,
body.DevUUID,
body.FSUUID)
- //case btrfsitem.DEV_EXTENT_KEY:
- // // TODO
+ case btrfsitem.DevExtent:
+ fmt.Printf(""+
+ "\t\tdev extent chunk_tree %d\n"+
+ "\t\tchunk_objectid %d chunk_offset %d length %d\n"+
+ "\t\tchunk_tree_uuid %s\n",
+ body.ChunkTree, body.ChunkObjectID, body.ChunkOffset, body.Length,
+ body.ChunkTreeUUID)
//case btrfsitem.QGROUP_STATUS_KEY:
// // TODO
//case btrfsitem.QGROUP_RELATION_KEY, btrfsitem.QGROUP_INFO_KEY:
// // TODO
//case btrfsitem.QGROUP_LIMIT_KEY:
// // TODO
- //case btrfsitem.UUIDMap:
- // // TODO
+ case btrfsitem.UUIDMap:
+ for _, subvolID := range body {
+ fmt.Printf("\t\tsubvol_id %d\n",
+ subvolID)
+ }
//case btrfsitem.STRING_ITEM_KEY:
// // TODO
- //case btrfsitem.PERSISTENT_ITEM_KEY:
- // // TODO
+ case btrfsitem.DevStats:
+ fmt.Printf("\t\tpersistent item objectid %s offset %d\n",
+ item.Head.Key.ObjectID.Format(item.Head.Key.ItemType), item.Head.Key.Offset)
+ switch item.Head.Key.ObjectID {
+ case btrfs.DEV_STATS_OBJECTID:
+ fmt.Printf("\t\tdevice stats\n")
+ fmt.Printf("\t\twrite_errs %d read_errs %d flush_errs %d corruption_errs %d generation %d\n",
+ body.Values[btrfsitem.DEV_STAT_WRITE_ERRS],
+ body.Values[btrfsitem.DEV_STAT_READ_ERRS],
+ body.Values[btrfsitem.DEV_STAT_FLUSH_ERRS],
+ body.Values[btrfsitem.DEV_STAT_CORRUPTION_ERRS],
+ body.Values[btrfsitem.DEV_STAT_GENERATION_ERRS])
+ default:
+ fmt.Printf("\t\tunknown persistent item objectid %d\n", item.Head.Key.ObjectID)
+ }
//case btrfsitem.TEMPORARY_ITEM_KEY:
// // TODO
case btrfsitem.Empty:
diff --git a/pkg/btrfs/Makefile b/pkg/btrfs/Makefile
index 9777cbe..c79b271 100644
--- a/pkg/btrfs/Makefile
+++ b/pkg/btrfs/Makefile
@@ -38,7 +38,7 @@ internal/itemtype.go: btrfsitem/items.txt $(MAKEFILE_LIST)
echo ')'; \
echo 'func (t ItemType) String() string {'; \
echo ' names := map[ItemType]string{'; \
- sed -E 's@(.*)=(.*) (.*)@\1_KEY: "\1",@' $<; \
+ sed -E 's@(.*)=(.*) (.*)@\1_KEY: "\1",@' $< | sed 's/"UUID_/&KEY_/'; \
echo ' }'; \
echo ' if name, ok := names[t]; ok {'; \
echo ' return name'; \
diff --git a/pkg/btrfs/btrfsitem/item_chunk.go b/pkg/btrfs/btrfsitem/item_chunk.go
index 826ecc6..eae8339 100644
--- a/pkg/btrfs/btrfsitem/item_chunk.go
+++ b/pkg/btrfs/btrfsitem/item_chunk.go
@@ -34,6 +34,7 @@ func (chunk *Chunk) UnmarshalBinary(dat []byte) (int, error) {
if err != nil {
return n, err
}
+ chunk.Stripes = nil
for i := 0; i < int(chunk.NumStripes); i++ {
var stripe ChunkStripe
_n, err := binstruct.Unmarshal(dat[n:], &stripe)
diff --git a/pkg/btrfs/btrfsitem/item_dir.go b/pkg/btrfs/btrfsitem/item_dir.go
index afef12d..6814041 100644
--- a/pkg/btrfs/btrfsitem/item_dir.go
+++ b/pkg/btrfs/btrfsitem/item_dir.go
@@ -10,6 +10,7 @@ import (
type DirList []Dir // DIR_ITEM=84, DIR_INDEX=96, XATTR_ITEM=24
func (o *DirList) UnmarshalBinary(dat []byte) (int, error) {
+ *o = nil
n := 0
for n < len(dat) {
var ref Dir
diff --git a/pkg/btrfs/btrfsitem/item_inoderef.go b/pkg/btrfs/btrfsitem/item_inoderef.go
index e59c4b3..39b7738 100644
--- a/pkg/btrfs/btrfsitem/item_inoderef.go
+++ b/pkg/btrfs/btrfsitem/item_inoderef.go
@@ -7,6 +7,7 @@ import (
type InodeRefList []InodeRef // INODE_REF=12
func (o *InodeRefList) UnmarshalBinary(dat []byte) (int, error) {
+ *o = nil
n := 0
for n < len(dat) {
var ref InodeRef
diff --git a/pkg/btrfs/btrfsitem/item_uuid.go b/pkg/btrfs/btrfsitem/item_uuid.go
index 894ccff..d66e102 100644
--- a/pkg/btrfs/btrfsitem/item_uuid.go
+++ b/pkg/btrfs/btrfsitem/item_uuid.go
@@ -7,12 +7,10 @@ import (
// The Key for this item is a UUID, and the item is a list of
// subvolume IDs (ObjectIDs) that that UUID maps to.
-type UUIDMap struct { // UUID_SUBVOL=251 UUID_RECEIVED_SUBVOL=252
- SubvolIDs []internal.ObjID
-}
+type UUIDMap []internal.ObjID // UUID_SUBVOL=251 UUID_RECEIVED_SUBVOL=252
func (o *UUIDMap) UnmarshalBinary(dat []byte) (int, error) {
- o.SubvolIDs = nil
+ *o = nil
var n int
for len(dat) > n {
var subvolID internal.ObjID
@@ -21,14 +19,14 @@ func (o *UUIDMap) UnmarshalBinary(dat []byte) (int, error) {
if err != nil {
return n, err
}
- o.SubvolIDs = append(o.SubvolIDs, subvolID)
+ *o = append(*o, subvolID)
}
return n, nil
}
func (o UUIDMap) MarshalBinary() ([]byte, error) {
var ret []byte
- for _, subvolID := range o.SubvolIDs {
+ for _, subvolID := range o {
bs, err := binstruct.Marshal(subvolID)
ret = append(ret, bs...)
if err != nil {
diff --git a/pkg/btrfs/internal/itemtype.go b/pkg/btrfs/internal/itemtype.go
index 7f16889..c046ea3 100644
--- a/pkg/btrfs/internal/itemtype.go
+++ b/pkg/btrfs/internal/itemtype.go
@@ -53,8 +53,8 @@ func (t ItemType) String() string {
PERSISTENT_ITEM_KEY: "PERSISTENT_ITEM",
ROOT_ITEM_KEY: "ROOT_ITEM",
SHARED_DATA_REF_KEY: "SHARED_DATA_REF",
- UUID_SUBVOL_KEY: "UUID_SUBVOL",
- UUID_RECEIVED_SUBVOL_KEY: "UUID_RECEIVED_SUBVOL",
+ UUID_SUBVOL_KEY: "UUID_KEY_SUBVOL",
+ UUID_RECEIVED_SUBVOL_KEY: "UUID_KEY_RECEIVED_SUBVOL",
}
if name, ok := names[t]; ok {
return name