void
swap_pager_unswapped(vm_page_t m)
{
- swp_pager_meta_ctl(m->object, m->pindex, SWM_FREE);
+ if (m->flags & PG_SWAPPED) {
+ swp_pager_meta_ctl(m->object, m->pindex, SWM_FREE);
+ vm_page_flag_clear(m, PG_SWAPPED);
+ }
}
/*
m->valid = VM_PAGE_BITS_ALL;
vm_page_undirty(m);
vm_page_flag_clear(m, PG_ZERO | PG_SWAPINPROG);
+ vm_page_flag_set(m, PG_SWAPPED);
/*
* We have to wake specifically requested pages
*/
vm_page_undirty(m);
vm_page_flag_clear(m, PG_SWAPINPROG);
+ vm_page_flag_set(m, PG_SWAPPED);
vm_page_io_finish(m);
if (vm_page_count_severe())
vm_page_deactivate(m);
* somewhere, and that the page can be dirtied by hardware at any time
* and may have to be tested for that. The modified bit in unmanaged
* mappings or in the special clean map is not tested.
+ *
+ * PG_SWAPPED indicates that the page is backed by a swap block. Any
+ * VM object type other than OBJT_DEFAULT can have swap-backed pages now.
*/
#define PG_BUSY 0x0001 /* page is in transit (O) */
#define PG_WANTED 0x0002 /* someone is waiting for page (O) */
#define PG_UNMANAGED 0x0800 /* No PV management for page */
#define PG_MARKER 0x1000 /* special queue marker page */
#define PG_RAM 0x2000 /* read ahead mark */
+#define PG_SWAPPED 0x4000 /* backed by swap */
/*
* Misc constants.