diff options
author | David Howells <dhowells@redhat.com> | 2019-06-26 23:02:32 +0300 |
---|---|---|
committer | David Howells <dhowells@redhat.com> | 2019-06-26 23:02:32 +0300 |
commit | 355ef8e15885020da88f5ba2d85ce42b1d01f537 (patch) | |
tree | 7c3f7c5b8b599fc487b3f822cf2ab402a9c791f5 /include/linux/key.h | |
parent | f771fde82051976a6fc0fd570f8b86de4a92124b (diff) | |
download | linux-355ef8e15885020da88f5ba2d85ce42b1d01f537.tar.xz |
keys: Cache the hash value to avoid lots of recalculation
Cache the hash of the key's type and description in the index key so that
we're not recalculating it every time we look at a key during a search.
The hash function does a bunch of multiplications, so evading those is
probably worthwhile - especially as this is done for every key examined
during a search.
This also allows the methods used by assoc_array to get chunks of index-key
to be simplified.
Signed-off-by: David Howells <dhowells@redhat.com>
Diffstat (limited to 'include/linux/key.h')
-rw-r--r-- | include/linux/key.h | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/include/linux/key.h b/include/linux/key.h index 86ccc2d010f6..fb2debcacea0 100644 --- a/include/linux/key.h +++ b/include/linux/key.h @@ -86,6 +86,8 @@ struct keyring_list; struct keyring_name; struct keyring_index_key { + /* [!] If this structure is altered, the union in struct key must change too! */ + unsigned long hash; /* Hash value */ union { struct { #ifdef __LITTLE_ENDIAN /* Put desc_len at the LSB of x */ @@ -213,6 +215,7 @@ struct key { union { struct keyring_index_key index_key; struct { + unsigned long hash; unsigned long len_desc; struct key_type *type; /* type of key */ char *description; |