summaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorJ. Bruce Fields <bfields@redhat.com>2012-12-03 22:45:35 +0100
committerJ. Bruce Fields <bfields@redhat.com>2012-12-04 13:49:14 +0100
commit8af345f58ac9b350bb23c1457c613381d9f00472 (patch)
tree5713862546aad1e24784079ef4eae8edfc37de83 /include
parentsvcrpc: fix off-by-4 error in "incomplete TCP record" dprintk (diff)
downloadlinux-8af345f58ac9b350bb23c1457c613381d9f00472.tar.xz
linux-8af345f58ac9b350bb23c1457c613381d9f00472.zip
svcrpc: track rpc data length separately from sk_tcplen
Keep a separate field, sk_datalen, that tracks only the data contained in a fragment, not including the fragment header. For now, this is always just max(0, sk_tcplen - 4), but after we allow multiple fragments sk_datalen will accumulate the total rpc data size while sk_tcplen only tracks progress receiving the current fragment. Signed-off-by: J. Bruce Fields <bfields@redhat.com>
Diffstat (limited to 'include')
-rw-r--r--include/linux/sunrpc/svcsock.h11
1 files changed, 9 insertions, 2 deletions
diff --git a/include/linux/sunrpc/svcsock.h b/include/linux/sunrpc/svcsock.h
index 613cf42227aa..62fd1b756e99 100644
--- a/include/linux/sunrpc/svcsock.h
+++ b/include/linux/sunrpc/svcsock.h
@@ -26,8 +26,15 @@ struct svc_sock {
void (*sk_owspace)(struct sock *);
/* private TCP part */
- __be32 sk_reclen; /* length of record */
- u32 sk_tcplen; /* current read length */
+ /* On-the-wire fragment header: */
+ __be32 sk_reclen;
+ /* As we receive a record, this includes the length received so
+ * far (including the fragment header): */
+ u32 sk_tcplen;
+ /* Total length of the data (not including fragment headers)
+ * received so far in the fragments making up this rpc: */
+ u32 sk_datalen;
+
struct page * sk_pages[RPCSVC_MAXPAGES]; /* received data */
};