summaryrefslogtreecommitdiff
path: root/usr/src/lib
diff options
context:
space:
mode:
authorTim Kordas <tim.kordas@joyent.com>2017-10-13 17:10:52 -0700
committerTim Kordas <tim.kordas@joyent.com>2017-10-25 16:47:48 +0000
commitdaa3911f02365820bf2df2a1cdf96602eda66912 (patch)
tree65b452006c58dc88f7955a09bfb3cb94dff79f8c /usr/src/lib
parente0c6772393ee04366494174e8e95ba7bcc980ed7 (diff)
downloadillumos-joyent-release-20171026.tar.gz
OS-6363 system went to dark side of moon for ~467 secondsrelease-20171026
OS-6404 ARC reclaim should throttle its calls to arc_kmem_reap_now() Reviewed by: Bryan Cantrill <bryan@joyent.com> Reviewed by: Dan McDonald <danmcd@joyent.com> Approved by: Bryan Cantrill <bryan@joyent.com>
Diffstat (limited to 'usr/src/lib')
-rw-r--r--usr/src/lib/libfakekernel/common/kmem.c13
-rw-r--r--usr/src/lib/libfakekernel/common/mapfile-vers5
-rw-r--r--usr/src/lib/libfakekernel/common/taskq.c13
-rw-r--r--usr/src/lib/libzpool/common/sys/zfs_context.h6
-rw-r--r--usr/src/lib/libzpool/common/taskq.c13
5 files changed, 47 insertions, 3 deletions
diff --git a/usr/src/lib/libfakekernel/common/kmem.c b/usr/src/lib/libfakekernel/common/kmem.c
index 82d1cfeaef..18ebb89885 100644
--- a/usr/src/lib/libfakekernel/common/kmem.c
+++ b/usr/src/lib/libfakekernel/common/kmem.c
@@ -11,6 +11,7 @@
/*
* Copyright 2013 Nexenta Systems, Inc. All rights reserved.
+ * Copyright (c) 2017, Joyent, Inc.
*/
#include <sys/kmem.h>
@@ -129,6 +130,18 @@ kmem_cache_set_move(kmem_cache_t *kc,
{
}
+boolean_t
+kmem_cache_reap_active(void)
+{
+ return (B_FALSE);
+}
+
+/* ARGSUSED */
+void
+kmem_cache_reap_soon(kmem_cache_t *kc)
+{
+}
+
/* ARGSUSED */
void
kmem_cache_reap_now(kmem_cache_t *kc)
diff --git a/usr/src/lib/libfakekernel/common/mapfile-vers b/usr/src/lib/libfakekernel/common/mapfile-vers
index db81dea59a..cae4b7b30b 100644
--- a/usr/src/lib/libfakekernel/common/mapfile-vers
+++ b/usr/src/lib/libfakekernel/common/mapfile-vers
@@ -11,6 +11,7 @@
#
# Copyright 2015 Nexenta Systems, Inc. All rights reserved.
+# Copyright (c) 2017, Joyent, Inc.
#
#
@@ -85,7 +86,8 @@ SYMBOL_VERSION SUNWprivate_1.1 {
kmem_cache_create;
kmem_cache_destroy;
kmem_cache_free;
- kmem_cache_reap_now;
+ kmem_cache_reap_active;
+ kmem_cache_reap_soon;
kmem_cache_set_move;
kmem_debugging;
kmem_free;
@@ -173,6 +175,7 @@ SYMBOL_VERSION SUNWprivate_1.1 {
taskq_dispatch;
taskq_dispatch_ent;
taskq_member;
+ taskq_empty;
taskq_wait;
thread_join;
diff --git a/usr/src/lib/libfakekernel/common/taskq.c b/usr/src/lib/libfakekernel/common/taskq.c
index a9320024ad..ffaa73fccc 100644
--- a/usr/src/lib/libfakekernel/common/taskq.c
+++ b/usr/src/lib/libfakekernel/common/taskq.c
@@ -25,6 +25,7 @@
/*
* Copyright 2012 Garrett D'Amore <garrett@damore.org>. All rights reserved.
* Copyright 2013 Nexenta Systems, Inc. All rights reserved.
+ * Copyright (c) 2017, Joyent, Inc.
*/
#include <sys/taskq_impl.h>
@@ -208,6 +209,18 @@ taskq_dispatch_ent(taskq_t *tq, task_func_t func, void *arg, uint_t flags,
mutex_exit(&tq->tq_lock);
}
+boolean_t
+taskq_empty(taskq_t *tq)
+{
+ boolean_t rv;
+
+ mutex_enter(&tq->tq_lock);
+ rv = (tq->tq_task.tqent_next == &tq->tq_task) && (tq->tq_active == 0);
+ mutex_exit(&tq->tq_lock);
+
+ return (rv);
+}
+
void
taskq_wait(taskq_t *tq)
{
diff --git a/usr/src/lib/libzpool/common/sys/zfs_context.h b/usr/src/lib/libzpool/common/sys/zfs_context.h
index 7bf4a3843d..45eeeaeb24 100644
--- a/usr/src/lib/libzpool/common/sys/zfs_context.h
+++ b/usr/src/lib/libzpool/common/sys/zfs_context.h
@@ -21,7 +21,7 @@
/*
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
* Copyright 2011 Nexenta Systems, Inc. All rights reserved.
- * Copyright (c) 2013, Joyent, Inc. All rights reserved.
+ * Copyright (c) 2017, Joyent, Inc.
* Copyright (c) 2012, 2016 by Delphix. All rights reserved.
*/
@@ -333,7 +333,8 @@ extern void kstat_runq_back_to_waitq(kstat_io_t *);
#define kmem_cache_alloc(_c, _f) umem_cache_alloc(_c, _f)
#define kmem_cache_free(_c, _b) umem_cache_free(_c, _b)
#define kmem_debugging() 0
-#define kmem_cache_reap_now(_c) /* nothing */
+#define kmem_cache_reap_active() (B_FALSE)
+#define kmem_cache_reap_soon(_c) /* nothing */
#define kmem_cache_set_move(_c, _cb) /* nothing */
#define vmem_qcache_reap(_v) /* nothing */
#define POINTER_INVALIDATE(_pp) /* nothing */
@@ -391,6 +392,7 @@ extern taskqid_t taskq_dispatch(taskq_t *, task_func_t, void *, uint_t);
extern void taskq_dispatch_ent(taskq_t *, task_func_t, void *, uint_t,
taskq_ent_t *);
extern void taskq_destroy(taskq_t *);
+extern boolean_t taskq_empty(taskq_t *);
extern void taskq_wait(taskq_t *);
extern int taskq_member(taskq_t *, void *);
extern void system_taskq_init(void);
diff --git a/usr/src/lib/libzpool/common/taskq.c b/usr/src/lib/libzpool/common/taskq.c
index a4ab58963d..11a646d62f 100644
--- a/usr/src/lib/libzpool/common/taskq.c
+++ b/usr/src/lib/libzpool/common/taskq.c
@@ -26,6 +26,7 @@
* Copyright 2011 Nexenta Systems, Inc. All rights reserved.
* Copyright 2012 Garrett D'Amore <garrett@damore.org>. All rights reserved.
* Copyright (c) 2014 by Delphix. All rights reserved.
+ * Copyright (c) 2017, Joyent, Inc.
*/
#include <sys/zfs_context.h>
@@ -178,6 +179,18 @@ taskq_dispatch_ent(taskq_t *tq, task_func_t func, void *arg, uint_t flags,
mutex_exit(&tq->tq_lock);
}
+boolean_t
+taskq_empty(taskq_t *tq)
+{
+ boolean_t rv;
+
+ mutex_enter(&tq->tq_lock);
+ rv = (tq->tq_task.tqent_next == &tq->tq_task) && (tq->tq_active == 0);
+ mutex_exit(&tq->tq_lock);
+
+ return (rv);
+}
+
void
taskq_wait(taskq_t *tq)
{