aboutsummaryrefslogtreecommitdiffstats
path: root/fs/nfs/nfs4xdr.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/nfs/nfs4xdr.c')
-rw-r--r--fs/nfs/nfs4xdr.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/fs/nfs/nfs4xdr.c b/fs/nfs/nfs4xdr.c
index 577b4429c8f6..6c564ef9489e 100644
--- a/fs/nfs/nfs4xdr.c
+++ b/fs/nfs/nfs4xdr.c
@@ -1035,6 +1035,13 @@ static int encode_readdir(struct xdr_stream *xdr, const struct nfs4_readdir_arg
1035 attrs[1] &= ~FATTR4_WORD1_MOUNTED_ON_FILEID; 1035 attrs[1] &= ~FATTR4_WORD1_MOUNTED_ON_FILEID;
1036 WRITE32(attrs[0] & readdir->bitmask[0]); 1036 WRITE32(attrs[0] & readdir->bitmask[0]);
1037 WRITE32(attrs[1] & readdir->bitmask[1]); 1037 WRITE32(attrs[1] & readdir->bitmask[1]);
1038 dprintk("%s: cookie = %Lu, verifier = 0x%x%x, bitmap = 0x%x%x\n",
1039 __FUNCTION__,
1040 (unsigned long long)readdir->cookie,
1041 ((u32 *)readdir->verifier.data)[0],
1042 ((u32 *)readdir->verifier.data)[1],
1043 attrs[0] & readdir->bitmask[0],
1044 attrs[1] & readdir->bitmask[1]);
1038 1045
1039 /* set up reply kvec 1046 /* set up reply kvec
1040 * toplevel_status + taglen + rescount + OP_PUTFH + status 1047 * toplevel_status + taglen + rescount + OP_PUTFH + status
@@ -1043,6 +1050,9 @@ static int encode_readdir(struct xdr_stream *xdr, const struct nfs4_readdir_arg
1043 replen = (RPC_REPHDRSIZE + auth->au_rslack + 9) << 2; 1050 replen = (RPC_REPHDRSIZE + auth->au_rslack + 9) << 2;
1044 xdr_inline_pages(&req->rq_rcv_buf, replen, readdir->pages, 1051 xdr_inline_pages(&req->rq_rcv_buf, replen, readdir->pages,
1045 readdir->pgbase, readdir->count); 1052 readdir->pgbase, readdir->count);
1053 dprintk("%s: inlined page args = (%u, %p, %u, %u)\n",
1054 __FUNCTION__, replen, readdir->pages,
1055 readdir->pgbase, readdir->count);
1046 1056
1047 return 0; 1057 return 0;
1048} 1058}
@@ -3066,6 +3076,11 @@ static int decode_readdir(struct xdr_stream *xdr, struct rpc_rqst *req, struct n
3066 return status; 3076 return status;
3067 READ_BUF(8); 3077 READ_BUF(8);
3068 COPYMEM(readdir->verifier.data, 8); 3078 COPYMEM(readdir->verifier.data, 8);
3079 dprintk("%s: verifier = 0x%x%x\n",
3080 __FUNCTION__,
3081 ((u32 *)readdir->verifier.data)[0],
3082 ((u32 *)readdir->verifier.data)[1]);
3083
3069 3084
3070 hdrlen = (char *) p - (char *) iov->iov_base; 3085 hdrlen = (char *) p - (char *) iov->iov_base;
3071 recvd = rcvbuf->len - hdrlen; 3086 recvd = rcvbuf->len - hdrlen;
@@ -3080,12 +3095,14 @@ static int decode_readdir(struct xdr_stream *xdr, struct rpc_rqst *req, struct n
3080 for (nr = 0; *p++; nr++) { 3095 for (nr = 0; *p++; nr++) {
3081 if (p + 3 > end) 3096 if (p + 3 > end)
3082 goto short_pkt; 3097 goto short_pkt;
3098 dprintk("cookie = %Lu, ", *((unsigned long long *)p));
3083 p += 2; /* cookie */ 3099 p += 2; /* cookie */
3084 len = ntohl(*p++); /* filename length */ 3100 len = ntohl(*p++); /* filename length */
3085 if (len > NFS4_MAXNAMLEN) { 3101 if (len > NFS4_MAXNAMLEN) {
3086 printk(KERN_WARNING "NFS: giant filename in readdir (len 0x%x)\n", len); 3102 printk(KERN_WARNING "NFS: giant filename in readdir (len 0x%x)\n", len);
3087 goto err_unmap; 3103 goto err_unmap;
3088 } 3104 }
3105 dprintk("filename = %*s\n", len, (char *)p);
3089 p += XDR_QUADLEN(len); 3106 p += XDR_QUADLEN(len);
3090 if (p + 1 > end) 3107 if (p + 1 > end)
3091 goto short_pkt; 3108 goto short_pkt;
@@ -3105,6 +3122,7 @@ out:
3105 kunmap_atomic(kaddr, KM_USER0); 3122 kunmap_atomic(kaddr, KM_USER0);
3106 return 0; 3123 return 0;
3107short_pkt: 3124short_pkt:
3125 dprintk("%s: short packet at entry %d\n", __FUNCTION__, nr);
3108 entry[0] = entry[1] = 0; 3126 entry[0] = entry[1] = 0;
3109 /* truncate listing ? */ 3127 /* truncate listing ? */
3110 if (!nr) { 3128 if (!nr) {