From patchwork Fri Aug 18 20:16:17 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: mstolarchuk X-Patchwork-Id: 27669 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [IPv6:::1]) by dpdk.org (Postfix) with ESMTP id 1D3E9293C; Fri, 18 Aug 2017 22:16:10 +0200 (CEST) Received: from mail-pg0-f50.google.com (mail-pg0-f50.google.com [74.125.83.50]) by dpdk.org (Postfix) with ESMTP id 89B01101B for ; Fri, 18 Aug 2017 22:16:08 +0200 (CEST) Received: by mail-pg0-f50.google.com with SMTP id i12so70730629pgr.3 for ; Fri, 18 Aug 2017 13:16:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bigswitch-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id; bh=WlmWMCjxnYBLDcKeqONe0EF26FfcCTN6GfiNfzVXyPc=; b=EUPp95/zpDAq1n6sjsLFgd3FtUJzPn1Fy55QXw7X3taiwrcgbcO+2qDUa/aV1dNNZn Y0u+jSKKqbrX9NYkwvto+hvgqhSh8J0jyhGe6ucgPfMe/mRFibBySJFXeMwX8VwYCRyJ BHyxcPbo0AgCpBQUxWtUMKMPWWwoEgF6cETQ04dQjisl7ReuUE4un+GbJyQrPIGQMqL5 EH0ag3BgcPO3lWRnwMZfSKmN0yq2JEeusTzTbgePVIZFjkkOCy7V3yD7uQC3ast1QAs6 AEoDXnR6ReC1NTtv7vpOoiZ4dHC1iUJrQsQC4XLFTjC+3IYD9CRntGpe3A2xLaOAJ4bj YleA== 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=WlmWMCjxnYBLDcKeqONe0EF26FfcCTN6GfiNfzVXyPc=; b=ClTxX0g74FgW6g1nURWmAb/AJ5P5dBnpngHGWwvynCCtcBYjFd6fes1QboJ0n4kOwr OlpcMMBwCcI4C3x5YiuwE5sD2VIe6Gp6judgqdH6noQ+S8gUCIDMKYU1MYKxUzAbAymH e1efx3xi5BwXQPk5Eu0g5PHPpHcqKub8UgYStCL7v9KBSIDWPZ+xy6o7yyACLaz+dI0V fC3hhI5Zn1JE3mLTN0D5o6u+J4lFZ3B4phac2K6roy+aFQdYPP6D8/OvmOYz+MwE94Wb 5fiY5f2pt8/RfhCC0Fyx+o0CYCKD0nJdccQc3dPdVX4nwb5ROcJHlwReE12iqObNO2I5 CEcw== X-Gm-Message-State: AHYfb5hX9a8e0TKg7nIcSPjV9FZVS176n2lIOkvnwjL/UJQgOmEmOLI+ jqA97BrWWFHyepXS X-Received: by 10.99.113.20 with SMTP id m20mr9959308pgc.432.1503087367401; Fri, 18 Aug 2017 13:16:07 -0700 (PDT) Received: from dpdk-dell-430.sw.bigswitch.com ([173.227.38.50]) by smtp.gmail.com with ESMTPSA id y4sm13461121pfd.116.2017.08.18.13.16.06 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 18 Aug 2017 13:16:06 -0700 (PDT) From: mstolarchuk To: bruce.richardson@intel.com, pablo.de.lara.guarch@intel.com Cc: dev@dpdk.org Date: Fri, 18 Aug 2017 13:16:17 -0700 Message-Id: <1503087377-84633-1-git-send-email-mike.stolarchuk@bigswitch.com> X-Mailer: git-send-email 1.9.1 Subject: [dpdk-dev] [PATCH 2/7] rwlock not released when the key exists X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Consisntly use a single exit path in the code, have th various return values set then call the exit path. --- lib/librte_hash/rte_cuckoo_hash.c | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/lib/librte_hash/rte_cuckoo_hash.c b/lib/librte_hash/rte_cuckoo_hash.c index d1fbb0b..7606e3e 100644 --- a/lib/librte_hash/rte_cuckoo_hash.c +++ b/lib/librte_hash/rte_cuckoo_hash.c @@ -554,7 +554,7 @@ struct rte_hash * LCORE_CACHE_SIZE, NULL); if (n_slots == 0) { ret = -ENOSPC; - goto failure; + goto finished; } cached_free_slots->len += n_slots; @@ -566,7 +566,7 @@ struct rte_hash * } else { if (rte_ring_sc_dequeue(h->free_slots, &slot_id) != 0) { ret = -ENOSPC; - goto failure; + goto finished; } } @@ -588,7 +588,8 @@ struct rte_hash * * Return index where key is stored, * subtracting the first dummy index */ - return prim_bkt->key_idx[i] - 1; + ret = prim_bkt->key_idx[i] - 1; + goto finished; } } } @@ -607,7 +608,8 @@ struct rte_hash * * Return index where key is stored, * subtracting the first dummy index */ - return sec_bkt->key_idx[i] - 1; + ret = sec_bkt->key_idx[i] - 1; + goto finished; } } } @@ -649,9 +651,8 @@ struct rte_hash * } if (i != RTE_HASH_BUCKET_ENTRIES) { - if (h->add_key == ADD_KEY_MULTIWRITER) - rte_spinlock_unlock(h->multiwriter_lock); - return new_idx - 1; + ret = new_idx - 1; + goto finished; } /* Primary bucket full, need to make space for new entry @@ -665,9 +666,8 @@ struct rte_hash * prim_bkt->sig_current[ret] = sig; prim_bkt->sig_alt[ret] = alt_hash; prim_bkt->key_idx[ret] = new_idx; - if (h->add_key == ADD_KEY_MULTIWRITER) - rte_spinlock_unlock(h->multiwriter_lock); - return new_idx - 1; + ret = new_idx - 1; + goto finished; } #if defined(RTE_ARCH_X86) } @@ -675,7 +675,7 @@ struct rte_hash * /* Error in addition, store new slot back in the ring and return error */ enqueue_slot_back(h, cached_free_slots, (void *)((uintptr_t) new_idx)); -failure: +finished: if (h->add_key == ADD_KEY_MULTIWRITER) rte_spinlock_unlock(h->multiwriter_lock); return ret;