aboutsummaryrefslogtreecommitdiffstats
path: root/fs
diff options
context:
space:
mode:
authorChuck Lever <chuck.lever@oracle.com>2010-12-14 09:54:50 -0500
committerTrond Myklebust <Trond.Myklebust@netapp.com>2010-12-16 12:37:20 -0500
commit282ac2a573dd1be4230710932cd471ed5a3a94b8 (patch)
tree1f0921c6c3231760f18f95075bf43bdfbbbcc168 /fs
parent2d70f533eab0a0cabd05ee878b6709707bf63c86 (diff)
NFS: Update xdr_encode_foo() functions that we're keeping
Clean up. The new helper functions are kept in order by section of RFC 1094. Move the two timestamp encoders we're keeping, update their coding style, and refresh their documenting comments. Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Tested-by: J. Bruce Fields <bfields@redhat.com> Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Diffstat (limited to 'fs')
-rw-r--r--fs/nfs/nfs2xdr.c59
1 files changed, 33 insertions, 26 deletions
diff --git a/fs/nfs/nfs2xdr.c b/fs/nfs/nfs2xdr.c
index f5ea9dcf08d6..c79977304af8 100644
--- a/fs/nfs/nfs2xdr.c
+++ b/fs/nfs/nfs2xdr.c
@@ -91,32 +91,6 @@ xdr_decode_fhandle(__be32 *p, struct nfs_fh *fhandle)
91} 91}
92 92
93static inline __be32* 93static inline __be32*
94xdr_encode_time(__be32 *p, const struct timespec *timep)
95{
96 *p++ = htonl(timep->tv_sec);
97 /* Convert nanoseconds into microseconds */
98 *p++ = htonl(timep->tv_nsec ? timep->tv_nsec / 1000 : 0);
99 return p;
100}
101
102static inline __be32*
103xdr_encode_current_server_time(__be32 *p, const struct timespec *timep)
104{
105 /*
106 * Passing the invalid value useconds=1000000 is a
107 * Sun convention for "set to current server time".
108 * It's needed to make permissions checks for the
109 * "touch" program across v2 mounts to Solaris and
110 * Irix boxes work correctly. See description of
111 * sattr in section 6.1 of "NFS Illustrated" by
112 * Brent Callaghan, Addison-Wesley, ISBN 0-201-32750-5
113 */
114 *p++ = htonl(timep->tv_sec);
115 *p++ = htonl(1000000);
116 return p;
117}
118
119static inline __be32*
120xdr_decode_time(__be32 *p, struct timespec *timep) 94xdr_decode_time(__be32 *p, struct timespec *timep)
121{ 95{
122 timep->tv_sec = ntohl(*p++); 96 timep->tv_sec = ntohl(*p++);
@@ -179,6 +153,39 @@ static void encode_fhandle(struct xdr_stream *xdr, const struct nfs_fh *fh)
179} 153}
180 154
181/* 155/*
156 * 2.3.4. timeval
157 *
158 * struct timeval {
159 * unsigned int seconds;
160 * unsigned int useconds;
161 * };
162 */
163static __be32 *xdr_encode_time(__be32 *p, const struct timespec *timep)
164{
165 *p++ = cpu_to_be32(timep->tv_sec);
166 if (timep->tv_nsec != 0)
167 *p++ = cpu_to_be32(timep->tv_nsec / NSEC_PER_USEC);
168 else
169 *p++ = cpu_to_be32(0);
170 return p;
171}
172
173/*
174 * Passing the invalid value useconds=1000000 is a Sun convention for
175 * "set to current server time". It's needed to make permissions checks
176 * for the "touch" program across v2 mounts to Solaris and Irix servers
177 * work correctly. See description of sattr in section 6.1 of "NFS
178 * Illustrated" by Brent Callaghan, Addison-Wesley, ISBN 0-201-32750-5.
179 */
180static __be32 *xdr_encode_current_server_time(__be32 *p,
181 const struct timespec *timep)
182{
183 *p++ = cpu_to_be32(timep->tv_sec);
184 *p++ = cpu_to_be32(1000000);
185 return p;
186}
187
188/*
182 * 2.3.6. sattr 189 * 2.3.6. sattr
183 * 190 *
184 * struct sattr { 191 * struct sattr {