[PATCH] fadvise() make POSIX_FADV_NOREUSE a no-op
The POSIX_FADV_NOREUSE hint means "the application will use this range of the file a single time". It seems to be intended that the implementation will use this hint to perform drop-behind of that part of the file when the application gets around to reading or writing it. However for reasons which aren't obvious (or sane?) I mapped POSIX_FADV_NOREUSE onto POSIX_FADV_WILLNEED. ie: it does readahead. That's daft. So for now, make POSIX_FADV_NOREUSE a no-op. This is a non-back-compatible change. If someone was using POSIX_FADV_NOREUSE to perform readahead, they lose. The likelihood is low. If/when we later implement POSIX_FADV_NOREUSE things will get interesting - to do it fully we'll need to maintain file offset/length ranges and peform all sorts of complex tricks, and managing the lifetime of those ranges' data structures will be interesting.. A sensible implementation would probably ignore the file range and would simply mark the entire file as needing some form of drop-behind treatment. Cc: Michael Kerrisk <mtk-manpages@gmx.net> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
bb39e41974
commit
60c371bc75
1 changed files with 2 additions and 1 deletions
|
@ -73,7 +73,6 @@ asmlinkage long sys_fadvise64_64(int fd, loff_t offset, loff_t len, int advice)
|
||||||
file->f_ra.ra_pages = bdi->ra_pages * 2;
|
file->f_ra.ra_pages = bdi->ra_pages * 2;
|
||||||
break;
|
break;
|
||||||
case POSIX_FADV_WILLNEED:
|
case POSIX_FADV_WILLNEED:
|
||||||
case POSIX_FADV_NOREUSE:
|
|
||||||
if (!mapping->a_ops->readpage) {
|
if (!mapping->a_ops->readpage) {
|
||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
break;
|
break;
|
||||||
|
@ -94,6 +93,8 @@ asmlinkage long sys_fadvise64_64(int fd, loff_t offset, loff_t len, int advice)
|
||||||
if (ret > 0)
|
if (ret > 0)
|
||||||
ret = 0;
|
ret = 0;
|
||||||
break;
|
break;
|
||||||
|
case POSIX_FADV_NOREUSE:
|
||||||
|
break;
|
||||||
case POSIX_FADV_DONTNEED:
|
case POSIX_FADV_DONTNEED:
|
||||||
if (!bdi_write_congested(mapping->backing_dev_info))
|
if (!bdi_write_congested(mapping->backing_dev_info))
|
||||||
filemap_flush(mapping);
|
filemap_flush(mapping);
|
||||||
|
|
Loading…
Reference in a new issue