Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1588035 > unrolled thread

[PATCH v4 0/5] vfs: Add timestamp range check support

Started byDeepa Dinamani <deepa.kernel@gmail.com>
First post2017-02-25 02:50 +0100
Last post2017-02-25 20:00 +0100
Articles 4 — 2 participants

Back to article view | Back to linux.kernel


Contents

  [PATCH v4 0/5] vfs: Add timestamp range check support Deepa Dinamani <deepa.kernel@gmail.com> - 2017-02-25 02:50 +0100
    [PATCH v4 1/5] vfs: Add file timestamp range support Deepa Dinamani <deepa.kernel@gmail.com> - 2017-02-25 02:50 +0100
      Re: [PATCH v4 1/5] vfs: Add file timestamp range support "Darrick J. Wong" <darrick.wong@oracle.com> - 2017-02-25 04:20 +0100
        Re: [PATCH v4 1/5] vfs: Add file timestamp range support Deepa Dinamani <deepa.kernel@gmail.com> - 2017-02-25 20:00 +0100

#1588035 — [PATCH v4 0/5] vfs: Add timestamp range check support

FromDeepa Dinamani <deepa.kernel@gmail.com>
Date2017-02-25 02:50 +0100
Subject[PATCH v4 0/5] vfs: Add timestamp range check support
Message-ID<tezEJ-t9-5@gated-at.bofh.it>
The series is aimed at adding timestamp checking and policy
related to it to vfs.

The series was developed with discussions and guidance from
Arnd Bergmann.

The original thread is at https://lkml.org/lkml/2016/11/2/294

Associated test: xfstests generic/402
Note that the above test will be run and will fail all filesystems that
do not have correct limits specified in the xfstests or the kernel or
that don't support times beyond the test dates. I will be submitting a
follow up xfstest and kernel patches to update all filesystems.
Currently ext4 is the only filesystem that reflects correct limits.

The branch is available at
https://github.com/deepa-hub/vfs.git refs/heads/vfs_timestamp_policy

Changes since v3:
* Remove redundant initializations in libfs.c
* Change early_param to __setup similar to other root mount options.
* Fix documentation warning
Changes since v2:
* Introduce early boot param override for checks.
* Drop afs patch for timestamp limits.
Changes since v1:
* return EROFS on mount errors
* fix mtime copy/paste error in utimes

Deepa Dinamani (5):
  vfs: Add file timestamp range support
  vfs: Add checks for filesystem timestamp limits
  ext4: Initialize timestamps limits
  vfs: Add timestamp_truncate() api
  utimes: Clamp the timestamps before update

 fs/ext4/ext4.h          |  4 ++++
 fs/ext4/super.c         |  7 ++++++-
 fs/inode.c              | 47 ++++++++++++++++++++++++++++++++++++++++++++++-
 fs/internal.h           |  2 ++
 fs/namespace.c          | 12 ++++++++++++
 fs/super.c              |  9 +++++++++
 fs/utimes.c             | 17 +++++++++++++----
 include/linux/fs.h      |  4 ++++
 include/linux/time64.h  |  6 ++++++
 include/uapi/linux/fs.h |  6 +++++-
 kernel/sysctl.c         |  7 +++++++
 11 files changed, 114 insertions(+), 7 deletions(-)

-- 
2.7.4

[toc] | [next] | [standalone]


#1588036 — [PATCH v4 1/5] vfs: Add file timestamp range support

FromDeepa Dinamani <deepa.kernel@gmail.com>
Date2017-02-25 02:50 +0100
Subject[PATCH v4 1/5] vfs: Add file timestamp range support
Message-ID<tezEK-t9-19@gated-at.bofh.it>
In reply to#1588035
Add fields to the superblock to track the min and max
timestamps supported by filesystems.

Initially, when a superblock is allocated, initialize
it to the max and min values the fields can hold.
Individual filesystems override these to match their
actual limits.

Pseudo filesystems are assumed to always support the
min and max allowable values for the fields.

Note that the time ranges are saved in type time64_t
rather than time_t.
This is required because if we save ranges in time_t
then we would not be able to save timestamp ranges
for files that support timestamps beyond y2038.

Signed-off-by: Deepa Dinamani <deepa.kernel@gmail.com>
---
 fs/super.c             | 2 ++
 include/linux/fs.h     | 3 +++
 include/linux/time64.h | 2 ++
 3 files changed, 7 insertions(+)

