svn commit: r367626 - head/sys/geom/bde

Oliver Pinter oliver.pntr at gmail.com
Thu Nov 12 22:12:38 UTC 2020


On Thursday, November 12, 2020, Mateusz Guzik <mjg at freebsd.org> wrote:

> Author: mjg
> Date: Thu Nov 12 20:20:57 2020
> New Revision: 367626
> URL: https://svnweb.freebsd.org/changeset/base/367626
>
> Log:
>   gbde: replace malloc_last_fail with a kludge
>
>   This facilitates removal of malloc_last_fail without really impacting
>   anything.
>
> Modified:
>   head/sys/geom/bde/g_bde_work.c
>
> Modified: head/sys/geom/bde/g_bde_work.c
> ============================================================
> ==================
> --- head/sys/geom/bde/g_bde_work.c      Thu Nov 12 20:20:43 2020
> (r367625)
> +++ head/sys/geom/bde/g_bde_work.c      Thu Nov 12 20:20:57 2020
> (r367626)
> @@ -77,6 +77,20 @@
>  #include <geom/geom.h>
>  #include <geom/bde/g_bde.h>
>
> +/*
> + * FIXME: This used to call malloc_last_fail which in practice was almost
> + * guaranteed to return time_uptime even in face of severe memory
> shortage.
> + * As GBDE is the only consumer the kludge below was added to facilitate
> the
> + * removal with minimial changes. The code should be fixed to respond to
> memory
> + * pressure (e.g., by using lowmem eventhandler) instead.
> + */
> +static int
> +g_bde_malloc_last_fail(void)
> +{
> +
> +       return (time_uptime);
> +}
> +


Previously malloc_last_fail returned a relatively small number - if i read
the code correctly:

-int
-malloc_last_fail(void)
-{
-
-       return (time_uptime - t_malloc_fail);
-}
-


>  static void g_bde_delete_sector(struct g_bde_softc *wp, struct
> g_bde_sector *sp);
>  static struct g_bde_sector * g_bde_new_sector(struct g_bde_work *wp,
> u_int len);
>  static void g_bde_release_keysector(struct g_bde_work *wp);
> @@ -210,7 +224,7 @@ g_bde_get_keysector(struct g_bde_work *wp)
>         g_trace(G_T_TOPOLOGY, "g_bde_get_keysector(%p, %jd)", wp,
> (intmax_t)offset);
>         sc = wp->softc;
>
> -       if (malloc_last_fail() < g_bde_ncache)
> +       if (g_bde_malloc_last_fail() < g_bde_ncache)
>                 g_bde_purge_sector(sc, -1);


And in this case, the semantic change renders all of these calls from alway
true to always false expression.


>
>         sp = TAILQ_FIRST(&sc->freelist);
> @@ -228,7 +242,7 @@ g_bde_get_keysector(struct g_bde_work *wp)
>                 if (sp->ref == 1)
>                         sp->owner = wp;
>         } else {
> -               if (malloc_last_fail() < g_bde_ncache) {
> +               if (g_bde_malloc_last_fail() < g_bde_ncache) {
>                         TAILQ_FOREACH(sp, &sc->freelist, list)
>                                 if (sp->ref == 0)
>                                         break;
> @@ -311,7 +325,7 @@ g_bde_purge_sector(struct g_bde_softc *sc, int fractio
>         if (fraction > 0)
>                 n = sc->ncache / fraction + 1;
>         else
> -               n = g_bde_ncache - malloc_last_fail();
> +               n = g_bde_ncache - g_bde_malloc_last_fail();
>         if (n < 0)
>                 return;
>         if (n > sc->ncache)
> _______________________________________________
> svn-src-head at freebsd.org mailing list
> https://lists.freebsd.org/mailman/listinfo/svn-src-head
> To unsubscribe, send any mail to "svn-src-head-unsubscribe at freebsd.org"
>


More information about the svn-src-head mailing list