Linux EXT4 FS development
 help / color / mirror / Atom feed
* [PATCH RESEND] ext4: Avoid entering writeback paths during fastcommit replay
@ 2026-08-20 11:25 Jan Kara
  2026-08-20 11:37 ` sashiko-bot
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Jan Kara @ 2026-08-20 11:25 UTC (permalink / raw)
  To: Ted Tso; +Cc: linux-ext4, Jan Kara, Venkat Rao Bagalkote, Ojaswin Mujoo

Fastcommit replay effectively happens in nojournal mode. This results in
ext4_mark_iloc_dirty() setting I_METADATA_WRITEBACK flag and as a result
we end up entering filesystem writeback functions. However during
fastcommit replay s_writepages_rwsem isn't initialized yet and hence we
crash.

Fix the problem by avoiding setting I_METADATA_WRITEBACK during
fastcommit replay. Journal replay flushes the whole block device after
replay anyway so all metadata is properly persisted and replay is faster
this way as a bonus.

Fixes: c26339e1df33 ("ext4: Fix data integrity writeout issues in nojournal mode")
Reported-by: Venkat Rao Bagalkote <venkat88@linux.ibm.com>
Reported-by: Ojaswin Mujoo <ojaswin@linux.ibm.com>
Signed-off-by: Jan Kara <jack@suse.cz>
---
 fs/ext4/inode.c | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

Hi Ted,

this has fallen through the cracks in VFS tree, now it applies cleanly to
Linus' tree so can you perhaps pick it up and push to Linus during the second
half of the merge window? Thanks!

diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
index 7a1f961cd11c..12ff84ab5741 100644
--- a/fs/ext4/inode.c
+++ b/fs/ext4/inode.c
@@ -6408,9 +6408,10 @@ int ext4_chunk_trans_blocks(struct inode *inode, int nrblocks)
 int ext4_mark_iloc_dirty(handle_t *handle,
 			 struct inode *inode, struct ext4_iloc *iloc)
 {
+	struct super_block *sb = inode->i_sb;
 	int err = 0;
 
-	err = ext4_emergency_state(inode->i_sb);
+	err = ext4_emergency_state(sb);
 	if (unlikely(err)) {
 		put_bh(iloc->bh);
 		return err;
@@ -6425,9 +6426,13 @@ int ext4_mark_iloc_dirty(handle_t *handle,
 	put_bh(iloc->bh);
 	/*
 	 * Mark that there's metadata writeout pending for the inode so that it
-	 * gets properly flushed on fsync(2) and similar.
+	 * gets properly flushed on fsync(2) and similar. We don't bother for
+	 * fastcommit replay as that flushes the whole bdev afterwards anyway.
+	 * It is faster this way and we avoid entering fs writeback paths which
+	 * aren't fully initialized yet.
 	 */
-	if (!EXT4_SB(inode->i_sb)->s_journal) {
+	if (!ext4_handle_valid(handle) &&
+	    !(EXT4_SB(sb)->s_mount_state & EXT4_FC_REPLAY)) {
 		/*
 		 * Inode didn't need to go through dirtying, make sure it is
 		 * attached to wb so that writeback can handle it.
-- 
2.51.0


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH RESEND] ext4: Avoid entering writeback paths during fastcommit replay
  2026-08-20 11:25 [PATCH RESEND] ext4: Avoid entering writeback paths during fastcommit replay Jan Kara
@ 2026-08-20 11:37 ` sashiko-bot
  2026-08-20 16:12 ` Venkat Rao Bagalkote
  2026-08-21  7:41 ` Baokun Li
  2 siblings, 0 replies; 4+ messages in thread
From: sashiko-bot @ 2026-08-20 11:37 UTC (permalink / raw)
  To: Jan Kara; +Cc: tytso, linux-ext4

