]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
cpuset: move the root cpuset write check earlier
authorChen Ridong <chenridong@huawei.com>
Wed, 17 Sep 2025 06:04:44 +0000 (06:04 +0000)
committerTejun Heo <tj@kernel.org>
Wed, 17 Sep 2025 18:35:17 +0000 (08:35 -1000)
The 'cpus' or 'mems' lists of the top_cpuset cannot be modified.
This check can be moved before acquiring any locks as a common code
block to improve efficiency and maintainability.

Signed-off-by: Chen Ridong <chenridong@huawei.com>
Reviewed-by: Waiman Long <longman@redhat.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
kernel/cgroup/cpuset.c

index caa885823eebc7486290e6f8097a6a6ff1c2091a..12012ce62777262f0f1c3d7b4db494408e39b3a2 100644 (file)
@@ -2338,10 +2338,6 @@ static int update_cpumask(struct cpuset *cs, struct cpuset *trialcs,
        bool force = false;
        int old_prs = cs->partition_root_state;
 
-       /* top_cpuset.cpus_allowed tracks cpu_active_mask; it's read-only */
-       if (cs == &top_cpuset)
-               return -EACCES;
-
        /*
         * An empty cpus_allowed is ok only if the cpuset has no tasks.
         * Since cpulist_parse() fails on an empty mask, we special case
@@ -2802,15 +2798,6 @@ static int update_nodemask(struct cpuset *cs, struct cpuset *trialcs,
 {
        int retval;
 
-       /*
-        * top_cpuset.mems_allowed tracks node_stats[N_MEMORY];
-        * it's read-only
-        */
-       if (cs == &top_cpuset) {
-               retval = -EACCES;
-               goto done;
-       }
-
        /*
         * An empty mems_allowed is ok iff there are no tasks in the cpuset.
         * Since nodelist_parse() fails on an empty mask, we special case
@@ -3280,6 +3267,10 @@ ssize_t cpuset_write_resmask(struct kernfs_open_file *of,
        struct cpuset *trialcs;
        int retval = -ENODEV;
 
+       /* root is read-only */
+       if (cs == &top_cpuset)
+               return -EACCES;
+
        buf = strstrip(buf);
        cpuset_full_lock();
        if (!is_cpuset_online(cs))