From patchwork Thu Apr 26 19:58:59 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marcelo Ricardo Leitner X-Patchwork-Id: 905359 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="JCcJBktr"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 40X7Ld4m5Rz9s02 for ; Fri, 27 Apr 2018 06:04:09 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757144AbeDZUEI (ORCPT ); Thu, 26 Apr 2018 16:04:08 -0400 Received: from mail-qt0-f194.google.com ([209.85.216.194]:35012 "EHLO mail-qt0-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755509AbeDZT73 (ORCPT ); Thu, 26 Apr 2018 15:59:29 -0400 Received: by mail-qt0-f194.google.com with SMTP id s2-v6so33192656qti.2; Thu, 26 Apr 2018 12:59:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=fh46SbLQZSOVFd1LbCg2lQTIsGd+0Y+S05+A1A2QJMs=; b=JCcJBktrRpRn3xB8chEa2FztcYG4/SAHbDR9OOmbiapOMdaEDwGLG3GNBvVfUxQaqV eWcmUulky8l8OCTkkVIfUsUb4opT0NOsgGqAkgR9HvUxpnqO7jxZ14oPdUXahSlZDMc9 KdYeKrd9fjgJx7pu8rRHRr241+NvOOslE9VS7uPYOPB/2unfo2yvl7K8GwyZjGa3WHSA YFYre7uyKOu/swIBmz5GB35zi96uwjXFUOBwXVcoPdnu6pghCDU5b5eGpmlHO4uGoQzR LgI2CI4dz4UlVAvMbO5x/pn2ZUqJWtnAvL2q6KLjmRPjf/itlPvykZsmVRNbRBdZ1AYf X2Qg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=fh46SbLQZSOVFd1LbCg2lQTIsGd+0Y+S05+A1A2QJMs=; b=t1btl86tOC7RVqC6dCTNc76zzctXb9nX/uqd/rpvHAYACUnY5XqJ9x59OZLlAAXit4 aHQvh1dOPRegaM9DbjaqDJP/tMrtQygaa0xu1G33Vk7TZPmDsm7PW9t6aKpfrjLKucXv DyizQ96QPMvc3zjsSOTXm5/A+3iFEaWyPxXD4ThNyAj27GMAHyT0FrHfZJGe+Gmv6QUq 53nIPP2PXXpiH5xBa8YXZAT69m9+9zo72y3dyZ+g3rpIg9rP0U25L9pyO7V9hXd/Yj+C 7Xi2tKFFJAvJHJmc49O8SjvV2XJZbUe0ODVtWhhoRx865cDnXe3f/PyQWqCWSF6xXj5K lI3Q== X-Gm-Message-State: ALQs6tA9em3lqfLL8ZJ30PAFH+oSvHwZWgwWkhWYgwwmBw849ReMeTFP IjSi/kHD179932BD0iAaMPw= X-Google-Smtp-Source: AIpwx492ZuWjhlcLUvqmyoCcA20DftXIJ/HNrrKeAPxuQ2RKTPTCcFIu00xTnpQotlBkrDO2fn5Ckw== X-Received: by 2002:ac8:2d10:: with SMTP id n16-v6mr36141317qta.319.1524772768806; Thu, 26 Apr 2018 12:59:28 -0700 (PDT) Received: from localhost.localdomain ([177.10.56.95]) by smtp.gmail.com with ESMTPSA id h3sm15400652qkf.10.2018.04.26.12.59.25 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 26 Apr 2018 12:59:28 -0700 (PDT) Received: by localhost.localdomain (Postfix, from userid 1000) id 0760C1811B3; Thu, 26 Apr 2018 16:59:18 -0300 (-03) From: Marcelo Ricardo Leitner To: netdev@vger.kernel.org Cc: linux-sctp@vger.kernel.org, Vlad Yasevich , Neil Horman , Xin Long Subject: [PATCH net-next 10/13] sctp: re-use sctp_transport_pmtu in sctp_transport_route Date: Thu, 26 Apr 2018 16:58:59 -0300 Message-Id: X-Mailer: git-send-email 2.14.3 In-Reply-To: References: Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org sctp_transport_route currently is very similar to sctp_transport_pmtu plus a few other bits. This patch reuses sctp_transport_pmtu in sctp_transport_route and removes the duplicated code. Also, as all calls to sctp_transport_route were forcing the dst release before calling it, let's just include such release too. Signed-off-by: Marcelo Ricardo Leitner --- net/sctp/socket.c | 6 ++---- net/sctp/transport.c | 35 +++++++++++++++++------------------ 2 files changed, 19 insertions(+), 22 deletions(-) diff --git a/net/sctp/socket.c b/net/sctp/socket.c index a93b60a28cc5fff0ebe299905fb31cb37de43d88..bb08d44b838bbbb0ffbf80b194a1291fed4069e4 100644 --- a/net/sctp/socket.c +++ b/net/sctp/socket.c @@ -644,16 +644,15 @@ static int sctp_send_asconf_add_ip(struct sock *sk, list_for_each_entry(trans, &asoc->peer.transport_addr_list, transports) { - /* Clear the source and route cache */ - sctp_transport_dst_release(trans); trans->cwnd = min(4*asoc->pathmtu, max_t(__u32, 2*asoc->pathmtu, 4380)); trans->ssthresh = asoc->peer.i.a_rwnd; trans->rto = asoc->rto_initial; sctp_max_rto(asoc, trans); trans->rtt = trans->srtt = trans->rttvar = 0; + /* Clear the source and route cache */ sctp_transport_route(trans, NULL, - sctp_sk(asoc->base.sk)); + sctp_sk(asoc->base.sk)); } } retval = sctp_send_asconf(asoc, chunk); @@ -896,7 +895,6 @@ static int sctp_send_asconf_del_ip(struct sock *sk, */ list_for_each_entry(transport, &asoc->peer.transport_addr_list, transports) { - sctp_transport_dst_release(transport); sctp_transport_route(transport, NULL, sctp_sk(asoc->base.sk)); } diff --git a/net/sctp/transport.c b/net/sctp/transport.c index ed73a9d91b83eadd3eb8d681fda104fe71562c3f..4a95e260b674b3dffe2ffc4c54cf9a330dfac18c 100644 --- a/net/sctp/transport.c +++ b/net/sctp/transport.c @@ -242,6 +242,15 @@ void sctp_transport_pmtu(struct sctp_transport *transport, struct sock *sk) &transport->fl, sk); } + if (transport->param_flags & SPP_PMTUD_DISABLE) { + struct sctp_association *asoc = transport->asoc; + + if (!transport->pathmtu && asoc && asoc->pathmtu) + transport->pathmtu = asoc->pathmtu; + if (transport->pathmtu) + return; + } + if (transport->dst) transport->pathmtu = sctp_dst_mtu(transport->dst); else @@ -290,6 +299,7 @@ void sctp_transport_route(struct sctp_transport *transport, struct sctp_association *asoc = transport->asoc; struct sctp_af *af = transport->af_specific; + sctp_transport_dst_release(transport); af->get_dst(transport, saddr, &transport->fl, sctp_opt2sk(opt)); if (saddr) @@ -297,25 +307,14 @@ void sctp_transport_route(struct sctp_transport *transport, else af->get_saddr(opt, transport, &transport->fl); - if ((transport->param_flags & SPP_PMTUD_DISABLE) && transport->pathmtu) { - return; - } - if (transport->dst) { - transport->pathmtu = SCTP_TRUNC4(dst_mtu(transport->dst)); + sctp_transport_pmtu(transport, sctp_opt2sk(opt)); - /* Initialize sk->sk_rcv_saddr, if the transport is the - * association's active path for getsockname(). - */ - if (asoc && (!asoc->peer.primary_path || - (transport == asoc->peer.active_path))) - opt->pf->to_sk_saddr(&transport->saddr, - asoc->base.sk); - } else if ((transport->param_flags & SPP_PMTUD_DISABLE) && - asoc && asoc->pathmtu) { - transport->pathmtu = asoc->pathmtu; - } else { - transport->pathmtu = SCTP_DEFAULT_MAXSEGMENT; - } + /* Initialize sk->sk_rcv_saddr, if the transport is the + * association's active path for getsockname(). + */ + if (transport->dst && asoc && + (!asoc->peer.primary_path || transport == asoc->peer.active_path)) + opt->pf->to_sk_saddr(&transport->saddr, asoc->base.sk); } /* Hold a reference to a transport. */