fs/ntfs3/namei.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
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: stable@vger.kernel.org
Signed-off-by: Zhan Xusheng <zhanxusheng@xiaomi.com>
---
v2:
- Cc ntfs3@lists.linux.dev (was missing in v1, see
https://lore.kernel.org/all/20260422152010.205694-1-zhanxusheng@xiaomi.com/).
- Add Cc: stable@vger.kernel.org; this is a data-persistence bug under
DIRSYNC and affects all ntfs3 since 4342306f0f0d.
v1: https://lore.kernel.org/all/20260422152010.205694-1-zhanxusheng@xiaomi.com/
---
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)
--
2.43.0
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: stable@vger.kernel.org
> Signed-off-by: Zhan Xusheng <zhanxusheng@xiaomi.com>
> ---
> v2:
> - Cc ntfs3@lists.linux.dev (was missing in v1, see
> https://lore.kernel.org/all/20260422152010.205694-1-zhanxusheng@xiaomi.com/).
> - Add Cc: stable@vger.kernel.org; this is a data-persistence bug under
> DIRSYNC and affects all ntfs3 since 4342306f0f0d.
> v1: https://lore.kernel.org/all/20260422152010.205694-1-zhanxusheng@xiaomi.com/
> ---
> 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
© 2016 - 2026 Red Hat, Inc.