mbox series

[RFC,0/5] xfs: y2038 conversion

Message ID 20191112120910.1977003-1-arnd@arndb.de (mailing list archive)
Headers show
Series xfs: y2038 conversion | expand

Message

Arnd Bergmann Nov. 12, 2019, 12:09 p.m. UTC
This is part of a longer set of changes to clean up the last remaining
bits for the y2038 conversion. In XFS, three distinct problems need to
be addressed:

1. The use of time_t in kernel sources -- I'm in the process
   of removing all of them so we can remove the definition itself,
   making it harder to write new y2038-unsafe code. This part is
   trivially done as a side-effect of the other two.

2. The use of time_t in a user API header for ioctls. When
   building against a new 32-bit libc with 64-bit time_t, the structures
   no longer match and we get incorrect data from ioctls.  Unfortunately,
   there is no good way to fix XFS_IOC_FSBULKSTAT, I considered different
   approaches and in the end came up with three variants that are all
   part of this series. The idea is to pick just one of course.

3. On-disk timestamps hitting the y2038 limit. This applies to both
   inode timestamps and quota data. Both are extended to 40 bits,
   with the minimum timestamp still being year 1902, and the maximum
   getting extended from 2038 to 36744.

Please review and let me know which of ioctl API changes makes the
most sense. I have not done any actual runtime testing on the patches,
so this is clearly too late for the next merge window, but I hope to
get it all merged for v5.6.

      Arnd

Arnd Bergmann (5):
  xfs: [variant A] avoid time_t in user api
  xfs: [variant B] add time64 version of xfs_bstat
  xfs: [variant C] avoid i386-misaligned xfs_bstat
  xfs: extend inode format for 40-bit timestamps
  xfs: use 40-bit quota time limits

 fs/xfs/libxfs/xfs_dquot_buf.c   |   6 +-
 fs/xfs/libxfs/xfs_format.h      |  11 +-
 fs/xfs/libxfs/xfs_fs.h          |  37 +++++-
 fs/xfs/libxfs/xfs_inode_buf.c   |  28 +++--
 fs/xfs/libxfs/xfs_inode_buf.h   |   1 +
 fs/xfs/libxfs/xfs_log_format.h  |   6 +-
 fs/xfs/libxfs/xfs_trans_inode.c |   3 +-
 fs/xfs/xfs_dquot.c              |  29 +++--
 fs/xfs/xfs_inode.c              |   3 +-
 fs/xfs/xfs_inode_item.c         |  10 +-
 fs/xfs/xfs_ioctl.c              | 195 +++++++++++++++++++++++++++++++-
 fs/xfs/xfs_ioctl.h              |  12 ++
 fs/xfs/xfs_ioctl32.c            | 160 +++++---------------------
 fs/xfs/xfs_ioctl32.h            |  26 ++---
 fs/xfs/xfs_iops.c               |   3 +-
 fs/xfs/xfs_itable.c             |   2 +-
 fs/xfs/xfs_qm.c                 |  18 ++-
 fs/xfs/xfs_qm.h                 |   6 +-
 fs/xfs/xfs_qm_syscalls.c        |  16 ++-
 fs/xfs/xfs_quotaops.c           |   6 +-
 fs/xfs/xfs_super.c              |   2 +-
 fs/xfs/xfs_trans_dquot.c        |  17 ++-
 22 files changed, 387 insertions(+), 210 deletions(-)