diff options
author | Ralph Boehme <slow@samba.org> | 2019-06-27 18:14:43 +0200 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2019-07-01 21:43:23 +0000 |
commit | df4a380d9f459dcdd7e1edab8711b36af0cac09a (patch) | |
tree | a812ffa5264ef2d2694669a578d97a941c0131db | |
parent | d18bdc1c43b8573582bd77d153cd514f881a69b9 (diff) | |
download | samba-df4a380d9f459dcdd7e1edab8711b36af0cac09a.tar.gz |
s3: add st_ex_itime to struct stat_ex
st_ex_itime is an immutable original birth time aka instantiation time. Set when
a file is created, never changes thereafter. May not be set by the client.
Signed-off-by: Ralph Boehme <slow@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
-rw-r--r-- | source3/include/includes.h | 6 | ||||
-rw-r--r-- | source3/include/vfs.h | 1 | ||||
-rw-r--r-- | source3/lib/system.c | 3 | ||||
-rw-r--r-- | source3/modules/vfs_ceph.c | 3 |
4 files changed, 12 insertions, 1 deletions
diff --git a/source3/include/includes.h b/source3/include/includes.h index ec486be6efa..5a9150fe2fe 100644 --- a/source3/include/includes.h +++ b/source3/include/includes.h @@ -192,6 +192,7 @@ typedef uint64_t br_off; /* Is birthtime real, or was it calculated ? */ #define ST_EX_IFLAG_CALCULATED_BTIME (1 << 0) +#define ST_EX_IFLAG_CALCULATED_ITIME (1 << 1) /* * Type for stat structure. @@ -210,6 +211,11 @@ struct stat_ex { struct timespec st_ex_mtime; struct timespec st_ex_ctime; struct timespec st_ex_btime; /* birthtime */ + /* + * Immutable original birth time aka instantiation time. Set when a file + * is created, never changes thereafter. May not be set by the client. + */ + struct timespec st_ex_itime; /* instantiation time */ blksize_t st_ex_blksize; blkcnt_t st_ex_blocks; diff --git a/source3/include/vfs.h b/source3/include/vfs.h index ecac793b93d..17cbf32ec19 100644 --- a/source3/include/vfs.h +++ b/source3/include/vfs.h @@ -263,6 +263,7 @@ /* Version 41 - Remove SMB_VFS_BRL_CANCEL_WINDOWS */ /* Version 41 - Remove unused st_ex_mask from struct stat_ex */ /* Version 41 - convert struct stat_ex.st_ex_calculated_birthtime to flags */ +/* Version 41 - add st_ex_itime to struct stat_ex */ #define SMB_VFS_INTERFACE_VERSION 41 diff --git a/source3/lib/system.c b/source3/lib/system.c index 4bfe3785118..104d1abc1f2 100644 --- a/source3/lib/system.c +++ b/source3/lib/system.c @@ -313,6 +313,9 @@ static void make_create_timespec(const struct stat *pst, struct stat_ex *dst, dst->st_ex_btime = calc_create_time_stat(pst); dst->st_ex_iflags |= ST_EX_IFLAG_CALCULATED_BTIME; } + + dst->st_ex_itime = dst->st_ex_btime; + dst->st_ex_iflags |= ST_EX_IFLAG_CALCULATED_ITIME; } /**************************************************************************** diff --git a/source3/modules/vfs_ceph.c b/source3/modules/vfs_ceph.c index e3e9bb65b07..2f49ca24a18 100644 --- a/source3/modules/vfs_ceph.c +++ b/source3/modules/vfs_ceph.c @@ -704,7 +704,8 @@ static void init_stat_ex_from_ceph_statx(struct stat_ex *dst, const struct ceph_ dst->st_ex_btime = stx->stx_btime; dst->st_ex_ctime = stx->stx_ctime; dst->st_ex_mtime = stx->stx_mtime; - dst->st_ex_iflags = 0; + dst->st_ex_itime = dst->st_ex_btime; + dst->st_ex_iflags = ST_EX_IFLAG_CALCULATED_ITIME; dst->st_ex_blksize = stx->stx_blksize; dst->st_ex_blocks = stx->stx_blocks; } |