Skip to content

Commit 4c72a36

Browse files
jtlaytonbrauner
authored andcommitted
exfat: convert to new timestamp accessors
Convert to using the new inode timestamp accessor functions. Signed-off-by: Jeff Layton <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Christian Brauner <[email protected]>
1 parent 594370f commit 4c72a36

File tree

6 files changed

+47
-35
lines changed

6 files changed

+47
-35
lines changed

fs/exfat/exfat_fs.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -549,6 +549,7 @@ void __exfat_fs_error(struct super_block *sb, int report, const char *fmt, ...)
549549
void exfat_get_entry_time(struct exfat_sb_info *sbi, struct timespec64 *ts,
550550
u8 tz, __le16 time, __le16 date, u8 time_cs);
551551
void exfat_truncate_atime(struct timespec64 *ts);
552+
void exfat_truncate_inode_atime(struct inode *inode);
552553
void exfat_set_entry_time(struct exfat_sb_info *sbi, struct timespec64 *ts,
553554
u8 *tz, __le16 *time, __le16 *date, u8 *time_cs);
554555
u16 exfat_calc_chksum16(void *data, int len, u16 chksum, int type);

fs/exfat/file.c

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ static int exfat_cont_expand(struct inode *inode, loff_t size)
2222
if (err)
2323
return err;
2424

25-
inode->i_mtime = inode_set_ctime_current(inode);
25+
inode_set_mtime_to_ts(inode, inode_set_ctime_current(inode));
2626
mark_inode_dirty(inode);
2727

2828
if (!IS_SYNC(inode))
@@ -290,10 +290,9 @@ int exfat_setattr(struct mnt_idmap *idmap, struct dentry *dentry,
290290
}
291291

292292
if (attr->ia_valid & ATTR_SIZE)
293-
inode->i_mtime = inode_set_ctime_current(inode);
293+
inode_set_mtime_to_ts(inode, inode_set_ctime_current(inode));
294294

295-
setattr_copy(&nop_mnt_idmap, inode, attr);
296-
exfat_truncate_atime(&inode->i_atime);
295+
exfat_truncate_inode_atime(inode);
297296

298297
if (attr->ia_valid & ATTR_SIZE) {
299298
error = exfat_block_truncate_page(inode, attr->ia_size);

fs/exfat/inode.c

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ int __exfat_write_inode(struct inode *inode, int sync)
2626
struct exfat_sb_info *sbi = EXFAT_SB(sb);
2727
struct exfat_inode_info *ei = EXFAT_I(inode);
2828
bool is_dir = (ei->type == TYPE_DIR) ? true : false;
29+
struct timespec64 ts;
2930

3031
if (inode->i_ino == EXFAT_ROOT_INO)
3132
return 0;
@@ -55,16 +56,18 @@ int __exfat_write_inode(struct inode *inode, int sync)
5556
&ep->dentry.file.create_time,
5657
&ep->dentry.file.create_date,
5758
&ep->dentry.file.create_time_cs);
58-
exfat_set_entry_time(sbi, &inode->i_mtime,
59-
&ep->dentry.file.modify_tz,
60-
&ep->dentry.file.modify_time,
61-
&ep->dentry.file.modify_date,
62-
&ep->dentry.file.modify_time_cs);
63-
exfat_set_entry_time(sbi, &inode->i_atime,
64-
&ep->dentry.file.access_tz,
65-
&ep->dentry.file.access_time,
66-
&ep->dentry.file.access_date,
67-
NULL);
59+
exfat_set_entry_time(sbi, &ts,
60+
&ep->dentry.file.modify_tz,
61+
&ep->dentry.file.modify_time,
62+
&ep->dentry.file.modify_date,
63+
&ep->dentry.file.modify_time_cs);
64+
inode_set_mtime_to_ts(inode, ts);
65+
exfat_set_entry_time(sbi, &ts,
66+
&ep->dentry.file.access_tz,
67+
&ep->dentry.file.access_time,
68+
&ep->dentry.file.access_date,
69+
NULL);
70+
inode_set_atime_to_ts(inode, ts);
6871

