In vm_object_split(), busy and consequently unbusy the pages only when

swap_pager_copy() is invoked, otherwise there is no reason to do so.
This will eliminate the necessity to busy pages most of the times.

Sponsored by:	EMC / Isilon storage division
Reviewed by:	alc
This commit is contained in:
Attilio Rao 2013-06-04 22:47:01 +00:00
parent 2ce303e83d
commit dfd55c0c7b
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=251397

View File

@ -1390,7 +1390,8 @@ vm_object_split(vm_map_entry_t entry)
vm_page_rename(m, new_object, idx); vm_page_rename(m, new_object, idx);
vm_page_unlock(m); vm_page_unlock(m);
/* page automatically made dirty by rename and cache handled */ /* page automatically made dirty by rename and cache handled */
vm_page_busy(m); if (orig_object->type == OBJT_SWAP)
vm_page_busy(m);
} }
if (orig_object->type == OBJT_SWAP) { if (orig_object->type == OBJT_SWAP) {
/* /*
@ -1398,6 +1399,8 @@ vm_object_split(vm_map_entry_t entry)
* and new_object's locks are released and reacquired. * and new_object's locks are released and reacquired.
*/ */
swap_pager_copy(orig_object, new_object, offidxstart, 0); swap_pager_copy(orig_object, new_object, offidxstart, 0);
TAILQ_FOREACH(m, &new_object->memq, listq)
vm_page_wakeup(m);
/* /*
* Transfer any cached pages from orig_object to new_object. * Transfer any cached pages from orig_object to new_object.
@ -1413,8 +1416,6 @@ vm_object_split(vm_map_entry_t entry)
new_object); new_object);
} }
VM_OBJECT_WUNLOCK(orig_object); VM_OBJECT_WUNLOCK(orig_object);
TAILQ_FOREACH(m, &new_object->memq, listq)
vm_page_wakeup(m);
VM_OBJECT_WUNLOCK(new_object); VM_OBJECT_WUNLOCK(new_object);
entry->object.vm_object = new_object; entry->object.vm_object = new_object;
entry->offset = 0LL; entry->offset = 0LL;