Commit 802885fc authored by Eric Dumazet's avatar Eric Dumazet Committed by David S. Miller

dccp: constify dccp_make_response() socket argument

Like tcp_make_synack() the only time we might change the socket is
when calling sock_wmalloc(), which is using atomic operation to
update sk->sk_wmem_alloc

Also use MAX_DCCP_HEADER as both IPv4/IPv6 use this value for max_header.
Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 0f935dbe
...@@ -293,7 +293,7 @@ int dccp_init_sock(struct sock *sk, const __u8 ctl_sock_initialized); ...@@ -293,7 +293,7 @@ int dccp_init_sock(struct sock *sk, const __u8 ctl_sock_initialized);
void dccp_destroy_sock(struct sock *sk); void dccp_destroy_sock(struct sock *sk);
void dccp_close(struct sock *sk, long timeout); void dccp_close(struct sock *sk, long timeout);
struct sk_buff *dccp_make_response(struct sock *sk, struct dst_entry *dst, struct sk_buff *dccp_make_response(const struct sock *sk, struct dst_entry *dst,
struct request_sock *req); struct request_sock *req);
int dccp_connect(struct sock *sk); int dccp_connect(struct sock *sk);
......
...@@ -390,7 +390,7 @@ int dccp_retransmit_skb(struct sock *sk) ...@@ -390,7 +390,7 @@ int dccp_retransmit_skb(struct sock *sk)
return dccp_transmit_skb(sk, skb_clone(sk->sk_send_head, GFP_ATOMIC)); return dccp_transmit_skb(sk, skb_clone(sk->sk_send_head, GFP_ATOMIC));
} }
struct sk_buff *dccp_make_response(struct sock *sk, struct dst_entry *dst, struct sk_buff *dccp_make_response(const struct sock *sk, struct dst_entry *dst,
struct request_sock *req) struct request_sock *req)
{ {
struct dccp_hdr *dh; struct dccp_hdr *dh;
...@@ -398,13 +398,18 @@ struct sk_buff *dccp_make_response(struct sock *sk, struct dst_entry *dst, ...@@ -398,13 +398,18 @@ struct sk_buff *dccp_make_response(struct sock *sk, struct dst_entry *dst,
const u32 dccp_header_size = sizeof(struct dccp_hdr) + const u32 dccp_header_size = sizeof(struct dccp_hdr) +
sizeof(struct dccp_hdr_ext) + sizeof(struct dccp_hdr_ext) +
sizeof(struct dccp_hdr_response); sizeof(struct dccp_hdr_response);
struct sk_buff *skb = sock_wmalloc(sk, sk->sk_prot->max_header, 1, struct sk_buff *skb;
/* sk is marked const to clearly express we dont hold socket lock.
* sock_wmalloc() will atomically change sk->sk_wmem_alloc,
* it is safe to promote sk to non const.
*/
skb = sock_wmalloc((struct sock *)sk, MAX_DCCP_HEADER, 1,
GFP_ATOMIC); GFP_ATOMIC);
if (skb == NULL) if (!skb)
return NULL; return NULL;
/* Reserve space for headers. */ skb_reserve(skb, MAX_DCCP_HEADER);
skb_reserve(skb, sk->sk_prot->max_header);
skb_dst_set(skb, dst_clone(dst)); skb_dst_set(skb, dst_clone(dst));
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment