[PATCH v5 4/4] server: Implement file access hints using posix_fadvise

Luke Deller luke at deller.id.au
Wed Aug 4 06:29:37 CDT 2021


Implement file access pattern hints for sequential or random file access
using posix_fadvise if available.  On Linux this will influence the
kernel's readahead behaviour.

Signed-off-by: Luke Deller <luke at deller.id.au>
---
 server/fd.c | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/server/fd.c b/server/fd.c
index b953da2ab85..b20fa97229c 100644
--- a/server/fd.c
+++ b/server/fd.c
@@ -1892,6 +1892,7 @@ struct fd *open_fd( struct fd *root, const char *name, struct unicode_str nt_nam
     int root_fd = -1;
     int rw_mode;
     char *path;
+    unsigned int cache_hint;
 
     if (((options & FILE_DELETE_ON_CLOSE) && !(access & DELETE)) ||
         ((options & FILE_DIRECTORY_FILE) && (flags & O_TRUNC)))
@@ -2036,6 +2037,15 @@ struct fd *open_fd( struct fd *root, const char *name, struct unicode_str nt_nam
         free( closed_fd );
         fd->cacheable = 1;
     }
+
+#if _POSIX_C_SOURCE > 200112L
+    cache_hint = options & (FILE_SEQUENTIAL_ONLY | FILE_RANDOM_ACCESS);
+    if (cache_hint == FILE_SEQUENTIAL_ONLY)
+        posix_fadvise( fd->unix_fd, 0, 0, POSIX_FADV_SEQUENTIAL );
+    else if (cache_hint == FILE_RANDOM_ACCESS)
+        posix_fadvise( fd->unix_fd, 0, 0, POSIX_FADV_RANDOM );
+#endif
+
     if (root_fd != -1) fchdir( server_dir_fd ); /* go back to the server dir */
     return fd;
 
-- 
2.25.1




More information about the wine-devel mailing list