summaryrefslogtreecommitdiffstats
path: root/sys/kern/vfs_bio.c
diff options
context:
space:
mode:
authoralc <alc@FreeBSD.org>2002-07-14 19:45:46 +0000
committeralc <alc@FreeBSD.org>2002-07-14 19:45:46 +0000
commite650551ab94d75db5cd689ab630bf45931ec961d (patch)
tree5447bff25f7002f154b187193df4dce5c776028d /sys/kern/vfs_bio.c
parent13868892dbc49cff489b66840185bd3a2c489495 (diff)
downloadFreeBSD-src-e650551ab94d75db5cd689ab630bf45931ec961d.zip
FreeBSD-src-e650551ab94d75db5cd689ab630bf45931ec961d.tar.gz
o Lock page queue accesses by vm_page_wire().
Diffstat (limited to 'sys/kern/vfs_bio.c')
-rw-r--r--sys/kern/vfs_bio.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/sys/kern/vfs_bio.c b/sys/kern/vfs_bio.c
index 9b7c794..58a5adb 100644
--- a/sys/kern/vfs_bio.c
+++ b/sys/kern/vfs_bio.c
@@ -2698,8 +2698,10 @@ allocbuf(struct buf *bp, int size)
VM_WAIT;
vm_pageout_deficit += desiredpages - bp->b_npages;
} else {
+ vm_page_lock_queues();
vm_page_wire(m);
vm_page_wakeup(m);
+ vm_page_unlock_queues();
bp->b_flags &= ~B_CACHE;
bp->b_pages[bp->b_npages] = m;
++bp->b_npages;
@@ -2732,8 +2734,10 @@ allocbuf(struct buf *bp, int size)
(cnt.v_free_min + cnt.v_cache_min))) {
pagedaemon_wakeup();
}
+ vm_page_lock_queues();
vm_page_flag_clear(m, PG_ZERO);
vm_page_wire(m);
+ vm_page_unlock_queues();
bp->b_pages[bp->b_npages] = m;
++bp->b_npages;
}
@@ -3354,9 +3358,11 @@ tryagain:
VM_WAIT;
goto tryagain;
}
+ vm_page_lock_queues();
vm_page_wire(p);
p->valid = VM_PAGE_BITS_ALL;
vm_page_flag_clear(p, PG_ZERO);
+ vm_page_unlock_queues();
pmap_qenter(pg, &p, 1);
bp->b_pages[index] = p;
vm_page_wakeup(p);
OpenPOWER on IntegriCloud