summaryrefslogtreecommitdiffstats
path: root/module/spl/spl-kmem.c
diff options
context:
space:
mode:
authorBrian Behlendorf <[email protected]>2012-09-07 14:24:17 -0700
committerBrian Behlendorf <[email protected]>2012-09-07 14:27:03 -0700
commitcb5c2acebb86da5b50f099b39209d22845eda8c7 (patch)
treee4452589d3accd24b4664b33f227ab59bba7f5f1 /module/spl/spl-kmem.c
parentac8ca67a88bdb8be08456785116a8824fba735df (diff)
Add KMC_NOEMERGENCY slab flag
Provide a flag to disable the use of emergency objects for a specific kmem cache. There may be instances where under no circumstances should you kmalloc() an emergency object. For example, when you cache contains very large objects (>128k). Signed-off-by: Brian Behlendorf <[email protected]>
Diffstat (limited to 'module/spl/spl-kmem.c')
-rw-r--r--module/spl/spl-kmem.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/module/spl/spl-kmem.c b/module/spl/spl-kmem.c
index e07e08c91..eca809c47 100644
--- a/module/spl/spl-kmem.c
+++ b/module/spl/spl-kmem.c
@@ -1727,8 +1727,13 @@ spl_cache_grow(spl_kmem_cache_t *skc, int flags, void **obj)
*/
remaining = wait_event_timeout(skc->skc_waitq,
spl_cache_grow_wait(skc), 1);
- if (remaining == 0)
- rc = spl_emergency_alloc(skc, flags, obj);
+
+ if (remaining == 0) {
+ if (test_bit(KMC_BIT_NOEMERGENCY, &skc->skc_flags))
+ rc = -ENOMEM;
+ else
+ rc = spl_emergency_alloc(skc, flags, obj);
+ }
SRETURN(rc);
}