diff options
-rw-r--r-- | fs/nfs/nfs2xdr.c | 59 |
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 | ||
93 | static inline __be32* | 93 | static inline __be32* |
94 | xdr_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 | |||
102 | static inline __be32* | ||
103 | xdr_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 | |||
119 | static inline __be32* | ||
120 | xdr_decode_time(__be32 *p, struct timespec *timep) | 94 | xdr_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 | */ | ||
163 | static __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 | */ | ||
180 | static __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 { |