From: Heming Zhao via Ocfs2-devel <ocfs2-devel@oss.oracle.com>
To: joseph.qi@linux.alibaba.com, ocfs2-devel@oss.oracle.com
Cc: jack@suse.com
Subject: [Ocfs2-devel] discuss about jbd2 assertion in defragment path
Date: Fri, 10 Feb 2023 18:04:57 +0800 [thread overview]
Message-ID: <20230210100457.xv5wchadnd7kkazb@c73> (raw)
Hello Joseph,
I am sorry to wake up a long time ago thread.
All mails of this thread (my patch is [1]):
[1] https://oss.oracle.com/pipermail/ocfs2-devel/2022-May/000101.html
[2] https://oss.oracle.com/pipermail/ocfs2-devel/2022-June/000105.html
[3] https://oss.oracle.com/pipermail/ocfs2-devel/2022-June/000109.html
[4] https://oss.oracle.com/pipermail/ocfs2-devel/2022-June/000217.html
I re-checked ocfs2 defragmentation & jbd2 flow recently, I still think my
patch [1] is right. At least, the fixing code is correct, the patch commit
log needs to polish.
This bug has the same root cause of commit 7f27ec978b0e ("ocfs2: call
ocfs2_journal_access_di() before ocfs2_journal_dirty() in ocfs2_write_end_nolock()").
For this bug, jbd2_journal_restart() is called by ocfs2_split_extent() during
defragmenting, and it's not about "not enough credits" issue you ever said in [2].
I explain my thinking again in this mail.
the crash call flow:
ocfs2_defrag_extent //caller call it in while() loop.
+ handle = ocfs2_start_trans(osb, credits)
+ __ocfs2_move_extent
| + ocfs2_journal_access_di //[a]
| + ocfs2_split_extent //[b]
| | + if //[b.1]
| | | ocfs2_replace_extent_rec/ocfs2_split_and_insert
| | + else
| | ocfs2_try_to_merge_extent
| |
| + ocfs2_journal_dirty //[c]
|
+ ocfs2_commit_trans(osb, handle) //<== complete this handle
In my viewpoint, ocfs2_split_extent() is journal self-service function. I still
belive the two lines ([a] & [c]) in __ocfs2_move_extent() are totally useless.
In ocfs2_split_extent(), the code from the first code line to "if-else" code
area ([b.1]) doesn't need any journal protection, and we also could see there
are only read operations.
If we worry about data corruption after removing [a] & [c], (e.g: my eyes missed
some journal operations from [a] to [b.1]), we could only delete [c]. So the
fixed code seems (only remove line [c]):
ocfs2_defrag_extent
+ handle = ocfs2_start_trans(osb, credits)
+ __ocfs2_move_extent
| + ocfs2_journal_access_di //[a] <-- keep it, but remove pair dirty action
| + ocfs2_split_extent //[b]
| + if //[b.1]
| | ocfs2_replace_extent_rec/ocfs2_split_and_insert
| + else
| ocfs2_try_to_merge_extent
|
+ ocfs2_commit_trans(osb, handle)
Thanks,
Heming
_______________________________________________
Ocfs2-devel mailing list
Ocfs2-devel@oss.oracle.com
https://oss.oracle.com/mailman/listinfo/ocfs2-devel
next reply other threads:[~2023-02-10 10:05 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-02-10 10:04 Heming Zhao via Ocfs2-devel [this message]
2023-02-14 2:52 ` [Ocfs2-devel] discuss about jbd2 assertion in defragment path Joseph Qi via Ocfs2-devel
2023-02-14 4:33 ` Heming Zhao via Ocfs2-devel
2023-02-14 11:08 ` Joseph Qi via Ocfs2-devel
2023-02-14 11:48 ` Heming Zhao via Ocfs2-devel
2023-02-15 2:06 ` Joseph Qi via Ocfs2-devel
2023-02-15 6:20 ` Heming Zhao via Ocfs2-devel
2023-02-15 6:42 ` Joseph Qi via Ocfs2-devel
2023-02-15 7:29 ` Heming Zhao via Ocfs2-devel
2023-02-15 10:02 ` Heming Zhao via Ocfs2-devel
2023-02-15 12:04 ` Joseph Qi via Ocfs2-devel
2023-02-16 14:58 ` Heming Zhao via Ocfs2-devel
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=20230210100457.xv5wchadnd7kkazb@c73 \
--to=ocfs2-devel@oss.oracle.com \
--cc=heming.zhao@suse.com \
--cc=jack@suse.com \
--cc=joseph.qi@linux.alibaba.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).