All of lore.kernel.org
 help / color / mirror / Atom feed
From: Heming Zhao <heming.zhao@suse.com>
To: d.morgun@ispras.ru
Cc: Joseph Qi <joseph.qi@linux.alibaba.com>,
	Mark Fasheh <mark@fasheh.com>,  Joel Becker <jlbec@evilplan.org>,
	linux-kernel@vger.kernel.org, lvc-project@linuxtesting.org,
	 ocfs2-devel@lists.linux.dev
Subject: Re: [PATCH] ocfs2: validate la_size before ocfs2_clear_local_alloc()
Date: Tue, 29 Sep 2026 12:13:27 +0800	[thread overview]
Message-ID: <ars491U6UjiFdf1_@p15> (raw)
In-Reply-To: <e13b47fa02d27dbf4c44ae300fc082a6@ispras.ru>

On Sun, Sep 27, 2026 at 02:04:05PM +0300, d.morgun@ispras.ru wrote:
> On 8/11/26 9:57 AM, Joseph Qi wrote:
> > I think we can validate localalloc inode during block read in
> > ocfs2_validate_inode_block(), which will drop the duplicate code in
> > callers.
> 
> Hi Joseph,
> 
> Thanks for the suggestion. I moved the la_size check there, and it
> does catch the current reproducer during mount. Before dropping the
> duplicate checks in ocfs2_begin_local_alloc_recovery() and
> ocfs2_load_local_alloc(), I'd like to raise two concerns:
> 
> 1. ocfs2_begin_local_alloc_recovery() reads the inode with
>    OCFS2_BH_IGNORE_CACHE, and ocfs2_read_blocks() skips validation
>    for dirty buffers. I traced through jbd2 replay: ocfs2_replay_journal()
>    calls jbd2_journal_flush() right after jbd2_journal_load(), and
>    jbd2_journal_recover() itself calls sync_blockdev(), which should
>    clear the dirty flag before ocfs2_begin_local_alloc_recovery() runs.
>    So this may not be reachable in practice, but I haven't been able
>    to confirm it directly. The current reproducer hits the
>    validator with a clean buffer during the initial mount, before
>    recovery is reached at all. Is it possible to confirm that the
>    buffer is guaranteed to be clean by that point?

In my view, OCFS2_BH_IGNORE_CACHE tells the lower layer to bypass the cache.
If the buffer is dirty on this code path, that would be a separate bug.

> 
> 2. The check is gated on OCFS2_LOCAL_ALLOC_FL, but
>    ocfs2_validate_inode_block() doesn't receive the inode's expected
>    type, so it can't verify that the on-disk flags actually match
>    what the caller expects. A corrupted local alloc inode with the
>    flag cleared would skip the check, even though
>    ocfs2_clear_local_alloc() still treats its id2 as i_lab. Is there
>    an existing way to check this correspondence? Otherwise, this
>    might call for a separate per-type validation helper that takes
>    the expected inode type, which could also help elsewhere.
> 
> My inclination is: v1 (the check directly in
> ocfs2_begin_local_alloc_recovery() and ocfs2_load_local_alloc())
> has held up in testing so far, with a small additional fix on my
> end. Both call sites operate in the LOCAL_ALLOC_SYSTEM_INODE context
> and check la_size before using id2 as i_lab, so they do not depend on
> OCFS2_LOCAL_ALLOC_FL for deciding whether to validate la_size.
> Returning this new error also made a separate, pre-existing bug in
> the recovery thread reachable, for which I have a small follow-up
> fix.
> 
> If the two concerns with ocfs2_validate_inode_block() can be
> addressed without too much churn, I agree it is the better place
> for this check, since it would cover every caller uniformly.
> Otherwise, I'd rather keep it in v1's approach.
> 
> Does this seem reasonable, or would you weigh it differently?
> 
> Thanks,
> Dmitry
> 

Hope I understand your concerns correctly.
You can reject further operations in ocfs2_begin_local_alloc_recovery() when
OCFS2_LOCAL_ALLOC_FL is not set, while keeping the la_size check in
ocfs2_validate_inode_block() guarded by OCFS2_LOCAL_ALLOC_FL.

Thanks,
Heming

  reply	other threads:[~2026-09-29  4:13 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-08-10 11:35 [PATCH] ocfs2: validate la_size before ocfs2_clear_local_alloc() Dmitry Morgun
2026-08-11  6:57 ` Joseph Qi
2026-09-27 11:04   ` d.morgun
2026-09-29  4:13     ` Heming Zhao [this message]
  -- strict thread matches above, loose matches on Subject: below --
2026-08-11 19:39 Dmitry Morgun

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=ars491U6UjiFdf1_@p15 \
    --to=heming.zhao@suse.com \
    --cc=d.morgun@ispras.ru \
    --cc=jlbec@evilplan.org \
    --cc=joseph.qi@linux.alibaba.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=lvc-project@linuxtesting.org \
    --cc=mark@fasheh.com \
    --cc=ocfs2-devel@lists.linux.dev \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.