diff --git a/fs/super.c b/fs/super.c
index b8b6a08..f9c2241 100644
--- a/fs/super.c
+++ b/fs/super.c
@@ -247,6 +247,8 @@ static struct super_block *alloc_super(struct file_system_type *type, int flags,
 	s->s_maxbytes = MAX_NON_LFS;
 	s->s_op = &default_op;
 	s->s_time_gran = 1000000000;
+	s->s_time_min = TIME64_MIN;
+	s->s_time_max = TIME64_MAX;
 	s->cleancache_poolid = CLEANCACHE_NO_POOL;
 
 	s->s_shrink.seeks = DEFAULT_SEEKS;
diff --git a/include/linux/fs.h b/include/linux/fs.h
index de8ed0b..ef55dfb 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@ -1337,6 +1337,9 @@ struct super_block {
 	/* Granularity of c/m/atime in ns.
 	   Cannot be worse than a second */
 	u32		   s_time_gran;
+	/* Time limits for c/m/atime in seconds. */
+	time64_t           s_time_min;
+	time64_t           s_time_max;
 
 	/*
 	 * The next field is for VFS *only*. No filesystems have any business
diff --git a/include/linux/time64.h b/include/linux/time64.h
index 980c71b..25433b18 100644
--- a/include/linux/time64.h
+++ b/include/linux/time64.h
@@ -38,6 +38,8 @@ struct itimerspec64 {
 
 /* Located here for timespec[64]_valid_strict */
 #define TIME64_MAX			((s64)~((u64)1 << 63))
+#define TIME64_MIN			(-TIME64_MAX - 1)
+
 #define KTIME_MAX			((s64)~((u64)1 << 63))
 #define KTIME_SEC_MAX			(KTIME_MAX / NSEC_PER_SEC)
 
-- 
2.7.4

[toc] | [prev] | [next] | [standalone]


#1588048 — Re: [PATCH v4 1/5] vfs: Add file timestamp range support

From"Darrick J. Wong" <darrick.wong@oracle.com>
Date2017-02-25 04:20 +0100
SubjectRe: [PATCH v4 1/5] vfs: Add file timestamp range support
Message-ID<teB3P-1Dp-3@gated-at.bofh.it>
In reply to#1588036
On Fri, Feb 24, 2017 at 05:40:59PM -0800, Deepa Dinamani wrote:
> Add fields to the superblock to track the min and max
> timestamps supported by filesystems.
> 
> Initially, when a superblock is allocated, initialize
> it to the max and min values the fields can hold.
> Individual filesystems override these to match their
> actual limits.
> 
> Pseudo filesystems are assumed to always support the
> min and max allowable values for the fields.
> 
> Note that the time ranges are saved in type time64_t
> rather than time_t.
> This is required because if we save ranges in time_t
> then we would not be able to save timestamp ranges
> for files that support timestamps beyond y2038.
> 
> Signed-off-by: Deepa Dinamani <deepa.kernel@gmail.com>
> ---
>  fs/super.c             | 2 ++
>  include/linux/fs.h     | 3 +++
>  include/linux/time64.h | 2 ++
>  3 files changed, 7 insertions(+)
> 
> diff --git a/fs/super.c b/fs/super.c
> index b8b6a08..f9c2241 100644
> --- a/fs/super.c
> +++ b/fs/super.c
> @@ -247,6 +247,8 @@ static struct super_block *alloc_super(struct file_system_type *type, int flags,
>  	s->s_maxbytes = MAX_NON_LFS;
>  	s->s_op = &default_op;
>  	s->s_time_gran = 1000000000;
> +	s->s_time_min = TIME64_MIN;
> +	s->s_time_max = TIME64_MAX;

Just out of curiosity, does this enable 64-bit timestamps for everything
by default?  I see that ext4 later sets its own values in fill_super;
what about things like XFS that really only have 32-bit seconds fields?

--D

>  	s->cleancache_poolid = CLEANCACHE_NO_POOL;
>  
>  	s->s_shrink.seeks = DEFAULT_SEEKS;
> diff --git a/include/linux/fs.h b/include/linux/fs.h
> index de8ed0b..ef55dfb 100644
> --- a/include/linux/fs.h
> +++ b/include/linux/fs.h
> @@ -1337,6 +1337,9 @@ struct super_block {
>  	/* Granularity of c/m/atime in ns.
>  	   Cannot be worse than a second */
>  	u32		   s_time_gran;
> +	/* Time limits for c/m/atime in seconds. */
> +	time64_t           s_time_min;
> +	time64_t           s_time_max;
>  
>  	/*
>  	 * The next field is for VFS *only*. No filesystems have any business
> diff --git a/include/linux/time64.h b/include/linux/time64.h
> index 980c71b..25433b18 100644
> --- a/include/linux/time64.h
> +++ b/include/linux/time64.h
> @@ -38,6 +38,8 @@ struct itimerspec64 {
>  
>  /* Located here for timespec[64]_valid_strict */
>  #define TIME64_MAX			((s64)~((u64)1 << 63))
> +#define TIME64_MIN			(-TIME64_MAX - 1)
> +
>  #define KTIME_MAX			((s64)~((u64)1 << 63))
>  #define KTIME_SEC_MAX			(KTIME_MAX / NSEC_PER_SEC)
>  
> -- 
> 2.7.4
> 

[toc] | [prev] | [next] | [standalone]


#1588199 — Re: [PATCH v4 1/5] vfs: Add file timestamp range support

FromDeepa Dinamani <deepa.kernel@gmail.com>
Date2017-02-25 20:00 +0100
SubjectRe: [PATCH v4 1/5] vfs: Add file timestamp range support
Message-ID<tePJw-3Ad-25@gated-at.bofh.it>
In reply to#1588048
> Just out of curiosity, does this enable 64-bit timestamps for everything
> by default?  I see that ext4 later sets its own values in fill_super;
> what about things like XFS that really only have 32-bit seconds fields?

This is just initializing limits for each filesystem.
Filesystems then override these limits with the actual limits they support.
This is what ext4 patch in the series is doing.
As the cover letter says, I will be submitting patches for all
filesystems to update limits.

This is no different than what is happening right now.
Right now, on 64 bit systems, VFS assumes timestamps to be 64 bits
long for all filesystems.

On 32 bit systems, the series only effects handling of dates beyond
the year 2038.
This is until vfs is transitioned to support 64 bit times. At which
point, the behavior on these will also be similar to 64 bit machines.

-Deepa

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web