Received: by 10.192.165.156 with SMTP id m28csp1226587imm; Wed, 11 Apr 2018 15:01:46 -0700 (PDT) X-Google-Smtp-Source: AIpwx48qV7z25aw7k4lbTwVjEdydaca8t2qsLtLQa2jFQo6uyG7CEUnryfi3YYDkOYehDAJluNhT X-Received: by 10.98.178.29 with SMTP id x29mr5539908pfe.44.1523484106056; Wed, 11 Apr 2018 15:01:46 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1523484106; cv=none; d=google.com; s=arc-20160816; b=Uc1cm6KXnF51EAPs+mUwk208wQ3KL+lJadogjAN1G2kz4vmup5DzA1jN08npFVb7f0 8JLrPCpDq9GQT1L2bBCMUY8Kmm7V3btA3XBhNKadsRlo3R1x6ytWbGWcZS3dD00JmyXR rxYi3kxbCg6OKDi4GO6Osh64MIg3IkEOjtNHO7LKVPSb1trdMFwonJeNLdQDEK+psgyS c9UsyjcD/ipGw3fbZ87Zu49zEeTafk1NUc8gEub2ZzzDAQ5K941aBcb7DWwb3W4ehseC SPgmMcJnJTEM/5/K4dEOfJKFRdlqnEYabob6squV/wQNC5a3VGDTydvjWe6tnVuzIhFW AYjA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:cc:subject:date:to :from:arc-authentication-results; bh=cBqREfc/iHsN6J4K/7fZVV0t//V1964+HypZwF0XPjw=; b=tRI3pN6ZZMSyv6d/kvVgFsqvuMGLP8eSKSqmZp3A4J2hO++zqAxGzkohHpaakCa23m Fh0zwj2jbpDjhTEyjjGge2adbE6pQQVaE1kWHTbDyB0h727ZN8olzioUwC9+udXMTe+X A6YIZln6WCBadvZfP7bxvrAtgrQqPQhGENo0WnuhsTLi6+78nzVmjMRH2RuvK/4UcFov 7xa9Bqy2agJ6skOZOjEURj7eIJZRJQ971793GNXsgxkWd6joMH4nv/BOYVxVukIZcoh4 oBoHJXaD3Oj24Mzt7Z7cAP2Jo2YW/QyguDrFuRFILYKyQ0SXBJar0qaWdJ/pkYWV80wS +JNg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id i7si1281679pgq.583.2018.04.11.15.01.07; Wed, 11 Apr 2018 15:01:45 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754106AbeDKV4R (ORCPT + 99 others); Wed, 11 Apr 2018 17:56:17 -0400 Received: from mx2.suse.de ([195.135.220.15]:45889 "EHLO mx2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753921AbeDKV4P (ORCPT ); Wed, 11 Apr 2018 17:56:15 -0400 X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (charybdis-ext.suse.de [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id 28F91AFAF; Wed, 11 Apr 2018 21:56:14 +0000 (UTC) From: NeilBrown To: Oleg Drokin , Greg Kroah-Hartman , James Simmons , Andreas Dilger Date: Thu, 12 Apr 2018 07:54:48 +1000 Subject: [PATCH 08/20] staging: lustre: simplify ldlm_ns_hash_defs[] Cc: Linux Kernel Mailing List , Lustre Development List Message-ID: <152348368879.12394.7087606958943793717.stgit@noble> In-Reply-To: <152348312863.12394.11915752362061083241.stgit@noble> References: <152348312863.12394.11915752362061083241.stgit@noble> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org As the ldlm_ns_types are dense, we can use the type as the index to the array, rather than searching through the array for a match. We can also discard nsd_hops as all hash tables now use the same hops. This makes the table smaller and the code simpler. Signed-off-by: NeilBrown --- drivers/staging/lustre/lustre/ldlm/ldlm_resource.c | 62 ++++++-------------- 1 file changed, 20 insertions(+), 42 deletions(-) diff --git a/drivers/staging/lustre/lustre/ldlm/ldlm_resource.c b/drivers/staging/lustre/lustre/ldlm/ldlm_resource.c index a14cc12303ab..4288a81fd62b 100644 --- a/drivers/staging/lustre/lustre/ldlm/ldlm_resource.c +++ b/drivers/staging/lustre/lustre/ldlm/ldlm_resource.c @@ -545,55 +545,35 @@ static struct cfs_hash_ops ldlm_ns_hash_ops = { .hs_put = ldlm_res_hop_put }; -struct ldlm_ns_hash_def { - enum ldlm_ns_type nsd_type; +static struct { /** hash bucket bits */ unsigned int nsd_bkt_bits; /** hash bits */ unsigned int nsd_all_bits; - /** hash operations */ - struct cfs_hash_ops *nsd_hops; -}; - -static struct ldlm_ns_hash_def ldlm_ns_hash_defs[] = { - { - .nsd_type = LDLM_NS_TYPE_MDC, +} ldlm_ns_hash_defs[] = { + [LDLM_NS_TYPE_MDC] = { .nsd_bkt_bits = 11, .nsd_all_bits = 16, - .nsd_hops = &ldlm_ns_hash_ops, }, - { - .nsd_type = LDLM_NS_TYPE_MDT, + [LDLM_NS_TYPE_MDT] = { .nsd_bkt_bits = 14, .nsd_all_bits = 21, - .nsd_hops = &ldlm_ns_hash_ops, }, - { - .nsd_type = LDLM_NS_TYPE_OSC, + [LDLM_NS_TYPE_OSC] = { .nsd_bkt_bits = 8, .nsd_all_bits = 12, - .nsd_hops = &ldlm_ns_hash_ops, }, - { - .nsd_type = LDLM_NS_TYPE_OST, + [LDLM_NS_TYPE_OST] = { .nsd_bkt_bits = 11, .nsd_all_bits = 17, - .nsd_hops = &ldlm_ns_hash_ops, }, - { - .nsd_type = LDLM_NS_TYPE_MGC, + [LDLM_NS_TYPE_MGC] = { .nsd_bkt_bits = 3, .nsd_all_bits = 4, - .nsd_hops = &ldlm_ns_hash_ops, }, - { - .nsd_type = LDLM_NS_TYPE_MGT, + [LDLM_NS_TYPE_MGT] = { .nsd_bkt_bits = 3, .nsd_all_bits = 4, - .nsd_hops = &ldlm_ns_hash_ops, - }, - { - .nsd_type = LDLM_NS_TYPE_UNKNOWN, }, }; @@ -617,7 +597,6 @@ struct ldlm_namespace *ldlm_namespace_new(struct obd_device *obd, char *name, enum ldlm_ns_type ns_type) { struct ldlm_namespace *ns = NULL; - struct ldlm_ns_hash_def *nsd; int idx; int rc; @@ -629,15 +608,10 @@ struct ldlm_namespace *ldlm_namespace_new(struct obd_device *obd, char *name, return NULL; } - for (idx = 0;; idx++) { - nsd = &ldlm_ns_hash_defs[idx]; - if (nsd->nsd_type == LDLM_NS_TYPE_UNKNOWN) { - CERROR("Unknown type %d for ns %s\n", ns_type, name); - goto out_ref; - } - - if (nsd->nsd_type == ns_type) - break; + if (ns_type >= ARRAY_SIZE(ldlm_ns_hash_defs) || + ldlm_ns_hash_defs[ns_type].nsd_bkt_bits == 0) { + CERROR("Unknown type %d for ns %s\n", ns_type, name); + goto out_ref; } ns = kzalloc(sizeof(*ns), GFP_NOFS); @@ -645,18 +619,22 @@ struct ldlm_namespace *ldlm_namespace_new(struct obd_device *obd, char *name, goto out_ref; ns->ns_rs_hash = cfs_hash_create(name, - nsd->nsd_all_bits, nsd->nsd_all_bits, - nsd->nsd_bkt_bits, 0, + ldlm_ns_hash_defs[ns_type].nsd_all_bits, + ldlm_ns_hash_defs[ns_type].nsd_all_bits, + ldlm_ns_hash_defs[ns_type].nsd_bkt_bits, + 0, CFS_HASH_MIN_THETA, CFS_HASH_MAX_THETA, - nsd->nsd_hops, + &ldlm_ns_hash_ops, CFS_HASH_DEPTH | CFS_HASH_BIGNAME | CFS_HASH_SPIN_BKTLOCK | CFS_HASH_NO_ITEMREF); if (!ns->ns_rs_hash) goto out_ns; - ns->ns_bucket_bits = nsd->nsd_all_bits - nsd->nsd_bkt_bits; + ns->ns_bucket_bits = ldlm_ns_hash_defs[ns_type].nsd_all_bits - + ldlm_ns_hash_defs[ns_type].nsd_bkt_bits; + ns->ns_rs_buckets = kvmalloc_array(1 << ns->ns_bucket_bits, sizeof(ns->ns_rs_buckets[0]), GFP_KERNEL);