> Fastcommit replay effectively happens in nojournal mode. This results in
> ext4_mark_iloc_dirty() setting I_METADATA_WRITEBACK flag and as a result
> we end up entering filesystem writeback functions. However during
> fastcommit replay s_writepages_rwsem isn't initialized yet and hence we
> crash.
> 
> Fix the problem by avoiding setting I_METADATA_WRITEBACK during
> fastcommit replay. Journal replay flushes the whole block device after
> replay anyway so all metadata is properly persisted and replay is faster
> this way as a bonus.
> 
> Fixes: c26339e1df33 ("ext4: Fix data integrity writeout issues in nojournal mode")
> Reported-by: Venkat Rao Bagalkote <venkat88@linux.ibm.com>
> Reported-by: Ojaswin Mujoo <ojaswin@linux.ibm.com>
> Signed-off-by: Jan Kara <jack@suse.cz>

Sashiko has reviewed this patch and found no issues. It looks great!

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260820112532.757055-2-jack@suse.cz?part=1


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH RESEND] ext4: Avoid entering writeback paths during fastcommit replay
  2026-08-20 11:25 [PATCH RESEND] ext4: Avoid entering writeback paths during fastcommit replay Jan Kara
  2026-08-20 11:37 ` sashiko-bot
@ 2026-08-20 16:12 ` Venkat Rao Bagalkote
  2026-08-21  7:41 ` Baokun Li
  2 siblings, 0 replies; 4+ messages in thread
From: Venkat Rao Bagalkote @ 2026-08-20 16:12 UTC (permalink / raw)
  To: Jan Kara, Ted Tso; +Cc: linux-ext4, Ojaswin Mujoo


On 20/08/26 4:55 pm, Jan Kara wrote:

> Fastcommit replay effectively happens in nojournal mode. This results in
> ext4_mark_iloc_dirty() setting I_METADATA_WRITEBACK flag and as a result
> we end up entering filesystem writeback functions. However during
> fastcommit replay s_writepages_rwsem isn't initialized yet and hence we
> crash.
>
> Fix the problem by avoiding setting I_METADATA_WRITEBACK during
> fastcommit replay. Journal replay flushes the whole block device after
> replay anyway so all metadata is properly persisted and replay is faster
> this way as a bonus.
>
> Fixes: c26339e1df33 ("ext4: Fix data integrity writeout issues in nojournal mode")
> Reported-by: Venkat Rao Bagalkote <venkat88@linux.ibm.com>
> Reported-by: Ojaswin Mujoo <ojaswin@linux.ibm.com>
> Signed-off-by: Jan Kara <jack@suse.cz>
> ---

Please add below tag, while applying this patch.


Tested-by: Venkat Rao Bagalkote <venkat88@linux.ibm.com>

Regards,

Venkat.

>   fs/ext4/inode.c | 11 ++++++++---
>   1 file changed, 8 insertions(+), 3 deletions(-)
>
> Hi Ted,
>
> this has fallen through the cracks in VFS tree, now it applies cleanly to
> Linus' tree so can you perhaps pick it up and push to Linus during the second
> half of the merge window? Thanks!
>
> diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
> index 7a1f961cd11c..12ff84ab5741 100644
> --- a/fs/ext4/inode.c
> +++ b/fs/ext4/inode.c
> @@ -6408,9 +6408,10 @@ int ext4_chunk_trans_blocks(struct inode *inode, int nrblocks)
>   int ext4_mark_iloc_dirty(handle_t *handle,
>   			 struct inode *inode, struct ext4_iloc *iloc)
>   {
> +	struct super_block *sb = inode->i_sb;
>   	int err = 0;
>   
> -	err = ext4_emergency_state(inode->i_sb);
> +	err = ext4_emergency_state(sb);
>   	if (unlikely(err)) {
>   		put_bh(iloc->bh);
>   		return err;
> @@ -6425,9 +6426,13 @@ int ext4_mark_iloc_dirty(handle_t *handle,
>   	put_bh(iloc->bh);
>   	/*
>   	 * Mark that there's metadata writeout pending for the inode so that it
> -	 * gets properly flushed on fsync(2) and similar.
> +	 * gets properly flushed on fsync(2) and similar. We don't bother for
> +	 * fastcommit replay as that flushes the whole bdev afterwards anyway.
> +	 * It is faster this way and we avoid entering fs writeback paths which
> +	 * aren't fully initialized yet.
>   	 */
> -	if (!EXT4_SB(inode->i_sb)->s_journal) {
> +	if (!ext4_handle_valid(handle) &&
> +	    !(EXT4_SB(sb)->s_mount_state & EXT4_FC_REPLAY)) {
>   		/*
>   		 * Inode didn't need to go through dirtying, make sure it is
>   		 * attached to wb so that writeback can handle it.

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH RESEND] ext4: Avoid entering writeback paths during fastcommit replay
  2026-08-20 11:25 [PATCH RESEND] ext4: Avoid entering writeback paths during fastcommit replay Jan Kara
  2026-08-20 11:37 ` sashiko-bot
  2026-08-20 16:12 ` Venkat Rao Bagalkote
@ 2026-08-21  7:41 ` Baokun Li
  2 siblings, 0 replies; 4+ messages in thread
