Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 229159
b: refs/heads/master
c: 282ac2a
h: refs/heads/master
i:
  229157: a022bad
  229155: 4512532
  229151: 130949d
v: v3
  • Loading branch information
Chuck Lever authored and Trond Myklebust committed Dec 16, 2010
1 parent b88ff0b commit 8ad8f90
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 27 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 2d70f533eab0a0cabd05ee878b6709707bf63c86
refs/heads/master: 282ac2a573dd1be4230710932cd471ed5a3a94b8
59 changes: 33 additions & 26 deletions trunk/fs/nfs/nfs2xdr.c
Original file line number Diff line number Diff line change
Expand Up @@ -90,32 +90,6 @@ xdr_decode_fhandle(__be32 *p, struct nfs_fh *fhandle)
return p + XDR_QUADLEN(NFS2_FHSIZE);
}

static inline __be32*
xdr_encode_time(__be32 *p, const struct timespec *timep)
{
*p++ = htonl(timep->tv_sec);
/* Convert nanoseconds into microseconds */
*p++ = htonl(timep->tv_nsec ? timep->tv_nsec / 1000 : 0);
return p;
}

static inline __be32*
xdr_encode_current_server_time(__be32 *p, const struct timespec *timep)
{
/*
* Passing the invalid value useconds=1000000 is a
* Sun convention for "set to current server time".
* It's needed to make permissions checks for the
* "touch" program across v2 mounts to Solaris and
* Irix boxes work correctly. See description of
* sattr in section 6.1 of "NFS Illustrated" by
* Brent Callaghan, Addison-Wesley, ISBN 0-201-32750-5
*/
*p++ = htonl(timep->tv_sec);
*p++ = htonl(1000000);
return p;
}

static inline __be32*
xdr_decode_time(__be32 *p, struct timespec *timep)
{
Expand Down Expand Up @@ -178,6 +152,39 @@ static void encode_fhandle(struct xdr_stream *xdr, const struct nfs_fh *fh)
memcpy(p, fh->data, NFS2_FHSIZE);
}

/*
* 2.3.4. timeval
*
* struct timeval {
* unsigned int seconds;
* unsigned int useconds;
* };
*/
static __be32 *xdr_encode_time(__be32 *p, const struct timespec *timep)
{
*p++ = cpu_to_be32(timep->tv_sec);
if (timep->tv_nsec != 0)
*p++ = cpu_to_be32(timep->tv_nsec / NSEC_PER_USEC);
else
*p++ = cpu_to_be32(0);
return p;
}

/*
* Passing the invalid value useconds=1000000 is a Sun convention for
* "set to current server time". It's needed to make permissions checks
* for the "touch" program across v2 mounts to Solaris and Irix servers
* work correctly. See description of sattr in section 6.1 of "NFS
* Illustrated" by Brent Callaghan, Addison-Wesley, ISBN 0-201-32750-5.
*/
static __be32 *xdr_encode_current_server_time(__be32 *p,
const struct timespec *timep)
{
*p++ = cpu_to_be32(timep->tv_sec);
*p++ = cpu_to_be32(1000000);
return p;
}

/*
* 2.3.6. sattr
*
Expand Down

0 comments on commit 8ad8f90

Please sign in to comment.