|
@@ -140,14 +140,12 @@ void sctp_bind_addr_init(struct sctp_bind_addr *bp, __u16 port)
|
|
/* Dispose of the address list. */
|
|
/* Dispose of the address list. */
|
|
static void sctp_bind_addr_clean(struct sctp_bind_addr *bp)
|
|
static void sctp_bind_addr_clean(struct sctp_bind_addr *bp)
|
|
{
|
|
{
|
|
- struct sctp_sockaddr_entry *addr;
|
|
|
|
- struct list_head *pos, *temp;
|
|
|
|
|
|
+ struct sctp_sockaddr_entry *addr, *temp;
|
|
|
|
|
|
/* Empty the bind address list. */
|
|
/* Empty the bind address list. */
|
|
- list_for_each_safe(pos, temp, &bp->address_list) {
|
|
|
|
- addr = list_entry(pos, struct sctp_sockaddr_entry, list);
|
|
|
|
- list_del(pos);
|
|
|
|
- kfree(addr);
|
|
|
|
|
|
+ list_for_each_entry_safe(addr, temp, &bp->address_list, list) {
|
|
|
|
+ list_del_rcu(&addr->list);
|
|
|
|
+ call_rcu(&addr->rcu, sctp_local_addr_free);
|
|
SCTP_DBG_OBJCNT_DEC(addr);
|
|
SCTP_DBG_OBJCNT_DEC(addr);
|
|
}
|
|
}
|
|
}
|
|
}
|