The series is aimed at replacing struct timespec which is not
y2038 safe with y2038 safe struct timespec64 for k_clock interfaces.
The series also replaces struct itimerspec which uses struct timespec
internally with struct itimerspec64 for the k_clock interfaces.
The series does not change the syscall interface.
This will be done in a follow up series.
A few existing checkpatch-noted style issues, such as the 80 line
character limit, have been left as-is to facilitate easier review.
Changes since v1:
* Address review comments for change logs and coding style.
* Fix kbuild test error for alpha.
Deepa Dinamani (7):
time: Delete do_sys_setimeofday()
time: Change posix clocks ops interfaces to use timespec64
Change k_clock clock_get() to use timespec64
Change k_clock clock_getres() to use timespec64
Change k_clock clock_set() to use timespec64
Change k_clock timer_set() and timer_get() to use timespec64
Change k_clock nsleep() to use timespec64
arch/alpha/kernel/osf_sys.c | 4 +-
drivers/char/mmtimer.c | 28 ++++++-------
drivers/ptp/ptp_clock.c | 18 ++++----
include/linux/hrtimer.h | 2 +-
include/linux/posix-clock.h | 10 ++---
include/linux/posix-timers.h | 20 ++++-----
include/linux/timekeeping.h | 20 +++------
kernel/compat.c | 10 +++--
kernel/time/alarmtimer.c | 24 +++++------
kernel/time/hrtimer.c | 10 +++--
kernel/time/posix-clock.c | 10 ++---
kernel/time/posix-cpu-timers.c | 66 +++++++++++++++--------------
kernel/time/posix-stubs.c | 20 ++++++---
kernel/time/posix-timers.c | 95 ++++++++++++++++++++++++------------------
kernel/time/time.c | 4 +-
15 files changed, 179 insertions(+), 162 deletions(-)
--
2.7.4
Cc: Richard Cochran <richardcochran(a)gmail.com>
Cc: linux-alpha(a)vger.kernel.org
Cc: netdev(a)vger.kernel.org
The series is aimed at replacing struct timespec which is not
y2038 safe with y2038 safe struct timespec64 for k_clock interfaces.
The series does not change the syscall interface.
This will be done in a follow up series.
A few existing checkpatch-noted style issues, such as the 80 line
character limit, have been left as-is to facilitate easier review.
Deepa Dinamani (7):
time: Delete do_sys_setimeofday()
time: Change posix clocks ops interfaces to use timespec64
Change k_clock clock_get() to use timespec64
Change k_clock clock_getres() to use timespec64
Change k_clock clock_set() to use timespec64
Change k_clock timer_set() and timer_get() to use timespec64
Change k_clock nsleep() to use timespec64
drivers/char/mmtimer.c | 28 ++++++-------
drivers/ptp/ptp_clock.c | 18 ++++----
include/linux/hrtimer.h | 2 +-
include/linux/posix-clock.h | 10 ++---
include/linux/posix-timers.h | 14 +++----
include/linux/timekeeping.h | 20 +++------
kernel/compat.c | 10 +++--
kernel/time/alarmtimer.c | 24 +++++------
kernel/time/hrtimer.c | 10 +++--
kernel/time/posix-clock.c | 10 ++---
kernel/time/posix-cpu-timers.c | 66 ++++++++++++++++--------------
kernel/time/posix-stubs.c | 20 ++++++---
kernel/time/posix-timers.c | 93 ++++++++++++++++++++++++------------------
kernel/time/time.c | 4 +-
14 files changed, 172 insertions(+), 157 deletions(-)
--
2.7.4
Resending to update author id in patch 7/7.
The series is aimed at replacing struct timespec which is not
y2038 safe with y2038 safe struct timespec64 for k_clock interfaces.
The series does not change the syscall interface.
This will be done in a follow up series.
A few existing checkpatch-noted style issues, such as the 80 line
character limit, have been left as-is to facilitate easier review.
Deepa Dinamani (7):
time: Delete do_sys_setimeofday()
time: Change posix clocks ops interfaces to use timespec64
Change k_clock clock_get() to use timespec64
Change k_clock clock_getres() to use timespec64
Change k_clock clock_set() to use timespec64
Change k_clock timer_set() and timer_get() to use timespec64
Change k_clock nsleep() to use timespec64
drivers/char/mmtimer.c | 28 ++++++-------
drivers/ptp/ptp_clock.c | 18 ++++----
include/linux/hrtimer.h | 2 +-
include/linux/posix-clock.h | 10 ++---
include/linux/posix-timers.h | 14 +++----
include/linux/timekeeping.h | 20 +++------
kernel/compat.c | 10 +++--
kernel/time/alarmtimer.c | 24 +++++------
kernel/time/hrtimer.c | 10 +++--
kernel/time/posix-clock.c | 10 ++---
kernel/time/posix-cpu-timers.c | 66 ++++++++++++++++--------------
kernel/time/posix-stubs.c | 20 ++++++---
kernel/time/posix-timers.c | 93 ++++++++++++++++++++++++------------------
kernel/time/time.c | 4 +-
14 files changed, 172 insertions(+), 157 deletions(-)
--
2.7.4
sys_newlstat is a system call implementation that is meant for user
space, and that copies kernel-internal data structure to the user
format, which is not needed for in-kernel users.
Further, as we rearrange the system call implementation so we can
extend it with 64-bit time_t, the prototype for sys_newlstat changes.
This changes the initramfs code to use vfs_lstat directly, to get
it out of the way of the time_t changes, and make it slightly more
efficient in the process. Along the same lines we also replace
sys_stat and sys_stat64 with vfs_stat.
Signed-off-by: Arnd Bergmann <arnd(a)arndb.de>
---
Submitted before in June 2016, but no reply.
Andrew or Al, could one of you pick this up for v4.12?
---
init/do_mounts.h | 22 ++++------------------
init/initramfs.c | 12 ++++++------
2 files changed, 10 insertions(+), 24 deletions(-)
diff --git a/init/do_mounts.h b/init/do_mounts.h
index 067af1d9e8b6..282d65bfd674 100644
--- a/init/do_mounts.h
+++ b/init/do_mounts.h
@@ -19,29 +19,15 @@ static inline int create_dev(char *name, dev_t dev)
return sys_mknod(name, S_IFBLK|0600, new_encode_dev(dev));
}
-#if BITS_PER_LONG == 32
static inline u32 bstat(char *name)
{
- struct stat64 stat;
- if (sys_stat64(name, &stat) != 0)
+ struct kstat stat;
+ if (vfs_stat(name, &stat) != 0)
return 0;
- if (!S_ISBLK(stat.st_mode))
+ if (!S_ISBLK(stat.mode))
return 0;
- if (stat.st_rdev != (u32)stat.st_rdev)
- return 0;
- return stat.st_rdev;
-}
-#else
-static inline u32 bstat(char *name)
-{
- struct stat stat;
- if (sys_newstat(name, &stat) != 0)
- return 0;
- if (!S_ISBLK(stat.st_mode))
- return 0;
- return stat.st_rdev;
+ return stat.rdev;
}
-#endif
#ifdef CONFIG_BLK_DEV_RAM
diff --git a/init/initramfs.c b/init/initramfs.c
index 7eb7cb7cb9b9..83d514d0e69d 100644
--- a/init/initramfs.c
+++ b/init/initramfs.c
@@ -312,10 +312,10 @@ static int __init maybe_link(void)
static void __init clean_path(char *path, umode_t fmode)
{
- struct stat st;
+ struct kstat st;
- if (!sys_newlstat(path, &st) && (st.st_mode ^ fmode) & S_IFMT) {
- if (S_ISDIR(st.st_mode))
+ if (!vfs_lstat(path, &st) && (st.mode ^ fmode) & S_IFMT) {
+ if (S_ISDIR(st.mode))
sys_rmdir(path);
else
sys_unlink(path);
@@ -581,13 +581,13 @@ static void __init clean_rootfs(void)
num = sys_getdents64(fd, dirp, BUF_SIZE);
while (num > 0) {
while (num > 0) {
- struct stat st;
+ struct kstat st;
int ret;
- ret = sys_newlstat(dirp->d_name, &st);
+ ret = vfs_lstat(dirp->d_name, &st);
WARN_ON_ONCE(ret);
if (!ret) {
- if (S_ISDIR(st.st_mode))
+ if (S_ISDIR(st.mode))
sys_rmdir(dirp->d_name);
else
sys_unlink(dirp->d_name);
--
2.9.0
Dear Customer,
This is to confirm that your item has been shipped at March 12.
Please review delivery label in attachment!
Thanks,
Salvador Bryan,
UPS Chief Operation Agent.
On Wed, Feb 22, 2017 at 9:05 AM, Albert ARIBAUD <albert.aribaud(a)3adev.fr> wrote:
> Hi all,
>
> I have produced a fifth draft of what will eventually become the Y2038
> design document:
>
> https://sourceware.org/glibc/wiki/Y2038ProofnessDesign?rev=115
>
> Relative to the previous draft:
>
> * It makes explicit that the implementation should allow the same
> application source code to build unchanged whether the default for
> time size is 32-bit (_TIME_BITS undefined or unequal to 64) or
> 64-bit (_TIME_BITS defined equal to 64).
>
> * Security issues considerations have been added (thanks to Carlos
> O'Donnel).
>
> * Timestamps and IOCTLs sections have been expanded.
>
> * Implementation examples for types has been added.
>
> * Implementation examples for APIs has been added.
>
> As always, comments welcome.
I found a few minor inaccuracies:
You have classified sched_rr_get_interval() as y2038-compatible, but
getrusage() as incompatible. I think these are both in one category,
either incompatible or a third category: we pass only intervals
here, so there won't be an overflow but redefining timeval still results
in an incompatible ABI, unless the structures are redefined in terms
of 32-bit types instead of time_t/timeval/timespec.
I've discussed the kernel side for "Y2038-incompatible socket
timestamping" with Deep a while ago, and I think we came to a
new conclusions for what would be the best approach. I'll let her
comment here.
For "Y2038-compatible types", please clarify whether time32_t
and time64_t (and related types) are internal-only types or visible
to applications through header files. I assume they are internal
only, but it is not 100% clear. Related to that, what is the expected
definition of time32_t on architectures that never had a 32-bit time_t,
such as existing 64-bit architectures? Is it left undefined and
all code referring to time32_t compiled conditionally?
In "Y2038-compatible struct timespec", replace "microseconds"
with "nanoseconds. Also, it's worth pointing out the known problems
with the padding:
- on big-endian systems, any code doing a variation of
"struct timespec ts = { seconds, nanos };" is broken because
it assigns the nanoseconds to the wrong struct member.
The example code is nonconforming as neither POSIX nor C11
require a particular order of the struct members, but I could also
easily find examples of existing programs doing this. Note that
NetBSD, OpenBSD and Windows have no padding but do use
64-bit time_t.
- If the padding is uninitialized, we have to explicitly zero it before
calling a kernel function that assumes the 64-bit layout. This can
be done in glibc before calling into the kernel, or at the kernel
entry (where my last patch set does it), but it is awkward either
way.
Unfortunately, there doesn't seem to be a good solution here
for either of the two problems. Maybe someone else has more
ideas. Using a pointer type for the padding would at least
cause a compile-time warning for broken code, other solutions
might require GCC extensions or break C11 in another way.
I'll comment on the kernel/glibc incompatibilities section tomorrow,
need to collect my thoughts there some more.
Arnd
The series is aimed at adding timestamp checking and policy
related to it to vfs.
The series was developed with discussions and guidance from
Arnd Bergmann.
The original thread is at https://lkml.org/lkml/2016/11/2/294
Associated test: xfstests generic/402
Note that the above test will be run and will fail all filesystems that
do not have correct limits specified in the xfstests or the kernel or
that don't support times beyond the test dates. I will be submitting a
follow up xfstest and kernel patches to update all filesystems.
Currently ext4 is the only filesystem that reflects correct limits.
The branch is available at
https://github.com/deepa-hub/vfs.git refs/heads/vfs_timestamp_policy
Changes since v3:
* Remove redundant initializations in libfs.c
* Change early_param to __setup similar to other root mount options.
* Fix documentation warning
Changes since v2:
* Introduce early boot param override for checks.
* Drop afs patch for timestamp limits.
Changes since v1:
* return EROFS on mount errors
* fix mtime copy/paste error in utimes
Deepa Dinamani (5):
vfs: Add file timestamp range support
vfs: Add checks for filesystem timestamp limits
ext4: Initialize timestamps limits
vfs: Add timestamp_truncate() api
utimes: Clamp the timestamps before update
fs/ext4/ext4.h | 4 ++++
fs/ext4/super.c | 7 ++++++-
fs/inode.c | 47 ++++++++++++++++++++++++++++++++++++++++++++++-
fs/internal.h | 2 ++
fs/namespace.c | 12 ++++++++++++
fs/super.c | 9 +++++++++
fs/utimes.c | 17 +++++++++++++----
include/linux/fs.h | 4 ++++
include/linux/time64.h | 6 ++++++
include/uapi/linux/fs.h | 6 +++++-
kernel/sysctl.c | 7 +++++++
11 files changed, 114 insertions(+), 7 deletions(-)
--
2.7.4
Dear Customer,
Your parcel was successfully delivered February 21 to UPS Station, but our courier cound not contact you.
You can find more details in this e-mail attachment!
With thanks and appreciation,
Isaac Edwards,
UPS Parcels Delivery Manager.
The series is aimed at adding timestamp checking and policy
related to it to vfs.
The series was developed with discussions and guidance from
Arnd Bergmann.
The original thread is at https://lkml.org/lkml/2016/11/2/294
Associated test: xfstests generic/402
Note that the above test will be run and will fail all filesystems that
do not have correct limits specified in the xfstests or the kernel or
that don't support times beyond the test dates. I will be submitting a
follow up xfstest and kernel patches to update all filesystems.
Currently ext4 is the only filesystem that reflects correct limits.
The branch is available at
https://github.com/deepa-hub/vfs.git refs/heads/vfs_timestamp_policy
Changes since v2:
* Introduce early boot param override for checks.
* Drop afs patch for timestamp limits.
Changes since v1:
* return EROFS on mount errors
* fix mtime copy/paste error in utimes
Deepa Dinamani (5):
vfs: Add file timestamp range support
vfs: Add checks for filesystem timestamp limits
ext4: Initialize timestamps limits
vfs: Add timestamp_truncate() api
utimes: Clamp the timestamps before update
fs/ext4/ext4.h | 4 ++++
fs/ext4/super.c | 7 ++++++-
fs/inode.c | 45 ++++++++++++++++++++++++++++++++++++++++++++-
fs/internal.h | 2 ++
fs/libfs.c | 4 ++++
fs/namespace.c | 12 ++++++++++++
fs/super.c | 9 +++++++++
fs/utimes.c | 17 +++++++++++++----
include/linux/fs.h | 4 ++++
include/linux/time64.h | 6 ++++++
include/uapi/linux/fs.h | 6 +++++-
kernel/sysctl.c | 7 +++++++
12 files changed, 116 insertions(+), 7 deletions(-)
--
2.7.4
Cc: "Theodore Ts'o" <tytso(a)mit.edu>
Cc: Andreas Dilger <adilger.kernel(a)dilger.ca>
Cc: linux-ext4(a)vger.kernel.org