6972
/* File size should be zero if there is no cluster allocated */
7073
on_disk_size = i_size_read(inode);
@@ -355,7 +358,7 @@ static void exfat_write_failed(struct address_space *mapping, loff_t to)
355358

356359
if (to > i_size_read(inode)) {
357360
truncate_pagecache(inode, i_size_read(inode));
358-
inode->i_mtime = inode_set_ctime_current(inode);
361+
inode_set_mtime_to_ts(inode, inode_set_ctime_current(inode));
359362
exfat_truncate(inode);
360363
}
361364
}
@@ -398,7 +401,7 @@ static int exfat_write_end(struct file *file, struct address_space *mapping,
398401
exfat_write_failed(mapping, pos+len);
399402

400403
if (!(err < 0) && !(ei->attr & ATTR_ARCHIVE)) {
401-
inode->i_mtime = inode_set_ctime_current(inode);
404+
inode_set_mtime_to_ts(inode, inode_set_ctime_current(inode));
402405
ei->attr |= ATTR_ARCHIVE;
403406
mark_inode_dirty(inode);
404407
}
@@ -576,10 +579,10 @@ static int exfat_fill_inode(struct inode *inode, struct exfat_dir_entry *info)
576579
exfat_save_attr(inode, info->attr);
577580

578581
inode->i_blocks = round_up(i_size_read(inode), sbi->cluster_size) >> 9;
579-
inode->i_mtime = info->mtime;
582+
inode_set_mtime_to_ts(inode, info->mtime);
580583
inode_set_ctime_to_ts(inode, info->mtime);
581584
ei->i_crtime = info->crtime;
582-
inode->i_atime = info->atime;
585+
inode_set_atime_to_ts(inode, info->atime);
583586

584587
return 0;
585588
}

fs/exfat/misc.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,14 @@ void exfat_truncate_atime(struct timespec64 *ts)
126126
ts->tv_nsec = 0;
127127
}
128128