From: Baokun Li @ 2026-08-21  7:41 UTC (permalink / raw)
  To: Jan Kara; +Cc: Ted Tso, linux-ext4, Venkat Rao Bagalkote, Ojaswin Mujoo

On 2026/8/20 19:25, Jan Kara wrote:
> Fastcommit replay effectively happens in nojournal mode. This results in
> ext4_mark_iloc_dirty() setting I_METADATA_WRITEBACK flag and as a result
> we end up entering filesystem writeback functions. However during
> fastcommit replay s_writepages_rwsem isn't initialized yet and hence we
> crash.
>
> Fix the problem by avoiding setting I_METADATA_WRITEBACK during
> fastcommit replay. Journal replay flushes the whole block device after
> replay anyway so all metadata is properly persisted and replay is faster
> this way as a bonus.
>
> Fixes: c26339e1df33 ("ext4: Fix data integrity writeout issues in nojournal mode")
> Reported-by: Venkat Rao Bagalkote <venkat88@linux.ibm.com>
> Reported-by: Ojaswin Mujoo <ojaswin@linux.ibm.com>
> Signed-off-by: Jan Kara <jack@suse.cz>

Looks good, feel free to add:

Reviewed-by: Baokun Li <libaokun@linux.alibaba.com>

> ---
>  fs/ext4/inode.c | 11 ++++++++---
>  1 file changed, 8 insertions(+), 3 deletions(-)
>
> Hi Ted,
>
> this has fallen through the cracks in VFS tree, now it applies cleanly to
> Linus' tree so can you perhaps pick it up and push to Linus during the second
> half of the merge window? Thanks!
>
> diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
> index 7a1f961cd11c..12ff84ab5741 100644
> --- a/fs/ext4/inode.c
> +++ b/fs/ext4/inode.c
> @@ -6408,9 +6408,10 @@ int ext4_chunk_trans_blocks(struct inode *inode, int nrblocks)
>  int ext4_mark_iloc_dirty(handle_t *handle,
>  			 struct inode *inode, struct ext4_iloc *iloc)
>  {
> +	struct super_block *sb = inode->i_sb;
>  	int err = 0;
>  
> -	err = ext4_emergency_state(inode->i_sb);
> +	err = ext4_emergency_state(sb);
>  	if (unlikely(err)) {
>  		put_bh(iloc->bh);
>  		return err;
> @@ -6425,9 +6426,13 @@ int ext4_mark_iloc_dirty(handle_t *handle,
>  	put_bh(iloc->bh);
>  	/*
>  	 * Mark that there's metadata writeout pending for the inode so that it
> -	 * gets properly flushed on fsync(2) and similar.
> +	 * gets properly flushed on fsync(2) and similar. We don't bother for
> +	 * fastcommit replay as that flushes the whole bdev afterwards anyway.
> +	 * It is faster this way and we avoid entering fs writeback paths which
> +	 * aren't fully initialized yet.
>  	 */
> -	if (!EXT4_SB(inode->i_sb)->s_journal) {
> +	if (!ext4_handle_valid(handle) &&
> +	    !(EXT4_SB(sb)->s_mount_state & EXT4_FC_REPLAY)) {
>  		/*
>  		 * Inode didn't need to go through dirtying, make sure it is
>  		 * attached to wb so that writeback can handle it.



^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2026-08-21  7:41 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-08-20 11:25 [PATCH RESEND] ext4: Avoid entering writeback paths during fastcommit replay Jan Kara
2026-08-20 11:37 ` sashiko-bot
2026-08-20 16:12 ` Venkat Rao Bagalkote
2026-08-21  7:41 ` Baokun Li

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox