Received: by 2002:ac0:a5a7:0:0:0:0:0 with SMTP id m36-v6csp257517imm; Fri, 13 Jul 2018 23:27:47 -0700 (PDT) X-Google-Smtp-Source: AAOMgpd6hauPzCJIjRGPT/3QniwZ1C3a44pglf/I5SDH5oOBNNiDZ84VNi5HgJUrxppQ7AXzAYtJ X-Received: by 2002:a17:902:bc49:: with SMTP id t9-v6mr9089763plz.116.1531549667466; Fri, 13 Jul 2018 23:27:47 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1531549667; cv=none; d=google.com; s=arc-20160816; b=OZcq50VPpDtUhGYKMHDI02XlgRI50v1eeHTqZdqxZh4PQxzrZ8CnHaJttUgo8EvIKV nMiRBKUkqMcteC2LglZXThTUC0N6Ey7LryH1nnGczCLir/JW+eM/QrBiNZ4XfJYfRLV2 dcZTnFrwiPKpmTnLHxGe5NRLOaPGPn6MIs0ToYXcZWE2HcpYLVnz9U9QWEPDs0ULloDx ETKVpqCULNt4yy54JZKadcEx6M1NSGIAU5YhvZmGuWR8fdcvY+aHuM01aA0RBS2ppRSf ZnkyNjE0Z9n4iC1elu83yZ3GVe/fiIfHVrJ1OJYBvseu6IoHNvszpGT0mPqsJSSJB7/S kiRQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from :arc-authentication-results; bh=OOxeHlf5x4iD+DyhHOjyb6fCIo8Om0qG2UCfl2/OrJM=; b=sFyNSx9qlShnN6O8+47ZVecdZ04ZEPNC8OeeCKdN8XCtTzMP+NRn1UZXtQcIBMx4TE QtE/hBFduvm1uIWeCGypwa9zm8M6pm13GMB9JUCyrwZeoQl6t7mxFyDfNYWx3ITVkSKB vylGBKmj8osaIHPi1NQ3aZg1DczfyXV2gLUiaNvSQjOXjGOOnMG+JQ7Cb0wPamu3pf/f iOALQ3cAD9oaRaLOqjSCQJ5Zqqmy6LPRPb/A9SA5D0SSZb1CFDOPtJcxepE64wv05NaG Vz8NQeLjoLVQUlXxwCMQIL/Z+I6H8+6+Imu7RbxvCnpbfviANNQ/Fo4wu5karysmgdrq D91A== 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 k64-v6si18169499pgd.3.2018.07.13.23.27.05; Fri, 13 Jul 2018 23:27:47 -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 S1725957AbeGNGnZ (ORCPT + 99 others); Sat, 14 Jul 2018 02:43:25 -0400 Received: from smtp2.provo.novell.com ([137.65.250.81]:57288 "EHLO smtp2.provo.novell.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725809AbeGNGnZ (ORCPT ); Sat, 14 Jul 2018 02:43:25 -0400 Received: from linux-r8p5.suse.de (prv-ext-foundry1int.gns.novell.com [137.65.251.240]) by smtp2.provo.novell.com with ESMTP (TLS encrypted); Sat, 14 Jul 2018 00:25:29 -0600 From: Davidlohr Bueso To: akpm@linux-foundation.org Cc: herbert@gondor.apana.org.au, tgraf@suug.ch, linux-kernel@vger.kernel.org, dave@stgolabs.net, Davidlohr Bueso Subject: [PATCH] lib/rhashtable: consider param->min_size when setting initial table size Date: Fri, 13 Jul 2018 23:25:16 -0700 Message-Id: <20180714062516.30433-1-dave@stgolabs.net> X-Mailer: git-send-email 2.16.4 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org rhashtable_init() currently does not take into account the user-passed min_size parameter unless param->nelem_hint is set as well. As such, the default size (number of buckets) will always be HASH_DEFAULT_SIZE even if the smallest allowed size is larger than that. Remediate this by unconditionally calling into rounded_hashtable_size() and handling things accordingly. Signed-off-by: Davidlohr Bueso --- lib/rhashtable.c | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/lib/rhashtable.c b/lib/rhashtable.c index 411c4041ce83..89c3cfc8334d 100644 --- a/lib/rhashtable.c +++ b/lib/rhashtable.c @@ -962,8 +962,16 @@ EXPORT_SYMBOL_GPL(rhashtable_walk_stop); static size_t rounded_hashtable_size(const struct rhashtable_params *params) { - return max(roundup_pow_of_two(params->nelem_hint * 4 / 3), - (unsigned long)params->min_size); + size_t retsize; + + if (params->nelem_hint) + retsize = max(roundup_pow_of_two(params->nelem_hint * 4 / 3), + (unsigned long)params->min_size); + else + retsize = max(HASH_DEFAULT_SIZE, + (unsigned long)params->min_size); + + return retsize; } static u32 rhashtable_jhash2(const void *key, u32 length, u32 seed) @@ -1020,8 +1028,6 @@ int rhashtable_init(struct rhashtable *ht, struct bucket_table *tbl; size_t size; - size = HASH_DEFAULT_SIZE; - if ((!params->key_len && !params->obj_hashfn) || (params->obj_hashfn && !params->obj_cmpfn)) return -EINVAL; @@ -1048,8 +1054,7 @@ int rhashtable_init(struct rhashtable *ht, ht->p.min_size = max_t(u16, ht->p.min_size, HASH_MIN_SIZE); - if (params->nelem_hint) - size = rounded_hashtable_size(&ht->p); + size = rounded_hashtable_size(&ht->p); if (params->locks_mul) ht->p.locks_mul = roundup_pow_of_two(params->locks_mul); -- 2.16.4