From 63b4462690c9d9cedc8fc88bf743c21924fc7318 Mon Sep 17 00:00:00 2001 From: Aaron Jacobs Date: Fri, 20 Mar 2015 13:38:23 +1100 Subject: [PATCH] Added FileSystem.SyncFile. --- file_system.go | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/file_system.go b/file_system.go index 815096b..cfe5bf9 100644 --- a/file_system.go +++ b/file_system.go @@ -211,7 +211,25 @@ type FileSystem interface { ctx context.Context, req *WriteFileRequest) (*WriteFileResponse, error) - // Flush the current state of an open file to storage. + // Synchronize the current contents of an open file to storage. + // + // vfs.txt documents this as being called for by the fsync(2) system call + // (cf. http://goo.gl/j9X8nB). Code walk for that case: + // + // * (http://goo.gl/IQkWZa) sys_fsync calls do_fsync, calls vfs_fsync, calls + // vfs_fsync_range. + // * (http://goo.gl/5L2SMy) vfs_fsync_range calls f_op->fsync. + // + // Note that this is also called by fdatasync(2) (cf. http://goo.gl/01R7rF). + // + // See also: FlushFile, which may perform a similar purpose when closing a + // file (but which is not used in "real" file systems). + SyncFile( + ctx context.Context, + req *SyncFileRequest) (*SyncFileResponse, error) + + // Flush the current state of an open file to storage upon closing a file + // descriptor. // // vfs.txt documents this as being called for each close(2) system call (cf. // http://goo.gl/FSkbrq). Code walk for that case: @@ -823,6 +841,17 @@ type WriteFileRequest struct { type WriteFileResponse struct { } +type SyncFileRequest struct { + Header RequestHeader + + // The file and handle being sync'd. + Inode InodeID + Handle HandleID +} + +type SyncFileResponse struct { +} + type FlushFileRequest struct { Header RequestHeader