From 2e0c2c9a4894aef0a0e16997aee0ee344a63ab13 Mon Sep 17 00:00:00 2001 From: alc Date: Sun, 21 Jul 2002 20:01:32 +0000 Subject: o Lock page queue accesses in nfs_getpages(). --- sys/nfsclient/nfs_bio.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'sys/nfsclient/nfs_bio.c') diff --git a/sys/nfsclient/nfs_bio.c b/sys/nfsclient/nfs_bio.c index e244c64..685c6d1 100644 --- a/sys/nfsclient/nfs_bio.c +++ b/sys/nfsclient/nfs_bio.c @@ -131,6 +131,7 @@ nfs_getpages(struct vop_getpages_args *ap) { vm_page_t m = pages[ap->a_reqpage]; + vm_page_lock_queues(); if (m->valid != 0) { /* handled by vm_fault now */ /* vm_page_zero_invalid(m, TRUE); */ @@ -138,8 +139,10 @@ nfs_getpages(struct vop_getpages_args *ap) if (i != ap->a_reqpage) vm_page_free(pages[i]); } + vm_page_unlock_queues(); return(0); } + vm_page_unlock_queues(); } /* @@ -170,10 +173,12 @@ nfs_getpages(struct vop_getpages_args *ap) if (error && (uio.uio_resid == count)) { printf("nfs_getpages: error %d\n", error); + vm_page_lock_queues(); for (i = 0; i < npages; ++i) { if (i != ap->a_reqpage) vm_page_free(pages[i]); } + vm_page_unlock_queues(); return VM_PAGER_ERROR; } @@ -184,7 +189,7 @@ nfs_getpages(struct vop_getpages_args *ap) */ size = count - uio.uio_resid; - + vm_page_lock_queues(); for (i = 0, toff = 0; i < npages; i++, toff = nextoff) { vm_page_t m; nextoff = toff + PAGE_SIZE; @@ -238,6 +243,7 @@ nfs_getpages(struct vop_getpages_args *ap) } } } + vm_page_unlock_queues(); return 0; } -- cgit v1.1