From: Viacheslav Dubeyko Date: Tue, 17 Mar 2026 22:14:00 +0000 (-0700) Subject: hfsplus: fix to update ctime after rename X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=b099ed598c64c8d275fc8877ec521b58712ab103;p=thirdparty%2Flinux.git hfsplus: fix to update ctime after rename [BUG] $ sudo ./check generic/003 FSTYP -- hfsplus PLATFORM -- Linux/x86_64 graphic 6.8.0-58-generic #60~22.04.1-Ubuntu MKFS_OPTIONS -- /dev/loop29 MOUNT_OPTIONS -- /dev/loop29 /mnt/scratch generic/003 - output mismatch --- tests/generic/003.out 2025-04-27 08:49:39.876945323 -0600 +++ /home/graphic/fs/xfstests-dev/results//generic/003.out.bad QA output created by 003 +ERROR: change time has not been updated after changing file1 Silence is golden ... Ran: generic/003 Failures: generic/003 Failed 1 of 1 tests [CAUSE] change time has not been updated after changing file1 [FIX] Update file ctime after rename in hfsplus_rename(). Signed-off-by: Yangtao Li Tested-by: Viacheslav Dubeyko Reviewed-by: Viacheslav Dubeyko Link: https://lore.kernel.org/linux-fsdevel/20250530081719.2430291-1-frank.li@vivo.com/ Signed-off-by: Viacheslav Dubeyko --- diff --git a/fs/hfsplus/dir.c b/fs/hfsplus/dir.c index 6059bd59d66e5..8ad73378ed644 100644 --- a/fs/hfsplus/dir.c +++ b/fs/hfsplus/dir.c @@ -603,11 +603,22 @@ static int hfsplus_rename(struct mnt_idmap *idmap, old_dir, &old_dentry->d_name, new_dir, &new_dentry->d_name); if (!res) { + struct inode *inode = d_inode(old_dentry); + new_dentry->d_fsdata = old_dentry->d_fsdata; + inode_set_ctime_current(inode); + mark_inode_dirty(inode); + res = hfsplus_cat_write_inode(old_dir); - if (!res) - res = hfsplus_cat_write_inode(new_dir); + if (res) + return res; + + res = hfsplus_cat_write_inode(new_dir); + if (res) + return res; + + res = hfsplus_cat_write_inode(inode); } return res; }