Commit bdba5368 authored by J. Bruce Fields's avatar J. Bruce Fields

nfsd: use 64-bit seconds fields in nfsd v4 code

After commit 95582b00 "vfs: change inode times to use struct
timespec64" there are spots in the NFSv4 decoding where we decode the
protocol into a struct timeval and then convert that into a timeval64.

That's unnecesary in the NFSv4 case since the on-the-wire protocol also
uses 64-bit values.  So just fix up our code to use timeval64 everywhere.
Signed-off-by: default avatarJ. Bruce Fields <bfields@redhat.com>
parent e977cc83
...@@ -121,15 +121,13 @@ nfsd4_block_commit_blocks(struct inode *inode, struct nfsd4_layoutcommit *lcp, ...@@ -121,15 +121,13 @@ nfsd4_block_commit_blocks(struct inode *inode, struct nfsd4_layoutcommit *lcp,
{ {
loff_t new_size = lcp->lc_last_wr + 1; loff_t new_size = lcp->lc_last_wr + 1;
struct iattr iattr = { .ia_valid = 0 }; struct iattr iattr = { .ia_valid = 0 };
struct timespec ts;
int error; int error;
ts = timespec64_to_timespec(inode->i_mtime);
if (lcp->lc_mtime.tv_nsec == UTIME_NOW || if (lcp->lc_mtime.tv_nsec == UTIME_NOW ||
timespec_compare(&lcp->lc_mtime, &ts) < 0) timespec64_compare(&lcp->lc_mtime, &inode->i_mtime) < 0)
lcp->lc_mtime = timespec64_to_timespec(current_time(inode)); lcp->lc_mtime = current_time(inode);
iattr.ia_valid |= ATTR_ATIME | ATTR_CTIME | ATTR_MTIME; iattr.ia_valid |= ATTR_ATIME | ATTR_CTIME | ATTR_MTIME;
iattr.ia_atime = iattr.ia_ctime = iattr.ia_mtime = timespec_to_timespec64(lcp->lc_mtime); iattr.ia_atime = iattr.ia_ctime = iattr.ia_mtime = lcp->lc_mtime;
if (new_size > i_size_read(inode)) { if (new_size > i_size_read(inode)) {
iattr.ia_valid |= ATTR_SIZE; iattr.ia_valid |= ATTR_SIZE;
......
...@@ -274,14 +274,12 @@ static char *savemem(struct nfsd4_compoundargs *argp, __be32 *p, int nbytes) ...@@ -274,14 +274,12 @@ static char *savemem(struct nfsd4_compoundargs *argp, __be32 *p, int nbytes)
* we ignore all 32 bits of 'nseconds'. * we ignore all 32 bits of 'nseconds'.
*/ */
static __be32 static __be32
nfsd4_decode_time(struct nfsd4_compoundargs *argp, struct timespec *tv) nfsd4_decode_time(struct nfsd4_compoundargs *argp, struct timespec64 *tv)
{ {
DECODE_HEAD; DECODE_HEAD;
u64 sec;
READ_BUF(12); READ_BUF(12);
p = xdr_decode_hyper(p, &sec); p = xdr_decode_hyper(p, &tv->tv_sec);
tv->tv_sec = sec;
tv->tv_nsec = be32_to_cpup(p++); tv->tv_nsec = be32_to_cpup(p++);
if (tv->tv_nsec >= (u32)1000000000) if (tv->tv_nsec >= (u32)1000000000)
return nfserr_inval; return nfserr_inval;
...@@ -320,7 +318,6 @@ nfsd4_decode_fattr(struct nfsd4_compoundargs *argp, u32 *bmval, ...@@ -320,7 +318,6 @@ nfsd4_decode_fattr(struct nfsd4_compoundargs *argp, u32 *bmval,
struct iattr *iattr, struct nfs4_acl **acl, struct iattr *iattr, struct nfs4_acl **acl,
struct xdr_netobj *label, int *umask) struct xdr_netobj *label, int *umask)
{ {
struct timespec ts;
int expected_len, len = 0; int expected_len, len = 0;
u32 dummy32; u32 dummy32;
char *buf; char *buf;
...@@ -422,8 +419,7 @@ nfsd4_decode_fattr(struct nfsd4_compoundargs *argp, u32 *bmval, ...@@ -422,8 +419,7 @@ nfsd4_decode_fattr(struct nfsd4_compoundargs *argp, u32 *bmval,
switch (dummy32) { switch (dummy32) {
case NFS4_SET_TO_CLIENT_TIME: case NFS4_SET_TO_CLIENT_TIME:
len += 12; len += 12;
status = nfsd4_decode_time(argp, &ts); status = nfsd4_decode_time(argp, &iattr->ia_atime);
iattr->ia_atime = timespec_to_timespec64(ts);
if (status) if (status)
return status; return status;
iattr->ia_valid |= (ATTR_ATIME | ATTR_ATIME_SET); iattr->ia_valid |= (ATTR_ATIME | ATTR_ATIME_SET);
...@@ -442,8 +438,7 @@ nfsd4_decode_fattr(struct nfsd4_compoundargs *argp, u32 *bmval, ...@@ -442,8 +438,7 @@ nfsd4_decode_fattr(struct nfsd4_compoundargs *argp, u32 *bmval,
switch (dummy32) { switch (dummy32) {
case NFS4_SET_TO_CLIENT_TIME: case NFS4_SET_TO_CLIENT_TIME:
len += 12; len += 12;
status = nfsd4_decode_time(argp, &ts); status = nfsd4_decode_time(argp, &iattr->ia_mtime);
iattr->ia_mtime = timespec_to_timespec64(ts);
if (status) if (status)
return status; return status;
iattr->ia_valid |= (ATTR_MTIME | ATTR_MTIME_SET); iattr->ia_valid |= (ATTR_MTIME | ATTR_MTIME_SET);
......
...@@ -472,7 +472,7 @@ struct nfsd4_layoutcommit { ...@@ -472,7 +472,7 @@ struct nfsd4_layoutcommit {
u32 lc_reclaim; /* request */ u32 lc_reclaim; /* request */
u32 lc_newoffset; /* request */ u32 lc_newoffset; /* request */
u64 lc_last_wr; /* request */ u64 lc_last_wr; /* request */
struct timespec lc_mtime; /* request */ struct timespec64 lc_mtime; /* request */
u32 lc_layout_type; /* request */ u32 lc_layout_type; /* request */
u32 lc_up_len; /* layout length */ u32 lc_up_len; /* layout length */
void *lc_up_layout; /* decoded by callback */ void *lc_up_layout; /* decoded by callback */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment