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/fs/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/fs/nfsclient')
-rw-r--r-- | sys/fs/nfsclient/nfs_clbio.c | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/sys/fs/nfsclient/nfs_clbio.c b/sys/fs/nfsclient/nfs_clbio.c index 0224e15..7d6fcab 100644 --- a/sys/fs/nfsclient/nfs_clbio.c +++ b/sys/fs/nfsclient/nfs_clbio.c @@ -196,9 +196,6 @@ ncl_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 @@ -236,18 +233,22 @@ ncl_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); |