diff options
author | Vlad Yasevich <vladislav.yasevich@hp.com> | 2008-02-05 14:23:44 -0500 |
---|---|---|
committer | Vlad Yasevich <vladislav.yasevich@hp.com> | 2008-02-06 21:27:39 -0500 |
commit | 5f9646c3d9f92a93b96c40e65c3d268baada842f (patch) | |
tree | 94f9e6c62bbcd6ebc7d87783612b8652054d0071 | |
parent | a869981423b96045c49420a6884c72528836cea8 (diff) | |
download | kernel_samsung_aries-5f9646c3d9f92a93b96c40e65c3d268baada842f.zip kernel_samsung_aries-5f9646c3d9f92a93b96c40e65c3d268baada842f.tar.gz kernel_samsung_aries-5f9646c3d9f92a93b96c40e65c3d268baada842f.tar.bz2 |
[SCTP]: Make sure the chunk is off the transmitted list prior to freeing.
In a few instances, we need to remove the chunk from the transmitted list
prior to freeing it. This is because the free code doesn't do that any
more and so we need to do it manually.
Signed-off-by: Vlad Yasevich <vladislav.yasevich@hp.com>
-rw-r--r-- | net/sctp/outqueue.c | 4 | ||||
-rw-r--r-- | net/sctp/sm_make_chunk.c | 1 |
2 files changed, 4 insertions, 1 deletions
diff --git a/net/sctp/outqueue.c b/net/sctp/outqueue.c index 3c2a281..1bb3c5c 100644 --- a/net/sctp/outqueue.c +++ b/net/sctp/outqueue.c @@ -1179,8 +1179,10 @@ int sctp_outq_sack(struct sctp_outq *q, struct sctp_sackhdr *sack) tchunk = list_entry(lchunk, struct sctp_chunk, transmitted_list); tsn = ntohl(tchunk->subh.data_hdr->tsn); - if (TSN_lte(tsn, ctsn)) + if (TSN_lte(tsn, ctsn)) { + list_del_init(&tchunk->transmitted_list); sctp_chunk_free(tchunk); + } } /* ii) Set rwnd equal to the newly received a_rwnd minus the diff --git a/net/sctp/sm_make_chunk.c b/net/sctp/sm_make_chunk.c index 80b3c4f..e45be4e 100644 --- a/net/sctp/sm_make_chunk.c +++ b/net/sctp/sm_make_chunk.c @@ -3224,6 +3224,7 @@ int sctp_process_asconf_ack(struct sctp_association *asoc, } /* Free the cached last sent asconf chunk. */ + list_del_init(&asconf->transmitted_list); sctp_chunk_free(asconf); asoc->addip_last_asconf = NULL; |