From patchwork Mon May 14 17:34:42 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: 913151 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="plXCu2k4"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 40l7BP4HHpz9s0q for ; Tue, 15 May 2018 03:35:09 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753169AbeENRfH (ORCPT ); Mon, 14 May 2018 13:35:07 -0400 Received: from mail-qt0-f194.google.com ([209.85.216.194]:42048 "EHLO mail-qt0-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752057AbeENRfD (ORCPT ); Mon, 14 May 2018 13:35:03 -0400 Received: by mail-qt0-f194.google.com with SMTP id c2-v6so17196134qtn.9; Mon, 14 May 2018 10:35:02 -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=TuLKFzKtTD2NvUO1Mc+PbfF6O292cHXE7rdDA7LaT9Y=; b=plXCu2k49CGQgMImnb9IueEjA7/HZp8IB37CxeLrQrm4yJNdpc/876HGh9tj9SC/jn NN5In9ymWjmRBEIj1D/dLV89LwQ7c5MZadcXvWDRqtGHCyo0QSXy7xO+KTy1JcP0Ahhr CbBLdYXQLhaE1lF0korim6pvIEM//ESdrnnPD6lnK6Zgjj9PdTxCTdAboSLpNlNfqBMj 0WIScuW0g7gwDYbD/XEuluw4vE/OW9LSbdcqP9P3W83+Mr+SUt3Qqz1a9hl25UYQ1WYD 4I1BAcAM5VFATvVJDaCE9TT7X6gc9BqInDLa39mRSm6Z2ykZciZvIKQGu39CLIa7tC6F KucA== 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=TuLKFzKtTD2NvUO1Mc+PbfF6O292cHXE7rdDA7LaT9Y=; b=O+sCWH9t4e2tIznLqD/OZHxc0M5fhQCBD9m7bAb4XfdNIgKnpJCU1fBZeIQz8jk6dq bjYIzy8liZGSIu4Hl+/g+ReSkFP5iw2Rh3HypljvtkmwlwE1x44QmXXRvWQbkYFnLWOE /DXJOjlKJPi2+Pfj5M6TlZ1sMIKGfUgsopWvi9RllkY/R0JUgkm9u4iTQnsJnsEzAMCM KiL9uFUUxyVSqCxtPSLQSyTRjMoUrxzQ1pAQ8TyLpzknQEapCw3nF/YvWixsHR6ZOxOX BJlv5hTdW2VQX3m0WGKUFNUyHMex3BXG9EyF1lMXwuAEGG7RM4CX0FVx9dtGduH/L2qQ vt3g== X-Gm-Message-State: ALKqPwevD9VF0WfcGQKFO2Tf/VCf/HsuSB/TkGsj0p220KTmDoDCjwU0 GrOvNShT3vhFa0H76UoZZ0E= X-Google-Smtp-Source: AB8JxZp0OYV4ZxHrXxWpZwonZBR1YMOMq/wJwDL2Rm69UjIx11Ys7Ky++IJdh+/4Q8M9H9LRbF3/RA== X-Received: by 2002:a0c:8abc:: with SMTP id 57-v6mr9855663qvv.147.1526319302233; Mon, 14 May 2018 10:35:02 -0700 (PDT) Received: from localhost.localdomain ([45.4.239.227]) by smtp.gmail.com with ESMTPSA id l1-v6sm7856334qki.32.2018.05.14.10.35.01 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 14 May 2018 10:35:01 -0700 (PDT) Received: by localhost.localdomain (Postfix, from userid 1000) id B4B86181503; Mon, 14 May 2018 14:34:53 -0300 (-03) From: Marcelo Ricardo Leitner To: netdev@vger.kernel.org Cc: linux-sctp@vger.kernel.org, Neil Horman , Xin Long , Vlad Yasevich Subject: [PATCH net-next v3 7/8] sctp: make use of gfp on retransmissions Date: Mon, 14 May 2018 14:34:42 -0300 Message-Id: <9e20ebbda02e4b81bd97fce0a095e2d55125f713.1526318522.git.marcelo.leitner@gmail.com> 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 Retransmissions may be triggered when in user context, so lets make use of gfp. Signed-off-by: Marcelo Ricardo Leitner --- net/sctp/outqueue.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/net/sctp/outqueue.c b/net/sctp/outqueue.c index 44465e64857b79636a78917a12776402ccb8f990..e1632b8e2900f88070aebc82bbe4eca61f424e87 100644 --- a/net/sctp/outqueue.c +++ b/net/sctp/outqueue.c @@ -608,7 +608,7 @@ void sctp_retransmit(struct sctp_outq *q, struct sctp_transport *transport, * The return value is a normal kernel error return value. */ static int __sctp_outq_flush_rtx(struct sctp_outq *q, struct sctp_packet *pkt, - int rtx_timeout, int *start_timer) + int rtx_timeout, int *start_timer, gfp_t gfp) { struct sctp_transport *transport = pkt->transport; struct sctp_chunk *chunk, *chunk1; @@ -684,12 +684,12 @@ static int __sctp_outq_flush_rtx(struct sctp_outq *q, struct sctp_packet *pkt, * control chunks are already freed so there * is nothing we can do. */ - sctp_packet_transmit(pkt, GFP_ATOMIC); + sctp_packet_transmit(pkt, gfp); goto redo; } /* Send this packet. */ - error = sctp_packet_transmit(pkt, GFP_ATOMIC); + error = sctp_packet_transmit(pkt, gfp); /* If we are retransmitting, we should only * send a single packet. @@ -705,7 +705,7 @@ static int __sctp_outq_flush_rtx(struct sctp_outq *q, struct sctp_packet *pkt, case SCTP_XMIT_RWND_FULL: /* Send this packet. */ - error = sctp_packet_transmit(pkt, GFP_ATOMIC); + error = sctp_packet_transmit(pkt, gfp); /* Stop sending DATA as there is no more room * at the receiver. @@ -715,7 +715,7 @@ static int __sctp_outq_flush_rtx(struct sctp_outq *q, struct sctp_packet *pkt, case SCTP_XMIT_DELAY: /* Send this packet. */ - error = sctp_packet_transmit(pkt, GFP_ATOMIC); + error = sctp_packet_transmit(pkt, gfp); /* Stop sending DATA because of nagle delay. */ done = 1; @@ -991,7 +991,7 @@ static void sctp_outq_flush_ctrl(struct sctp_outq *q, static bool sctp_outq_flush_rtx(struct sctp_outq *q, struct sctp_transport **_transport, struct list_head *transport_list, - int rtx_timeout) + int rtx_timeout, gfp_t gfp) { struct sctp_transport *transport = *_transport; struct sctp_packet *packet = transport ? &transport->packet : NULL; @@ -1015,7 +1015,8 @@ static bool sctp_outq_flush_rtx(struct sctp_outq *q, asoc->peer.ecn_capable); } - error = __sctp_outq_flush_rtx(q, packet, rtx_timeout, &start_timer); + error = __sctp_outq_flush_rtx(q, packet, rtx_timeout, &start_timer, + gfp); if (error < 0) asoc->base.sk->sk_err = -error; @@ -1074,7 +1075,7 @@ static void sctp_outq_flush_data(struct sctp_outq *q, */ if (!list_empty(&q->retransmit)) { if (!sctp_outq_flush_rtx(q, _transport, transport_list, - rtx_timeout)) + rtx_timeout, gfp)) break; /* We may have switched current transport */ transport = *_transport;