From patchwork Tue Oct 3 22:20:10 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marcelo Ricardo Leitner X-Patchwork-Id: 821043 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@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; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="k4PTcOcS"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3y6D5c3dHNz9sRW for ; Wed, 4 Oct 2017 09:21:24 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751717AbdJCWVW (ORCPT ); Tue, 3 Oct 2017 18:21:22 -0400 Received: from mail-qt0-f196.google.com ([209.85.216.196]:44752 "EHLO mail-qt0-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751120AbdJCWUh (ORCPT ); Tue, 3 Oct 2017 18:20:37 -0400 Received: by mail-qt0-f196.google.com with SMTP id v28so7068852qtv.1; Tue, 03 Oct 2017 15:20:37 -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=YGCQJXADAo24wX0v9DsaLYspEY3vHOqwHH7b55PFrX0=; b=k4PTcOcSdUiYVDCSTBiZw9pA5dWoQIh9LTy8bCuJcATU1WPniwIjn6zhZp4Z7Flsvf +m0unA89viSDfnTi/XwDRgDg1yNlgsnROgQset+xoKGGP3FaOiNIPpO6G295V2Nl+WlE tkjsIRa1KbgM/A9EC+kJzNKeuD6311Y6otWFRmGH/6mKgsB0D2ceuVuVzdztNlxwvO3j HYAgJkZp/4/vkzmw9q4n9OmRkYVin1vUXEuPy4B2zs5yREXcKZZjqFl+FfXqmHJRznFk M9f4tnoHii23fJzLB6GAiYnwplcjXanzvhhvTDUeKQcwEoTDpkl8Re20oM7nyx7YurWI kjEg== 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=YGCQJXADAo24wX0v9DsaLYspEY3vHOqwHH7b55PFrX0=; b=PfiWCMYtWBYv80jwngeZ/fN7TRfzaUOK2vLwAbCdw65j1XudrsHmf1buut9XQsc8vr 1q4Ke+zum15FjUsnelGoeI6h2uBr91TrXu/oo3TJlX288dPPTcULEnaSTVg3GxEF6TWx EQlsAypDKpZePrHNudjsTkk7URLQVyNiQnEJNimlA69X8wq8R98tvmdmN6mH+YZ/3XTc KRJF8I9sf96KIZVQBT1odWWIVHgowhc5KQe3R/04H6uaX6cBReMnZqAfygkoP9zF7DFK IdmXdMxnnKYVnQ5HeEZo/F5xSOeRd1XrmeRL6VlGSS2cpYns1SZj5ACvkqY/RIC3Sl/D wSyQ== X-Gm-Message-State: AMCzsaXjkGFZ5hdVs74Nt9Rs1utrkKJ90T817FsBD2dipKVRl9udNCrn nuNr14m2wVt3O7xWje7SUs6f0Kib X-Google-Smtp-Source: AOwi7QAokdnZqve4+ytY3RtVr/wZeseo1TdUHsr7diKaNwTDQY+BuahBtJwwdn9s7bgjV1kYFKc03Q== X-Received: by 10.237.39.219 with SMTP id m27mr26091945qtg.34.1507069236731; Tue, 03 Oct 2017 15:20:36 -0700 (PDT) Received: from localhost.localdomain.com ([2001:1284:f013:2f91:ff99:4075:72f0:1535]) by smtp.gmail.com with ESMTPSA id 39sm4328568qkw.63.2017.10.03.15.20.34 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 03 Oct 2017 15:20:36 -0700 (PDT) From: Marcelo Ricardo Leitner To: netdev@vger.kernel.org Cc: linux-sctp@vger.kernel.org, Neil Horman , Vlad Yasevich , Xin Long , David Laight Subject: [PATCH net-next v2 03/10] sctp: factor out stream->in allocation Date: Tue, 3 Oct 2017 19:20:10 -0300 Message-Id: <4ded67d1a189d1dea9c047e76a59aad8b4de36b6.1507069005.git.marcelo.leitner@gmail.com> X-Mailer: git-send-email 2.13.5 In-Reply-To: References: Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org There is 1 place allocating it and another reallocating. Move such procedures to a common function. v2: updated changelog Tested-by: Xin Long Signed-off-by: Marcelo Ricardo Leitner --- net/sctp/stream.c | 36 ++++++++++++++++++++++++++++-------- 1 file changed, 28 insertions(+), 8 deletions(-) diff --git a/net/sctp/stream.c b/net/sctp/stream.c index 6d0e997d301f89e165367106c02e82f8a6c3a877..952437d656cc71ad1c133a736c539eff9a8d80c2 100644 --- a/net/sctp/stream.c +++ b/net/sctp/stream.c @@ -59,6 +59,31 @@ static int sctp_stream_alloc_out(struct sctp_stream *stream, __u16 outcnt, return 0; } +static int sctp_stream_alloc_in(struct sctp_stream *stream, __u16 incnt, + gfp_t gfp) +{ + struct sctp_stream_in *in; + + in = kmalloc_array(incnt, sizeof(*stream->in), gfp); + + if (!in) + return -ENOMEM; + + if (stream->in) { + memcpy(in, stream->in, min(incnt, stream->incnt) * + sizeof(*in)); + kfree(stream->in); + } + + if (incnt > stream->incnt) + memset(in + stream->incnt, 0, + (incnt - stream->incnt) * sizeof(*in)); + + stream->in = in; + + return 0; +} + int sctp_stream_init(struct sctp_stream *stream, __u16 outcnt, __u16 incnt, gfp_t gfp) { @@ -84,8 +109,8 @@ int sctp_stream_init(struct sctp_stream *stream, __u16 outcnt, __u16 incnt, if (!incnt) return 0; - stream->in = kcalloc(incnt, sizeof(*stream->in), gfp); - if (!stream->in) { + i = sctp_stream_alloc_in(stream, incnt, gfp); + if (i) { kfree(stream->out); stream->out = NULL; return -ENOMEM; @@ -623,7 +648,6 @@ struct sctp_chunk *sctp_process_strreset_addstrm_out( struct sctp_strreset_addstrm *addstrm = param.v; struct sctp_stream *stream = &asoc->stream; __u32 result = SCTP_STRRESET_DENIED; - struct sctp_stream_in *streamin; __u32 request_seq, incnt; __u16 in, i; @@ -670,13 +694,9 @@ struct sctp_chunk *sctp_process_strreset_addstrm_out( if (!in || incnt > SCTP_MAX_STREAM) goto out; - streamin = krealloc(stream->in, incnt * sizeof(*streamin), - GFP_ATOMIC); - if (!streamin) + if (sctp_stream_alloc_in(stream, incnt, GFP_ATOMIC)) goto out; - memset(streamin + stream->incnt, 0, in * sizeof(*streamin)); - stream->in = streamin; stream->incnt = incnt; result = SCTP_STRRESET_PERFORMED;