aboutsummaryrefslogtreecommitdiffstats
path: root/erts/emulator/drivers/common/ram_file_drv.c
diff options
context:
space:
mode:
authorFilipe David Manana <[email protected]>2010-04-26 13:04:40 +0200
committerRaimo Niskanen <[email protected]>2010-05-20 15:48:17 +0200
commit21a67b797e40df930b83bd407ffc165b3f4b91b2 (patch)
tree268a10e8d1d4cd00c30d3f5ded8f103d9699167a /erts/emulator/drivers/common/ram_file_drv.c
parent3f53a96a8bd0cd4a18f819b6857e6a764706ede5 (diff)
downloadotp-21a67b797e40df930b83bd407ffc165b3f4b91b2.tar.gz
otp-21a67b797e40df930b83bd407ffc165b3f4b91b2.tar.bz2
otp-21a67b797e40df930b83bd407ffc165b3f4b91b2.zip
Add file:advise/4 - a wrapper to the POSIX syscall posix_fadvise
Useful for informing the Operating System about the access pattern for a file's data, so that it can adapt the caching strategy to maximize disk IO performance.
Diffstat (limited to 'erts/emulator/drivers/common/ram_file_drv.c')
-rw-r--r--erts/emulator/drivers/common/ram_file_drv.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/erts/emulator/drivers/common/ram_file_drv.c b/erts/emulator/drivers/common/ram_file_drv.c
index d4e547ade6..abedcc933a 100644
--- a/erts/emulator/drivers/common/ram_file_drv.c
+++ b/erts/emulator/drivers/common/ram_file_drv.c
@@ -46,6 +46,8 @@
#define RAM_FILE_UUENCODE 35 /* uuencode file */
#define RAM_FILE_UUDECODE 36 /* uudecode file */
#define RAM_FILE_SIZE 37 /* get file size */
+#define RAM_FILE_ADVISE 38 /* predeclare the access
+ * pattern for file data */
/* possible new operations include:
DES_ENCRYPT
DES_DECRYPT
@@ -693,6 +695,13 @@ static void rfile_command(ErlDrvData e, char* buf, int count)
case RAM_FILE_UUDECODE: /* uudecode file */
ram_file_uudecode(f);
break;
+
+ case RAM_FILE_ADVISE:
+ if (f->flags == 0)
+ error_reply(f, EBADF);
+ else
+ reply(f, 1, 0);
+ break;
}
/*
* Ignore anything else -- let the caller hang.