diff --git a/fs/zfs/stats.go b/fs/zfs/stats.go index b41a9f82e7..a2a2d5454a 100644 --- a/fs/zfs/stats.go +++ b/fs/zfs/stats.go @@ -25,7 +25,11 @@ func GetZfsStats(poolName string) (uint64, uint64, uint64, error) { return 0, 0, 0, err } - total := dataset.Used + dataset.Avail + dataset.Usedbydataset + total := zfsCapacity(dataset) return total, dataset.Avail, dataset.Avail, nil } + +func zfsCapacity(dataset *zfslib.Dataset) uint64 { + return dataset.Used + dataset.Avail +} diff --git a/fs/zfs/stats_test.go b/fs/zfs/stats_test.go new file mode 100644 index 0000000000..56df274a2c --- /dev/null +++ b/fs/zfs/stats_test.go @@ -0,0 +1,33 @@ +// Copyright 2026 Google Inc. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package zfs + +import ( + "testing" + + zfslib "github.com/mistifyio/go-zfs" +) + +func TestZfsCapacityDoesNotDoubleCountUsedbydataset(t *testing.T) { + dataset := &zfslib.Dataset{ + Used: 25, + Avail: 75, + Usedbydataset: 10, + } + + if got, want := zfsCapacity(dataset), uint64(100); got != want { + t.Fatalf("zfsCapacity() = %d, want %d", got, want) + } +}