From patchwork Fri Jul 26 00:26:15 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Han Zhou X-Patchwork-Id: 1137185 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=openvswitch.org (client-ip=140.211.169.12; helo=mail.linuxfoundation.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="U2O+1A3s"; dkim-atps=neutral Received: from mail.linuxfoundation.org (mail.linuxfoundation.org [140.211.169.12]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 45vqd40zcvz9s8m for ; Fri, 26 Jul 2019 10:26:15 +1000 (AEST) Received: from mail.linux-foundation.org (localhost [127.0.0.1]) by mail.linuxfoundation.org (Postfix) with ESMTP id E9D04DA6; Fri, 26 Jul 2019 00:26:11 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@mail.linuxfoundation.org Received: from smtp1.linuxfoundation.org (smtp1.linux-foundation.org [172.17.192.35]) by mail.linuxfoundation.org (Postfix) with ESMTPS id 5C68AD8D for ; Fri, 26 Jul 2019 00:26:11 +0000 (UTC) X-Greylist: whitelisted by SQLgrey-1.7.6 Received: from mail-pf1-f196.google.com (mail-pf1-f196.google.com [209.85.210.196]) by smtp1.linuxfoundation.org (Postfix) with ESMTPS id F08A8224 for ; Fri, 26 Jul 2019 00:26:10 +0000 (UTC) Received: by mail-pf1-f196.google.com with SMTP id u14so23589494pfn.2 for ; Thu, 25 Jul 2019 17:26:10 -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; bh=a74M96s6yricVorF99+z8RCD8guQX6EoytfFx1Jq7gg=; b=U2O+1A3s9dKkLvwyoZsGBhCM0pXYNzYxP/RxqoJbWmcYNUAqD7OY0Cx6ulh32Kgxir 4cJXC36hOmgX8B0gV5UVJcaw9mTnrWtHyvZZ6+YBGFU0O/uWVNeEMEkpVDQWU+BCZ+Ry 62zFqfqt8RVhO7NPsPkpwQ1jjdSFA+xgAy7FmB9Z2CXCCNJzJWqoY9IudYzvuytxetqb v6UQbripQXutsHr2YF+PlVYWnPWDGEeQ5Ikq0P44l7dkzaqwChUC8aXgRpVObsEW/ISD UsjWumP4t/2CwuwYfthplJ9RuwAwoBk/9EfXm70bwKf/wvmRgUU3/sF7/VCHAinOoNmN vFCA== 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; bh=a74M96s6yricVorF99+z8RCD8guQX6EoytfFx1Jq7gg=; b=T5ouJ0+ghf8VuGDrRuaMScZCi/BfVnboyVkCmkeL0ZxK7gd8Vu/chbPt99/OiHoRbt srDUDBSTpa4K/NfjkctHdg0tMUgTfA9//CwTOPJ31G0tY7chDDGKxiD2XESpeac6rVol E2W/HA8XSFJW61QOTEJdWDrWq2hA51f8xJqlO0tMfm/kerw6oYN/71O/Q27a1yQt2CAG 5p/1+bDCb/9fvC3m7YNTuTRROj6bgx79EIdNpIIbONPMbNM6gtPjG+sRRGxNVhuWHsse a6/BRHE8mv0eDt+aWh132YTi2wobkz58wZgQUHAbl8vKAw8FslD/+gbX8GCKAz72qy7X 0h2A== X-Gm-Message-State: APjAAAWBXwWB9mIBeFMVHqkVAddETSKcLBCcO7+mDpGV1bKb3u4sqS3f 1J9Z0WmbOGv7Wy9RZKOGqrcqhlioeSI= X-Google-Smtp-Source: APXvYqyI8bGJHm/V8NWpYMwWwKRuzalc9mO8Ubfhfy2gXv0b41BIgKXdvDRCVozY9J35jvlo0MYY/A== X-Received: by 2002:a63:520f:: with SMTP id g15mr84456174pgb.28.1564100770227; Thu, 25 Jul 2019 17:26:10 -0700 (PDT) Received: from localhost.localdomain.localdomain ([216.113.160.77]) by smtp.gmail.com with ESMTPSA id j15sm58167376pfe.3.2019.07.25.17.26.09 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 25 Jul 2019 17:26:09 -0700 (PDT) From: Han Zhou X-Google-Original-From: Han Zhou To: dev@openvswitch.org Date: Thu, 25 Jul 2019 17:26:15 -0700 Message-Id: <1564100775-80657-1-git-send-email-hzhou8@ebay.com> X-Mailer: git-send-email 2.1.0 X-Spam-Status: No, score=-2.0 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, FREEMAIL_FROM, RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on smtp1.linux-foundation.org Subject: [ovs-dev] [PATCH] ovsdb-idl.c: Fix IDL change tracking xxx_is_new(). X-BeenThere: ovs-dev@openvswitch.org X-Mailman-Version: 2.1.12 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: ovs-dev-bounces@openvswitch.org Errors-To: ovs-dev-bounces@openvswitch.org From: Han Zhou The commit ca545a78 made sure that xxx_is_new() for the rows referencing other rows returned false instead of true. However, it caused xxx_is_new() for the row being referenced returned false, even if the row was newly added. This patch fixes it. Fixes: ca545a787ac0 (ovsdb-idl.c: Increase seqno for change-tracking of table references.) Signed-off-by: Han Zhou --- lib/ovsdb-idl.c | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/lib/ovsdb-idl.c b/lib/ovsdb-idl.c index 1a6a4af..c3eb9ff 100644 --- a/lib/ovsdb-idl.c +++ b/lib/ovsdb-idl.c @@ -2509,10 +2509,8 @@ ovsdb_idl_process_update2(struct ovsdb_idl_table *table, return true; } -/* Recursively add rows to tracked change lists for current row - * and the rows that reference this row. */ static void -add_tracked_change_for_references(struct ovsdb_idl_row *row) +add_tracked_change_for_references__(struct ovsdb_idl_row *row) { if (ovs_list_is_empty(&row->track_node) && ovsdb_idl_track_is_set(row->table)) { @@ -2524,11 +2522,22 @@ add_tracked_change_for_references(struct ovsdb_idl_row *row) const struct ovsdb_idl_arc *arc; LIST_FOR_EACH (arc, dst_node, &row->dst_arcs) { - add_tracked_change_for_references(arc->src); + add_tracked_change_for_references__(arc->src); } } } +/* Recursively add rows to tracked change lists for current row + * and the rows that reference this row. */ +static void +add_tracked_change_for_references(struct ovsdb_idl_row *row) +{ + const struct ovsdb_idl_arc *arc; + LIST_FOR_EACH (arc, dst_node, &row->dst_arcs) { + add_tracked_change_for_references__(arc->src); + } +} + /* Returns true if a column with mode OVSDB_IDL_MODE_RW changed, false * otherwise. @@ -2593,6 +2602,10 @@ ovsdb_idl_row_change__(struct ovsdb_idl_row *row, const struct json *row_json, = row->table->change_seqno[change] = row->table->db->change_seqno + 1; if (table->modes[column_idx] & OVSDB_IDL_TRACK) { + if (ovs_list_is_empty(&row->track_node)) { + ovs_list_push_back(&row->table->track_list, + &row->track_node); + } add_tracked_change_for_references(row); if (!row->updated) { row->updated = bitmap_allocate(class->n_columns);