storj.io/minio@v0.0.0-20230509071714-0cbc90f649b1/pkg/disk/fdatasync_linux.go (about) 1 //go:build linux 2 // +build linux 3 4 /* 5 * Minio Cloud Storage, (C) 2020 Minio, Inc. 6 * 7 * Licensed under the Apache License, Version 2.0 (the "License"); 8 * you may not use this file except in compliance with the License. 9 * You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, software 14 * distributed under the License is distributed on an "AS IS" BASIS, 15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 * See the License for the specific language governing permissions and 17 * limitations under the License. 18 */ 19 20 package disk 21 22 import ( 23 "os" 24 "syscall" 25 ) 26 27 // Fdatasync - fdatasync() is similar to fsync(), but does not flush modified metadata 28 // unless that metadata is needed in order to allow a subsequent data retrieval 29 // to be correctly handled. For example, changes to st_atime or st_mtime 30 // (respectively, time of last access and time of last modification; see inode(7)) 31 // do not require flushing because they are not necessary for a subsequent data 32 // read to be handled correctly. On the other hand, a change to the file size 33 // (st_size, as made by say ftruncate(2)), would require a metadata flush. 34 // 35 // The aim of fdatasync() is to reduce disk activity for applications that 36 // do not require all metadata to be synchronized with the disk. 37 func Fdatasync(f *os.File) error { 38 return syscall.Fdatasync(int(f.Fd())) 39 }