Print this page
OS-6363 system went to dark side of moon for ~467 seconds 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>

Split Close
Expand all
Collapse all
          --- old/usr/src/lib/libzpool/common/taskq.c
          +++ new/usr/src/lib/libzpool/common/taskq.c
↓ open down ↓ 18 lines elided ↑ open up ↑
  19   19   * CDDL HEADER END
  20   20   */
  21   21  /*
  22   22   * Copyright 2010 Sun Microsystems, Inc.  All rights reserved.
  23   23   * Use is subject to license terms.
  24   24   */
  25   25  /*
  26   26   * Copyright 2011 Nexenta Systems, Inc.  All rights reserved.
  27   27   * Copyright 2012 Garrett D'Amore <garrett@damore.org>.  All rights reserved.
  28   28   * Copyright (c) 2014 by Delphix. All rights reserved.
       29 + * Copyright (c) 2017, Joyent, Inc.
  29   30   */
  30   31  
  31   32  #include <sys/zfs_context.h>
  32   33  
  33   34  int taskq_now;
  34   35  taskq_t *system_taskq;
  35   36  
  36   37  #define TASKQ_ACTIVE    0x00010000
  37   38  #define TASKQ_NAMELEN   31
  38   39  
↓ open down ↓ 132 lines elided ↑ open up ↑
 171  172                  t->tqent_prev = tq->tq_task.tqent_prev;
 172  173          }
 173  174          t->tqent_next->tqent_prev = t;
 174  175          t->tqent_prev->tqent_next = t;
 175  176          t->tqent_func = func;
 176  177          t->tqent_arg = arg;
 177  178          cv_signal(&tq->tq_dispatch_cv);
 178  179          mutex_exit(&tq->tq_lock);
 179  180  }
 180  181  
      182 +boolean_t
      183 +taskq_empty(taskq_t *tq)
      184 +{
      185 +        boolean_t rv;
      186 +
      187 +        mutex_enter(&tq->tq_lock);
      188 +        rv = (tq->tq_task.tqent_next == &tq->tq_task) && (tq->tq_active == 0);
      189 +        mutex_exit(&tq->tq_lock);
      190 +
      191 +        return (rv);
      192 +}
      193 +
 181  194  void
 182  195  taskq_wait(taskq_t *tq)
 183  196  {
 184  197          mutex_enter(&tq->tq_lock);
 185  198          while (tq->tq_task.tqent_next != &tq->tq_task || tq->tq_active != 0)
 186  199                  cv_wait(&tq->tq_wait_cv, &tq->tq_lock);
 187  200          mutex_exit(&tq->tq_lock);
 188  201  }
 189  202  
 190  203  static void *
↓ open down ↓ 152 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX