Size: 5729
Comment: pcik a different example for a medium task
|
Size: 6026
Comment:
|
Deletions are marked like this. | Additions are marked like this. |
Line 89: | Line 89: |
* fs/fuse/dir.c * drivers/scsi/pmcraid.c |
|
Line 99: | Line 101: |
* drivers/media/platform/vivid/ * drivers/net/hamradio/baycom_ser_fdx.c |
|
Line 110: | Line 114: |
* fix all uses of timeval in drivers/scsi/bfa |
|
Line 116: | Line 123: |
* start migrating the times in 'struct inode' and 'struct 'kstat' to separate 64-bit second + 32-bit nanosecond fields. |
unfortunately this page got deleted by accident, this version is restored from [https://web.archive.org/web/20150318062024/http://kernelnewbies.org/y2038], but most of the formatting is still missing.
All 32-bit kernels to date use a signed 32-bit time_t type, which can only represent time until January 2038. Since embedded systems running 32-bit Linux are going to survive beyond that date, we have to change all current uses, in a backwards compatible way.
We will likely keep the 32-bit time_t in all user space interfaces that currently use it, but add new interfaces with a 64-bit timespec or another type that can represent later times. Most importantly that impacts system calls, but also specific ioctl commands and a few other interfaces. User space programs have to be recompiled to use the new interfaces, and the policy whether to use the old or the time time is left to the C library. While that policy is a complex topic itself, we don't cover it here.
System calls have been moved out :y2038/syscalls:, that page is rather outdated, newer information is available at https://lwn.net/Articles/643234/
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
The task list is for people that want to get involved, there will be many more tasks over time, so this is just a starting point. In the end, we should remove all instances of 'time_t', 'timespec' and 'timeval' from the kernel.
Find a driver using time_t/timespec/timeval internally and convert it to ktime_t/timespec64, examples:
Find a driver using time_t/timespec/timeval internally and convert it to ktime_t/timespec64, examples:
The year 2038 problem
User space interfaces
System calls
File systems
Tasks
Trivial tasks
Small tasks
Medium tasks
Advanced tasks
Tasks later in the project