diff options
author | Filipe David Manana <[email protected]> | 2010-12-28 10:57:04 +0000 |
---|---|---|
committer | Björn-Egil Dahlberg <[email protected]> | 2013-01-09 18:15:02 +0100 |
commit | c48348233c467f7dc96728a31710abbb12cbe1f1 (patch) | |
tree | 61799089ba9052042ead12755a36b5bb818884ba /erts/emulator/drivers/common/ram_file_drv.c | |
parent | 9229901660ef1c163ea82c76ea3dc21f5a4f83d4 (diff) | |
download | otp-c48348233c467f7dc96728a31710abbb12cbe1f1.tar.gz otp-c48348233c467f7dc96728a31710abbb12cbe1f1.tar.bz2 otp-c48348233c467f7dc96728a31710abbb12cbe1f1.zip |
Add file:allocate/3 operation
This operation allows pre-allocation of space for files.
It succeeds only on systems that support such operation.
The POSIX standard defines the optional system call
posix_fallocate() to implement this feature. However,
some systems implement more specific functions to
accomplish the same operation.
On Linux, if the more specific function fallocate() is
implemented, it is used instead of posix_fallocate(),
falling back to posix_fallocate() if the fallocate()
call failed (it's only supported for the ext4, ocfs2,
xfs and btrfs file systems at the moment).
On Mac OS X it uses the specific fcntl() operation
F_PREALLOCATE, falling back to posix_fallocate() if
it's available (at the moment Mac OS X doesn't provide
posix_fallocate()).
On any other UNIX system, it uses posix_fallocate() if it's
available. Any other system not providing this system call
or any function to pre-allocate space for files, this operation
always fails with the ENOTSUP POSIX error.
Diffstat (limited to 'erts/emulator/drivers/common/ram_file_drv.c')
-rw-r--r-- | erts/emulator/drivers/common/ram_file_drv.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/erts/emulator/drivers/common/ram_file_drv.c b/erts/emulator/drivers/common/ram_file_drv.c index a109e40333..7f7cd7cd91 100644 --- a/erts/emulator/drivers/common/ram_file_drv.c +++ b/erts/emulator/drivers/common/ram_file_drv.c @@ -48,6 +48,7 @@ #define RAM_FILE_SIZE 37 /* get file size */ #define RAM_FILE_ADVISE 38 /* predeclare the access * pattern for file data */ +#define RAM_FILE_ALLOCATE 39 /* allocate space for a file */ /* possible new operations include: DES_ENCRYPT DES_DECRYPT @@ -720,6 +721,13 @@ static void rfile_command(ErlDrvData e, char* buf, ErlDrvSizeT count) else reply(f, 1, 0); break; + + case RAM_FILE_ALLOCATE: + if (f->flags == 0) + error_reply(f, EBADF); + else + reply(f, 1, 0); + break; } /* * Ignore anything else -- let the caller hang. |