Skip to content

Commit

Permalink
fix: Type-convert fs.Bavail for portability (#19816)
Browse files Browse the repository at this point in the history
Prior to this patch, DiskUsage() would calculate bytes available
by multiplying blocks available by block size in bytes:

  disk.Avail = fs.Bavail * uint64(fs.Bsize)

Under some versions of Unix, fs.Bavail is of type uint64 and on
others (like FreeBSD) it is of type int64.

This causes a compile time error:

  $ go build
  # github.com/influxdata/influxdb/v2/pkg/fs
  ./fs_unix.go:81:25: invalid operation: fs.Bavail * uint64(fs.Bsize) (mismatched types int64 and uint64)

This patch type-converts fs.Bavail to unit64 to ensure that all
types in the expression align.

This prevents compile time errors under FreeBSD and other platforms
where fs.Bavail isn't uint64.
  • Loading branch information
ayang64 authored Oct 26, 2020
1 parent b7ac9f0 commit bd47d8e
Showing 1 changed file with 4 additions and 4 deletions.
8 changes: 4 additions & 4 deletions pkg/fs/fs_unix.go
Original file line number Diff line number Diff line change
Expand Up @@ -71,14 +71,14 @@ func CreateFile(newpath string) (*os.File, error) {

// DiskUsage returns disk usage of disk of path
func DiskUsage(path string) (*DiskStatus, error) {
var disk DiskStatus
fs := unix.Statfs_t{}
err := unix.Statfs(path, &fs)
if err != nil {
if err := unix.Statfs(path, &fs); err != nil {
return nil, err
}

var disk DiskStatus
disk.All = fs.Blocks * uint64(fs.Bsize)
disk.Avail = fs.Bavail * uint64(fs.Bsize)
disk.Avail = uint64(fs.Bavail) * uint64(fs.Bsize)
disk.Free = fs.Bfree * uint64(fs.Bsize)
disk.Used = disk.All - disk.Free
return &disk, nil
Expand Down

0 comments on commit bd47d8e

Please sign in to comment.