diff options
author | J. Bruce Fields <bfields@redhat.com> | 2012-12-03 16:11:13 -0500 |
---|---|---|
committer | J. Bruce Fields <bfields@redhat.com> | 2012-12-04 07:47:23 -0500 |
commit | cc248d4b1ddf05fefc1373d9d7a4dd1df71b6190 (patch) | |
tree | 3ca18b5b45e666ff307ed440c5a1b6e38fc7b33b /include/linux/sunrpc | |
parent | 6c1e82a4b74ad0c8b45c833a4409f153199d9be4 (diff) |
svcrpc: don't byte-swap sk_reclen in place
Byte-swapping in place is always a little dubious.
Let's instead define this field to always be big-endian, and do the
swapping on demand where we need it.
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
Diffstat (limited to 'include/linux/sunrpc')
-rw-r--r-- | include/linux/sunrpc/svcsock.h | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/include/linux/sunrpc/svcsock.h b/include/linux/sunrpc/svcsock.h index 92ad02f0dcc0..613cf42227aa 100644 --- a/include/linux/sunrpc/svcsock.h +++ b/include/linux/sunrpc/svcsock.h | |||
@@ -26,11 +26,21 @@ struct svc_sock { | |||
26 | void (*sk_owspace)(struct sock *); | 26 | void (*sk_owspace)(struct sock *); |
27 | 27 | ||
28 | /* private TCP part */ | 28 | /* private TCP part */ |
29 | u32 sk_reclen; /* length of record */ | 29 | __be32 sk_reclen; /* length of record */ |
30 | u32 sk_tcplen; /* current read length */ | 30 | u32 sk_tcplen; /* current read length */ |
31 | struct page * sk_pages[RPCSVC_MAXPAGES]; /* received data */ | 31 | struct page * sk_pages[RPCSVC_MAXPAGES]; /* received data */ |
32 | }; | 32 | }; |
33 | 33 | ||
34 | static inline u32 svc_sock_reclen(struct svc_sock *svsk) | ||
35 | { | ||
36 | return ntohl(svsk->sk_reclen) & RPC_FRAGMENT_SIZE_MASK; | ||
37 | } | ||
38 | |||
39 | static inline u32 svc_sock_final_rec(struct svc_sock *svsk) | ||
40 | { | ||
41 | return ntohl(svsk->sk_reclen) & RPC_LAST_STREAM_FRAGMENT; | ||
42 | } | ||
43 | |||
34 | /* | 44 | /* |
35 | * Function prototypes. | 45 | * Function prototypes. |
36 | */ | 46 | */ |