github.com/Cloud-Foundations/Dominator@v0.3.4/lib/filesystem/estimate.go (about) 1 package filesystem 2 3 func (fs *FileSystem) estimateUsage(blockSize uint64) uint64 { 4 if blockSize < 1 { 5 blockSize = 4096 6 } 7 fileOrder := sizeToOrder(blockSize) 8 var totalDataBytes uint64 9 for _, inode := range fs.InodeTable { 10 switch inode := inode.(type) { 11 case *DirectoryInode: 12 totalDataBytes += blockSize 13 case *RegularInode: 14 // Round up to the nearest page size. 15 size := (inode.Size >> fileOrder) << fileOrder 16 if size < inode.Size { 17 size += 1 << fileOrder 18 } 19 totalDataBytes += size 20 case *SymlinkInode: 21 totalDataBytes += 64 22 } 23 } 24 return totalDataBytes 25 } 26 27 func sizeToOrder(blockSize uint64) uint { 28 order := uint(0) 29 for i := uint(0); i < 64; i++ { 30 if 1<<i&blockSize != 0 { 31 order = i 32 } 33 } 34 return order 35 }