From mboxrd@z Thu Jan 1 00:00:00 1970 From: Deepa Dinamani Subject: [PATCH v3 1/5] vfs: Add file timestamp range support Date: Sat, 18 Feb 2017 15:30:04 -0800 Message-ID: <1487460608-15697-2-git-send-email-deepa.kernel@gmail.com> References: <1487460608-15697-1-git-send-email-deepa.kernel@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Cc: linux-fsdevel@vger.kernel.org, y2038@lists.linaro.org, linux-kernel@vger.kernel.org, arnd@arndb.de To: viro@zeniv.linux.org.uk, tytso@mit.edu, adilger.kernel@dilger.ca, linux-ext4@vger.kernel.org Return-path: In-Reply-To: <1487460608-15697-1-git-send-email-deepa.kernel@gmail.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: y2038-bounces@lists.linaro.org Sender: "Y2038" List-Id: linux-ext4.vger.kernel.org QWRkIGZpZWxkcyB0byB0aGUgc3VwZXJibG9jayB0byB0cmFjayB0aGUgbWluIGFuZCBtYXgKdGlt ZXN0YW1wcyBzdXBwb3J0ZWQgYnkgZmlsZXN5c3RlbXMuCgpJbml0aWFsbHksIHdoZW4gYSBzdXBl cmJsb2NrIGlzIGFsbG9jYXRlZCwgaW5pdGlhbGl6ZQppdCB0byB0aGUgbWF4IGFuZCBtaW4gdmFs dWVzIHRoZSBmaWVsZHMgY2FuIGhvbGQuCkluZGl2aWR1YWwgZmlsZXN5c3RlbXMgb3ZlcnJpZGUg dGhlc2UgdG8gbWF0Y2ggdGhlaXIKYWN0dWFsIGxpbWl0cy4KClBzZXVkbyBmaWxlc3lzdGVtcyBh cmUgYXNzdW1lZCB0byBhbHdheXMgc3VwcG9ydCB0aGUKbWluIGFuZCBtYXggYWxsb3dhYmxlIHZh bHVlcyBmb3IgdGhlIGZpZWxkcy4KCk5vdGUgdGhhdCB0aGUgdGltZSByYW5nZXMgYXJlIHNhdmVk IGluIHR5cGUgdGltZTY0X3QKcmF0aGVyIHRoYW4gdGltZV90LgpUaGlzIGlzIHJlcXVpcmVkIGJl Y2F1c2UgaWYgd2Ugc2F2ZSByYW5nZXMgaW4gdGltZV90CnRoZW4gd2Ugd291bGQgbm90IGJlIGFi bGUgdG8gc2F2ZSB0aW1lc3RhbXAgcmFuZ2VzCmZvciBmaWxlcyB0aGF0IHN1cHBvcnQgdGltZXN0 YW1wcyBiZXlvbmQgeTIwMzguCgpTaWduZWQtb2ZmLWJ5OiBEZWVwYSBEaW5hbWFuaSA8ZGVlcGEu a2VybmVsQGdtYWlsLmNvbT4KLS0tCiBmcy9saWJmcy5jICAgICAgICAgICAgIHwgNCArKysrCiBm cy9zdXBlci5jICAgICAgICAgICAgIHwgMiArKwogaW5jbHVkZS9saW51eC9mcy5oICAgICB8IDMg KysrCiBpbmNsdWRlL2xpbnV4L3RpbWU2NC5oIHwgMiArKwogNCBmaWxlcyBjaGFuZ2VkLCAxMSBp bnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvZnMvbGliZnMuYyBiL2ZzL2xpYmZzLmMKaW5kZXgg MjhkNmYzNS4uOTBlZTgwMyAxMDA2NDQKLS0tIGEvZnMvbGliZnMuYworKysgYi9mcy9saWJmcy5j CkBAIC0yNTcsNiArMjU3LDggQEAgc3RydWN0IGRlbnRyeSAqbW91bnRfcHNldWRvX3hhdHRyKHN0 cnVjdCBmaWxlX3N5c3RlbV90eXBlICpmc190eXBlLCBjaGFyICpuYW1lLAogCXMtPnNfb3AgPSBv cHMgPyBvcHMgOiAmc2ltcGxlX3N1cGVyX29wZXJhdGlvbnM7CiAJcy0+c194YXR0ciA9IHhhdHRy OwogCXMtPnNfdGltZV9ncmFuID0gMTsKKwlzLT5zX3RpbWVfbWluID0gVElNRTY0X01JTjsKKwlz LT5zX3RpbWVfbWF4ID0gVElNRTY0X01BWDsKIAlyb290ID0gbmV3X2lub2RlKHMpOwogCWlmICgh cm9vdCkKIAkJZ290byBFbm9tZW07CkBAIC01MTgsNiArNTIwLDggQEAgaW50IHNpbXBsZV9maWxs X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqcywgdW5zaWduZWQgbG9uZyBtYWdpYywKIAlzLT5z X21hZ2ljID0gbWFnaWM7CiAJcy0+c19vcCA9ICZzaW1wbGVfc3VwZXJfb3BlcmF0aW9uczsKIAlz LT5zX3RpbWVfZ3JhbiA9IDE7CisJcy0+c190aW1lX21pbiA9IFRJTUU2NF9NSU47CisJcy0+c190 aW1lX21heCA9IFRJTUU2NF9NQVg7CiAKIAlpbm9kZSA9IG5ld19pbm9kZShzKTsKIAlpZiAoIWlu b2RlKQpkaWZmIC0tZ2l0IGEvZnMvc3VwZXIuYyBiL2ZzL3N1cGVyLmMKaW5kZXggYjhiNmEwOC4u ZjljMjI0MSAxMDA2NDQKLS0tIGEvZnMvc3VwZXIuYworKysgYi9mcy9zdXBlci5jCkBAIC0yNDcs NiArMjQ3LDggQEAgc3RhdGljIHN0cnVjdCBzdXBlcl9ibG9jayAqYWxsb2Nfc3VwZXIoc3RydWN0 IGZpbGVfc3lzdGVtX3R5cGUgKnR5cGUsIGludCBmbGFncywKIAlzLT5zX21heGJ5dGVzID0gTUFY X05PTl9MRlM7CiAJcy0+c19vcCA9ICZkZWZhdWx0X29wOwogCXMtPnNfdGltZV9ncmFuID0gMTAw MDAwMDAwMDsKKwlzLT5zX3RpbWVfbWluID0gVElNRTY0X01JTjsKKwlzLT5zX3RpbWVfbWF4ID0g VElNRTY0X01BWDsKIAlzLT5jbGVhbmNhY2hlX3Bvb2xpZCA9IENMRUFOQ0FDSEVfTk9fUE9PTDsK IAogCXMtPnNfc2hyaW5rLnNlZWtzID0gREVGQVVMVF9TRUVLUzsKZGlmZiAtLWdpdCBhL2luY2x1 ZGUvbGludXgvZnMuaCBiL2luY2x1ZGUvbGludXgvZnMuaAppbmRleCBkZThlZDBiLi5lZjU1ZGZi IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9mcy5o CkBAIC0xMzM3LDYgKzEzMzcsOSBAQCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgewogCS8qIEdyYW51bGFy aXR5IG9mIGMvbS9hdGltZSBpbiBucy4KIAkgICBDYW5ub3QgYmUgd29yc2UgdGhhbiBhIHNlY29u ZCAqLwogCXUzMgkJICAgc190aW1lX2dyYW47CisJLyogVGltZSBsaW1pdHMgZm9yIGMvbS9hdGlt ZSBpbiBzZWNvbmRzLiAqLworCXRpbWU2NF90ICAgICAgICAgICBzX3RpbWVfbWluOworCXRpbWU2 NF90ICAgICAgICAgICBzX3RpbWVfbWF4OwogCiAJLyoKIAkgKiBUaGUgbmV4dCBmaWVsZCBpcyBm b3IgVkZTICpvbmx5Ki4gTm8gZmlsZXN5c3RlbXMgaGF2ZSBhbnkgYnVzaW5lc3MKZGlmZiAtLWdp dCBhL2luY2x1ZGUvbGludXgvdGltZTY0LmggYi9pbmNsdWRlL2xpbnV4L3RpbWU2NC5oCmluZGV4 IDk4MGM3MWIuLjI1NDMzYjE4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3RpbWU2NC5oCisr KyBiL2luY2x1ZGUvbGludXgvdGltZTY0LmgKQEAgLTM4LDYgKzM4LDggQEAgc3RydWN0IGl0aW1l cnNwZWM2NCB7CiAKIC8qIExvY2F0ZWQgaGVyZSBmb3IgdGltZXNwZWNbNjRdX3ZhbGlkX3N0cmlj dCAqLwogI2RlZmluZSBUSU1FNjRfTUFYCQkJKChzNjQpfigodTY0KTEgPDwgNjMpKQorI2RlZmlu ZSBUSU1FNjRfTUlOCQkJKC1USU1FNjRfTUFYIC0gMSkKKwogI2RlZmluZSBLVElNRV9NQVgJCQko KHM2NCl+KCh1NjQpMSA8PCA2MykpCiAjZGVmaW5lIEtUSU1FX1NFQ19NQVgJCQkoS1RJTUVfTUFY IC8gTlNFQ19QRVJfU0VDKQogCi0tIAoyLjcuNAoKX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KWTIwMzggbWFpbGluZyBsaXN0ClkyMDM4QGxpc3RzLmxpbmFy by5vcmcKaHR0cHM6Ly9saXN0cy5saW5hcm8ub3JnL21haWxtYW4vbGlzdGluZm8veTIwMzgK From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: From: Deepa Dinamani To: viro@zeniv.linux.org.uk, tytso@mit.edu, adilger.kernel@dilger.ca, linux-ext4@vger.kernel.org Cc: linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, arnd@arndb.de, y2038@lists.linaro.org Subject: [PATCH v3 1/5] vfs: Add file timestamp range support Date: Sat, 18 Feb 2017 15:30:04 -0800 Message-Id: <1487460608-15697-2-git-send-email-deepa.kernel@gmail.com> In-Reply-To: <1487460608-15697-1-git-send-email-deepa.kernel@gmail.com> References: <1487460608-15697-1-git-send-email-deepa.kernel@gmail.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: 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/libfs.c | 4 ++++ fs/super.c | 2 ++ include/linux/fs.h | 3 +++ include/linux/time64.h | 2 ++ 4 files changed, 11 insertions(+) diff --git a/fs/libfs.c b/fs/libfs.c index 28d6f35..90ee803 100644 --- a/fs/libfs.c +++ b/fs/libfs.c @@ -257,6 +257,8 @@ struct dentry *mount_pseudo_xattr(struct file_system_type *fs_type, char *name, s->s_op = ops ? ops : &simple_super_operations; s->s_xattr = xattr; s->s_time_gran = 1; + s->s_time_min = TIME64_MIN; + s->s_time_max = TIME64_MAX; root = new_inode(s); if (!root) goto Enomem; @@ -518,6 +520,8 @@ int simple_fill_super(struct super_block *s, unsigned long magic, s->s_magic = magic; s->s_op = &simple_super_operations; s->s_time_gran = 1; + s->s_time_min = TIME64_MIN; + s->s_time_max = TIME64_MAX; inode = new_inode(s); if (!inode) 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