mirror of
				https://git.proxmox.com/git/mirror_spl-debian
				synced 2025-11-04 07:47:19 +00: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)
 | 
			
		||||
 | 
			
		||||
	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