On Mon, Aug 29, 2022 at 01:58:38PM +0200, Martin Pieuchot wrote: > Small refactoring to introduce uvmpd_dropswap(). This will make an > upcoming rewrite of the pdaemon smaller & easier to review :o) > > ok? >
reads ok to me. ok mlarkin > Index: uvm/uvm_pdaemon.c > =================================================================== > RCS file: /cvs/src/sys/uvm/uvm_pdaemon.c,v > retrieving revision 1.102 > diff -u -p -r1.102 uvm_pdaemon.c > --- uvm/uvm_pdaemon.c 22 Aug 2022 12:03:32 -0000 1.102 > +++ uvm/uvm_pdaemon.c 29 Aug 2022 11:55:52 -0000 > @@ -105,6 +105,7 @@ void uvmpd_scan(struct uvm_pmalloc *); > void uvmpd_scan_inactive(struct uvm_pmalloc *, struct pglist *); > void uvmpd_tune(void); > void uvmpd_drop(struct pglist *); > +void uvmpd_dropswap(struct vm_page *); > > /* > * uvm_wait: wait (sleep) for the page daemon to free some pages > @@ -367,6 +368,23 @@ uvm_aiodone_daemon(void *arg) > } > > > +/* > + * uvmpd_dropswap: free any swap allocated to this page. > + * > + * => called with owner locked. > + */ > +void > +uvmpd_dropswap(struct vm_page *pg) > +{ > + struct vm_anon *anon = pg->uanon; > + > + if ((pg->pg_flags & PQ_ANON) && anon->an_swslot) { > + uvm_swap_free(anon->an_swslot, 1); > + anon->an_swslot = 0; > + } else if (pg->pg_flags & PQ_AOBJ) { > + uao_dropswap(pg->uobject, pg->offset >> PAGE_SHIFT); > + } > +} > > /* > * uvmpd_scan_inactive: scan an inactive list for pages to clean or free. > @@ -566,16 +584,7 @@ uvmpd_scan_inactive(struct uvm_pmalloc * > KASSERT(uvmexp.swpginuse <= uvmexp.swpages); > if ((p->pg_flags & PQ_SWAPBACKED) && > uvmexp.swpginuse == uvmexp.swpages) { > - > - if ((p->pg_flags & PQ_ANON) && > - p->uanon->an_swslot) { > - uvm_swap_free(p->uanon->an_swslot, 1); > - p->uanon->an_swslot = 0; > - } > - if (p->pg_flags & PQ_AOBJ) { > - uao_dropswap(p->uobject, > - p->offset >> PAGE_SHIFT); > - } > + uvmpd_dropswap(p); > } > > /* > @@ -599,16 +608,7 @@ uvmpd_scan_inactive(struct uvm_pmalloc * > */ > if (swap_backed) { > /* free old swap slot (if any) */ > - if (anon) { > - if (anon->an_swslot) { > - uvm_swap_free(anon->an_swslot, > - 1); > - anon->an_swslot = 0; > - } > - } else { > - uao_dropswap(uobj, > - p->offset >> PAGE_SHIFT); > - } > + uvmpd_dropswap(p); > > /* start new cluster (if necessary) */ > if (swslot == 0) { >