diff options
author | Gleb Smirnoff <glebius@FreeBSD.org> | 2015-06-12 11:32:20 +0000 |
---|---|---|
committer | Gleb Smirnoff <glebius@FreeBSD.org> | 2015-06-12 11:32:20 +0000 |
commit | 093c7f396d3f3be2314b56921cc163ce836e9f07 (patch) | |
tree | ab4d064f5d8cf6d2a2fb47602d4da01c082e11ee /sys/vm/vm_object.c | |
parent | a565264d3c23d5c5572a5a2b9139912bd0202589 (diff) | |
download | src-093c7f396d3f3be2314b56921cc163ce836e9f07.tar.gz src-093c7f396d3f3be2314b56921cc163ce836e9f07.zip |
Make KPI of vm_pager_get_pages() more strict: if a pager changes a page
in the requested array, then it is responsible for disposition of previous
page and is responsible for updating the entry in the requested array.
Now consumers of KPI do not need to re-lookup the pages after call to
vm_pager_get_pages().
Reviewed by: kib
Sponsored by: Netflix
Sponsored by: Nginx, Inc.
Notes
Notes:
svn path=/head/; revision=284310
Diffstat (limited to 'sys/vm/vm_object.c')
-rw-r--r-- | sys/vm/vm_object.c | 8 |
1 files changed, 2 insertions, 6 deletions
diff --git a/sys/vm/vm_object.c b/sys/vm/vm_object.c index e240b67d2fa8..c7f31539a6ba 100644 --- a/sys/vm/vm_object.c +++ b/sys/vm/vm_object.c @@ -2046,7 +2046,7 @@ vm_object_page_cache(vm_object_t object, vm_pindex_t start, vm_pindex_t end) boolean_t vm_object_populate(vm_object_t object, vm_pindex_t start, vm_pindex_t end) { - vm_page_t m, ma[1]; + vm_page_t m; vm_pindex_t pindex; int rv; @@ -2054,11 +2054,7 @@ vm_object_populate(vm_object_t object, vm_pindex_t start, vm_pindex_t end) for (pindex = start; pindex < end; pindex++) { m = vm_page_grab(object, pindex, VM_ALLOC_NORMAL); if (m->valid != VM_PAGE_BITS_ALL) { - ma[0] = m; - rv = vm_pager_get_pages(object, ma, 1, 0); - m = vm_page_lookup(object, pindex); - if (m == NULL) - break; + rv = vm_pager_get_pages(object, &m, 1, 0); if (rv != VM_PAGER_OK) { vm_page_lock(m); vm_page_free(m); |