mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	cgroup: Add "no" prefixed mount options
We allow modifying these mount options via remount. Let's add "no" prefixed variants so that they can be turned off too. Signed-off-by: Tejun Heo <tj@kernel.org> Cc: Christian Brauner <brauner@kernel.org> Cc: Michal Koutný <mkoutny@suse.com>
This commit is contained in:
		
							parent
							
								
									671c11f061
								
							
						
					
					
						commit
						30312730bd
					
				
					 2 changed files with 18 additions and 8 deletions
				
			
		| 
						 | 
					@ -177,14 +177,14 @@ disabling controllers in v1 and make them always available in v2.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
cgroup v2 currently supports the following mount options.
 | 
					cgroup v2 currently supports the following mount options.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  nsdelegate
 | 
					  [no]nsdelegate
 | 
				
			||||||
	Consider cgroup namespaces as delegation boundaries.  This
 | 
						Consider cgroup namespaces as delegation boundaries.  This
 | 
				
			||||||
	option is system wide and can only be set on mount or modified
 | 
						option is system wide and can only be set on mount or modified
 | 
				
			||||||
	through remount from the init namespace.  The mount option is
 | 
						through remount from the init namespace.  The mount option is
 | 
				
			||||||
	ignored on non-init namespace mounts.  Please refer to the
 | 
						ignored on non-init namespace mounts.  Please refer to the
 | 
				
			||||||
	Delegation section for details.
 | 
						Delegation section for details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  memory_localevents
 | 
					  memory_[no]localevents
 | 
				
			||||||
        Only populate memory.events with data for the current cgroup,
 | 
					        Only populate memory.events with data for the current cgroup,
 | 
				
			||||||
        and not any subtrees. This is legacy behaviour, the default
 | 
					        and not any subtrees. This is legacy behaviour, the default
 | 
				
			||||||
        behaviour without this option is to include subtree counts.
 | 
					        behaviour without this option is to include subtree counts.
 | 
				
			||||||
| 
						 | 
					@ -192,7 +192,7 @@ cgroup v2 currently supports the following mount options.
 | 
				
			||||||
        modified through remount from the init namespace. The mount
 | 
					        modified through remount from the init namespace. The mount
 | 
				
			||||||
        option is ignored on non-init namespace mounts.
 | 
					        option is ignored on non-init namespace mounts.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  memory_recursiveprot
 | 
					  memory_[no]recursiveprot
 | 
				
			||||||
        Recursively apply memory.min and memory.low protection to
 | 
					        Recursively apply memory.min and memory.low protection to
 | 
				
			||||||
        entire subtrees, without requiring explicit downward
 | 
					        entire subtrees, without requiring explicit downward
 | 
				
			||||||
        propagation into leaf cgroups.  This allows protecting entire
 | 
					        propagation into leaf cgroups.  This allows protecting entire
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -279,8 +279,6 @@ bool cgroup_ssid_enabled(int ssid)
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * - When mounting an existing superblock, mount options should match.
 | 
					 * - When mounting an existing superblock, mount options should match.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * - Remount is disallowed.
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * - rename(2) is disallowed.
 | 
					 * - rename(2) is disallowed.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * - "tasks" is removed.  Everything should be at process granularity.  Use
 | 
					 * - "tasks" is removed.  Everything should be at process granularity.  Use
 | 
				
			||||||
| 
						 | 
					@ -1859,16 +1857,19 @@ int cgroup_show_path(struct seq_file *sf, struct kernfs_node *kf_node,
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
enum cgroup2_param {
 | 
					enum cgroup2_param {
 | 
				
			||||||
	Opt_nsdelegate,
 | 
						Opt_nsdelegate, Opt_nonsdelegate,
 | 
				
			||||||
	Opt_memory_localevents,
 | 
						Opt_memory_localevents, Opt_memory_nolocalevents,
 | 
				
			||||||
	Opt_memory_recursiveprot,
 | 
						Opt_memory_recursiveprot, Opt_memory_norecursiveprot,
 | 
				
			||||||
	nr__cgroup2_params
 | 
						nr__cgroup2_params
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static const struct fs_parameter_spec cgroup2_fs_parameters[] = {
 | 
					static const struct fs_parameter_spec cgroup2_fs_parameters[] = {
 | 
				
			||||||
	fsparam_flag("nsdelegate",		Opt_nsdelegate),
 | 
						fsparam_flag("nsdelegate",		Opt_nsdelegate),
 | 
				
			||||||
 | 
						fsparam_flag("nonsdelegate",		Opt_nonsdelegate),
 | 
				
			||||||
	fsparam_flag("memory_localevents",	Opt_memory_localevents),
 | 
						fsparam_flag("memory_localevents",	Opt_memory_localevents),
 | 
				
			||||||
 | 
						fsparam_flag("memory_nolocalevents",	Opt_memory_nolocalevents),
 | 
				
			||||||
	fsparam_flag("memory_recursiveprot",	Opt_memory_recursiveprot),
 | 
						fsparam_flag("memory_recursiveprot",	Opt_memory_recursiveprot),
 | 
				
			||||||
 | 
						fsparam_flag("memory_norecursiveprot",	Opt_memory_norecursiveprot),
 | 
				
			||||||
	{}
 | 
						{}
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1886,12 +1887,21 @@ static int cgroup2_parse_param(struct fs_context *fc, struct fs_parameter *param
 | 
				
			||||||
	case Opt_nsdelegate:
 | 
						case Opt_nsdelegate:
 | 
				
			||||||
		ctx->flags |= CGRP_ROOT_NS_DELEGATE;
 | 
							ctx->flags |= CGRP_ROOT_NS_DELEGATE;
 | 
				
			||||||
		return 0;
 | 
							return 0;
 | 
				
			||||||
 | 
						case Opt_nonsdelegate:
 | 
				
			||||||
 | 
							ctx->flags &= ~CGRP_ROOT_NS_DELEGATE;
 | 
				
			||||||
 | 
							return 0;
 | 
				
			||||||
	case Opt_memory_localevents:
 | 
						case Opt_memory_localevents:
 | 
				
			||||||
		ctx->flags |= CGRP_ROOT_MEMORY_LOCAL_EVENTS;
 | 
							ctx->flags |= CGRP_ROOT_MEMORY_LOCAL_EVENTS;
 | 
				
			||||||
		return 0;
 | 
							return 0;
 | 
				
			||||||
 | 
						case Opt_memory_nolocalevents:
 | 
				
			||||||
 | 
							ctx->flags &= ~CGRP_ROOT_MEMORY_LOCAL_EVENTS;
 | 
				
			||||||
 | 
							return 0;
 | 
				
			||||||
	case Opt_memory_recursiveprot:
 | 
						case Opt_memory_recursiveprot:
 | 
				
			||||||
		ctx->flags |= CGRP_ROOT_MEMORY_RECURSIVE_PROT;
 | 
							ctx->flags |= CGRP_ROOT_MEMORY_RECURSIVE_PROT;
 | 
				
			||||||
		return 0;
 | 
							return 0;
 | 
				
			||||||
 | 
						case Opt_memory_norecursiveprot:
 | 
				
			||||||
 | 
							ctx->flags &= ~CGRP_ROOT_MEMORY_RECURSIVE_PROT;
 | 
				
			||||||
 | 
							return 0;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return -EINVAL;
 | 
						return -EINVAL;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue