From 4259905d3171a4cdd087436ff1c17eed74830b60 Mon Sep 17 00:00:00 2001 From: kib Date: Sat, 4 Aug 2012 18:16:43 +0000 Subject: Reduce code duplication and exposure of direct access to struct vm_page oflags by providing helper function vm_page_readahead_finish(), which handles completed reads for pages with indexes other then the requested one, for VOP_GETPAGES(). Reviewed by: alc MFC after: 1 week --- sys/vm/vm_page.h | 1 + 1 file changed, 1 insertion(+) (limited to 'sys/vm/vm_page.h') diff --git a/sys/vm/vm_page.h b/sys/vm/vm_page.h index 5b68e06..f9d1e97 100644 --- a/sys/vm/vm_page.h +++ b/sys/vm/vm_page.h @@ -390,6 +390,7 @@ vm_page_t vm_page_next(vm_page_t m); int vm_page_pa_tryrelock(pmap_t, vm_paddr_t, vm_paddr_t *); vm_page_t vm_page_prev(vm_page_t m); void vm_page_putfake(vm_page_t m); +void vm_page_readahead_finish(vm_page_t m, int error); void vm_page_reference(vm_page_t m); void vm_page_remove (vm_page_t); void vm_page_rename (vm_page_t, vm_object_t, vm_pindex_t); -- cgit v1.1 From cac2fe116fb1431e5d9f22d2c536ee13c925eaa8 Mon Sep 17 00:00:00 2001 From: kib Date: Sun, 5 Aug 2012 14:11:42 +0000 Subject: After the PHYS_TO_VM_PAGE() function was de-inlined, the main reason to pull vm_param.h was removed. Other big dependency of vm_page.h on vm_param.h are PA_LOCK* definitions, which are only needed for in-kernel code, because modules use KBI-safe functions to lock the pages. Stop including vm_param.h into vm_page.h. Include vm_param.h explicitely for the kernel code which needs it. Suggested and reviewed by: alc MFC after: 2 weeks --- sys/vm/vm_page.h | 2 -- 1 file changed, 2 deletions(-) (limited to 'sys/vm/vm_page.h') diff --git a/sys/vm/vm_page.h b/sys/vm/vm_page.h index f9d1e97..14c9436 100644 --- a/sys/vm/vm_page.h +++ b/sys/vm/vm_page.h @@ -284,8 +284,6 @@ extern struct vpglocks pa_lock[]; #include -#include - #include /* -- cgit v1.1 From a3d0fb01750888083d0ed5945f2d835c310c40e6 Mon Sep 17 00:00:00 2001 From: kib Date: Tue, 14 Aug 2012 11:45:47 +0000 Subject: Do not leave invalid pages in the object after the short read for a network file systems (not only NFS proper). Short reads cause pages other then the requested one, which were not filled by read response, to stay invalid. Change the vm_page_readahead_finish() interface to not take the error code, but instead to make a decision to free or to (de)activate the page only by its validity. As result, not requested invalid pages are freed even if the read RPC indicated success. Noted and reviewed by: alc MFC after: 1 week --- sys/vm/vm_page.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'sys/vm/vm_page.h') diff --git a/sys/vm/vm_page.h b/sys/vm/vm_page.h index 14c9436..410948b 100644 --- a/sys/vm/vm_page.h +++ b/sys/vm/vm_page.h @@ -388,7 +388,7 @@ vm_page_t vm_page_next(vm_page_t m); int vm_page_pa_tryrelock(pmap_t, vm_paddr_t, vm_paddr_t *); vm_page_t vm_page_prev(vm_page_t m); void vm_page_putfake(vm_page_t m); -void vm_page_readahead_finish(vm_page_t m, int error); +void vm_page_readahead_finish(vm_page_t m); void vm_page_reference(vm_page_t m); void vm_page_remove (vm_page_t); void vm_page_rename (vm_page_t, vm_object_t, vm_pindex_t); -- cgit v1.1