From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751624AbdBYDKp (ORCPT ); Fri, 24 Feb 2017 22:10:45 -0500 Received: from userp1040.oracle.com ([156.151.31.81]:39129 "EHLO userp1040.oracle.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751348AbdBYDKn (ORCPT ); Fri, 24 Feb 2017 22:10:43 -0500 Date: Fri, 24 Feb 2017 19:10:25 -0800 From: "Darrick J. Wong" To: Deepa Dinamani Cc: viro@zeniv.linux.org.uk, tytso@mit.edu, adilger.kernel@dilger.ca, linux-ext4@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, arnd@arndb.de, y2038@lists.linaro.org Subject: Re: [PATCH v4 1/5] vfs: Add file timestamp range support Message-ID: <20170225031025.GA5269@birch.djwong.org> References: <1487986863-6005-1-git-send-email-deepa.kernel@gmail.com> <1487986863-6005-2-git-send-email-deepa.kernel@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1487986863-6005-2-git-send-email-deepa.kernel@gmail.com> User-Agent: Mutt/1.5.24 (2015-08-30) X-Source-IP: userv0021.oracle.com [156.151.31.71] Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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 > --- > 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 >