Re: [PATCH] fs/ntfs3: fix syncing wrong inode on DIRSYNC cross-directory rename
Konstantin Komarov <[email protected]> Fri, 22 May 2026 17:24:04 +0200
| Newsgroups | dev.linux.lists.ntfs3,org.kernel.vger.linux-kernel,org.kernel.vger.stable |
|---|---|
| Message-ID | <[email protected]> |
On 5/6/26 09:55, Zhan Xusheng wrote:
> In ntfs3_rename(), when IS_DIRSYNC(new_dir) is true, the code syncs
> the renamed file inode instead of the target directory new_dir:
> if (IS_DIRSYNC(new_dir))
> ntfs_sync_inode(inode); /* should be new_dir */
>
> DIRSYNC requires that directory metadata changes are written to disk
> synchronously. Since new_dir was modified (a new directory entry was
> added), it is new_dir that must be synced to satisfy the guarantee,
> not the renamed file itself.
>
> This bug has existed since the initial ntfs3 implementation and was
> carried through the refactoring in commit 78ab59fee07f
> ("fs/ntfs3: Rework file operations").
>
> Fix by syncing new_dir instead of inode.
>
> Fixes: 4342306f0f0d ("fs/ntfs3: Add file operations and implementation")
> Cc: [email protected]
> Signed-off-by: Zhan Xusheng <[email protected]>
> ---
> v2:
> - Cc [email protected] (was missing in v1, see
> https://lore.kernel.org/all/[email protected]/).
> - Add Cc: [email protected]; this is a data-persistence bug under
> DIRSYNC and affects all ntfs3 since 4342306f0f0d.
> v1: https://lore.kernel.org/all/[email protected]/
> ---
> fs/ntfs3/namei.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/fs/ntfs3/namei.c b/fs/ntfs3/namei.c
> index b2af8f695e60..64cde1a856f4 100644
> --- a/fs/ntfs3/namei.c
> +++ b/fs/ntfs3/namei.c
> @@ -340,7 +340,7 @@ static int ntfs_rename(struct mnt_idmap *idmap, struct inode *dir,
> ntfs_sync_inode(dir);
>
> if (IS_DIRSYNC(new_dir))
> - ntfs_sync_inode(inode);
> + ntfs_sync_inode(new_dir);
> }
>
> if (dir_ni != new_dir_ni)
Hello,
Sorry for the delay.
Applied, thank you.
Regards,
Konstantin