Re: [PATCH] ocfs2: fix lock acquisition order in refcounttree
From: Tetsuo Handa
Date: Fri Jul 18 2025 - 09:54:55 EST
On 2025/07/15 11:51, Tetsuo Handa wrote:
> On 2025/07/15 7:15, Diogo Jahchan Koike wrote:
>> Acquiring the locks in refcounttree should follow
>> the ip_alloc --> ip_xattr ordering, as done by multiple
>> code paths in ocfs2; otherwise, we risk an ABBA deadlock
>> (i.e in the start transaction path).
>
> I noticed that ocfs2_reflink() in the same file wants similar change.
>
> down_write(&OCFS2_I(inode)->ip_xattr_sem);
> down_write(&OCFS2_I(inode)->ip_alloc_sem);
> error = __ocfs2_reflink(old_dentry, old_bh,
> new_orphan_inode, preserve);
> up_write(&OCFS2_I(inode)->ip_alloc_sem);
> up_write(&OCFS2_I(inode)->ip_xattr_sem);
>
Moreover, I noticed that e.g. ocfs2_xattr_set_handle() firstly acquires
ip_xatr_sem and then ocfs2_xattr_ibody_find() might acquire ip_alloc_sem.
Diogo, where do you see the ip_alloc --> ip_xattr ordering?
Unless we unify to either ip_alloc --> ip_xattr ordering or
ip_xattr --> ip_alloc ordering (or replace ip_xattr with ip_alloc),
this patch simply changes the location of lockdep warning?