rhashtable: compact struct rhashtable_params
authorFlorian Westphal <fw@strlen.de>
Mon, 1 May 2017 20:18:01 +0000 (22:18 +0200)
committerDavid S. Miller <davem@davemloft.net>
Mon, 1 May 2017 20:22:40 +0000 (16:22 -0400)
By using smaller datatypes this (rather large) struct shrinks considerably
(80 -> 48 bytes on x86_64).

As this is embedded in other structs, this also rerduces size of several
others, e.g. cls_fl_head or nft_hash.

Signed-off-by: Florian Westphal <fw@strlen.de>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/linux/rhashtable.h
lib/rhashtable.c

index 45f89369c4c89637796fcc298e36fc45c67fc572..7d56a7ea2b2e8cdcf471da6aaa6ac0be3c51acaa 100644 (file)
@@ -127,23 +127,23 @@ struct rhashtable;
  * @head_offset: Offset of rhash_head in struct to be hashed
  * @max_size: Maximum size while expanding
  * @min_size: Minimum size while shrinking
- * @nulls_base: Base value to generate nulls marker
- * @automatic_shrinking: Enable automatic shrinking of tables
  * @locks_mul: Number of bucket locks to allocate per cpu (default: 128)
+ * @automatic_shrinking: Enable automatic shrinking of tables
+ * @nulls_base: Base value to generate nulls marker
  * @hashfn: Hash function (default: jhash2 if !(key_len % 4), or jhash)
  * @obj_hashfn: Function to hash object
  * @obj_cmpfn: Function to compare key with object
  */
 struct rhashtable_params {
-       size_t                  nelem_hint;
-       size_t                  key_len;
-       size_t                  key_offset;
-       size_t                  head_offset;
+       u16                     nelem_hint;
+       u16                     key_len;
+       u16                     key_offset;
+       u16                     head_offset;
        unsigned int            max_size;
-       unsigned int            min_size;
-       u32                     nulls_base;
+       u16                     min_size;
        bool                    automatic_shrinking;
-       size_t                  locks_mul;
+       u8                      locks_mul;
+       u32                     nulls_base;
        rht_hashfn_t            hashfn;
        rht_obj_hashfn_t        obj_hashfn;
        rht_obj_cmpfn_t         obj_cmpfn;
index 3895486ef55111b0faf3966fb56b796028227de2..a930e436db5d8ff6b3e4959ae60761607bcd47cc 100644 (file)
@@ -967,7 +967,7 @@ int rhashtable_init(struct rhashtable *ht,
                        ht->max_elems = ht->p.max_size * 2;
        }
 
-       ht->p.min_size = max(ht->p.min_size, HASH_MIN_SIZE);
+       ht->p.min_size = max_t(u16, ht->p.min_size, HASH_MIN_SIZE);
 
        if (params->nelem_hint)
                size = rounded_hashtable_size(&ht->p);