129+
void exfat_truncate_inode_atime(struct inode *inode)
130+
{
131+
struct timespec64 atime = inode_get_atime(inode);
132+
133+
exfat_truncate_atime(&atime);
134+
inode_set_atime_to_ts(inode, atime);
135+
}
136+
129137
u16 exfat_calc_chksum16(void *data, int len, u16 chksum, int type)
130138
{
131139
int i;

fs/exfat/namei.c

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -569,7 +569,7 @@ static int exfat_create(struct mnt_idmap *idmap, struct inode *dir,
569569
goto unlock;
570570

571571
inode_inc_iversion(dir);
572-
dir->i_mtime = inode_set_ctime_current(dir);
572+
inode_set_mtime_to_ts(dir, inode_set_ctime_current(dir));
573573
if (IS_DIRSYNC(dir))
574574
exfat_sync_inode(dir);
575575
else
@@ -582,8 +582,9 @@ static int exfat_create(struct mnt_idmap *idmap, struct inode *dir,
582582
goto unlock;
583583

584584
inode_inc_iversion(inode);
585-
inode->i_mtime = inode->i_atime = EXFAT_I(inode)->i_crtime = inode_set_ctime_current(inode);
586-
exfat_truncate_atime(&inode->i_atime);
585+
EXFAT_I(inode)->i_crtime = simple_inode_init_ts(inode);
586+
exfat_truncate_inode_atime(inode);
587+
587588
/* timestamp is already written, so mark_inode_dirty() is unneeded. */
588589

589590
d_instantiate(dentry, inode);
@@ -816,16 +817,16 @@ static int exfat_unlink(struct inode *dir, struct dentry *dentry)
816817
ei->dir.dir = DIR_DELETED;
817818

818819
inode_inc_iversion(dir);
819-
dir->i_mtime = dir->i_atime = inode_set_ctime_current(dir);
820-
exfat_truncate_atime(&dir->i_atime);
820+
simple_inode_init_ts(dir);
821+
exfat_truncate_inode_atime(dir);
821822
if (IS_DIRSYNC(dir))
822823
exfat_sync_inode(dir);
823824
else
824825
mark_inode_dirty(dir);
825826

826827
clear_nlink(inode);
827-
inode->i_mtime = inode->i_atime = inode_set_ctime_current(inode);
828-
exfat_truncate_atime(&inode->i_atime);
828+
simple_inode_init_ts(inode);
829+
exfat_truncate_inode_atime(inode);
829830
exfat_unhash_inode(inode);
830831
exfat_d_version_set(dentry, inode_query_iversion(dir));
831832
unlock:
@@ -851,7 +852,7 @@ static int exfat_mkdir(struct mnt_idmap *idmap, struct inode *dir,
851852
goto unlock;
852853

853854
inode_inc_iversion(dir);
854-
dir->i_mtime = inode_set_ctime_current(dir);
855+
inode_set_mtime_to_ts(dir, inode_set_ctime_current(dir));
855856
if (IS_DIRSYNC(dir))
856857
exfat_sync_inode(dir);
857858
else
@@ -865,8 +866,8 @@ static int exfat_mkdir(struct mnt_idmap *idmap, struct inode *dir,
865866
goto unlock;
866867

867868
inode_inc_iversion(inode);
868-
inode->i_mtime = inode->i_atime = EXFAT_I(inode)->i_crtime = inode_set_ctime_current(inode);
869-
exfat_truncate_atime(&inode->i_atime);
869+
EXFAT_I(inode)->i_crtime = simple_inode_init_ts(inode);
870+
exfat_truncate_inode_atime(inode);
870871
/* timestamp is already written, so mark_inode_dirty() is unneeded. */
871872

872873
d_instantiate(dentry, inode);
@@ -977,17 +978,17 @@ static int exfat_rmdir(struct inode *dir, struct dentry *dentry)
977978
ei->dir.dir = DIR_DELETED;
978979

979980
inode_inc_iversion(dir);
980-
dir->i_mtime = dir->i_atime = inode_set_ctime_current(dir);
981-
exfat_truncate_atime(&dir->i_atime);
981+
simple_inode_init_ts(dir);
982+
exfat_truncate_inode_atime(dir);
982983
if (IS_DIRSYNC(dir))
983984
exfat_sync_inode(dir);
984985
else
985986
mark_inode_dirty(dir);
986987
drop_nlink(dir);
987988

988989
clear_nlink(inode);
989-
inode->i_mtime = inode->i_atime = inode_set_ctime_current(inode);
990-
exfat_truncate_atime(&inode->i_atime);
990+
simple_inode_init_ts(inode);
991+
exfat_truncate_inode_atime(inode);
991992
exfat_unhash_inode(inode);
992993
exfat_d_version_set(dentry, inode_query_iversion(dir));
993994
unlock:
@@ -1312,7 +1313,7 @@ static int exfat_rename(struct mnt_idmap *idmap,
13121313
inode_inc_iversion(new_dir);
13131314
simple_rename_timestamp(old_dir, old_dentry, new_dir, new_dentry);
13141315
EXFAT_I(new_dir)->i_crtime = current_time(new_dir);
1315-
exfat_truncate_atime(&new_dir->i_atime);
1316+
exfat_truncate_inode_atime(new_dir);
13161317
if (IS_DIRSYNC(new_dir))
13171318
exfat_sync_inode(new_dir);
13181319
else

fs/exfat/super.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -370,8 +370,8 @@ static int exfat_read_root(struct inode *inode)
370370
ei->i_size_ondisk = i_size_read(inode);
371371

372372
exfat_save_attr(inode, ATTR_SUBDIR);
373-
inode->i_mtime = inode->i_atime = ei->i_crtime = inode_set_ctime_current(inode);
374-
exfat_truncate_atime(&inode->i_atime);
373+
ei->i_crtime = simple_inode_init_ts(inode);
374+
exfat_truncate_inode_atime(inode);
375375
return 0;
376376
}
377377

0 commit comments

Comments
 (0)