summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Shumaker <lukeshu@lukeshu.com>2023-01-01 19:27:49 -0700
committerLuke Shumaker <lukeshu@lukeshu.com>2023-01-01 22:42:08 -0700
commitc307e7048da3c02e1e540eab227def7fec7340cc (patch)
treea134fe5f8822e0d9faa7684b6887bc2c139ecd17
parent046162cc1ff55985e3dd45eb191729ead1f9cc8d (diff)
lint: Turn on gocritic
-rw-r--r--.golangci.yml4
-rw-r--r--cmd/btrfs-rec/inspect_lstrees.go8
-rw-r--r--lib/btrfs/btrfstree/ops.go14
-rw-r--r--lib/btrfs/btrfstree/types_node.go9
-rw-r--r--lib/btrfs/btrfstree/types_node_test.go5
-rw-r--r--lib/btrfs/btrfsvol/lvm.go8
-rw-r--r--lib/btrfsprogs/btrfsinspect/mount.go4
-rw-r--r--lib/btrfsprogs/btrfsinspect/print_tree.go48
-rw-r--r--lib/btrfsprogs/btrfsinspect/rebuildmappings/fuzzymatchsums.go11
-rw-r--r--lib/btrfsprogs/btrfsinspect/rebuildnodes/rebuild.go4
-rw-r--r--lib/btrfsprogs/btrfsinspect/rebuildnodes/rebuild_graph.go14
-rw-r--r--lib/containers/intervaltree.go4
-rw-r--r--lib/containers/rbtree.go7
-rw-r--r--lib/containers/rbtree_test.go10
14 files changed, 72 insertions, 78 deletions
diff --git a/.golangci.yml b/.golangci.yml
index ad53616..953b512 100644
--- a/.golangci.yml
+++ b/.golangci.yml
@@ -31,7 +31,6 @@ linters:
- gochecknoglobals
- gochecknoinits
- gocognit
- - gocritic
- gocyclo
- godot
- godox
@@ -67,6 +66,9 @@ linters-settings:
- standard
- default
- prefix(git.lukeshu.com/btrfs-progs-ng)
+ gocritic:
+ disabled-checks:
+ - appendAssign
gofmt:
simplify: true
nolintlint:
diff --git a/cmd/btrfs-rec/inspect_lstrees.go b/cmd/btrfs-rec/inspect_lstrees.go
index e92c544..a6d86eb 100644
--- a/cmd/btrfs-rec/inspect_lstrees.go
+++ b/cmd/btrfs-rec/inspect_lstrees.go
@@ -1,4 +1,4 @@
-// Copyright (C) 2022 Luke Shumaker <lukeshu@lukeshu.com>
+// Copyright (C) 2022-2023 Luke Shumaker <lukeshu@lukeshu.com>
//
// SPDX-License-Identifier: GPL-2.0-or-later
@@ -79,12 +79,12 @@ func init() {
},
Item: func(_ btrfstree.TreePath, item btrfstree.Item) error {
typ := item.Key.ItemType
- treeItemCnt[typ] = treeItemCnt[typ] + 1
+ treeItemCnt[typ]++
return nil
},
BadItem: func(_ btrfstree.TreePath, item btrfstree.Item) error {
typ := item.Key.ItemType
- treeItemCnt[typ] = treeItemCnt[typ] + 1
+ treeItemCnt[typ]++
return nil
},
},
@@ -113,7 +113,7 @@ func init() {
}
for _, item := range node.Data.BodyLeaf {
typ := item.Key.ItemType
- treeItemCnt[typ] = treeItemCnt[typ] + 1
+ treeItemCnt[typ]++
}
}
}
diff --git a/lib/btrfs/btrfstree/ops.go b/lib/btrfs/btrfstree/ops.go
index f2eb6f0..ddab630 100644
--- a/lib/btrfs/btrfstree/ops.go
+++ b/lib/btrfs/btrfstree/ops.go
@@ -1,4 +1,4 @@
-// Copyright (C) 2022 Luke Shumaker <lukeshu@lukeshu.com>
+// Copyright (C) 2022-2023 Luke Shumaker <lukeshu@lukeshu.com>
//
// SPDX-License-Identifier: GPL-2.0-or-later
@@ -156,14 +156,12 @@ func (fs TreeOperatorImpl) treeWalk(ctx context.Context, path TreePath, errHandl
}
if err != nil {
errHandle(&TreeError{Path: path, Err: err})
- } else {
- if cbs.Node != nil {
- if err := cbs.Node(path, node); err != nil {
- if errors.Is(err, iofs.SkipDir) {
- return
- }
- errHandle(&TreeError{Path: path, Err: err})
+ } else if cbs.Node != nil {
+ if err := cbs.Node(path, node); err != nil {
+ if errors.Is(err, iofs.SkipDir) {
+ return
}
+ errHandle(&TreeError{Path: path, Err: err})
}
}
if ctx.Err() != nil {
diff --git a/lib/btrfs/btrfstree/types_node.go b/lib/btrfs/btrfstree/types_node.go
index 299c433..d2e91de 100644
--- a/lib/btrfs/btrfstree/types_node.go
+++ b/lib/btrfs/btrfstree/types_node.go
@@ -1,4 +1,4 @@
-// Copyright (C) 2022 Luke Shumaker <lukeshu@lukeshu.com>
+// Copyright (C) 2022-2023 Luke Shumaker <lukeshu@lukeshu.com>
//
// SPDX-License-Identifier: GPL-2.0-or-later
@@ -212,10 +212,11 @@ func (node Node) MarshalBinary() ([]byte, error) {
if bs, err := binstruct.Marshal(node.Head); err != nil {
return buf, err
- } else if len(bs) != binstruct.StaticSize(NodeHeader{}) {
- return nil, fmt.Errorf("header is %v bytes but expected %v",
- len(bs), binstruct.StaticSize(NodeHeader{}))
} else {
+ if len(bs) != binstruct.StaticSize(NodeHeader{}) {
+ return nil, fmt.Errorf("header is %v bytes but expected %v",
+ len(bs), binstruct.StaticSize(NodeHeader{}))
+ }
copy(buf, bs)
}
diff --git a/lib/btrfs/btrfstree/types_node_test.go b/lib/btrfs/btrfstree/types_node_test.go
index 040b90c..80855d8 100644
--- a/lib/btrfs/btrfstree/types_node_test.go
+++ b/lib/btrfs/btrfstree/types_node_test.go
@@ -1,4 +1,4 @@
-// Copyright (C) 2022 Luke Shumaker <lukeshu@lukeshu.com>
+// Copyright (C) 2022-2023 Luke Shumaker <lukeshu@lukeshu.com>
//
// SPDX-License-Identifier: GPL-2.0-or-later
@@ -23,13 +23,12 @@ func FuzzRoundTripNode(f *testing.F) {
n, err := binstruct.Unmarshal(inDat, &node)
if err != nil {
t.Logf("err=%v", err)
- //require.Equal(t, 0, n)
} else {
require.Equal(t, len(inDat), n)
outDat, err := binstruct.Marshal(node)
require.NoError(t, err)
- require.Equal(t, inDat[:], outDat)
+ require.Equal(t, inDat, outDat)
}
})
}
diff --git a/lib/btrfs/btrfsvol/lvm.go b/lib/btrfs/btrfsvol/lvm.go
index c7551fc..605524b 100644
--- a/lib/btrfs/btrfsvol/lvm.go
+++ b/lib/btrfs/btrfsvol/lvm.go
@@ -1,4 +1,4 @@
-// Copyright (C) 2022 Luke Shumaker <lukeshu@lukeshu.com>
+// Copyright (C) 2022-2023 Luke Shumaker <lukeshu@lukeshu.com>
//
// SPDX-License-Identifier: GPL-2.0-or-later
@@ -335,10 +335,8 @@ func (lv *LogicalVolume[PhysicalVolume]) maybeShortReadAt(dat []byte, laddr Logi
}
if first {
copy(dat, buf)
- } else {
- if !bytes.Equal(dat, buf) {
- return 0, fmt.Errorf("inconsistent stripes at laddr=%v len=%v", laddr, len(dat))
- }
+ } else if !bytes.Equal(dat, buf) {
+ return 0, fmt.Errorf("inconsistent stripes at laddr=%v len=%v", laddr, len(dat))
}
}
return len(dat), nil
diff --git a/lib/btrfsprogs/btrfsinspect/mount.go b/lib/btrfsprogs/btrfsinspect/mount.go
index 2a0b232..29193cb 100644
--- a/lib/btrfsprogs/btrfsinspect/mount.go
+++ b/lib/btrfsprogs/btrfsinspect/mount.go
@@ -1,4 +1,4 @@
-// Copyright (C) 2022 Luke Shumaker <lukeshu@lukeshu.com>
+// Copyright (C) 2022-2023 Luke Shumaker <lukeshu@lukeshu.com>
//
// SPDX-License-Identifier: GPL-2.0-or-later
@@ -213,7 +213,7 @@ func (sv *subvolume) StatFS(_ context.Context, op *fuseops.StatFSOp) error {
op.IoSize = sb.SectorSize
op.BlockSize = sb.SectorSize
op.Blocks = sb.TotalBytes / uint64(sb.SectorSize) // TODO: adjust for RAID type
- //op.BlocksFree = TODO
+ // op.BlocksFree = TODO
// btrfs doesn't have a fixed number of inodes
op.Inodes = 0
diff --git a/lib/btrfsprogs/btrfsinspect/print_tree.go b/lib/btrfsprogs/btrfsinspect/print_tree.go
index 6c31350..62d1d7b 100644
--- a/lib/btrfsprogs/btrfsinspect/print_tree.go
+++ b/lib/btrfsprogs/btrfsinspect/print_tree.go
@@ -1,4 +1,4 @@
-// Copyright (C) 2022 Luke Shumaker <lukeshu@lukeshu.com>
+// Copyright (C) 2022-2023 Luke Shumaker <lukeshu@lukeshu.com>
//
// SPDX-License-Identifier: GPL-2.0-or-later
@@ -142,8 +142,8 @@ func printTree(ctx context.Context, out io.Writer, fs *btrfs.FS, treeID btrfspri
textui.Fprintf(out, "\t\tindex %v namelen %v name: %s\n",
ref.Index, ref.NameLen, ref.Name)
}
- //case btrfsitem.INODE_EXTREF_KEY:
- // // TODO
+ // case btrfsitem.INODE_EXTREF_KEY:
+ // // TODO
case btrfsitem.DirEntry:
textui.Fprintf(out, "\t\tlocation %v type %v\n",
fmtKey(body.Location), body.Type)
@@ -153,8 +153,8 @@ func printTree(ctx context.Context, out io.Writer, fs *btrfs.FS, treeID btrfspri
if len(body.Data) > 0 {
textui.Fprintf(out, "\t\tdata %v\n", body.Data)
}
- //case btrfsitem.DIR_LOG_INDEX_KEY, btrfsitem.DIR_LOG_ITEM_KEY:
- // // TODO
+ // case btrfsitem.DIR_LOG_INDEX_KEY, btrfsitem.DIR_LOG_ITEM_KEY:
+ // // TODO
case btrfsitem.Root:
textui.Fprintf(out, "\t\tgeneration %v root_dirid %v bytenr %d byte_limit %v bytes_used %v\n",
body.Generation, body.RootDirID, body.ByteNr, body.ByteLimit, body.BytesUsed)
@@ -200,10 +200,10 @@ func printTree(ctx context.Context, out io.Writer, fs *btrfs.FS, treeID btrfspri
body.Head.Refs, body.Head.Generation, body.Head.Flags)
textui.Fprintf(out, "\t\ttree block skinny level %v\n", item.Key.Offset)
printExtentInlineRefs(out, body.Refs)
- //case btrfsitem.EXTENT_DATA_REF_KEY:
- // // TODO
- //case btrfsitem.SHARED_DATA_REF_KEY:
- // // TODO
+ // case btrfsitem.EXTENT_DATA_REF_KEY:
+ // // TODO
+ // case btrfsitem.SHARED_DATA_REF_KEY:
+ // // TODO
case btrfsitem.ExtentCSum:
start := btrfsvol.LogicalAddr(item.Key.Offset)
textui.Fprintf(out, "\t\trange start %d end %d length %d",
@@ -291,16 +291,16 @@ func printTree(ctx context.Context, out io.Writer, fs *btrfs.FS, treeID btrfspri
"\t\tchunk_tree_uuid %v\n",
body.ChunkTree, body.ChunkObjectID, body.ChunkOffset, body.Length,
body.ChunkTreeUUID)
- //case btrfsitem.QGROUP_STATUS_KEY:
- // // TODO
- //case btrfsitem.QGROUP_INFO_KEY:
- // // TODO
- //case btrfsitem.QGROUP_LIMIT_KEY:
- // // TODO
+ // case btrfsitem.QGROUP_STATUS_KEY:
+ // // TODO
+ // case btrfsitem.QGROUP_INFO_KEY:
+ // // TODO
+ // case btrfsitem.QGROUP_LIMIT_KEY:
+ // // TODO
case btrfsitem.UUIDMap:
textui.Fprintf(out, "\t\tsubvol_id %d\n", body.ObjID)
- //case btrfsitem.STRING_ITEM_KEY:
- // // TODO
+ // case btrfsitem.STRING_ITEM_KEY:
+ // // TODO
case btrfsitem.DevStats:
textui.Fprintf(out, "\t\tpersistent item objectid %v offset %v\n",
item.Key.ObjectID.Format(item.Key.ItemType), item.Key.Offset)
@@ -316,8 +316,8 @@ func printTree(ctx context.Context, out io.Writer, fs *btrfs.FS, treeID btrfspri
default:
textui.Fprintf(out, "\t\tunknown persistent item objectid %v\n", item.Key.ObjectID)
}
- //case btrfsitem.TEMPORARY_ITEM_KEY:
- // // TODO
+ // case btrfsitem.TEMPORARY_ITEM_KEY:
+ // // TODO
case btrfsitem.Empty:
switch item.Key.ItemType {
case btrfsitem.ORPHAN_ITEM_KEY: // 48
@@ -330,10 +330,10 @@ func printTree(ctx context.Context, out io.Writer, fs *btrfs.FS, treeID btrfspri
textui.Fprintf(out, "\t\tfree space extent\n")
case btrfsitem.QGROUP_RELATION_KEY: // 246
// do nothing
- //case btrfsitem.EXTENT_REF_V0_KEY:
- // textui.Fprintf(out, "\t\textent ref v0 (deprecated)\n")
- //case btrfsitem.CSUM_ITEM_KEY:
- // textui.Fprintf(out, "\t\tcsum item\n")
+ // case btrfsitem.EXTENT_REF_V0_KEY:
+ // textui.Fprintf(out, "\t\textent ref v0 (deprecated)\n")
+ // case btrfsitem.CSUM_ITEM_KEY:
+ // textui.Fprintf(out, "\t\tcsum item\n")
default:
textui.Fprintf(out, "\t\t(error) unhandled empty item type: %v\n", item.Key.ItemType)
}
@@ -426,7 +426,7 @@ func fmtKey(key btrfsprim.Key) string {
var out strings.Builder
textui.Fprintf(&out, "key (%v %v", key.ObjectID.Format(key.ItemType), key.ItemType)
switch key.ItemType {
- case btrfsitem.QGROUP_RELATION_KEY: //TODO, btrfsitem.QGROUP_INFO_KEY, btrfsitem.QGROUP_LIMIT_KEY:
+ case btrfsitem.QGROUP_RELATION_KEY: // TODO, btrfsitem.QGROUP_INFO_KEY, btrfsitem.QGROUP_LIMIT_KEY:
panic("TODO: printing qgroup items not yet implemented")
case btrfsitem.UUID_SUBVOL_KEY, btrfsitem.UUID_RECEIVED_SUBVOL_KEY:
textui.Fprintf(&out, " %#08x)", key.Offset)
diff --git a/lib/btrfsprogs/btrfsinspect/rebuildmappings/fuzzymatchsums.go b/lib/btrfsprogs/btrfsinspect/rebuildmappings/fuzzymatchsums.go
index ae83513..b1be7ba 100644
--- a/lib/btrfsprogs/btrfsinspect/rebuildmappings/fuzzymatchsums.go
+++ b/lib/btrfsprogs/btrfsinspect/rebuildmappings/fuzzymatchsums.go
@@ -1,4 +1,4 @@
-// Copyright (C) 2022 Luke Shumaker <lukeshu@lukeshu.com>
+// Copyright (C) 2022-2023 Luke Shumaker <lukeshu@lukeshu.com>
//
// SPDX-License-Identifier: GPL-2.0-or-later
@@ -78,7 +78,7 @@ func fuzzyMatchBlockGroupSums(ctx context.Context,
Dev: paddr.Dev,
Addr: paddr.Addr.Add(-off),
}
- matches[key] = matches[key] + 1
+ matches[key]++
}
return nil
}); err != nil {
@@ -145,11 +145,12 @@ type lowestN[T containers.Ordered[T]] struct {
}
func (l *lowestN[T]) Insert(v T) {
- if len(l.Dat) < l.N {
+ switch {
+ case len(l.Dat) < l.N:
l.Dat = append(l.Dat, v)
- } else if v.Cmp(l.Dat[0]) < 0 {
+ case v.Cmp(l.Dat[0]) < 0:
l.Dat[0] = v
- } else {
+ default:
return
}
sort.Slice(l.Dat, func(i, j int) bool {
diff --git a/lib/btrfsprogs/btrfsinspect/rebuildnodes/rebuild.go b/lib/btrfsprogs/btrfsinspect/rebuildnodes/rebuild.go
index a7fe5c7..3057e75 100644
--- a/lib/btrfsprogs/btrfsinspect/rebuildnodes/rebuild.go
+++ b/lib/btrfsprogs/btrfsinspect/rebuildnodes/rebuild.go
@@ -1,4 +1,4 @@
-// Copyright (C) 2022 Luke Shumaker <lukeshu@lukeshu.com>
+// Copyright (C) 2022-2023 Luke Shumaker <lukeshu@lukeshu.com>
//
// SPDX-License-Identifier: GPL-2.0-or-later
@@ -317,7 +317,7 @@ func (o *rebuilder) resolveTreeAugments(ctx context.Context, listsWithDistances
counts := make(map[btrfsvol.LogicalAddr]int)
for _, list := range lists {
for item := range list {
- counts[item] = counts[item] + 1
+ counts[item]++
}
}
diff --git a/lib/btrfsprogs/btrfsinspect/rebuildnodes/rebuild_graph.go b/lib/btrfsprogs/btrfsinspect/rebuildnodes/rebuild_graph.go
index df5ae71..bf4c95d 100644
--- a/lib/btrfsprogs/btrfsinspect/rebuildnodes/rebuild_graph.go
+++ b/lib/btrfsprogs/btrfsinspect/rebuildnodes/rebuild_graph.go
@@ -112,13 +112,13 @@ func handleItem(o rebuildCallbacks, ctx context.Context, treeID btrfsprim.ObjID,
case btrfsitem.Empty:
// nothing
case btrfsitem.Extent:
- //if body.Head.Flags.Has(btrfsitem.EXTENT_FLAG_TREE_BLOCK) {
- // // Supposedly this flag indicates that
- // // body.Info.Key identifies a node by the
- // // first key in the node. But nothing in the
- // // kernel ever reads this, so who knows if it
- // // always gets updated correctly?
- //}
+ // if body.Head.Flags.Has(btrfsitem.EXTENT_FLAG_TREE_BLOCK) {
+ // // Supposedly this flag indicates that
+ // // body.Info.Key identifies a node by the
+ // // first key in the node. But nothing in the
+ // // kernel ever reads this, so who knows if it
+ // // always gets updated correctly?
+ // }
for i, ref := range body.Refs {
switch refBody := ref.Body.(type) {
case nil:
diff --git a/lib/containers/intervaltree.go b/lib/containers/intervaltree.go
index 424b297..16bc916 100644
--- a/lib/containers/intervaltree.go
+++ b/lib/containers/intervaltree.go
@@ -1,4 +1,4 @@
-// Copyright (C) 2022 Luke Shumaker <lukeshu@lukeshu.com>
+// Copyright (C) 2022-2023 Luke Shumaker <lukeshu@lukeshu.com>
//
// SPDX-License-Identifier: GPL-2.0-or-later
@@ -139,4 +139,4 @@ func (t *IntervalTree[K, V]) SearchAll(fn func(K) int) []V {
return ret
}
-//func (t *IntervalTree[K, V]) Walk(fn func(*RBNode[V]) error) error
+// TODO: func (t *IntervalTree[K, V]) Walk(fn func(*RBNode[V]) error) error
diff --git a/lib/containers/rbtree.go b/lib/containers/rbtree.go
index 17bb3e3..f922a7b 100644
--- a/lib/containers/rbtree.go
+++ b/lib/containers/rbtree.go
@@ -338,11 +338,12 @@ func (t *RBTree[K, V]) Insert(val V) {
Parent: parent,
Value: val,
}
- if parent == nil {
+ switch {
+ case parent == nil:
t.root = node
- } else if key.Cmp(t.KeyFn(parent.Value)) < 0 {
+ case key.Cmp(t.KeyFn(parent.Value)) < 0:
parent.Left = node
- } else {
+ default:
parent.Right = node
}
t.updateAttr(node)
diff --git a/lib/containers/rbtree_test.go b/lib/containers/rbtree_test.go
index a487c52..e42410e 100644
--- a/lib/containers/rbtree_test.go
+++ b/lib/containers/rbtree_test.go
@@ -1,4 +1,4 @@
-// Copyright (C) 2022 Luke Shumaker <lukeshu@lukeshu.com>
+// Copyright (C) 2022-2023 Luke Shumaker <lukeshu@lukeshu.com>
//
// SPDX-License-Identifier: GPL-2.0-or-later
@@ -39,13 +39,7 @@ func (node *RBNode[V]) asciiArt(w io.Writer, u, m, l string) {
}
node.Right.asciiArt(w, u+" ", u+" ,--", u+" | ")
-
- if node.Color == Red {
- fmt.Fprintf(w, "%s%v\n", m, node)
- } else {
- fmt.Fprintf(w, "%s%v\n", m, node)
- }
-
+ fmt.Fprintf(w, "%s%v\n", m, node)
node.Left.asciiArt(w, l+" | ", l+" `--", l+" ")
}