diff options
author | alc <alc@FreeBSD.org> | 2010-05-07 15:49:43 +0000 |
---|---|---|
committer | alc <alc@FreeBSD.org> | 2010-05-07 15:49:43 +0000 |
commit | 3c8033e013869592babb928a6c8f569b9933f50d (patch) | |
tree | c95d39437ab8d8d820e5bf3ff157c2c97e2cf7d5 /sys/nfsclient | |
parent | c4496831804ff579b314fe34248c4da316de7fb7 (diff) | |
download | FreeBSD-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.c | 17 |
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); |