There is no reason to use list_del_init() in these places as we are going to free/destroy the memory in a few lines below. Signed-off-by: Marcelo Ricardo Leitner <marcelo.leitner@xxxxxxxxx> --- net/sctp/associola.c | 14 ++++---------- net/sctp/auth.c | 8 ++------ net/sctp/chunk.c | 4 ++-- net/sctp/outqueue.c | 14 +++++++------- net/sctp/sm_make_chunk.c | 3 +-- 5 files changed, 16 insertions(+), 27 deletions(-) diff --git a/net/sctp/associola.c b/net/sctp/associola.c index e50dc6d7543fd6acfa7442f3a9ee575203c7718d..7eb9dacfa53a438b20a34319cf01c6c9a591f0c3 100644 --- a/net/sctp/associola.c +++ b/net/sctp/associola.c @@ -1638,25 +1638,19 @@ int sctp_assoc_set_id(struct sctp_association *asoc, gfp_t gfp) static void sctp_assoc_free_asconf_queue(struct sctp_association *asoc) { struct sctp_chunk *asconf; - struct sctp_chunk *tmp; - list_for_each_entry_safe(asconf, tmp, &asoc->addip_chunk_list, list) { - list_del_init(&asconf->list); + list_for_each_entry(asconf, &asoc->addip_chunk_list, list) sctp_chunk_free(asconf); - } } /* Free asconf_ack cache */ static void sctp_assoc_free_asconf_acks(struct sctp_association *asoc) { struct sctp_chunk *ack; - struct sctp_chunk *tmp; - list_for_each_entry_safe(ack, tmp, &asoc->asconf_ack_list, - transmitted_list) { - list_del_init(&ack->transmitted_list); + list_for_each_entry(ack, &asoc->asconf_ack_list, + transmitted_list) sctp_chunk_free(ack); - } } /* Clean up the ASCONF_ACK queue */ @@ -1674,7 +1668,7 @@ void sctp_assoc_clean_asconf_ack_cache(const struct sctp_association *asoc) htonl(asoc->peer.addip_serial)) break; - list_del_init(&ack->transmitted_list); + list_del(&ack->transmitted_list); sctp_chunk_free(ack); } } diff --git a/net/sctp/auth.c b/net/sctp/auth.c index f99d4855d3de34e0f0b1bf027a87dde3ad91a522..3db3c95c5b4c32011864f4862a446fd9aca9680c 100644 --- a/net/sctp/auth.c +++ b/net/sctp/auth.c @@ -109,7 +109,6 @@ struct sctp_shared_key *sctp_auth_shkey_create(__u16 key_id, gfp_t gfp) /* Free the shared key structure */ static void sctp_auth_shkey_free(struct sctp_shared_key *sh_key) { - BUG_ON(!list_empty(&sh_key->key_list)); sctp_auth_key_put(sh_key->key); sh_key->key = NULL; kfree(sh_key); @@ -123,11 +122,8 @@ void sctp_auth_destroy_keys(struct list_head *keys) struct sctp_shared_key *ep_key; struct sctp_shared_key *tmp; - if (list_empty(keys)) - return; - key_for_each_safe(ep_key, tmp, keys) { - list_del_init(&ep_key->key_list); + list_del(&ep_key->key_list); sctp_auth_shkey_free(ep_key); } } @@ -948,7 +944,7 @@ int sctp_auth_del_key_id(struct sctp_endpoint *ep, return -EINVAL; /* Delete the shared key */ - list_del_init(&key->key_list); + list_del(&key->key_list); sctp_auth_shkey_free(key); return 0; diff --git a/net/sctp/chunk.c b/net/sctp/chunk.c index e3621cb4827fadb5f5cb41ebe8455dfa3300a765..4c05a51dd53435c0c9c000a7d662758d65c05772 100644 --- a/net/sctp/chunk.c +++ b/net/sctp/chunk.c @@ -97,7 +97,7 @@ static void sctp_datamsg_destroy(struct sctp_datamsg *msg) /* Release all references. */ list_for_each_safe(pos, temp, &msg->chunks) { - list_del_init(pos); + list_del(pos); chunk = list_entry(pos, struct sctp_chunk, frag_list); /* Check whether we _really_ need to notify. */ if (notify < 0) { @@ -289,7 +289,7 @@ struct sctp_datamsg *sctp_datamsg_from_user(struct sctp_association *asoc, errout: list_for_each_safe(pos, temp, &msg->chunks) { - list_del_init(pos); + list_del(pos); chunk = list_entry(pos, struct sctp_chunk, frag_list); sctp_chunk_free(chunk); } diff --git a/net/sctp/outqueue.c b/net/sctp/outqueue.c index 65abe22d869167b13193e8b057572d9d8f84625c..80d2203af69d8711e611d5ea53e2283364019586 100644 --- a/net/sctp/outqueue.c +++ b/net/sctp/outqueue.c @@ -231,7 +231,7 @@ static void __sctp_outq_teardown(struct sctp_outq *q) /* Throw away chunks that have been gap ACKed. */ list_for_each_safe(lchunk, temp, &q->sacked) { - list_del_init(lchunk); + list_del(lchunk); chunk = list_entry(lchunk, struct sctp_chunk, transmitted_list); sctp_chunk_fail(chunk, q->error); @@ -240,7 +240,7 @@ static void __sctp_outq_teardown(struct sctp_outq *q) /* Throw away any chunks in the retransmit queue. */ list_for_each_safe(lchunk, temp, &q->retransmit) { - list_del_init(lchunk); + list_del(lchunk); chunk = list_entry(lchunk, struct sctp_chunk, transmitted_list); sctp_chunk_fail(chunk, q->error); @@ -249,7 +249,7 @@ static void __sctp_outq_teardown(struct sctp_outq *q) /* Throw away any chunks that are in the abandoned queue. */ list_for_each_safe(lchunk, temp, &q->abandoned) { - list_del_init(lchunk); + list_del(lchunk); chunk = list_entry(lchunk, struct sctp_chunk, transmitted_list); sctp_chunk_fail(chunk, q->error); @@ -266,7 +266,7 @@ static void __sctp_outq_teardown(struct sctp_outq *q) /* Throw away any leftover control chunks. */ list_for_each_entry_safe(chunk, tmp, &q->control_chunk_list, list) { - list_del_init(&chunk->list); + list_del(&chunk->list); sctp_chunk_free(chunk); } } @@ -392,7 +392,7 @@ static int sctp_prsctp_prune_unsent(struct sctp_association *asoc, chk->sinfo.sinfo_timetolive <= sinfo->sinfo_timetolive) continue; - list_del_init(&chk->list); + list_del(&chk->list); asoc->sent_cnt_removable--; asoc->abandoned_unsent[SCTP_PR_INDEX(PRIO)]++; @@ -1329,7 +1329,7 @@ int sctp_outq_sack(struct sctp_outq *q, struct sctp_chunk *chunk) transmitted_list); tsn = ntohl(tchunk->subh.data_hdr->tsn); if (TSN_lte(tsn, ctsn)) { - list_del_init(&tchunk->transmitted_list); + list_del(&tchunk->transmitted_list); if (asoc->peer.prsctp_capable && SCTP_PR_PRIO_ENABLED(chunk->sinfo.sinfo_flags)) asoc->sent_cnt_removable--; @@ -1828,7 +1828,7 @@ static void sctp_generate_fwdtsn(struct sctp_outq *q, __u32 ctsn) * the ctsn. */ if (TSN_lte(tsn, ctsn)) { - list_del_init(lchunk); + list_del(lchunk); sctp_chunk_free(chunk); } else { if (TSN_lte(tsn, asoc->adv_peer_ack_point+1)) { diff --git a/net/sctp/sm_make_chunk.c b/net/sctp/sm_make_chunk.c index ad3445b3408eac9791ee5645b55da68ee14e20b1..d984d88f1f283bdc6f259a115739e19a24eee396 100644 --- a/net/sctp/sm_make_chunk.c +++ b/net/sctp/sm_make_chunk.c @@ -1437,7 +1437,6 @@ static struct sctp_chunk *sctp_make_control(const struct sctp_association *asoc, static void sctp_chunk_destroy(struct sctp_chunk *chunk) { BUG_ON(!list_empty(&chunk->list)); - list_del_init(&chunk->transmitted_list); consume_skb(chunk->skb); consume_skb(chunk->auth_chunk); @@ -3505,7 +3504,7 @@ int sctp_process_asconf_ack(struct sctp_association *asoc, } /* Free the cached last sent asconf chunk. */ - list_del_init(&asconf->transmitted_list); + list_del(&asconf->transmitted_list); sctp_chunk_free(asconf); asoc->addip_last_asconf = NULL; -- 2.9.3 -- To unsubscribe from this list: send the line "unsubscribe linux-sctp" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html