posix_fadvise/WILLNEED synchronous on fuse/sshfs instead of async?

From: Tobias Diedrich
Date: Wed Nov 11 2009 - 10:19:44 EST


While trying to use posix_fadvise(...POSIX_FADVISE_WILLNEED) to
implement userspace read-ahead (with a bigger read-ahead window than
the kernel default) I found that if the underlying filesystem is
fuse/sshfs posix_fadvise is no longer doing asynchronous reads:

strace -tt with mnt/testfile on sshfs and server with very slow
upstream (ADSL):
5345 00:00:17.334209 open("mnt/testfile", O_RDONLY|O_LARGEFILE) = 3
5345 00:00:18.011383 _llseek(3, 0, [3544379], SEEK_END) = 0
5345 00:00:18.011626 _llseek(3, 0, [0], SEEK_SET) = 0
5345 00:00:18.012393 fadvise64_64(3, 0, 1048576, POSIX_FADV_WILLNEED) = 0
5345 00:01:02.438097 write(1, "[file] File size is 3544379 byte"..., 34) = 34

Note that fadvise takes 40 seconds...
Is this expected behaviour?
I would have expected that fadvise is always asynchronous and I
could rely on the call to return almost immediately.

--
Tobias PGP: http://8ef7ddba.uguu.de
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/