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.