mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2025-04-06 05:08:11 +07:00
[PATCH] NFS: Add debugging code to NFSv4 readdir
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
This commit is contained in:
parent
6ebf3656fd
commit
eadf4598e7
@ -1722,6 +1722,10 @@ static int _nfs4_proc_readdir(struct dentry *dentry, struct rpc_cred *cred,
|
|||||||
};
|
};
|
||||||
int status;
|
int status;
|
||||||
|
|
||||||
|
dprintk("%s: dentry = %s/%s, cookie = %Lu\n", __FUNCTION__,
|
||||||
|
dentry->d_parent->d_name.name,
|
||||||
|
dentry->d_name.name,
|
||||||
|
(unsigned long long)cookie);
|
||||||
lock_kernel();
|
lock_kernel();
|
||||||
nfs4_setup_readdir(cookie, NFS_COOKIEVERF(dir), dentry, &args);
|
nfs4_setup_readdir(cookie, NFS_COOKIEVERF(dir), dentry, &args);
|
||||||
res.pgbase = args.pgbase;
|
res.pgbase = args.pgbase;
|
||||||
@ -1729,6 +1733,7 @@ static int _nfs4_proc_readdir(struct dentry *dentry, struct rpc_cred *cred,
|
|||||||
if (status == 0)
|
if (status == 0)
|
||||||
memcpy(NFS_COOKIEVERF(dir), res.verifier.data, NFS4_VERIFIER_SIZE);
|
memcpy(NFS_COOKIEVERF(dir), res.verifier.data, NFS4_VERIFIER_SIZE);
|
||||||
unlock_kernel();
|
unlock_kernel();
|
||||||
|
dprintk("%s: returns %d\n", __FUNCTION__, status);
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1035,6 +1035,13 @@ static int encode_readdir(struct xdr_stream *xdr, const struct nfs4_readdir_arg
|
|||||||
attrs[1] &= ~FATTR4_WORD1_MOUNTED_ON_FILEID;
|
attrs[1] &= ~FATTR4_WORD1_MOUNTED_ON_FILEID;
|
||||||
WRITE32(attrs[0] & readdir->bitmask[0]);
|
WRITE32(attrs[0] & readdir->bitmask[0]);
|
||||||
WRITE32(attrs[1] & readdir->bitmask[1]);
|
WRITE32(attrs[1] & readdir->bitmask[1]);
|
||||||
|
dprintk("%s: cookie = %Lu, verifier = 0x%x%x, bitmap = 0x%x%x\n",
|
||||||
|
__FUNCTION__,
|
||||||
|
(unsigned long long)readdir->cookie,
|
||||||
|
((u32 *)readdir->verifier.data)[0],
|
||||||
|
((u32 *)readdir->verifier.data)[1],
|
||||||
|
attrs[0] & readdir->bitmask[0],
|
||||||
|
attrs[1] & readdir->bitmask[1]);
|
||||||
|
|
||||||
/* set up reply kvec
|
/* set up reply kvec
|
||||||
* toplevel_status + taglen + rescount + OP_PUTFH + status
|
* toplevel_status + taglen + rescount + OP_PUTFH + status
|
||||||
@ -1043,6 +1050,9 @@ static int encode_readdir(struct xdr_stream *xdr, const struct nfs4_readdir_arg
|
|||||||
replen = (RPC_REPHDRSIZE + auth->au_rslack + 9) << 2;
|
replen = (RPC_REPHDRSIZE + auth->au_rslack + 9) << 2;
|
||||||
xdr_inline_pages(&req->rq_rcv_buf, replen, readdir->pages,
|
xdr_inline_pages(&req->rq_rcv_buf, replen, readdir->pages,
|
||||||
readdir->pgbase, readdir->count);
|
readdir->pgbase, readdir->count);
|
||||||
|
dprintk("%s: inlined page args = (%u, %p, %u, %u)\n",
|
||||||
|
__FUNCTION__, replen, readdir->pages,
|
||||||
|
readdir->pgbase, readdir->count);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -3066,6 +3076,11 @@ static int decode_readdir(struct xdr_stream *xdr, struct rpc_rqst *req, struct n
|
|||||||
return status;
|
return status;
|
||||||
READ_BUF(8);
|
READ_BUF(8);
|
||||||
COPYMEM(readdir->verifier.data, 8);
|
COPYMEM(readdir->verifier.data, 8);
|
||||||
|
dprintk("%s: verifier = 0x%x%x\n",
|
||||||
|
__FUNCTION__,
|
||||||
|
((u32 *)readdir->verifier.data)[0],
|
||||||
|
((u32 *)readdir->verifier.data)[1]);
|
||||||
|
|
||||||
|
|
||||||
hdrlen = (char *) p - (char *) iov->iov_base;
|
hdrlen = (char *) p - (char *) iov->iov_base;
|
||||||
recvd = rcvbuf->len - hdrlen;
|
recvd = rcvbuf->len - hdrlen;
|
||||||
@ -3080,12 +3095,14 @@ static int decode_readdir(struct xdr_stream *xdr, struct rpc_rqst *req, struct n
|
|||||||
for (nr = 0; *p++; nr++) {
|
for (nr = 0; *p++; nr++) {
|
||||||
if (p + 3 > end)
|
if (p + 3 > end)
|
||||||
goto short_pkt;
|
goto short_pkt;
|
||||||
|
dprintk("cookie = %Lu, ", *((unsigned long long *)p));
|
||||||
p += 2; /* cookie */
|
p += 2; /* cookie */
|
||||||
len = ntohl(*p++); /* filename length */
|
len = ntohl(*p++); /* filename length */
|
||||||
if (len > NFS4_MAXNAMLEN) {
|
if (len > NFS4_MAXNAMLEN) {
|
||||||
printk(KERN_WARNING "NFS: giant filename in readdir (len 0x%x)\n", len);
|
printk(KERN_WARNING "NFS: giant filename in readdir (len 0x%x)\n", len);
|
||||||
goto err_unmap;
|
goto err_unmap;
|
||||||
}
|
}
|
||||||
|
dprintk("filename = %*s\n", len, (char *)p);
|
||||||
p += XDR_QUADLEN(len);
|
p += XDR_QUADLEN(len);
|
||||||
if (p + 1 > end)
|
if (p + 1 > end)
|
||||||
goto short_pkt;
|
goto short_pkt;
|
||||||
@ -3105,6 +3122,7 @@ static int decode_readdir(struct xdr_stream *xdr, struct rpc_rqst *req, struct n
|
|||||||
kunmap_atomic(kaddr, KM_USER0);
|
kunmap_atomic(kaddr, KM_USER0);
|
||||||
return 0;
|
return 0;
|
||||||
short_pkt:
|
short_pkt:
|
||||||
|
dprintk("%s: short packet at entry %d\n", __FUNCTION__, nr);
|
||||||
entry[0] = entry[1] = 0;
|
entry[0] = entry[1] = 0;
|
||||||
/* truncate listing ? */
|
/* truncate listing ? */
|
||||||
if (!nr) {
|
if (!nr) {
|
||||||
|
Loading…
Reference in New Issue
Block a user