lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CAHc6FU7kH3VfyERRTFuCshiSq0c-ttJLG7OeX_j31K9ehvH7uQ@mail.gmail.com>
Date: Tue, 3 Feb 2026 12:16:57 +0100
From: Andreas Gruenbacher <agruenba@...hat.com>
To: Guilherme Giacomo Simoes <trintaeoitogc@...il.com>
Cc: gfs2@...ts.linux.dev, linux-kernel@...r.kernel.org
Subject: Re: [RESEND PATCH] gfs2: do not evict glocks with populated address spaces

Guilherme,

On Tue, Feb 3, 2026 at 11:40 AM Guilherme Giacomo Simoes
<trintaeoitogc@...il.com> wrote:
> Metadata glocks may have associated address spaces used as caches. Avoid
> reclaiming such glocks under memory pressure while their mappings are
> still populated or their state is not unlocked, as this can lead to
> invalid page cache state and GLOCK_BUG_ON().

What invalid page cache state and GLOCK_BUG_ON() errors is this about, exactly?

> Signed-off-by: Guilherme Giacomo Simoes <trintaeoitogc@...il.com>
> ---
>  fs/gfs2/glock.h | 30 ++++++++++++++++++++++++++++++
>  fs/gfs2/super.c |  3 +++
>  2 files changed, 33 insertions(+)
>
> diff --git a/fs/gfs2/glock.h b/fs/gfs2/glock.h
> index 55d5985f32a0..12f57461f687 100644
> --- a/fs/gfs2/glock.h
> +++ b/fs/gfs2/glock.h
> @@ -305,4 +305,34 @@ static inline bool glock_needs_demote(struct gfs2_glock *gl)
>                 test_bit(GLF_PENDING_DEMOTE, &gl->gl_flags));
>  }
>
> +/*
> + * gfs2_glock_not_evictable - check if a glock is not evictable
> + * @gl:        The glock to check
> + *
> + * Glocks which do not represent normal filesystem inodes (e.g. statfs, quota, rindex)
> + * may have associated address spaces used as metadata caches. These glocks must not
> + * be reclaimed under memory pressure while their mappings are still populated or their
> + * state is not unlocked.
> + */
> +
> +static inline bool gfs2_glock_not_evictable(struct gfs2_glock *gl)
> +{
> +       if (gl->gl_name.ln_type == LM_TYPE_INODE)
> +               return false;
> +
> +       if (gl->gl_ops->go_flags & GLOF_ASPACE) {
> +               struct gfs2_glock_aspace *gla;
> +
> +               gla = container_of(gl, struct gfs2_glock_aspace, glock);
> +
> +               if (!mapping_empty(&gla->mapping))
> +                       return true;
> +       }
> +
> +       if (gl->gl_state != LM_ST_UNLOCKED)
> +               return true;
> +
> +       return false;
> +}
> +
>  #endif /* __GLOCK_DOT_H__ */
> diff --git a/fs/gfs2/super.c b/fs/gfs2/super.c
> index f6cd907b3ec6..86544cdafe53 100644
> --- a/fs/gfs2/super.c
> +++ b/fs/gfs2/super.c
> @@ -1164,6 +1164,9 @@ static int gfs2_show_options(struct seq_file *s, struct dentry *root)
>
>  static void gfs2_glock_put_eventually(struct gfs2_glock *gl)
>  {
> +       if (gfs2_glock_not_evictable(gl))
> +               return;
> +

This leaks a glock reference, so it's definitely wrong.

>         if (current->flags & PF_MEMALLOC)
>                 gfs2_glock_put_async(gl);
>         else
> --
> 2.34.1
>

Thanks,
Andreas


Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