From: Jan Harkes <jaharkes@cs.cmu.edu>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: Jan Harkes <jaharkes@cs.cmu.edu>, linux-fsdevel@vger.kernel.org
Subject: [PATCH 11/22] coda: change Coda's user api to use 64-bit time_t in timespec
Date: Wed, 20 Mar 2019 12:45:30 -0400 [thread overview]
Message-ID: <6c4b14384d041429ccf976698a6f19ed7c0bacb4.1553098576.git.jaharkes@cs.cmu.edu> (raw)
In-Reply-To: <cover.1553098575.git.jaharkes@cs.cmu.edu>
Move the 32-bit time_t problems to userspace.
Signed-off-by: Jan Harkes <jaharkes@cs.cmu.edu>
---
Documentation/filesystems/coda.txt | 10 ++++-----
fs/coda/coda_linux.c | 21 +++++++------------
include/uapi/linux/coda.h | 33 +++++++-----------------------
3 files changed, 19 insertions(+), 45 deletions(-)
diff --git a/Documentation/filesystems/coda.txt b/Documentation/filesystems/coda.txt
index ea5969068895..545262c167c3 100644
--- a/Documentation/filesystems/coda.txt
+++ b/Documentation/filesystems/coda.txt
@@ -481,8 +481,8 @@ kernel support.
- struct vtimespec {
- long tv_sec; /* seconds */
+ struct coda_timespec {
+ int64_t tv_sec; /* seconds */
long tv_nsec; /* nanoseconds */
};
@@ -496,9 +496,9 @@ kernel support.
long va_fileid; /* file id */
u_quad_t va_size; /* file size in bytes */
long va_blocksize; /* blocksize preferred for i/o */
- struct vtimespec va_atime; /* time of last access */
- struct vtimespec va_mtime; /* time of last modification */
- struct vtimespec va_ctime; /* time file changed */
+ struct coda_timespec va_atime; /* time of last access */
+ struct coda_timespec va_mtime; /* time of last modification */
+ struct coda_timespec va_ctime; /* time file changed */
u_long va_gen; /* generation number of file */
u_long va_flags; /* flags defined for file */
dev_t va_rdev; /* device special file represents */
diff --git a/fs/coda/coda_linux.c b/fs/coda/coda_linux.c
index 8addcd166908..e4b5f02f0dd4 100644
--- a/fs/coda/coda_linux.c
+++ b/fs/coda/coda_linux.c
@@ -66,13 +66,8 @@ unsigned short coda_flags_to_cflags(unsigned short flags)
return coda_flags;
}
-static struct timespec64 coda_to_timespec64(struct vtimespec ts)
+static struct timespec64 coda_to_timespec64(struct coda_timespec ts)
{
- /*
- * We interpret incoming timestamps as 'signed' to match traditional
- * usage and support pre-1970 timestamps, but this breaks in y2038
- * on 32-bit machines.
- */
struct timespec64 ts64 = {
.tv_sec = ts.tv_sec,
.tv_nsec = ts.tv_nsec,
@@ -81,12 +76,10 @@ static struct timespec64 coda_to_timespec64(struct vtimespec ts)
return ts64;
}
-static struct vtimespec timespec64_to_coda(struct timespec64 ts64)
+static struct coda_timespec timespec64_to_coda(struct timespec64 ts64)
{
- /* clamp the timestamps to the maximum range rather than wrapping */
- struct vtimespec ts = {
- .tv_sec = lower_32_bits(clamp_t(time64_t, ts64.tv_sec,
- LONG_MIN, LONG_MAX)),
+ struct coda_timespec ts = {
+ .tv_sec = ts64.tv_sec,
.tv_nsec = ts64.tv_nsec,
};
@@ -156,11 +149,11 @@ void coda_iattr_to_vattr(struct iattr *iattr, struct coda_vattr *vattr)
vattr->va_uid = (vuid_t) -1;
vattr->va_gid = (vgid_t) -1;
vattr->va_size = (off_t) -1;
- vattr->va_atime.tv_sec = (long) -1;
+ vattr->va_atime.tv_sec = (int64_t) -1;
vattr->va_atime.tv_nsec = (long) -1;
- vattr->va_mtime.tv_sec = (long) -1;
+ vattr->va_mtime.tv_sec = (int64_t) -1;
vattr->va_mtime.tv_nsec = (long) -1;
- vattr->va_ctime.tv_sec = (long) -1;
+ vattr->va_ctime.tv_sec = (int64_t) -1;
vattr->va_ctime.tv_nsec = (long) -1;
vattr->va_type = C_VNON;
vattr->va_fileid = -1;
diff --git a/include/uapi/linux/coda.h b/include/uapi/linux/coda.h
index fc5f7874208a..5dba636b6e11 100644
--- a/include/uapi/linux/coda.h
+++ b/include/uapi/linux/coda.h
@@ -86,10 +86,6 @@ typedef unsigned long long u_quad_t;
#define inline
-struct timespec {
- long ts_sec;
- long ts_nsec;
-};
#else /* DJGPP but not KERNEL */
#include <sys/time.h>
typedef unsigned long long u_quad_t;
@@ -110,13 +106,6 @@ typedef unsigned long long u_quad_t;
#define cdev_t dev_t
#endif
-#ifdef __CYGWIN32__
-struct timespec {
- time_t tv_sec; /* seconds */
- long tv_nsec; /* nanoseconds */
-};
-#endif
-
#ifndef __BIT_TYPES_DEFINED__
#define __BIT_TYPES_DEFINED__
typedef signed char int8_t;
@@ -211,19 +200,10 @@ struct CodaFid {
*/
enum coda_vtype { C_VNON, C_VREG, C_VDIR, C_VBLK, C_VCHR, C_VLNK, C_VSOCK, C_VFIFO, C_VBAD };
-#ifdef __linux__
-/*
- * This matches the traditional Linux 'timespec' structure binary layout,
- * before using 64-bit time_t everywhere. Overflows in y2038 on 32-bit
- * architectures.
- */
-struct vtimespec {
- long tv_sec; /* seconds */
+struct coda_timespec {
+ int64_t tv_sec; /* seconds */
long tv_nsec; /* nanoseconds */
};
-#else
-#define vtimespec timespec
-#endif
struct coda_vattr {
long va_type; /* vnode type (for create) */
@@ -234,9 +214,9 @@ struct coda_vattr {
long va_fileid; /* file id */
u_quad_t va_size; /* file size in bytes */
long va_blocksize; /* blocksize preferred for i/o */
- struct vtimespec va_atime; /* time of last access */
- struct vtimespec va_mtime; /* time of last modification */
- struct vtimespec va_ctime; /* time file changed */
+ struct coda_timespec va_atime; /* time of last access */
+ struct coda_timespec va_mtime; /* time of last modification */
+ struct coda_timespec va_ctime; /* time file changed */
u_long va_gen; /* generation number of file */
u_long va_flags; /* flags defined for file */
cdev_t va_rdev; /* device special file represents */
@@ -301,7 +281,8 @@ struct coda_statfs {
#define CIOC_KERNEL_VERSION _IOWR('c', 10, size_t)
-#define CODA_KERNEL_VERSION 3 /* 128-bit file identifiers */
+// CODA_KERNEL_VERSION 3 /* 128-bit file identifiers */
+#define CODA_KERNEL_VERSION 4 /* 64-bit timespec */
/*
* Venus <-> Coda RPC arguments
--
2.20.1
next prev parent reply other threads:[~2019-03-20 17:28 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-03-20 16:45 [PATCH 00/22] Coda updates for linux-5.1 Jan Harkes
2019-03-20 16:45 ` [PATCH 01/22] uapi linux/coda.h: use __kernel_pid_t for userspace Jan Harkes
2019-03-20 16:45 ` [PATCH 02/22] uapi linux/coda_psdev.h: move upc_req definition from uapi to kernel side headers Jan Harkes
2019-03-20 16:45 ` [PATCH 03/22] coda: add error handling for fget Jan Harkes
2019-03-20 16:45 ` [PATCH 04/22] coda: potential buffer overflow in coda_psdev_write() Jan Harkes
2019-03-20 16:45 ` [PATCH 05/22] coda: Fix build using bare-metal toolchain Jan Harkes
2019-03-20 16:45 ` [PATCH 06/22] coda: don't try to print names that were considered too long Jan Harkes
2019-03-20 16:45 ` [PATCH 07/22] uapi linux/coda_psdev.h: Move CODA_REQ_ from uapi to kernel side headers Jan Harkes
2019-03-20 16:45 ` [PATCH 08/22] coda: clean up indentation, replace spaces with tab Jan Harkes
2019-03-20 16:45 ` [PATCH 09/22] coda: stop using 'struct timespec' in user API Jan Harkes
2019-03-20 16:45 ` [PATCH 10/22] coda: Remove duplicate header Jan Harkes
2019-03-20 16:45 ` Jan Harkes [this message]
2019-03-20 16:45 ` [PATCH 12/22] coda: get rid of CODA_ALLOC() Jan Harkes
2019-03-20 16:45 ` [PATCH 13/22] coda: get rid of CODA_FREE() Jan Harkes
2019-03-20 16:45 ` [PATCH 14/22] coda: bump module version Jan Harkes
2019-03-20 16:45 ` [PATCH 15/22] coda: Move internal defs out of include/linux/ [ver #2] Jan Harkes
2019-03-20 16:45 ` [PATCH 16/22] coda: remove uapi/linux/coda_psdev.h Jan Harkes
2019-03-20 16:45 ` [PATCH 17/22] coda: destroy mutex in put_super() Jan Harkes
2019-03-20 16:45 ` [PATCH 18/22] coda: use SIZE() for stat Jan Harkes
2019-03-20 16:45 ` [PATCH 19/22] coda: add __init to init_coda_psdev() Jan Harkes
2019-03-20 16:45 ` [PATCH 20/22] coda: remove sysctl object from module when unused Jan Harkes
2019-03-20 16:45 ` [PATCH 21/22] coda: remove sb test in coda_fid_to_inode() Jan Harkes
2019-03-20 16:45 ` [PATCH 22/22] coda: ftoc validity check integration Jan Harkes
2019-05-17 18:36 [PATCH 00/22] Coda updates Jan Harkes
2019-05-17 18:36 ` [PATCH 11/22] coda: change Coda's user api to use 64-bit time_t in timespec Jan Harkes
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=6c4b14384d041429ccf976698a6f19ed7c0bacb4.1553098576.git.jaharkes@cs.cmu.edu \
--to=jaharkes@cs.cmu.edu \
--cc=akpm@linux-foundation.org \
--cc=linux-fsdevel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).