From patchwork Thu Sep 8 09:31:45 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Xin Long X-Patchwork-Id: 667414 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3sVFV05QYYz9rxm for ; Thu, 8 Sep 2016 19:32:08 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b=cIxQ+XPk; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1758704AbcIHJcE (ORCPT ); Thu, 8 Sep 2016 05:32:04 -0400 Received: from mail-pa0-f67.google.com ([209.85.220.67]:36469 "EHLO mail-pa0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1758673AbcIHJcC (ORCPT ); Thu, 8 Sep 2016 05:32:02 -0400 Received: by mail-pa0-f67.google.com with SMTP id ez1so2156985pab.3; Thu, 08 Sep 2016 02:32:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id:in-reply-to:references :in-reply-to:references; bh=lzSR/NshkyH79IPdnK5kkzYUS2GyGg0oCAZx5VbE8TY=; b=cIxQ+XPkbZ+O2uwofBErC6o9UIYuBa76FDE4b3g1lK9AIckj7wSbu7utD+y/iRI+UC l4Uk3EVmcbO6bRSJhidvBpL0KQqttzDdjUhSxoqQDdiUAu81yg2HzANi2VDouTB25flE MvOjonD/nG2TXAkS5DBFI34qSXZdHtUHtudpVqfK0rHVzTiFyBmgmd3N6Uh4Zsi3Aqgy gSTRkhUfPgH9YzGeDfqAXRw/NBdYIYIUsez4os4baPO5pcow+YkLo75QQ5RkIfkQF5Sy QrNPn/hYqpdZa672pG01kLJBn5MvpkKUT3UdWdU5stJ5LFRTAQeUp2NbjEc2tXQaPCys BH4A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:in-reply-to:references; bh=lzSR/NshkyH79IPdnK5kkzYUS2GyGg0oCAZx5VbE8TY=; b=SvHsm4befKE6ON0+3nGfhqpN8/GttJWDh3Kxxh6tWhBLZbA52zaffmI9IalWHMtJwk TaniSOW0BoATpjI5EflXH7ooqZkwWOFXpMSSkFHzrdySCQXnziB5wih2BXGpzNA6gKxS 7h84jOBDjpzJCe7R+KTFvINpBSXi9xrBzlzbSPM8KHsfhO4A3uWJXA3EYIa7B+ZIYx0C RTl/g6khF0kMiZc2yWjFnxHoP71r3NvsAFVDrnG5ipeuTBNRRkvboeYVl4KvFv3G1ETw z8gwlEJ9S0zAtEUb6hJb9o8pLoL31u4X/XbmfU9SWj/7NI+0a1+F1lY5wScn17awcs6/ ikEA== X-Gm-Message-State: AE9vXwNPtR//Xq0kgyEj8iHhSSVL6dzJobDkX1G1YAiEFzKWLSgM3o9v2XHWBfJjDTHrSw== X-Received: by 10.66.157.103 with SMTP id wl7mr48453837pab.116.1473327121756; Thu, 08 Sep 2016 02:32:01 -0700 (PDT) Received: from localhost (138.128.208.20.16clouds.com. [138.128.208.20]) by smtp.gmail.com with ESMTPSA id g90sm37374996pfe.96.2016.09.08.02.32.00 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 08 Sep 2016 02:32:01 -0700 (PDT) From: Xin Long To: network dev , linux-sctp@vger.kernel.org Cc: davem@davemloft.net, Marcelo Ricardo Leitner , Vlad Yasevich , daniel@iogearbox.net Subject: [PATCH net 1/6] sctp: remove the unnecessary state check in sctp_outq_tail Date: Thu, 8 Sep 2016 17:31:45 +0800 Message-Id: <1718155e984f63995d1be9b053c58aa1a645718e.1473326067.git.lucien.xin@gmail.com> X-Mailer: git-send-email 2.1.0 In-Reply-To: References: In-Reply-To: References: Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Data Chunks are only sent by sctp_primitive_SEND, in which sctp checks the asoc's state through statetable before calling sctp_outq_tail. So there's no need to do it again in sctp_outq_tail. This patch is to remove it from sctp_outq_tail. Signed-off-by: Xin Long Acked-by: Neil Horman --- net/sctp/outqueue.c | 53 ++++++++++++++--------------------------------------- 1 file changed, 14 insertions(+), 39 deletions(-) diff --git a/net/sctp/outqueue.c b/net/sctp/outqueue.c index 72e54a4..da2418b 100644 --- a/net/sctp/outqueue.c +++ b/net/sctp/outqueue.c @@ -299,50 +299,25 @@ int sctp_outq_tail(struct sctp_outq *q, struct sctp_chunk *chunk, gfp_t gfp) * immediately. */ if (sctp_chunk_is_data(chunk)) { - /* Is it OK to queue data chunks? */ - /* From 9. Termination of Association - * - * When either endpoint performs a shutdown, the - * association on each peer will stop accepting new - * data from its user and only deliver data in queue - * at the time of sending or receiving the SHUTDOWN - * chunk. - */ - switch (q->asoc->state) { - case SCTP_STATE_CLOSED: - case SCTP_STATE_SHUTDOWN_PENDING: - case SCTP_STATE_SHUTDOWN_SENT: - case SCTP_STATE_SHUTDOWN_RECEIVED: - case SCTP_STATE_SHUTDOWN_ACK_SENT: - /* Cannot send after transport endpoint shutdown */ - error = -ESHUTDOWN; - break; - - default: - pr_debug("%s: outqueueing: outq:%p, chunk:%p[%s])\n", - __func__, q, chunk, chunk && chunk->chunk_hdr ? - sctp_cname(SCTP_ST_CHUNK(chunk->chunk_hdr->type)) : - "illegal chunk"); - - sctp_chunk_hold(chunk); - sctp_outq_tail_data(q, chunk); - if (chunk->asoc->prsctp_enable && - SCTP_PR_PRIO_ENABLED(chunk->sinfo.sinfo_flags)) - chunk->asoc->sent_cnt_removable++; - if (chunk->chunk_hdr->flags & SCTP_DATA_UNORDERED) - SCTP_INC_STATS(net, SCTP_MIB_OUTUNORDERCHUNKS); - else - SCTP_INC_STATS(net, SCTP_MIB_OUTORDERCHUNKS); - break; - } + pr_debug("%s: outqueueing: outq:%p, chunk:%p[%s])\n", + __func__, q, chunk, chunk && chunk->chunk_hdr ? + sctp_cname(SCTP_ST_CHUNK(chunk->chunk_hdr->type)) : + "illegal chunk"); + + sctp_chunk_hold(chunk); + sctp_outq_tail_data(q, chunk); + if (chunk->asoc->prsctp_enable && + SCTP_PR_PRIO_ENABLED(chunk->sinfo.sinfo_flags)) + chunk->asoc->sent_cnt_removable++; + if (chunk->chunk_hdr->flags & SCTP_DATA_UNORDERED) + SCTP_INC_STATS(net, SCTP_MIB_OUTUNORDERCHUNKS); + else + SCTP_INC_STATS(net, SCTP_MIB_OUTORDERCHUNKS); } else { list_add_tail(&chunk->list, &q->control_chunk_list); SCTP_INC_STATS(net, SCTP_MIB_OUTCTRLCHUNKS); } - if (error < 0) - return error; - if (!q->cork) error = sctp_outq_flush(q, 0, gfp);