10 #define NFSDDBG_FACILITY NFSDDBG_XDR
15 static u32 nfs_ftypes[] = {
41 return decode_fh(p, fhp);
56 decode_filename(
__be32 *
p,
char **namp,
unsigned int *lenp)
62 for (i = 0, name = *namp; i < *lenp; i++, name++) {
63 if (*name ==
'\0' || *name ==
'/')
72 decode_pathname(
__be32 *p,
char **namp,
unsigned int *lenp)
78 for (i = 0, name = *namp; i < *lenp; i++, name++) {
98 if ((tmp =
ntohl(*p++)) != (
u32)-1 && tmp != 0xffff) {
102 if ((tmp =
ntohl(*p++)) != (
u32)-1) {
106 if ((tmp =
ntohl(*p++)) != (
u32)-1) {
110 if ((tmp =
ntohl(*p++)) != (
u32)-1) {
115 if (tmp != (
u32)-1 && tmp1 != (
u32)-1) {
118 iap->
ia_atime.tv_nsec = tmp1 * 1000;
121 if (tmp != (
u32)-1 && tmp1 != (
u32)-1) {
124 iap->
ia_mtime.tv_nsec = tmp1 * 1000;
151 *p++ =
htonl(nfs_ftypes[type >> 12]);
164 *p++ =
htonl(new_encode_dev(stat->
rdev));
166 *p++ =
htonl(0xffffffff);
171 *p++ =
htonl(new_encode_dev(stat->
dev));
201 return encode_fattr(rqstp, p, fhp, &stat);
210 return xdr_argsize_check(rqstp, p);
216 if (!(p = decode_fh(p, &args->
fh)))
218 return xdr_argsize_check(rqstp, p);
225 p = decode_fh(p, &args->
fh);
228 p = decode_sattr(p, &args->
attrs);
230 return xdr_argsize_check(rqstp, p);
237 if (!(p = decode_fh(p, &args->
fh))
238 || !(p = decode_filename(p, &args->
name, &args->
len)))
241 return xdr_argsize_check(rqstp, p);
250 if (!(p = decode_fh(p, &args->
fh)))
268 len -= rqstp->
rq_vec[
v].iov_len;
272 return xdr_argsize_check(rqstp, p);
282 if (!(p = decode_fh(p, &args->
fh)))
299 hdr = (
void*)p - rqstp->
rq_arg.head[0].iov_base;
300 dlen = rqstp->
rq_arg.head[0].iov_len + rqstp->
rq_arg.page_len
311 if (dlen < XDR_QUADLEN(len)*4)
314 rqstp->
rq_vec[0].iov_base = (
void*)p;
317 while (len > rqstp->
rq_vec[v].iov_len) {
318 len -= rqstp->
rq_vec[
v].iov_len;
323 rqstp->
rq_vec[
v].iov_len = len;
332 if ( !(p = decode_fh(p, &args->
fh))
333 || !(p = decode_filename(p, &args->
name, &args->
len)))
335 p = decode_sattr(p, &args->
attrs);
337 return xdr_argsize_check(rqstp, p);
344 if (!(p = decode_fh(p, &args->
ffh))
345 || !(p = decode_filename(p, &args->
fname, &args->
flen))
346 || !(p = decode_fh(p, &args->
tfh))
347 || !(p = decode_filename(p, &args->
tname, &args->
tlen)))
350 return xdr_argsize_check(rqstp, p);
356 if (!(p = decode_fh(p, &args->
fh)))
360 return xdr_argsize_check(rqstp, p);
367 if (!(p = decode_fh(p, &args->
ffh))
368 || !(p = decode_fh(p, &args->
tfh))
369 || !(p = decode_filename(p, &args->
tname, &args->
tlen)))
372 return xdr_argsize_check(rqstp, p);
379 if ( !(p = decode_fh(p, &args->
ffh))
380 || !(p = decode_filename(p, &args->
fname, &args->
flen))
381 || !(p = decode_pathname(p, &args->
tname, &args->
tlen)))
383 p = decode_sattr(p, &args->
attrs);
385 return xdr_argsize_check(rqstp, p);
392 if (!(p = decode_fh(p, &args->
fh)))
401 return xdr_argsize_check(rqstp, p);
410 return xdr_ressize_check(rqstp, p);
417 p = encode_fattr(rqstp, p, &resp->
fh, &resp->
stat);
418 return xdr_ressize_check(rqstp, p);
425 p = encode_fh(p, &resp->
fh);
426 p = encode_fattr(rqstp, p, &resp->
fh, &resp->
stat);
427 return xdr_ressize_check(rqstp, p);
435 xdr_ressize_check(rqstp, p);
439 rqstp->
rq_res.tail[0].iov_base =
p;
441 rqstp->
rq_res.tail[0].iov_len = 4 - (resp->
len&3);
450 p = encode_fattr(rqstp, p, &resp->
fh, &resp->
stat);
452 xdr_ressize_check(rqstp, p);
456 if (resp->
count & 3) {
458 rqstp->
rq_res.tail[0].iov_base =
p;
460 rqstp->
rq_res.tail[0].iov_len = 4 - (resp->
count&3);
469 xdr_ressize_check(rqstp, p);
489 return xdr_ressize_check(rqstp, p);
494 int namlen, loff_t
offset,
u64 ino,
unsigned int d_type)
506 if (offset > ~((
u32) 0)) {
515 slen = XDR_QUADLEN(namlen);
516 if ((buflen = cd->
buflen - slen - 4) < 0) {
520 if (ino > ~((
u32) 0)) {
526 p = xdr_encode_array(p, name, namlen);