diff options
author | Mark Johnston <markj@FreeBSD.org> | 2015-09-30 23:06:29 +0000 |
---|---|---|
committer | Mark Johnston <markj@FreeBSD.org> | 2015-09-30 23:06:29 +0000 |
commit | 3138cd3670cc3130521f78167906b6933885e729 (patch) | |
tree | 1e2b61f35c22941061c31586e1d027222bdcbb8a /sys/vm/vm_page.c | |
parent | d358fa780b338913419f028acdf62896e2481d97 (diff) | |
download | src-3138cd3670cc3130521f78167906b6933885e729.tar.gz src-3138cd3670cc3130521f78167906b6933885e729.zip |
As a step towards the elimination of PG_CACHED pages, rework the handling
of POSIX_FADV_DONTNEED so that it causes the backing pages to be moved to
the head of the inactive queue instead of being cached.
This affects the implementation of POSIX_FADV_NOREUSE as well, since it
works by applying POSIX_FADV_DONTNEED to file ranges after they have been
read or written. At that point the corresponding buffers may still be
dirty, so the previous implementation would coalesce successive ranges and
apply POSIX_FADV_DONTNEED to the result, ensuring that pages backing the
dirty buffers would eventually be cached. To preserve this behaviour in an
efficient manner, this change adds a new buf flag, B_NOREUSE, which causes
the pages backing a VMIO buf to be placed at the head of the inactive queue
when the buf is released. POSIX_FADV_NOREUSE then works by setting this
flag in bufs that underlie the specified range.
Reviewed by: alc, kib
Sponsored by: EMC / Isilon Storage Division
Differential Revision: https://reviews.freebsd.org/D3726
Notes
Notes:
svn path=/head/; revision=288431
Diffstat (limited to 'sys/vm/vm_page.c')
-rw-r--r-- | sys/vm/vm_page.c | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/sys/vm/vm_page.c b/sys/vm/vm_page.c index 2aaddfb01826..a3a9a10417a4 100644 --- a/sys/vm/vm_page.c +++ b/sys/vm/vm_page.c @@ -2589,6 +2589,19 @@ vm_page_deactivate(vm_page_t m) } /* + * Move the specified page to the inactive queue with the expectation + * that it is unlikely to be reused. + * + * The page must be locked. + */ +void +vm_page_deactivate_noreuse(vm_page_t m) +{ + + _vm_page_deactivate(m, 1); +} + +/* * vm_page_try_to_cache: * * Returns 0 on failure, 1 on success @@ -2740,8 +2753,7 @@ vm_page_cache(vm_page_t m) /* * vm_page_advise * - * Deactivate or do nothing, as appropriate. This routine is used - * by madvise() and vop_stdadvise(). + * Deactivate or do nothing, as appropriate. * * The object and page must be locked. */ |