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) {
>

Reply via email to