sctp: add refcnt support for sh_key
With refcnt support for sh_key, chunks auth sh_keys can be decided before enqueuing it. Changing the active key later will not affect the chunks already enqueued. Furthermore, this is necessary when adding the support for authinfo for sendmsg in next patch. Note that struct sctp_chunk can't be grown due to that performance drop issue on slow cpu, so it just reuses head_skb memory for shkey in sctp_chunk. Signed-off-by: Xin Long <lucien.xin@gmail.com> Acked-by: Marcelo Ricardo Leitner <marcelo.leitner@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
c469012729
commit
1b1e0bc994
@@ -156,6 +156,9 @@ static inline void sctp_set_owner_w(struct sctp_chunk *chunk)
|
||||
/* The sndbuf space is tracked per association. */
|
||||
sctp_association_hold(asoc);
|
||||
|
||||
if (chunk->shkey)
|
||||
sctp_auth_shkey_hold(chunk->shkey);
|
||||
|
||||
skb_set_owner_w(chunk->skb, sk);
|
||||
|
||||
chunk->skb->destructor = sctp_wfree;
|
||||
@@ -8109,6 +8112,9 @@ static void sctp_wfree(struct sk_buff *skb)
|
||||
sk->sk_wmem_queued -= skb->truesize;
|
||||
sk_mem_uncharge(sk, skb->truesize);
|
||||
|
||||
if (chunk->shkey)
|
||||
sctp_auth_shkey_release(chunk->shkey);
|
||||
|
||||
sock_wfree(skb);
|
||||
sctp_wake_up_waiters(sk, asoc);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user