From ded343dffd3c9ba16133e7868a3de41be3166551 Mon Sep 17 00:00:00 2001 From: Ben McClelland Date: Thu, 15 Dec 2022 10:21:35 -0800 Subject: [PATCH] fix incorrect size block alignment for release --- scoutfs.go | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/scoutfs.go b/scoutfs.go index 846db26..c6f5f2a 100644 --- a/scoutfs.go +++ b/scoutfs.go @@ -296,7 +296,7 @@ func OpenByID(dirfd *os.File, ino uint64, flags int, name string) (*os.File, err return os.NewFile(fd, name), nil } -// ReleaseFile marks file offline and frees associated extents +// ReleaseFile sets file offline by freeing associated extents func ReleaseFile(path string, version uint64) error { f, err := os.OpenFile(path, os.O_WRONLY, 0) if err != nil { @@ -307,7 +307,7 @@ func ReleaseFile(path string, version uint64) error { return FReleaseFile(f, version) } -// FReleaseFile marks file offline and frees associated extents +// FReleaseFile set file offline by freeing associated extents func FReleaseFile(f *os.File, version uint64) error { fi, err := f.Stat() if err != nil { @@ -315,7 +315,7 @@ func FReleaseFile(f *os.File, version uint64) error { } r := iocRelease{ - Length: roundUp(uint64(fi.Size()), scoutfsBS), + Length: divRoundUp(uint64(fi.Size()), scoutfsBS), Version: version, } @@ -323,8 +323,12 @@ func FReleaseFile(f *os.File, version uint64) error { return err } -func roundUp(size, bs uint64) uint64 { - return ((size / bs) * bs) + bs +func divRoundUp(size, bs uint64) uint64 { + d := (size / bs) * bs + if d == size { + return d + } + return d + bs } // ReleaseBlocks marks blocks offline and frees associated extents