Pull cgroup updates from Tejun Heo: "Nothing interesting. Just two minor patches" * 'for-5.12' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup: cpuset: fix typos in comments cgroup: cgroup.{procs,threads} factor out common parts
Unified · Split
| @@ -4728,8 +4728,8 @@ static int cgroup_attach_permissions(struct cgroup *src_cgrp, · 4727 unmodified lines | ||
| 4728 | 4728 | return ret; |
| 4729 | 4729 | } |
| 4730 | 4730 | |
| 4731 | −static ssize_t cgroup_procs_write(struct kernfs_open_file *of, | |
| 4732 | − char *buf, size_t nbytes, loff_t off) | |
| 4731 | +static ssize_t __cgroup_procs_write(struct kernfs_open_file *of, char *buf, | |
| 4732 | + bool threadgroup) | |
| 4733 | 4733 | { |
| 4734 | 4734 | struct cgroup *src_cgrp, *dst_cgrp; |
| 4735 | 4735 | struct task_struct *task; |
| @@ -4740,7 +4740,7 @@ static ssize_t cgroup_procs_write(struct kernfs_open_file *of, · 4 unmodified lines | ||
| 4740 | 4740 | if (!dst_cgrp) |
| 4741 | 4741 | return -ENODEV; |
| 4742 | 4742 | |
| 4743 | − task = cgroup_procs_write_start(buf, true, &locked); | |
| 4743 | + task = cgroup_procs_write_start(buf, threadgroup, &locked); | |
| 4744 | 4744 | ret = PTR_ERR_OR_ZERO(task); |
| 4745 | 4745 | if (ret) |
| 4746 | 4746 | goto out_unlock; |
| @@ -4750,19 +4750,26 @@ static ssize_t cgroup_procs_write(struct kernfs_open_file *of, · 3 unmodified lines | ||
| 4750 | 4750 | src_cgrp = task_cgroup_from_root(task, &cgrp_dfl_root); |
| 4751 | 4751 | spin_unlock_irq(&css_set_lock); |
| 4752 | 4752 | |
| 4753 | + /* process and thread migrations follow same delegation rule */ | |
| 4753 | 4754 | ret = cgroup_attach_permissions(src_cgrp, dst_cgrp, |
| 4754 | − of->file->f_path.dentry->d_sb, true); | |
| 4755 | + of->file->f_path.dentry->d_sb, threadgroup); | |
| 4755 | 4756 | if (ret) |
| 4756 | 4757 | goto out_finish; |
| 4757 | 4758 | |
| 4758 | − ret = cgroup_attach_task(dst_cgrp, task, true); | |
| 4759 | + ret = cgroup_attach_task(dst_cgrp, task, threadgroup); | |
| 4759 | 4760 | |
| 4760 | 4761 | out_finish: |
| 4761 | 4762 | cgroup_procs_write_finish(task, locked); |
| 4762 | 4763 | out_unlock: |
| 4763 | 4764 | cgroup_kn_unlock(of->kn); |
| 4764 | 4765 | |
| 4765 | − return ret ?: nbytes; | |
| 4766 | + return ret; | |
| 4767 | +} | |
| 4768 | + | |
| 4769 | +static ssize_t cgroup_procs_write(struct kernfs_open_file *of, | |
| 4770 | + char *buf, size_t nbytes, loff_t off) | |
| 4771 | +{ | |
| 4772 | + return __cgroup_procs_write(of, buf, true) ?: nbytes; | |
| 4766 | 4773 | } |
| 4767 | 4774 | |
| 4768 | 4775 | static void *cgroup_threads_start(struct seq_file *s, loff_t *pos) |
| @@ -4773,41 +4780,7 @@ static void *cgroup_threads_start(struct seq_file *s, loff_t *pos) · 4 unmodified lines | ||
| 4773 | 4780 | static ssize_t cgroup_threads_write(struct kernfs_open_file *of, |
| 4774 | 4781 | char *buf, size_t nbytes, loff_t off) |
| 4775 | 4782 | { |
| 4776 | − struct cgroup *src_cgrp, *dst_cgrp; | |
| 4777 | − struct task_struct *task; | |
| 4778 | − ssize_t ret; | |
| 4779 | − bool locked; | |
| 4780 | − | |
| 4781 | − buf = strstrip(buf); | |
| 4782 | − | |
| 4783 | − dst_cgrp = cgroup_kn_lock_live(of->kn, false); | |
| 4784 | − if (!dst_cgrp) | |
| 4785 | − return -ENODEV; | |
| 4786 | − | |
| 4787 | − task = cgroup_procs_write_start(buf, false, &locked); | |
| 4788 | − ret = PTR_ERR_OR_ZERO(task); | |
| 4789 | − if (ret) | |
| 4790 | − goto out_unlock; | |
| 4791 | − | |
| 4792 | − /* find the source cgroup */ | |
| 4793 | − spin_lock_irq(&css_set_lock); | |
| 4794 | − src_cgrp = task_cgroup_from_root(task, &cgrp_dfl_root); | |
| 4795 | − spin_unlock_irq(&css_set_lock); | |
| 4796 | − | |
| 4797 | − /* thread migrations follow the cgroup.procs delegation rule */ | |
| 4798 | − ret = cgroup_attach_permissions(src_cgrp, dst_cgrp, | |
| 4799 | − of->file->f_path.dentry->d_sb, false); | |
| 4800 | − if (ret) | |
| 4801 | − goto out_finish; | |
| 4802 | − | |
| 4803 | − ret = cgroup_attach_task(dst_cgrp, task, false); | |
| 4804 | − | |
| 4805 | −out_finish: | |
| 4806 | − cgroup_procs_write_finish(task, locked); | |
| 4807 | −out_unlock: | |
| 4808 | − cgroup_kn_unlock(of->kn); | |
| 4809 | − | |
| 4810 | − return ret ?: nbytes; | |
| 4783 | + return __cgroup_procs_write(of, buf, false) ?: nbytes; | |
| 4811 | 4784 | } |
| 4812 | 4785 | |
| 4813 | 4786 | /* cgroup core interface files for the default hierarchy */ |
| @@ -98,7 +98,7 @@ struct cpuset { · 97 unmodified lines | ||
| 98 | 98 | * and if it ends up empty, it will inherit the parent's mask. |
| 99 | 99 | * |
| 100 | 100 | * |
| 101 | − * On legacy hierachy: | |
| 101 | + * On legacy hierarchy: | |
| 102 | 102 | * |
| 103 | 103 | * The user-configured masks are always the same with effective masks. |
| 104 | 104 | */ |
| @@ -1309,10 +1309,10 @@ static int update_parent_subparts_cpumask(struct cpuset *cpuset, int cmd, · 1204 unmodified lines | ||
| 1309 | 1309 | * @cs: the cpuset to consider |
| 1310 | 1310 | * @tmp: temp variables for calculating effective_cpus & partition setup |
| 1311 | 1311 | * |
| 1312 | − * When congifured cpumask is changed, the effective cpumasks of this cpuset | |
| 1312 | + * When configured cpumask is changed, the effective cpumasks of this cpuset | |
| 1313 | 1313 | * and all its descendants need to be updated. |
| 1314 | 1314 | * |
| 1315 | − * On legacy hierachy, effective_cpus will be the same with cpu_allowed. | |
| 1315 | + * On legacy hierarchy, effective_cpus will be the same with cpu_allowed. | |
| 1316 | 1316 | * |
| 1317 | 1317 | * Called with cpuset_mutex held |
| 1318 | 1318 | */ |