mirror of
				https://git.proxmox.com/git/mirror_zfs.git
				synced 2025-10-26 18:05:04 +03:00 
			
		
		
		
	Add zvol_inhibit_dev module option.
ZoL can create more zvols at runtime than can be configured during system start, which hangs the init stack at reboot. When a slow system has more than a few hundred zvols, udev will fork bomb during system start and spend too much time in device detection routines, so upstart kills it. The zfs_inhibit_dev option allows an affected system to be rescued by skipping /dev/zd* creation and thereby avoiding the udev overload. All zvols are made inaccessible if this option is set, but the `zfs destroy` and `zfs send` commands still work, and ZFS filesystems can be mounted. Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
This commit is contained in:
		
							parent
							
								
									bc98d6c809
								
							
						
					
					
						commit
						74497b7ab6
					
				@ -46,6 +46,7 @@
 | 
			
		||||
#include <sys/zvol.h>
 | 
			
		||||
#include <linux/blkdev_compat.h>
 | 
			
		||||
 | 
			
		||||
unsigned int zvol_inhibit_dev = 0;
 | 
			
		||||
unsigned int zvol_major = ZVOL_MAJOR;
 | 
			
		||||
unsigned int zvol_threads = 32;
 | 
			
		||||
 | 
			
		||||
@ -1341,6 +1342,9 @@ zvol_create_minors(const char *pool)
 | 
			
		||||
	spa_t *spa = NULL;
 | 
			
		||||
	int error = 0;
 | 
			
		||||
 | 
			
		||||
	if (zvol_inhibit_dev)
 | 
			
		||||
		return (0);
 | 
			
		||||
 | 
			
		||||
	mutex_enter(&zvol_state_lock);
 | 
			
		||||
	if (pool) {
 | 
			
		||||
		error = dmu_objset_find_spa(NULL, pool, zvol_create_minors_cb,
 | 
			
		||||
@ -1370,6 +1374,9 @@ zvol_remove_minors(const char *pool)
 | 
			
		||||
	zvol_state_t *zv, *zv_next;
 | 
			
		||||
	char *str;
 | 
			
		||||
 | 
			
		||||
	if (zvol_inhibit_dev)
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	str = kmem_zalloc(MAXNAMELEN, KM_SLEEP);
 | 
			
		||||
	if (pool) {
 | 
			
		||||
		(void) strncpy(str, pool, strlen(pool));
 | 
			
		||||
@ -1431,6 +1438,9 @@ zvol_fini(void)
 | 
			
		||||
	list_destroy(&zvol_state_list);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
module_param(zvol_inhibit_dev, uint, 0644);
 | 
			
		||||
MODULE_PARM_DESC(zvol_inhibit_dev, "Do not create zvol device nodes");
 | 
			
		||||
 | 
			
		||||
module_param(zvol_major, uint, 0444);
 | 
			
		||||
MODULE_PARM_DESC(zvol_major, "Major number for zvol device");
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user