diff options
author | J. Bruce Fields <bfields@redhat.com> | 2012-12-03 22:45:35 +0100 |
---|---|---|
committer | J. Bruce Fields <bfields@redhat.com> | 2012-12-04 13:49:14 +0100 |
commit | 8af345f58ac9b350bb23c1457c613381d9f00472 (patch) | |
tree | 5713862546aad1e24784079ef4eae8edfc37de83 /include | |
parent | svcrpc: fix off-by-4 error in "incomplete TCP record" dprintk (diff) | |
download | linux-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.h | 11 |
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 */ }; |