mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2024-12-24 18:39:34 +03:00
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 <behlendorf1@llnl.gov>
This commit is contained in:
parent
ac8ca67a88
commit
cb5c2acebb
@ -340,6 +340,7 @@ enum {
|
||||
KMC_BIT_KMEM = 5, /* Use kmem cache */
|
||||
KMC_BIT_VMEM = 6, /* Use vmem cache */
|
||||
KMC_BIT_OFFSLAB = 7, /* Objects not on slab */
|
||||
KMC_BIT_NOEMERGENCY = 8, /* Disable emergency objects */
|
||||
KMC_BIT_GROWING = 15, /* Growing in progress */
|
||||
KMC_BIT_REAPING = 16, /* Reaping in progress */
|
||||
KMC_BIT_DESTROY = 17, /* Destroy in progress */
|
||||
@ -365,6 +366,7 @@ typedef enum kmem_cbrc {
|
||||
#define KMC_KMEM (1 << KMC_BIT_KMEM)
|
||||
#define KMC_VMEM (1 << KMC_BIT_VMEM)
|
||||
#define KMC_OFFSLAB (1 << KMC_BIT_OFFSLAB)
|
||||
#define KMC_NOEMERGENCY (1 << KMC_BIT_NOEMERGENCY)
|
||||
#define KMC_GROWING (1 << KMC_BIT_GROWING)
|
||||
#define KMC_REAPING (1 << KMC_BIT_REAPING)
|
||||
#define KMC_DESTROY (1 << KMC_BIT_DESTROY)
|
||||
|
@ -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);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user