summaryrefslogtreecommitdiff
path: root/usr/src/uts/common/sys
diff options
context:
space:
mode:
authorSerapheim Dimitropoulos <serapheim@delphix.com>2017-12-05 09:57:42 -0800
committerPrakash Surya <prakash.surya@delphix.com>2018-07-23 06:46:28 -0700
commit2ec7644aab2a726a64681fa66c6db8731b160de1 (patch)
tree1b86a2bdc0a198646a150717c5a4b96ca3f99bf3 /usr/src/uts/common/sys
parentabe1fd01ce5a83718c5a840daeab4abdaec1c104 (diff)
downloadillumos-gate-2ec7644aab2a726a64681fa66c6db8731b160de1.tar.gz
9580 Add a hash-table on top of nvlist to speed-up operations
Reviewed by: Matt Ahrens <matt@delphix.com> Reviewed by: Sebastien Roy <sebastien.roy@delphix.com> Approved by: Robert Mustacchi <rm@joyent.com>
Diffstat (limited to 'usr/src/uts/common/sys')
-rw-r--r--usr/src/uts/common/sys/nvpair.h3
-rw-r--r--usr/src/uts/common/sys/nvpair_impl.h29
2 files changed, 25 insertions, 7 deletions
diff --git a/usr/src/uts/common/sys/nvpair.h b/usr/src/uts/common/sys/nvpair.h
index e4d637b007..cf3f761c8c 100644
--- a/usr/src/uts/common/sys/nvpair.h
+++ b/usr/src/uts/common/sys/nvpair.h
@@ -20,7 +20,7 @@
*/
/*
* Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
- * Copyright (c) 2012 by Delphix. All rights reserved.
+ * Copyright (c) 2012, 2017 by Delphix. All rights reserved.
*/
#ifndef _SYS_NVPAIR_H
@@ -40,6 +40,7 @@ extern "C" {
#endif
typedef enum {
+ DATA_TYPE_DONTCARE = -1,
DATA_TYPE_UNKNOWN = 0,
DATA_TYPE_BOOLEAN,
DATA_TYPE_BYTE,
diff --git a/usr/src/uts/common/sys/nvpair_impl.h b/usr/src/uts/common/sys/nvpair_impl.h
index f12dbbfe6e..c9874b3e4d 100644
--- a/usr/src/uts/common/sys/nvpair_impl.h
+++ b/usr/src/uts/common/sys/nvpair_impl.h
@@ -24,11 +24,13 @@
* Use is subject to license terms.
*/
+/*
+ * Copyright (c) 2017 by Delphix. All rights reserved.
+ */
+
#ifndef _NVPAIR_IMPL_H
#define _NVPAIR_IMPL_H
-#pragma ident "%Z%%M% %I% %E% SMI"
-
#ifdef __cplusplus
extern "C" {
#endif
@@ -47,16 +49,27 @@ typedef struct i_nvp i_nvp_t;
struct i_nvp {
union {
- uint64_t _nvi_align; /* ensure alignment */
+ /* ensure alignment */
+ uint64_t _nvi_align;
+
struct {
- i_nvp_t *_nvi_next; /* pointer to next nvpair */
- i_nvp_t *_nvi_prev; /* pointer to prev nvpair */
+ /* pointer to next nvpair */
+ i_nvp_t *_nvi_next;
+
+ /* pointer to prev nvpair */
+ i_nvp_t *_nvi_prev;
+
+ /* next pair in table bucket */
+ i_nvp_t *_nvi_hashtable_next;
} _nvi;
} _nvi_un;
- nvpair_t nvi_nvp; /* nvpair */
+
+ /* nvpair */
+ nvpair_t nvi_nvp;
};
#define nvi_next _nvi_un._nvi._nvi_next
#define nvi_prev _nvi_un._nvi._nvi_prev
+#define nvi_hashtable_next _nvi_un._nvi._nvi_hashtable_next
typedef struct {
i_nvp_t *nvp_list; /* linked list of nvpairs */
@@ -64,6 +77,10 @@ typedef struct {
i_nvp_t *nvp_curr; /* current walker nvpair */
nv_alloc_t *nvp_nva; /* pluggable allocator */
uint32_t nvp_stat; /* internal state */
+
+ i_nvp_t **nvp_hashtable; /* table of entries used for lookup */
+ uint32_t nvp_nbuckets; /* # of buckets in hash table */
+ uint32_t nvp_nentries; /* # of entries in hash table */
} nvpriv_t;
#ifdef __cplusplus