⇤ ← Revision 1 as of 2016-05-24 14:41:33
Size: 2446
Comment:
|
Size: 5314
Comment: move VFS contents here
|
Deletions are marked like this. | Additions are marked like this. |
Line 60: | Line 60: |
== Overview of file systems == Each file system stores its file modification times in its own format on disk, and a lot of them have the same problem. || file system || time type || expiration year || || 9p (9P2000) || unsigned 32-bit seconds || 2106 || || file system || time type || expiration year || || 9p (9P2000) || unsigned 32-bit seconds || 2106 || || 9p (9P2000.L) || signed 64-bit seconds, ns || never || || adfs || 40-bit cs since 1900 || 2248 || || affs || u32 days/mins/(secs/50) || 11760870 || || afs || unsigned 32-bit seconds || 2106 || || befs || unsigned 48-bit seconds || never || || bfs || unsigned 32-bit seconds || 2106 || || btrfs || signed 64-bit seconds, 32-bit ns || never || || ceph || unsigned 32-bit second/ns || 2106 || || cifs (smb) || 7-bit years since 1980 || 2107 || || cifs (modern) || 64-bit 100ns since 1601 || 30328 || || coda || timespec ioctl || 2038 || || cramfs || fixed || 1970 || || efs || unsigned 32-bit seconds || 2106 || || exofs || signed 32-bit seconds || 2038 || || ext2 || signed 32-bit seconds || 2038 || || ext3 || signed 32-bit seconds || 2038 || || ext4 (good old inodes) || signed 32-bit seconds || 2038 || || ext4 (new inodes || 34 bit seconds / 30-bit ns (but broken) || 2038 || || f2fs || 64-bit seconds / 32-bit ns || never || || fat || 7-bit years since 1980, 2s resolution || 2107 || || freevxfs || unsigned 32-bit seconds/u32 microseconds || 2106 || || fuse || 64-bit second/32-bit ns || never || || gfs2 || u64 seconds/u32 ns || never || || hfs || u32 seconds since 1904 || 2040 || || hfsplus || u32 seconds since 1904 || 2040 || || hostfs || timespec || 2038 || || hpfs || unsigned 32-bit seconds || 2106 || || isofs || 'char' year since 1900 (fixable) || 2028 || || jffs2 || unsigned 32-bit seconds || 2106 || || jfs || unsigned 32-bit seconds/ns || 2106 || || logfs || signed 64-bit ns || 2262 || || minix || unsigned 32-bit seconds || 2106 || || ncpfs || 7-bit year since 1980 || 2107 || || nfsv2,v3 || unsigned 32-bit seconds/ns || 2106 || || nfsv4 || u64 seconds/u32 ns || never || || nfsd || unsigned 32-bit seconds/ns || 2106 || || nilfs2 || u64 seconds/u32 ns || never || || ntfs || 64-bit 100ns since 1601 || 30828 || || ocfs2 || 34-bit seconds/30-bit ns || 2514 || || omfs || 64-bit milliseconds || never || || pstore || ascii seconds || 2106 || || qnx4 || unsigned 32-bit seconds || 2106 || || qnx6 || unsigned 32-bit seconds || 2106 || || reiserfs || unsigned 32-bit seconds || 2106 || || romfs || fixed || 1970 || || squashfs || unsigned 32-bit seconds || 2106 || || sysv || unsigned 32-bit seconds || 2106 || || ubifs || u64 second/u32 ns || never || || udf || u16 year || 2038 || || ufs1 || unsigned 32-bit seconds || 2106 || || ufs2 || signed 64-bit seconds/u32 ns || never || || xfs || signed 32-bit seconds/ns || 2106 || |
Plan
1.Plan for VFS
Milestone |
# of patches |
Status |
Targeted Kernel release |
Infrastructure patches for vfs_time and granularity fields 1.4.1 and 1.4.2 |
2 |
Done |
4.7- rc1 |
Test time ranges beyond y2038 support, in memory timestamps match with on disk -1.3.1 and 1.3.2 |
Xfs tests |
In progress |
5/28/16 |
Replace CURRENT_TIME and CURRENT_TIME_SEC – 1.2.1 |
~60 |
In Progress, waiting for 4.7 rc1 and repost previous. |
4.8 |
Vfs_time patches – 1.4.3 |
~40 |
In Progress, waiting for 4.7-rc1 |
4.8 |
Fill in right granularities and ranges for FS – 1.2.2 and 1.2.3 |
~40 |
Yet to start |
4.8 |
Expose FS granularities and ranges – 1.4.5 and 1.4.6 |
~5 |
Yet to start |
4.8 |
Tests to check the granularities and ranges – 1.3.3 and 1.3.4 |
Xfs tests |
Yet to start |
6/10/16 |
Add policy for wrong granularities - 1.4.7 |
RFC for 4.9 |
Yet to start |
|
Stat and utime changes – 1.4.8 |
RFC for 4.9 |
Yet to start |
|
Tests for I_DIRTY_* flags and mount options -1.3.5 and 1.3.6 |
Xfs tests |
Yet to start |
6/30/16 |
Transition vfs to 64 bit – 1.4.4 |
2 |
Ready, wait for other patches to merge |
4.10 |
1.2 Cleanup
1.2.1 Replace current_time and current_time_sec
1.2.2 Fill in right granularities
1.2.3 Fill in right ranges
1.3 Test
1.3.1 Test time written on disk and in memory are same
1.3.2 Test time ranges beyond y2038
1.3.3 Test time granularities are what the fs needs
1.3.4 Test time ranges supported are same as what fs reports
1.3.5 Perf tests
1.3.6 Test to check i_dirty_* flags are updating correctly
1.3.7 Test to check with different mount options like lazy atime etc.
1.4 Kernel tasks to transition vfs to use 64 bit times
1.4.1 Infrastructure patches for vfs_time approach
1.4.2 Infrastructure patch for vfs granularity fields
1.4.3 Change each fs to use vfs time patches
1.4.4 Change vfs to use timespec64
1.4.5 Expose fs granularities
1.4.6 Expose fs ranges
1.4.7 Add vfs policy for handling wrong ranges and granularity
1.4.8 Stat and utime api changes
1.5 Runtime library
1.5.1 Make changes in one library
1.5.2 Make it part of some userspace and run it
Overview of file systems
Each file system stores its file modification times in its own format on disk, and a lot of them have the same problem.
file system |
time type |
expiration year |
9p (9P2000) |
unsigned 32-bit seconds |
2106 |
file system |
time type |
expiration year |
9p (9P2000) |
unsigned 32-bit seconds |
2106 |
9p (9P2000.L) |
signed 64-bit seconds, ns |
never |
adfs |
40-bit cs since 1900 |
2248 |
affs |
u32 days/mins/(secs/50) |
11760870 |
afs |
unsigned 32-bit seconds |
2106 |
befs |
unsigned 48-bit seconds |
never |
bfs |
unsigned 32-bit seconds |
2106 |
btrfs |
signed 64-bit seconds, 32-bit ns |
never |
ceph |
unsigned 32-bit second/ns |
2106 |
cifs (smb) |
7-bit years since 1980 |
2107 |
cifs (modern) |
64-bit 100ns since 1601 |
30328 |
coda |
timespec ioctl |
2038 |
cramfs |
fixed |
1970 |
efs |
unsigned 32-bit seconds |
2106 |
exofs |
signed 32-bit seconds |
2038 |
ext2 |
signed 32-bit seconds |
2038 |
ext3 |
signed 32-bit seconds |
2038 |
ext4 (good old inodes) |
signed 32-bit seconds |
2038 |
ext4 (new inodes |
34 bit seconds / 30-bit ns (but broken) |
2038 |
f2fs |
64-bit seconds / 32-bit ns |
never |
fat |
7-bit years since 1980, 2s resolution |
2107 |
freevxfs |
unsigned 32-bit seconds/u32 microseconds |
2106 |
fuse |
64-bit second/32-bit ns |
never |
gfs2 |
u64 seconds/u32 ns |
never |
hfs |
u32 seconds since 1904 |
2040 |
hfsplus |
u32 seconds since 1904 |
2040 |
hostfs |
timespec |
2038 |
hpfs |
unsigned 32-bit seconds |
2106 |
isofs |
'char' year since 1900 (fixable) |
2028 |
jffs2 |
unsigned 32-bit seconds |
2106 |
jfs |
unsigned 32-bit seconds/ns |
2106 |
logfs |
signed 64-bit ns |
2262 |
minix |
unsigned 32-bit seconds |
2106 |
ncpfs |
7-bit year since 1980 |
2107 |
nfsv2,v3 |
unsigned 32-bit seconds/ns |
2106 |
nfsv4 |
u64 seconds/u32 ns |
never |
nfsd |
unsigned 32-bit seconds/ns |
2106 |
nilfs2 |
u64 seconds/u32 ns |
never |
ntfs |
64-bit 100ns since 1601 |
30828 |
ocfs2 |
34-bit seconds/30-bit ns |
2514 |
omfs |
64-bit milliseconds |
never |
pstore |
ascii seconds |
2106 |
qnx4 |
unsigned 32-bit seconds |
2106 |
qnx6 |
unsigned 32-bit seconds |
2106 |
reiserfs |
unsigned 32-bit seconds |
2106 |
romfs |
fixed |
1970 |
squashfs |
unsigned 32-bit seconds |
2106 |
sysv |
unsigned 32-bit seconds |
2106 |
ubifs |
u64 second/u32 ns |
never |
udf |
u16 year |
2038 |
ufs1 |
unsigned 32-bit seconds |
2106 |
ufs2 |
signed 64-bit seconds/u32 ns |
never |
xfs |
signed 32-bit seconds/ns |
2106 |