struct list_head        *pos;
        struct list_head        *temp;
        struct sctp_transport   *transport;
-       union sctp_addr tmp;
-
-       flip_to_n(&tmp, addr);
 
        list_for_each_safe(pos, temp, &asoc->peer.transport_addr_list) {
                transport = list_entry(pos, struct sctp_transport, transports);
-               if (sctp_cmp_addr_exact(&tmp, &transport->ipaddr)) {
+               if (sctp_cmp_addr_exact(addr, &transport->ipaddr)) {
                        /* Do book keeping for removing the peer and free it. */
                        sctp_assoc_rm_peer(asoc, transport);
                        break;
        list_for_each_safe(pos, temp, &asoc->peer.transport_addr_list) {
                trans = list_entry(pos, struct sctp_transport, transports);
                if (!sctp_assoc_lookup_paddr(new, &trans->ipaddr_h))
-                       sctp_assoc_del_peer(asoc, &trans->ipaddr_h);
+                       sctp_assoc_del_peer(asoc, &trans->ipaddr);
        }
 
        /* If the case is A (association restart), use
 
                if (sctp_cmp_addr_exact(&tmp, &tmp_addr))
                        return SCTP_ERROR_DEL_SRC_IP;
 
-               sctp_assoc_del_peer(asoc, &addr);
+               sctp_assoc_del_peer(asoc, &tmp_addr);
                break;
        case SCTP_PARAM_SET_PRIMARY:
                peer = sctp_assoc_lookup_paddr(asoc, &addr);
 
                t = list_entry(pos, struct sctp_transport, transports);
                if (!sctp_cmp_addr_exact(&t->ipaddr,
                                         &asoc->peer.primary_addr)) {
-                       sctp_assoc_del_peer(asoc, &t->ipaddr_h);
+                       sctp_assoc_del_peer(asoc, &t->ipaddr);
                }
        }