|
@@ -162,7 +162,7 @@ static inline void sctp_set_owner_w(struct sctp_chunk *chunk)
|
|
|
|
|
|
chunk->skb->destructor = sctp_wfree;
|
|
|
/* Save the chunk pointer in skb for sctp_wfree to use later. */
|
|
|
- *((struct sctp_chunk **)(chunk->skb->cb)) = chunk;
|
|
|
+ skb_shinfo(chunk->skb)->destructor_arg = chunk;
|
|
|
|
|
|
asoc->sndbuf_used += SCTP_DATA_SNDSIZE(chunk) +
|
|
|
sizeof(struct sk_buff) +
|
|
@@ -6870,14 +6870,10 @@ static void sctp_wake_up_waiters(struct sock *sk,
|
|
|
*/
|
|
|
static void sctp_wfree(struct sk_buff *skb)
|
|
|
{
|
|
|
- struct sctp_association *asoc;
|
|
|
- struct sctp_chunk *chunk;
|
|
|
- struct sock *sk;
|
|
|
+ struct sctp_chunk *chunk = skb_shinfo(skb)->destructor_arg;
|
|
|
+ struct sctp_association *asoc = chunk->asoc;
|
|
|
+ struct sock *sk = asoc->base.sk;
|
|
|
|
|
|
- /* Get the saved chunk pointer. */
|
|
|
- chunk = *((struct sctp_chunk **)(skb->cb));
|
|
|
- asoc = chunk->asoc;
|
|
|
- sk = asoc->base.sk;
|
|
|
asoc->sndbuf_used -= SCTP_DATA_SNDSIZE(chunk) +
|
|
|
sizeof(struct sk_buff) +
|
|
|
sizeof(struct sctp_chunk);
|