summaryrefslogtreecommitdiffstats
path: root/sys/nfsclient
diff options
context:
space:
mode:
authoralc <alc@FreeBSD.org>2010-05-07 15:49:43 +0000
committeralc <alc@FreeBSD.org>2010-05-07 15:49:43 +0000
commit3c8033e013869592babb928a6c8f569b9933f50d (patch)
treec95d39437ab8d8d820e5bf3ff157c2c97e2cf7d5 /sys/nfsclient
parentc4496831804ff579b314fe34248c4da316de7fb7 (diff)
downloadFreeBSD-src-3c8033e013869592babb928a6c8f569b9933f50d.zip
FreeBSD-src-3c8033e013869592babb928a6c8f569b9933f50d.tar.gz
Push down the page queues lock into vm_page_activate().
Diffstat (limited to 'sys/nfsclient')
-rw-r--r--sys/nfsclient/nfs_bio.c17
1 files changed, 9 insertions, 8 deletions
diff --git a/sys/nfsclient/nfs_bio.c b/sys/nfsclient/nfs_bio.c
index 37da34b..e85fab8 100644
--- a/sys/nfsclient/nfs_bio.c
+++ b/sys/nfsclient/nfs_bio.c
@@ -194,9 +194,6 @@ nfs_getpages(struct vop_getpages_args *ap)
nextoff = toff + PAGE_SIZE;
m = pages[i];
- vm_page_lock(m);
- vm_page_lock_queues();
-
if (nextoff <= size) {
/*
* Read operation filled an entire page
@@ -234,18 +231,22 @@ nfs_getpages(struct vop_getpages_args *ap)
* now tell them that it is ok to use.
*/
if (!error) {
- if (m->oflags & VPO_WANTED)
+ if (m->oflags & VPO_WANTED) {
+ vm_page_lock(m);
vm_page_activate(m);
- else
+ vm_page_unlock(m);
+ } else {
+ vm_page_lock(m);
vm_page_deactivate(m);
+ vm_page_unlock(m);
+ }
vm_page_wakeup(m);
} else {
+ vm_page_lock(m);
vm_page_free(m);
+ vm_page_unlock(m);
}
}
-
- vm_page_unlock_queues();
- vm_page_unlock(m);
}
VM_OBJECT_UNLOCK(object);
return (0);
OpenPOWER on IntegriCloud