github.com/minio/minio@v0.0.0-20240328213742-3f72439b8a27/internal/disk/directio_darwin.go (about) 1 //go:build darwin 2 3 // Copyright (c) 2015-2023 MinIO, Inc. 4 // 5 // This file is part of MinIO Object Storage stack 6 // 7 // This program is free software: you can redistribute it and/or modify 8 // it under the terms of the GNU Affero General Public License as published by 9 // the Free Software Foundation, either version 3 of the License, or 10 // (at your option) any later version. 11 // 12 // This program is distributed in the hope that it will be useful 13 // but WITHOUT ANY WARRANTY; without even the implied warranty of 14 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 // GNU Affero General Public License for more details. 16 // 17 // You should have received a copy of the GNU Affero General Public License 18 // along with this program. If not, see <http://www.gnu.org/licenses/>. 19 20 package disk 21 22 import ( 23 "os" 24 25 "github.com/ncw/directio" 26 "golang.org/x/sys/unix" 27 ) 28 29 // ODirectPlatform indicates if the platform supports O_DIRECT 30 const ODirectPlatform = true 31 32 // OpenFileDirectIO - bypass kernel cache. 33 func OpenFileDirectIO(filePath string, flag int, perm os.FileMode) (*os.File, error) { 34 return directio.OpenFile(filePath, flag, perm) 35 } 36 37 // DisableDirectIO - disables directio mode. 38 func DisableDirectIO(f *os.File) error { 39 fd := f.Fd() 40 _, err := unix.FcntlInt(fd, unix.F_NOCACHE, 0) 41 return err 42 } 43 44 // AlignedBlock - pass through to directio implementation. 45 func AlignedBlock(blockSize int) []byte { 46 return directio.AlignedBlock(blockSize) 47 }