Re: [PATCH v6 2/4] fat: ignore ctime updates, and keep ctime identical to mtime in memory

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Chung-Chiang Cheng <cccheng@xxxxxxxxxxxx> writes:

> FAT supports creation time but not change time, and there was no
> corresponding timestamp for creation time in previous VFS. The
> original implementation took the compromise of saving the in-memory
> change time into the on-disk creation time field, but this would lead
> to compatibility issues with non-linux systems.
>
> To address this issue, this patch changes the behavior of ctime. It
> will no longer be loaded and stored from the creation time on disk.
> Instead of that, it'll be consistent with the in-memory mtime and share
> the same on-disk field. All updates to mtime will also be applied to
> ctime in memory, while all updates to ctime will be ignored.

Acked-by: OGAWA Hirofumi <hirofumi@xxxxxxxxxxxxxxxxxx>

Thanks.

> Signed-off-by: Chung-Chiang Cheng <cccheng@xxxxxxxxxxxx>
> ---
>  fs/fat/inode.c | 11 ++++-------
>  fs/fat/misc.c  |  9 ++++++---
>  2 files changed, 10 insertions(+), 10 deletions(-)
>
> diff --git a/fs/fat/inode.c b/fs/fat/inode.c
> index bf6051bdf1d1..16d5a52116d3 100644
> --- a/fs/fat/inode.c
> +++ b/fs/fat/inode.c
> @@ -567,12 +567,11 @@ int fat_fill_inode(struct inode *inode, struct msdos_dir_entry *de)
>  			   & ~((loff_t)sbi->cluster_size - 1)) >> 9;
>  
>  	fat_time_fat2unix(sbi, &inode->i_mtime, de->time, de->date, 0);
> -	if (sbi->options.isvfat) {
> -		fat_time_fat2unix(sbi, &inode->i_ctime, de->ctime,
> -				  de->cdate, de->ctime_cs);
> +	inode->i_ctime = inode->i_mtime;
> +	if (sbi->options.isvfat)
>  		fat_time_fat2unix(sbi, &inode->i_atime, 0, de->adate, 0);
> -	} else
> -		fat_truncate_time(inode, &inode->i_mtime, S_ATIME|S_CTIME);
> +	else
> +		inode->i_atime = fat_truncate_atime(sbi, &inode->i_mtime);
>  
>  	return 0;
>  }
> @@ -888,8 +887,6 @@ static int __fat_write_inode(struct inode *inode, int wait)
>  			  &raw_entry->date, NULL);
>  	if (sbi->options.isvfat) {
>  		__le16 atime;
> -		fat_time_unix2fat(sbi, &inode->i_ctime, &raw_entry->ctime,
> -				  &raw_entry->cdate, &raw_entry->ctime_cs);
>  		fat_time_unix2fat(sbi, &inode->i_atime, &atime,
>  				  &raw_entry->adate, NULL);
>  	}
> diff --git a/fs/fat/misc.c b/fs/fat/misc.c
> index 63160e47be00..85bb9dc3af2d 100644
> --- a/fs/fat/misc.c
> +++ b/fs/fat/misc.c
> @@ -341,10 +341,13 @@ int fat_truncate_time(struct inode *inode, struct timespec64 *now, int flags)
>  
>  	if (flags & S_ATIME)
>  		inode->i_atime = fat_truncate_atime(sbi, now);
> -	if (flags & S_CTIME)
> -		inode->i_ctime = fat_truncate_crtime(sbi, now);
> +	/*
> +	 * ctime and mtime share the same on-disk field, and should be
> +	 * identical in memory. all mtime updates will be applied to ctime,
> +	 * but ctime updates are ignored.
> +	 */
>  	if (flags & S_MTIME)
> -		inode->i_mtime = fat_truncate_mtime(sbi, now);
> +		inode->i_mtime = inode->i_ctime = fat_truncate_mtime(sbi, now);
>  
>  	return 0;
>  }

-- 
OGAWA Hirofumi <hirofumi@xxxxxxxxxxxxxxxxxx>



[Index of Archives]     [Linux Ext4 Filesystem]     [Union Filesystem]     [Filesystem Testing]     [Ceph Users]     [Ecryptfs]     [NTFS 3]     [AutoFS]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux Cachefs]     [Reiser Filesystem]     [Linux RAID]     [NTFS 3]     [Samba]     [Device Mapper]     [CEPH Development]

  Powered by Linux