From: Sergey Senozhatsky <senozhatsky@chromium.org>
To: Baokun Li <libaokun@linux.alibaba.com>
Cc: Sergey Senozhatsky <senozhatsky@chromium.org>,
Theodore Ts'o <tytso@mit.edu>, Jan Kara <jack@suse.cz>,
Andreas Dilger <adilger.kernel@dilger.ca>,
Ojaswin Mujoo <ojaswin@linux.ibm.com>,
"Ritesh Harjani (IBM)" <ritesh.list@gmail.com>,
Zhang Yi <yi.zhang@huawei.com>,
linux-ext4@vger.kernel.org, linux-kernel@vger.kernel.org,
Sarthak Kukreti <sarthakkukreti@google.com>
Subject: Re: [PATCH] fs/ext4: fix ABBA deadlock in ext4_rmdir()
Date: Fri, 28 Aug 2026 13:03:51 +0900 [thread overview]
Message-ID: <apEIlXQvvZ542SK3@google.com> (raw)
In-Reply-To: <3d3a1fdc-9d65-4524-9957-a872595e3621@linux.alibaba.com>
On (26/08/28 10:48), Baokun Li wrote:
> On 2026/8/27 20:50, Sergey Senozhatsky wrote:
> > We observe the following ABBA deadlock (casefolding enabled):
> >
> > INFO: task jbd2/dm-13-8:447 blocked for more than 720 seconds.
> > task:jbd2/dm-13-8 state:D stack:0 pid:447 tgid:447 ppid:2
> > Call Trace:
> > <TASK>
> > __schedule+0xc2c/0xe60
> > schedule+0x40/0xe0
> > jbd2_journal_wait_updates+0x8f/0xf0
> > jbd2_journal_commit_transaction+0x321/0x1850
> > kjournald2+0xa9/0x230
> > kthread+0x226/0x2a0
> > ret_from_fork+0x101/0x1e0
> > ret_from_fork_asm+0x1a/0x30
> >
> > INFO: task Thread-10:4161 blocked for more than 720 seconds.
> > task:Thread-10 state:D stack:0 pid:4161 tgid:3848 ppid:540
> > Call Trace:
> > <TASK>
> > __schedule+0xc2c/0xe60
> > schedule+0x40/0xe0
> > wait_transaction_locked+0x8c/0xd0
> > start_this_handle+0x252/0x870
> > jbd2__journal_start+0x120/0x280
> > __ext4_journal_start_sb+0x11a/0x250
> > ext4_evict_inode+0x208/0x760
> > iput+0x222/0x5c0
> > dput+0x293/0x690
> > ____fput+0x145/0x2b0
> > task_work_run+0x7a/0xb0
> > exit_to_user_mode_loop+0xc0/0xd0
> > do_syscall_64+0x14b/0xf10
> > entry_SYSCALL_64_after_hwframe+0x76/0x7e
> >
> > NMI backtrace for cpu 0
> > CPU: 0 UID: 1010216 PID: 4160 Comm: Thread-7
> > RIP: 0010:d_walk+0x0/0x290
> > [..]
> > Call Trace:
> > <TASK>
> > shrink_dcache_parent+0xb2/0x100
> > d_invalidate+0x50/0x110
> > ext4_rmdir+0x3a2/0x3d0
> > vfs_rmdir+0x9d/0x1d0
> > do_rmdir+0xf0/0x330
> > __x64_sys_unlinkat+0x34/0x50
> > do_syscall_64+0x61/0xf10
> >
> > The problem is that ext4_rmdir() calls d_invalidate() before stopping
> > the jbd2 transaction handle. Because d_invalidate() traverses child
> > dentries it can encounter dying or in-use dentries. If a concurrent
> > thread executing __dentry_kill() on a child dentry invokes ext4_evict_inode(),
> > it requests a new transaction handle via ext4_journal_start(), which
> > waits for all running handles to close. However, the thread executing
> > ext4_rmdir() still holds its active transaction handle while looping
> > in shrink_dcache_parent() waiting for the dying child dentry to complete
> > eviction.
> >
> > Stop transaction handle in ext4_rmdir() before calling d_invalidate().
> >
> > Fixes: b886ee3e778e ("ext4: Support case-insensitive file name lookups")
> > Co-developed-by: Sarthak Kukreti <sarthakkukreti@google.com>
> > Signed-off-by: Sarthak Kukreti <sarthakkukreti@google.com>
> > Signed-off-by: Sergey Senozhatsky <senozhatsky@chromium.org>
>
> Looks good!
>
> Reviewed-by: Baokun Li <libaokun@linux.alibaba.com>
Thanks!
next prev parent reply other threads:[~2026-08-28 4:03 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-27 12:50 [PATCH] fs/ext4: fix ABBA deadlock in ext4_rmdir() Sergey Senozhatsky
2026-08-27 13:01 ` sashiko-bot
2026-08-27 13:41 ` Jan Kara
2026-08-28 4:03 ` Sergey Senozhatsky
2026-08-28 2:48 ` Baokun Li
2026-08-28 4:03 ` Sergey Senozhatsky [this message]
2026-08-29 9:53 ` Zhang Yi
2026-09-28 8:36 ` Sergey Senozhatsky
2026-10-09 8:56 ` Theodore Ts'o
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=apEIlXQvvZ542SK3@google.com \
--to=senozhatsky@chromium.org \
--cc=adilger.kernel@dilger.ca \
--cc=jack@suse.cz \
--cc=libaokun@linux.alibaba.com \
--cc=linux-ext4@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=ojaswin@linux.ibm.com \
--cc=ritesh.list@gmail.com \
--cc=sarthakkukreti@google.com \
--cc=tytso@mit.edu \
--cc=yi.zhang@huawei.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 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.