| .. | .. |
|---|
| 1 | +// SPDX-License-Identifier: GPL-2.0-only |
|---|
| 1 | 2 | /* |
|---|
| 2 | 3 | * linux/fs/msdos/namei.c |
|---|
| 3 | 4 | * |
|---|
| .. | .. |
|---|
| 250 | 251 | if (err) |
|---|
| 251 | 252 | return err; |
|---|
| 252 | 253 | |
|---|
| 253 | | - dir->i_ctime = dir->i_mtime = *ts; |
|---|
| 254 | + fat_truncate_time(dir, ts, S_CTIME|S_MTIME); |
|---|
| 254 | 255 | if (IS_DIRSYNC(dir)) |
|---|
| 255 | 256 | (void)fat_sync_inode(dir); |
|---|
| 256 | 257 | else |
|---|
| .. | .. |
|---|
| 294 | 295 | err = PTR_ERR(inode); |
|---|
| 295 | 296 | goto out; |
|---|
| 296 | 297 | } |
|---|
| 297 | | - inode->i_mtime = inode->i_atime = inode->i_ctime = ts; |
|---|
| 298 | + fat_truncate_time(inode, &ts, S_ATIME|S_CTIME|S_MTIME); |
|---|
| 298 | 299 | /* timestamp is already written, so mark_inode_dirty() is unneeded. */ |
|---|
| 299 | 300 | |
|---|
| 300 | 301 | d_instantiate(dentry, inode); |
|---|
| .. | .. |
|---|
| 327 | 328 | drop_nlink(dir); |
|---|
| 328 | 329 | |
|---|
| 329 | 330 | clear_nlink(inode); |
|---|
| 330 | | - inode->i_ctime = current_time(inode); |
|---|
| 331 | + fat_truncate_time(inode, NULL, S_CTIME); |
|---|
| 331 | 332 | fat_detach(inode); |
|---|
| 332 | 333 | out: |
|---|
| 333 | 334 | mutex_unlock(&MSDOS_SB(sb)->s_lock); |
|---|
| .. | .. |
|---|
| 380 | 381 | goto out; |
|---|
| 381 | 382 | } |
|---|
| 382 | 383 | set_nlink(inode, 2); |
|---|
| 383 | | - inode->i_mtime = inode->i_atime = inode->i_ctime = ts; |
|---|
| 384 | + fat_truncate_time(inode, &ts, S_ATIME|S_CTIME|S_MTIME); |
|---|
| 384 | 385 | /* timestamp is already written, so mark_inode_dirty() is unneeded. */ |
|---|
| 385 | 386 | |
|---|
| 386 | 387 | d_instantiate(dentry, inode); |
|---|
| .. | .. |
|---|
| 413 | 414 | if (err) |
|---|
| 414 | 415 | goto out; |
|---|
| 415 | 416 | clear_nlink(inode); |
|---|
| 416 | | - inode->i_ctime = current_time(inode); |
|---|
| 417 | + fat_truncate_time(inode, NULL, S_CTIME); |
|---|
| 417 | 418 | fat_detach(inode); |
|---|
| 418 | 419 | out: |
|---|
| 419 | 420 | mutex_unlock(&MSDOS_SB(sb)->s_lock); |
|---|
| .. | .. |
|---|
| 478 | 479 | mark_inode_dirty(old_inode); |
|---|
| 479 | 480 | |
|---|
| 480 | 481 | inode_inc_iversion(old_dir); |
|---|
| 481 | | - old_dir->i_ctime = old_dir->i_mtime = current_time(old_dir); |
|---|
| 482 | + fat_truncate_time(old_dir, NULL, S_CTIME|S_MTIME); |
|---|
| 482 | 483 | if (IS_DIRSYNC(old_dir)) |
|---|
| 483 | 484 | (void)fat_sync_inode(old_dir); |
|---|
| 484 | 485 | else |
|---|
| .. | .. |
|---|
| 538 | 539 | if (err) |
|---|
| 539 | 540 | goto error_dotdot; |
|---|
| 540 | 541 | inode_inc_iversion(old_dir); |
|---|
| 541 | | - old_dir->i_ctime = old_dir->i_mtime = ts; |
|---|
| 542 | + fat_truncate_time(old_dir, &ts, S_CTIME|S_MTIME); |
|---|
| 542 | 543 | if (IS_DIRSYNC(old_dir)) |
|---|
| 543 | 544 | (void)fat_sync_inode(old_dir); |
|---|
| 544 | 545 | else |
|---|
| .. | .. |
|---|
| 548 | 549 | drop_nlink(new_inode); |
|---|
| 549 | 550 | if (is_dir) |
|---|
| 550 | 551 | drop_nlink(new_inode); |
|---|
| 551 | | - new_inode->i_ctime = ts; |
|---|
| 552 | + fat_truncate_time(new_inode, &ts, S_CTIME); |
|---|
| 552 | 553 | } |
|---|
| 553 | 554 | out: |
|---|
| 554 | 555 | brelse(sinfo.bh); |
|---|
| .. | .. |
|---|
| 637 | 638 | .rename = msdos_rename, |
|---|
| 638 | 639 | .setattr = fat_setattr, |
|---|
| 639 | 640 | .getattr = fat_getattr, |
|---|
| 641 | + .update_time = fat_update_time, |
|---|
| 640 | 642 | }; |
|---|
| 641 | 643 | |
|---|
| 642 | 644 | static void setup(struct super_block *sb) |
|---|
| .. | .. |
|---|
| 678 | 680 | } |
|---|
| 679 | 681 | |
|---|
| 680 | 682 | MODULE_LICENSE("GPL"); |
|---|
| 683 | +MODULE_IMPORT_NS(ANDROID_GKI_VFS_EXPORT_ONLY); |
|---|
| 681 | 684 | MODULE_AUTHOR("Werner Almesberger"); |
|---|
| 682 | 685 | MODULE_DESCRIPTION("MS-DOS filesystem support"); |
|---|
| 683 | 686 | |
|---|