diff options
| author | Alan Cox <alc@FreeBSD.org> | 2010-05-05 18:16:06 +0000 |
|---|---|---|
| committer | Alan Cox <alc@FreeBSD.org> | 2010-05-05 18:16:06 +0000 |
| commit | 5ac59343be1105caac5ff4bbc4c20f94da925a7c (patch) | |
| tree | aed312c92f14a164a2e36963e81da2e8973206a2 /sys/nfsclient | |
| parent | b5f770bd8627d79822809f223a3ad5eab7bcadd6 (diff) | |
Notes
Diffstat (limited to 'sys/nfsclient')
| -rw-r--r-- | sys/nfsclient/nfs_bio.c | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/sys/nfsclient/nfs_bio.c b/sys/nfsclient/nfs_bio.c index 13effd0aa3a2..c93d677eaddb 100644 --- a/sys/nfsclient/nfs_bio.c +++ b/sys/nfsclient/nfs_bio.c @@ -129,12 +129,15 @@ nfs_getpages(struct vop_getpages_args *ap) */ VM_OBJECT_LOCK(object); if (pages[ap->a_reqpage]->valid != 0) { - vm_page_lock_queues(); for (i = 0; i < npages; ++i) { - if (i != ap->a_reqpage) + if (i != ap->a_reqpage) { + vm_page_lock(pages[i]); + vm_page_lock_queues(); vm_page_free(pages[i]); + vm_page_unlock_queues(); + vm_page_unlock(pages[i]); + } } - vm_page_unlock_queues(); VM_OBJECT_UNLOCK(object); return (0); } @@ -169,12 +172,15 @@ nfs_getpages(struct vop_getpages_args *ap) if (error && (uio.uio_resid == count)) { nfs_printf("nfs_getpages: error %d\n", error); VM_OBJECT_LOCK(object); - vm_page_lock_queues(); for (i = 0; i < npages; ++i) { - if (i != ap->a_reqpage) + if (i != ap->a_reqpage) { + vm_page_lock(pages[i]); + vm_page_lock_queues(); vm_page_free(pages[i]); + vm_page_unlock_queues(); + vm_page_unlock(pages[i]); + } } - vm_page_unlock_queues(); VM_OBJECT_UNLOCK(object); return (VM_PAGER_ERROR); } |
