From patchwork Mon Sep 25 16:14:14 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 818306 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="olbM+Ne9"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3y18Kl5yDkz9t3t for ; Tue, 26 Sep 2017 02:14:19 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S936049AbdIYQOS (ORCPT ); Mon, 25 Sep 2017 12:14:18 -0400 Received: from mail-pf0-f178.google.com ([209.85.192.178]:56867 "EHLO mail-pf0-f178.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S934227AbdIYQOQ (ORCPT ); Mon, 25 Sep 2017 12:14:16 -0400 Received: by mail-pf0-f178.google.com with SMTP id g65so4015765pfe.13 for ; Mon, 25 Sep 2017 09:14:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=message-id:subject:from:to:cc:date:mime-version :content-transfer-encoding; bh=8fgT+VO4ntIcaAiILuAxP7RGPFzAf5ase05ZgRGw/MI=; b=olbM+Ne9meDYG6ty0Lw+TW9FmvaHLdpIgFfct/r5SDacVQryPqp7eWPHlZy2Pl6E98 7TlHu7enfNXcbxfH6tuzisit2dtPp66TegUUwPamf9e9t6IzLcXvJj4m8mTohT2kiAcj jgR5gj4jWAgnkye1WmpNQd2xLGH+LWivAgx3grcfgA4T7RLbAZqVpx0HF1U59KkeLfOD 4XvZV2IOOZ6omgWAncTxkISZr49wotLeI1VWxKUy2RkXy+oiW5+IsxCYUT7lgXCRn8+y XkTSRaaciJC3IO3S5H6sJF0+M/IgMW15A8t/0Icj+7B84Vy/O1EtFbXX7OeuCio1qdiz rN7g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:message-id:subject:from:to:cc:date:mime-version :content-transfer-encoding; bh=8fgT+VO4ntIcaAiILuAxP7RGPFzAf5ase05ZgRGw/MI=; b=F9fEFFERTnV8FyQwMBlbUKOrYlOTfxCddCiMG/OGQ8FQjQ8RIxKAI1F5D189+XLD9s Zoxc2+pSJFwhUIBkfHYH4XziVI2H6YySbiNr3/sbckIuv+WbhRyl9V7WHAm0F6B5rPQ6 AJTOZ5lEYEBMMFvfLQtBqxfdCHn8YST8TjUejxO7NNWUedVEAr2Izqc40l4KmXh4EioX syGPGQHNhjleFDuZWAHL/PaqnIWb9n49oaBHHvAcSAoeJhRNibr5iVYz1T2Rca+U3SXL 6qmCusgy/0BWJ+7hZq5bzY1Ofm1K4lpmSGPmunWMtcmtWNVJ6eVDrx+rgrurZbvDeeA3 vCPQ== X-Gm-Message-State: AHPjjUhSaZDDCKH3diyEkKVILHhYvdcTZ18kwzdJr1kLZPYeIB9OPrxE 7aC2fzbXNvHVJtjwwGPnPIs= X-Google-Smtp-Source: AOwi7QB5bOpjpQTZc1dounE4PSeoPlw+H2fUpfN1ijV4+d13qlzHUb1q3IFZkHrVsQ0FyuT0nRvbyw== X-Received: by 10.98.72.83 with SMTP id v80mr8291646pfa.54.1506356056525; Mon, 25 Sep 2017 09:14:16 -0700 (PDT) Received: from ?IPv6:2620:15c:2c1:100:b87f:7905:5694:b830? ([2620:15c:2c1:100:b87f:7905:5694:b830]) by smtp.googlemail.com with ESMTPSA id o17sm11096921pfa.22.2017.09.25.09.14.15 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 25 Sep 2017 09:14:15 -0700 (PDT) Message-ID: <1506356054.6617.13.camel@edumazet-glaptop3.roam.corp.google.com> Subject: [PATCH net-next] inetpeer: speed up inetpeer_invalidate_tree() From: Eric Dumazet To: David Miller Cc: netdev Date: Mon, 25 Sep 2017 09:14:14 -0700 X-Mailer: Evolution 3.10.4-0ubuntu2 Mime-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Eric Dumazet As measured in my prior patch ("sch_netem: faster rb tree removal"), rbtree_postorder_for_each_entry_safe() is nice looking but much slower than using rb_next() directly, except when tree is small enough to fit in CPU caches (then the cost is the same) From: Eric Dumazet --- net/ipv4/inetpeer.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/net/ipv4/inetpeer.c b/net/ipv4/inetpeer.c index e7eb590c86ce2b33654c17c61619de74ff07bfd1..6e5626cc366c150b13fd44a8e36169c2fb54476d 100644 --- a/net/ipv4/inetpeer.c +++ b/net/ipv4/inetpeer.c @@ -284,14 +284,17 @@ EXPORT_SYMBOL(inet_peer_xrlim_allow); void inetpeer_invalidate_tree(struct inet_peer_base *base) { - struct inet_peer *p, *n; + struct rb_node *p = rb_first(&base->rb_root); - rbtree_postorder_for_each_entry_safe(p, n, &base->rb_root, rb_node) { - inet_putpeer(p); + while (p) { + struct inet_peer *peer = rb_entry(p, struct inet_peer, rb_node); + + p = rb_next(p); + rb_erase(&peer->rb_node, &base->rb_root); + inet_putpeer(peer); cond_resched(); } - base->rb_root = RB_ROOT; base->total = 0; } EXPORT_SYMBOL(inetpeer_invalidate_tree);