diff options
author | Brian Behlendorf <[email protected]> | 2012-09-07 14:24:17 -0700 |
---|---|---|
committer | Brian Behlendorf <[email protected]> | 2012-09-07 14:27:03 -0700 |
commit | cb5c2acebb86da5b50f099b39209d22845eda8c7 (patch) | |
tree | e4452589d3accd24b4664b33f227ab59bba7f5f1 /module/spl/spl-kmem.c | |
parent | ac8ca67a88bdb8be08456785116a8824fba735df (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.c | 9 |
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); } |