From patchwork Sat May 12 22:21:12 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: 912478 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="LDPA7Zdy"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 40k1dh6tpGz9s1w for ; Sun, 13 May 2018 08:21:28 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751906AbeELWVW (ORCPT ); Sat, 12 May 2018 18:21:22 -0400 Received: from mail-qk0-f196.google.com ([209.85.220.196]:38532 "EHLO mail-qk0-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751664AbeELWVR (ORCPT ); Sat, 12 May 2018 18:21:17 -0400 Received: by mail-qk0-f196.google.com with SMTP id b39-v6so7212276qkb.5; Sat, 12 May 2018 15:21:17 -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=cjDWheVmrr09lBdJkuUgjowHLlevmTuM2H4Rpao7hwM=; b=LDPA7ZdyiZDWgctfZn6Mt+zmMk0PqMTA+S+5IRUYLLEozFwtGgeJyaNH/6OgomkWJ5 RRS5EZINZbifCyhmVkKQgYnjTnbsJcg1RSQOYs2EtV/l9WF18SAR9ibjHtcCdjJwp92Z wB3Mevwlc5gbusHoVFf9NvsBsisFawZdx+uiHmEOVk98+Q7qaoDlnnYYN/p/c1N+Ozj0 MW1gC1SoItAY2xhxZ2Ny3ExVZbGGQsUpjfshGvDzI08578Gv+LykgaKGL23uFRfYFRxZ fWfkNK3Bjs/srjROZL0/j5oUz6GAPKC6gLhCISNCeKOfWyuLRkR3W6RwrsRT07K+bgCp J/Kw== 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=cjDWheVmrr09lBdJkuUgjowHLlevmTuM2H4Rpao7hwM=; b=X/0JjEg8Co0G4l7Sobj4v9saO9KcJzdzbW/yF2gzqlWO7yDBej6WL3cXyQ5sWhrzVQ UdfWrkgIg/zpJ4Jmp1to+orQlpoc5xTlcuMala98c5FRYBdM3mnHww7pkotsb9sRnmwS z5Qp/H77KUE0n4Aacbee48gbvYCESM35LFhjqnN9XzUVMyfinqMGB9Am9z7FHMST2cqm TgC149Z+Jgi8p4KutDXzVvIXj/d6wkDpTk2v14D+K5tsVcrAWZ5Yg/cMa7Qk1ih7oBNs MNb3NIL/LixvnAC8VJ0+972ETO6Z2TVXyW66YUzoD534SvYzaxv03QKWc/Bs17NQM9L3 varA== X-Gm-Message-State: ALKqPwdj9VpjMIQFlhzib6PPEmADZOGJu6rIPX09nlr9shQmWlaRWgHV UhzLilpnP66E3d/D+j0r3lM= X-Google-Smtp-Source: AB8JxZqpqikF3rN1Hig6Bp7ulBLh4r/Hx4gK2/Wls33ixtONu9QruSEz5ixvPVb9pwOPErcGZ6NRcQ== X-Received: by 2002:a37:129b:: with SMTP id 27-v6mr3104551qks.96.1526163676884; Sat, 12 May 2018 15:21:16 -0700 (PDT) Received: from localhost.localdomain ([45.4.239.227]) by smtp.gmail.com with ESMTPSA id s69-v6sm3942638qka.61.2018.05.12.15.21.16 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Sat, 12 May 2018 15:21:16 -0700 (PDT) Received: by localhost.localdomain (Postfix, from userid 1000) id 769A71811B3; Sat, 12 May 2018 19:21:13 -0300 (-03) From: Marcelo Ricardo Leitner To: netdev@vger.kernel.org Cc: linux-sctp@vger.kernel.org, Neil Horman , Vlad Yasevich , Xin Long Subject: [PATCH net-next v2 7/8] sctp: make use of gfp on retransmissions Date: Sat, 12 May 2018 19:21:12 -0300 Message-Id: <7f569955f4d33ad9c3fe797d8f650c35a602eae6.1526142784.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 3b738fdb08b9c596e6d4d4b18bef645187e0da4a..8173dd26f5878cbf67dd7e162ac5e6b18d9a3332 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;