.. | .. |
---|
| 1 | +// SPDX-License-Identifier: GPL-2.0-only |
---|
1 | 2 | /* |
---|
2 | 3 | * linux/fs/vfat/namei.c |
---|
3 | 4 | * |
---|
.. | .. |
---|
678 | 679 | goto cleanup; |
---|
679 | 680 | |
---|
680 | 681 | /* update timestamp */ |
---|
681 | | - dir->i_ctime = dir->i_mtime = dir->i_atime = *ts; |
---|
| 682 | + fat_truncate_time(dir, ts, S_CTIME|S_MTIME); |
---|
682 | 683 | if (IS_DIRSYNC(dir)) |
---|
683 | 684 | (void)fat_sync_inode(dir); |
---|
684 | 685 | else |
---|
.. | .. |
---|
779 | 780 | goto out; |
---|
780 | 781 | } |
---|
781 | 782 | inode_inc_iversion(inode); |
---|
782 | | - inode->i_mtime = inode->i_atime = inode->i_ctime = ts; |
---|
| 783 | + fat_truncate_time(inode, &ts, S_ATIME|S_CTIME|S_MTIME); |
---|
783 | 784 | /* timestamp is already written, so mark_inode_dirty() is unneeded. */ |
---|
784 | 785 | |
---|
785 | 786 | d_instantiate(dentry, inode); |
---|
.. | .. |
---|
810 | 811 | drop_nlink(dir); |
---|
811 | 812 | |
---|
812 | 813 | clear_nlink(inode); |
---|
813 | | - inode->i_mtime = inode->i_atime = current_time(inode); |
---|
| 814 | + fat_truncate_time(inode, NULL, S_ATIME|S_MTIME); |
---|
814 | 815 | fat_detach(inode); |
---|
815 | 816 | vfat_d_version_set(dentry, inode_query_iversion(dir)); |
---|
816 | 817 | out: |
---|
.. | .. |
---|
836 | 837 | if (err) |
---|
837 | 838 | goto out; |
---|
838 | 839 | clear_nlink(inode); |
---|
839 | | - inode->i_mtime = inode->i_atime = current_time(inode); |
---|
| 840 | + fat_truncate_time(inode, NULL, S_ATIME|S_MTIME); |
---|
840 | 841 | fat_detach(inode); |
---|
841 | 842 | vfat_d_version_set(dentry, inode_query_iversion(dir)); |
---|
842 | 843 | out: |
---|
.. | .. |
---|
876 | 877 | } |
---|
877 | 878 | inode_inc_iversion(inode); |
---|
878 | 879 | set_nlink(inode, 2); |
---|
879 | | - inode->i_mtime = inode->i_atime = inode->i_ctime = ts; |
---|
| 880 | + fat_truncate_time(inode, &ts, S_ATIME|S_CTIME|S_MTIME); |
---|
880 | 881 | /* timestamp is already written, so mark_inode_dirty() is unneeded. */ |
---|
881 | 882 | |
---|
882 | 883 | d_instantiate(dentry, inode); |
---|
.. | .. |
---|
969 | 970 | if (err) |
---|
970 | 971 | goto error_dotdot; |
---|
971 | 972 | inode_inc_iversion(old_dir); |
---|
972 | | - old_dir->i_ctime = old_dir->i_mtime = ts; |
---|
| 973 | + fat_truncate_time(old_dir, &ts, S_CTIME|S_MTIME); |
---|
973 | 974 | if (IS_DIRSYNC(old_dir)) |
---|
974 | 975 | (void)fat_sync_inode(old_dir); |
---|
975 | 976 | else |
---|
.. | .. |
---|
979 | 980 | drop_nlink(new_inode); |
---|
980 | 981 | if (is_dir) |
---|
981 | 982 | drop_nlink(new_inode); |
---|
982 | | - new_inode->i_ctime = ts; |
---|
| 983 | + fat_truncate_time(new_inode, &ts, S_CTIME); |
---|
983 | 984 | } |
---|
984 | 985 | out: |
---|
985 | 986 | brelse(sinfo.bh); |
---|
.. | .. |
---|
1032 | 1033 | .rename = vfat_rename, |
---|
1033 | 1034 | .setattr = fat_setattr, |
---|
1034 | 1035 | .getattr = fat_getattr, |
---|
| 1036 | + .update_time = fat_update_time, |
---|
1035 | 1037 | }; |
---|
1036 | 1038 | |
---|
1037 | 1039 | static void setup(struct super_block *sb) |
---|
.. | .. |
---|
1075 | 1077 | } |
---|
1076 | 1078 | |
---|
1077 | 1079 | MODULE_LICENSE("GPL"); |
---|
| 1080 | +MODULE_IMPORT_NS(ANDROID_GKI_VFS_EXPORT_ONLY); |
---|
1078 | 1081 | MODULE_DESCRIPTION("VFAT filesystem support"); |
---|
1079 | 1082 | MODULE_AUTHOR("Gordon Chaffee"); |
---|
1080 | 1083 | |
---|