aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/sys/zfs_context.h1
-rw-r--r--module/zfs/spa.c9
2 files changed, 7 insertions, 3 deletions
diff --git a/include/sys/zfs_context.h b/include/sys/zfs_context.h
index 2ac41e007..1027e7215 100644
--- a/include/sys/zfs_context.h
+++ b/include/sys/zfs_context.h
@@ -368,6 +368,7 @@ typedef void (task_func_t)(void *);
#define TASKQ_DYNAMIC 0x0004 /* Use dynamic thread scheduling */
#define TASKQ_THREADS_CPU_PCT 0x0008 /* Scale # threads by # cpus */
#define TASKQ_DC_BATCH 0x0010 /* Mark threads as batch */
+#define TASKQ_NORECLAIM 0x0020 /* Disable direct memory reclaim */
#define TQ_SLEEP KM_SLEEP /* Can block for memory */
#define TQ_NOSLEEP KM_NOSLEEP /* cannot block for memory; may fail */
diff --git a/module/zfs/spa.c b/module/zfs/spa.c
index 3599e61c9..57d25c3d1 100644
--- a/module/zfs/spa.c
+++ b/module/zfs/spa.c
@@ -614,9 +614,8 @@ spa_get_errlists(spa_t *spa, avl_tree_t *last, avl_tree_t *scrub)
static taskq_t *
spa_taskq_create(spa_t *spa, const char *name, enum zti_modes mode,
- uint_t value)
+ uint_t value, uint_t flags)
{
- uint_t flags = TASKQ_PREPOPULATE;
boolean_t batch = B_FALSE;
switch (mode) {
@@ -666,13 +665,17 @@ spa_create_zio_taskqs(spa_t *spa)
const zio_taskq_info_t *ztip = &zio_taskqs[t][q];
enum zti_modes mode = ztip->zti_mode;
uint_t value = ztip->zti_value;
+ uint_t flags = TASKQ_PREPOPULATE;
char name[32];
+ if (t == ZIO_TYPE_WRITE)
+ flags |= TASKQ_NORECLAIM;
+
(void) snprintf(name, sizeof (name),
"%s_%s", zio_type_name[t], zio_taskq_types[q]);
spa->spa_zio_taskq[t][q] =
- spa_taskq_create(spa, name, mode, value);
+ spa_taskq_create(spa, name, mode, value, flags);
}
}
}