[RFC v2] vfs 64 bit time transition proposals

From: Deepa Dinamani
Date: Fri Feb 12 2016 - 04:22:38 EST


Introduction

This is a follow on to the series: https://lkml.org/lkml/2016/1/7/20 [1].
This is aimed at reaching a consensus on how to transition the vfs
timestamps to use 64 bit time. This demonstrates three ways (2a, 2b and
2c) of solving this problem. Each of the proposals has its own cover
letter that explains the individual approach. Proposals 2b and 2c also
outline variant approaches which are similar to the respective proposals.
This drives the proposal count to 5. All the changes have been discussed
with Arnd Bergmann, who posted the original series:
https://lkml.org/lkml/2014/5/30/669 [2]

The series has been simplified to include only the 64 bit timestamp
changes as per Dave Chinnerâs suggestion.

Motivation

The problem is how to change the vfs inode timestamps to use 64 bit
times to overcome the 2038 problem.

Below table [3] gives an overview of the extent/ type of changes
needed of changes needed.
The series is aimed at obtaining small manageable patches for all
the cases in [3].

Table [3]
Terminology: vfs_time â data type of timestamps used in the vfs layer.
Access type # of instances

1. timespec_*(struct vfs_time, struct timespec) / 34
timespec_*(struct vfs_time, struct vfs_time)

2. struct vfs_time = struct vfs_time 50

3. vfs_time = current_fs_time/ CURRENT_TIME/ CURRENT_TIME_SEC 312

4. setattr vfs_time assignments 141

5. vfs_time = other data types, outside of setattr() (timespec, s32, s64..) 74

6. other data types, outside of getattr() (timespec, s32, s64..) = vfs_time 85

7. internal individual fs funtions using inode timestamps as args 80

8. extra timestamp fields in individual filesystems ~10

9. VFS callback - int (*update_time)(struct inode *, struct timespec *, int) 3

10. VFS function - void lease_get_mtime(struct inode *inode, struct timespec *time) 3

Each series is used to demonstrate how each of the above cases is solved
using their respective approaches. The example filesystems (btrfs,
xfs, cifs, and ceph) were selected in such a way so as to showcase all
these issues in table [3].

Source Tree

The tree is hosted at github.com/deepa-hub/vfs.git

The branches for the three approaches are

2a. https://github.com/deepa-hub/vfs.git refs/heads/vfs_time
2b. https://github.com/deepa-hub/vfs.git refs/heads/vfs_time_to_timespec
2c. https://github.com/deepa-hub/vfs.git refs/heads/vfs_time_to_ts64

All the above series are based off of:
https://lkml.org/lkml/2016/2/3/34 [4]
and a couple of other patches.

Only the minimal changes are posted here to keep the series simple.

There are a couple of bug fixes like data type conversion bugs that will
be sent directly to the corresponding filesystem lists.

Next steps

The approaches 2a, 2b and 2c are posted as responses to this cover letter.

Testing

All the approaches have been compile tested only.