From patchwork Mon Dec 17 15:01:26 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sasha Levin X-Patchwork-Id: 206890 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 1B22C2C0079 for ; Tue, 18 Dec 2012 02:04:59 +1100 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753378Ab2LQPCt (ORCPT ); Mon, 17 Dec 2012 10:02:49 -0500 Received: from aserp1040.oracle.com ([141.146.126.69]:18169 "EHLO aserp1040.oracle.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753159Ab2LQPCq (ORCPT ); Mon, 17 Dec 2012 10:02:46 -0500 Received: from ucsinet21.oracle.com (ucsinet21.oracle.com [156.151.31.93]) by aserp1040.oracle.com (Sentrion-MTA-4.2.2/Sentrion-MTA-4.2.2) with ESMTP id qBHF2MLP019111 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Mon, 17 Dec 2012 15:02:23 GMT Received: from acsmt356.oracle.com (acsmt356.oracle.com [141.146.40.156]) by ucsinet21.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id qBHF2KJl013456 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Mon, 17 Dec 2012 15:02:20 GMT Received: from abhmt107.oracle.com (abhmt107.oracle.com [141.146.116.59]) by acsmt356.oracle.com (8.12.11.20060308/8.12.11) with ESMTP id qBHF2JT5021321; Mon, 17 Dec 2012 09:02:19 -0600 Received: from lappy.us.oracle.com (/10.159.170.135) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Mon, 17 Dec 2012 07:02:19 -0800 From: Sasha Levin To: "David S. Miller" , Sasha Levin , Eric Van Hensbergen , Joe Perches , netdev@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Sasha Levin Subject: [PATCH 06/15] net,9p: use new hashtable implementation Date: Mon, 17 Dec 2012 10:01:26 -0500 Message-Id: <1355756497-15834-6-git-send-email-sasha.levin@oracle.com> X-Mailer: git-send-email 1.8.0 In-Reply-To: <1355756497-15834-1-git-send-email-sasha.levin@oracle.com> References: <1355756497-15834-1-git-send-email-sasha.levin@oracle.com> X-Source-IP: ucsinet21.oracle.com [156.151.31.93] Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Switch 9p error table to use the new hashtable implementation. This reduces the amount of generic unrelated code in 9p. This patch depends on d9b482c ("hashtable: introduce a small and naive hashtable") which was merged in v3.6. Signed-off-by: Sasha Levin --- net/9p/error.c | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/net/9p/error.c b/net/9p/error.c index 2ab2de7..a394b37 100644 --- a/net/9p/error.c +++ b/net/9p/error.c @@ -34,6 +34,7 @@ #include #include #include +#include /** * struct errormap - map string errors from Plan 9 to Linux numeric ids @@ -50,8 +51,8 @@ struct errormap { struct hlist_node list; }; -#define ERRHASHSZ 32 -static struct hlist_head hash_errmap[ERRHASHSZ]; +#define ERR_HASH_BITS 5 +static DEFINE_HASHTABLE(hash_errmap, ERR_HASH_BITS); /* FixMe - reduce to a reasonable size */ static struct errormap errmap[] = { @@ -193,18 +194,14 @@ static struct errormap errmap[] = { int p9_error_init(void) { struct errormap *c; - int bucket; - - /* initialize hash table */ - for (bucket = 0; bucket < ERRHASHSZ; bucket++) - INIT_HLIST_HEAD(&hash_errmap[bucket]); + u32 hash; /* load initial error map into hash table */ for (c = errmap; c->name != NULL; c++) { c->namelen = strlen(c->name); - bucket = jhash(c->name, c->namelen, 0) % ERRHASHSZ; + hash = jhash(c->name, c->namelen, 0); INIT_HLIST_NODE(&c->list); - hlist_add_head(&c->list, &hash_errmap[bucket]); + hash_add(hash_errmap, &c->list, hash); } return 1; @@ -223,13 +220,13 @@ int p9_errstr2errno(char *errstr, int len) int errno; struct hlist_node *p; struct errormap *c; - int bucket; + u32 hash; errno = 0; p = NULL; c = NULL; - bucket = jhash(errstr, len, 0) % ERRHASHSZ; - hlist_for_each_entry(c, p, &hash_errmap[bucket], list) { + hash = jhash(errstr, len, 0); + hash_for_each_possible(hash_errmap, c, p, list, hash) { if (c->namelen == len && !memcmp(c->name, errstr, len)) { errno = c->val; break;