Things to do this week instead of arguing about mixers
Eric Sandeen
sandeen at redhat.com
Tue May 12 15:50:22 UTC 2009
Pádraig Brady wrote:
> Eric Sandeen wrote:
>> Now that we have ext4 as the new default filesystem, it'd be nice if we
>> can get more applications to take advantage of some of the features.
>>
>> One big feature that has already been brought up on the list[1] is file
>> preallocation, which allows an application to pre-allocate blocks it
>> knows that it will eventually write into, thereby making sure it won't
>> run out of space, and also generally getting a more efficient/contiguous
>> file layout.
>>
>
> [snip]
>
>> fallocate(2):
>> long fallocate(int fd, int mode, loff_t offset, loff_t len);
>>
>> This is directly wired to the syscall, so only succeeds on filesystems
>> that support it. It also takes a FALLOC_FL_KEEP_SIZE mode argument,
>> which allows one to allocate blocks without updating the file size if
>> desired (blocks can then be allocated past EOF). This call is only
>> wired up in very recent glibc, but it is available in F11.
>
> I tried using fallocate() on glibc-2.9.90-22.
> The man-pages are out of date and say the glibc interface is not available,
oops :) Mind filing a bug on that against man-pages?
> but from inspecting the headers I came up with the test prog below.
> However I get a link error if I uncomment #define _FILE_OFFSET_BITS 64.
> What am I missing?
on which arch? what's the link error?
Thanks,
-Eric
> cheers,
> Pádraig.
>
> //#define _FILE_OFFSET_BITS 64
> #define _GNU_SOURCE
> #include <fcntl.h>
> #include <linux/falloc.h>
>
> #include <stdio.h>
> #include <stdlib.h>
> #include <string.h>
> #include <sys/types.h>
> #include <inttypes.h>
>
> int main (int argc, char** argv)
> {
> char* endptr;
> off_t len = strtoll(argv[1], &endptr, 10);
> fprintf(stderr, "setting to %jd\n", (intmax_t)len);
> int ret = fallocate(1, 0, 0, len);
> fprintf(stderr, "ret=%d (%s)\n", ret, strerror(ret));
> }
>
>
>
More information about the fedora-devel-list
mailing list