diff options
author | alc <alc@FreeBSD.org> | 2002-07-23 04:39:48 +0000 |
---|---|---|
committer | alc <alc@FreeBSD.org> | 2002-07-23 04:39:48 +0000 |
commit | b5578712f7a8afca882ec729970e6fedd1aa4751 (patch) | |
tree | 290e407d110b18bf6e04aaf0e221c195553f1d34 /sys/vm/vm_object.c | |
parent | c540d472eb276ef84bd4686ecd8ed70d5aad9b63 (diff) | |
download | FreeBSD-src-b5578712f7a8afca882ec729970e6fedd1aa4751.zip FreeBSD-src-b5578712f7a8afca882ec729970e6fedd1aa4751.tar.gz |
o Lock page queue accesses by vm_page_dontneed().
o Assert that the page queue lock is held in vm_page_dontneed().
Diffstat (limited to 'sys/vm/vm_object.c')
-rw-r--r-- | sys/vm/vm_object.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/sys/vm/vm_object.c b/sys/vm/vm_object.c index da77d7f..915029e 100644 --- a/sys/vm/vm_object.c +++ b/sys/vm/vm_object.c @@ -1084,7 +1084,7 @@ shadowlookup: if (vm_page_sleep_busy(m, TRUE, "madvpo")) goto relookup; - + vm_page_lock_queues(); if (advise == MADV_WILLNEED) { vm_page_activate(m); } else if (advise == MADV_DONTNEED) { @@ -1109,9 +1109,10 @@ shadowlookup: m->dirty = 0; m->act_count = 0; vm_page_dontneed(m); - if (tobject->type == OBJT_SWAP) - swap_pager_freespace(tobject, tpindex, 1); } + vm_page_unlock_queues(); + if (advise == MADV_FREE && tobject->type == OBJT_SWAP) + swap_pager_freespace(tobject, tpindex, 1); } mtx_unlock(&Giant); } |