From: OGAWA Hirofumi <hirofumi@mail.parknet.co.jp>
To: Chung-Chiang Cheng <cccheng@synology.com>
Cc: Andrew Morton <akpm@linux-foundation.org>,
linux-fsdevel@vger.kernel.org, shepjeng@gmail.com,
kernel@cccheng.net
Subject: Re: [PATCH v6 3/4] fat: report creation time in statx
Date: Sun, 15 May 2022 23:00:20 +0900 [thread overview]
Message-ID: <87lev2lwuj.fsf@mail.parknet.co.jp> (raw)
In-Reply-To: <20220503152536.2503003-3-cccheng@synology.com> (Chung-Chiang Cheng's message of "Tue, 3 May 2022 23:25:35 +0800")
Chung-Chiang Cheng <cccheng@synology.com> writes:
> creation time is no longer mixed with change time. Add an in-memory
> field for it, and report it in statx if supported.
Acked-by: OGAWA Hirofumi <hirofumi@mail.parknet.co.jp>
Thanks.
> Signed-off-by: Chung-Chiang Cheng <cccheng@synology.com>
> ---
> fs/fat/fat.h | 1 +
> fs/fat/file.c | 14 +++++++++++---
> fs/fat/inode.c | 10 ++++++++--
> 3 files changed, 20 insertions(+), 5 deletions(-)
>
> diff --git a/fs/fat/fat.h b/fs/fat/fat.h
> index 6b04aa623b3b..f3bbf17ee352 100644
> --- a/fs/fat/fat.h
> +++ b/fs/fat/fat.h
> @@ -126,6 +126,7 @@ struct msdos_inode_info {
> struct hlist_node i_fat_hash; /* hash by i_location */
> struct hlist_node i_dir_hash; /* hash by i_logstart */
> struct rw_semaphore truncate_lock; /* protect bmap against truncate */
> + struct timespec64 i_crtime; /* File creation (birth) time */
> struct inode vfs_inode;
> };
>
> diff --git a/fs/fat/file.c b/fs/fat/file.c
> index a5a309fcc7fa..8f5218450a3a 100644
> --- a/fs/fat/file.c
> +++ b/fs/fat/file.c
> @@ -399,13 +399,21 @@ int fat_getattr(struct user_namespace *mnt_userns, const struct path *path,
> struct kstat *stat, u32 request_mask, unsigned int flags)
> {
> struct inode *inode = d_inode(path->dentry);
> + struct msdos_sb_info *sbi = MSDOS_SB(inode->i_sb);
> +
> generic_fillattr(mnt_userns, inode, stat);
> - stat->blksize = MSDOS_SB(inode->i_sb)->cluster_size;
> + stat->blksize = sbi->cluster_size;
>
> - if (MSDOS_SB(inode->i_sb)->options.nfs == FAT_NFS_NOSTALE_RO) {
> + if (sbi->options.nfs == FAT_NFS_NOSTALE_RO) {
> /* Use i_pos for ino. This is used as fileid of nfs. */
> - stat->ino = fat_i_pos_read(MSDOS_SB(inode->i_sb), inode);
> + stat->ino = fat_i_pos_read(sbi, inode);
> }
> +
> + if (sbi->options.isvfat && request_mask & STATX_BTIME) {
> + stat->result_mask |= STATX_BTIME;
> + stat->btime = MSDOS_I(inode)->i_crtime;
> + }
> +
> return 0;
> }
> EXPORT_SYMBOL_GPL(fat_getattr);
> diff --git a/fs/fat/inode.c b/fs/fat/inode.c
> index 16d5a52116d3..2472a357198a 100644
> --- a/fs/fat/inode.c
> +++ b/fs/fat/inode.c
> @@ -568,9 +568,11 @@ int fat_fill_inode(struct inode *inode, struct msdos_dir_entry *de)
>
> fat_time_fat2unix(sbi, &inode->i_mtime, de->time, de->date, 0);
> inode->i_ctime = inode->i_mtime;
> - if (sbi->options.isvfat)
> + if (sbi->options.isvfat) {
> fat_time_fat2unix(sbi, &inode->i_atime, 0, de->adate, 0);
> - else
> + fat_time_fat2unix(sbi, &MSDOS_I(inode)->i_crtime, de->ctime,
> + de->cdate, de->ctime_cs);
> + } else
> inode->i_atime = fat_truncate_atime(sbi, &inode->i_mtime);
>
> return 0;
> @@ -756,6 +758,8 @@ static struct inode *fat_alloc_inode(struct super_block *sb)
> ei->i_logstart = 0;
> ei->i_attrs = 0;
> ei->i_pos = 0;
> + ei->i_crtime.tv_sec = 0;
> + ei->i_crtime.tv_nsec = 0;
>
> return &ei->vfs_inode;
> }
> @@ -889,6 +893,8 @@ static int __fat_write_inode(struct inode *inode, int wait)
> __le16 atime;
> fat_time_unix2fat(sbi, &inode->i_atime, &atime,
> &raw_entry->adate, NULL);
> + fat_time_unix2fat(sbi, &MSDOS_I(inode)->i_crtime, &raw_entry->ctime,
> + &raw_entry->cdate, &raw_entry->ctime_cs);
> }
> spin_unlock(&sbi->inode_hash_lock);
> mark_buffer_dirty(bh);
--
OGAWA Hirofumi <hirofumi@mail.parknet.co.jp>
next prev parent reply other threads:[~2022-05-15 14:00 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-05-03 15:25 [PATCH v6 1/4] fat: split fat_truncate_time() into separate functions Chung-Chiang Cheng
2022-05-03 15:25 ` [PATCH v6 2/4] fat: ignore ctime updates, and keep ctime identical to mtime in memory Chung-Chiang Cheng
2022-05-15 14:00 ` OGAWA Hirofumi
2022-05-03 15:25 ` [PATCH v6 3/4] fat: report creation time in statx Chung-Chiang Cheng
2022-05-15 14:00 ` OGAWA Hirofumi [this message]
2022-05-03 15:25 ` [PATCH v6 4/4] fat: remove time truncations in vfat_create/vfat_mkdir Chung-Chiang Cheng
2022-05-15 14:00 ` OGAWA Hirofumi
2022-05-15 13:59 ` [PATCH v6 1/4] fat: split fat_truncate_time() into separate functions OGAWA Hirofumi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87lev2lwuj.fsf@mail.parknet.co.jp \
--to=hirofumi@mail.parknet.co.jp \
--cc=akpm@linux-foundation.org \
--cc=cccheng@synology.com \
--cc=kernel@cccheng.net \
--cc=linux-fsdevel@vger.kernel.org \
--cc=shepjeng@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.