diff options
Diffstat (limited to 'kernel/cgroup.c')
-rw-r--r-- | kernel/cgroup.c | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/kernel/cgroup.c b/kernel/cgroup.c index 909a35510af5..38fb0ad1cb46 100644 --- a/kernel/cgroup.c +++ b/kernel/cgroup.c | |||
@@ -1759,7 +1759,7 @@ int cgroup_attach_task(struct cgroup *cgrp, struct task_struct *tsk) | |||
1759 | 1759 | ||
1760 | for_each_subsys(root, ss) { | 1760 | for_each_subsys(root, ss) { |
1761 | if (ss->can_attach) { | 1761 | if (ss->can_attach) { |
1762 | retval = ss->can_attach(ss, cgrp, tsk, false); | 1762 | retval = ss->can_attach(ss, cgrp, tsk); |
1763 | if (retval) { | 1763 | if (retval) { |
1764 | /* | 1764 | /* |
1765 | * Remember on which subsystem the can_attach() | 1765 | * Remember on which subsystem the can_attach() |
@@ -1771,6 +1771,13 @@ int cgroup_attach_task(struct cgroup *cgrp, struct task_struct *tsk) | |||
1771 | goto out; | 1771 | goto out; |
1772 | } | 1772 | } |
1773 | } | 1773 | } |
1774 | if (ss->can_attach_task) { | ||
1775 | retval = ss->can_attach_task(cgrp, tsk); | ||
1776 | if (retval) { | ||
1777 | failed_ss = ss; | ||
1778 | goto out; | ||
1779 | } | ||
1780 | } | ||
1774 | } | 1781 | } |
1775 | 1782 | ||
1776 | task_lock(tsk); | 1783 | task_lock(tsk); |
@@ -1805,8 +1812,12 @@ int cgroup_attach_task(struct cgroup *cgrp, struct task_struct *tsk) | |||
1805 | write_unlock(&css_set_lock); | 1812 | write_unlock(&css_set_lock); |
1806 | 1813 | ||
1807 | for_each_subsys(root, ss) { | 1814 | for_each_subsys(root, ss) { |
1815 | if (ss->pre_attach) | ||
1816 | ss->pre_attach(cgrp); | ||
1817 | if (ss->attach_task) | ||
1818 | ss->attach_task(cgrp, tsk); | ||
1808 | if (ss->attach) | 1819 | if (ss->attach) |
1809 | ss->attach(ss, cgrp, oldcgrp, tsk, false); | 1820 | ss->attach(ss, cgrp, oldcgrp, tsk); |
1810 | } | 1821 | } |
1811 | set_bit(CGRP_RELEASABLE, &oldcgrp->flags); | 1822 | set_bit(CGRP_RELEASABLE, &oldcgrp->flags); |
1812 | synchronize_rcu(); | 1823 | synchronize_rcu(); |
@@ -1829,7 +1840,7 @@ out: | |||
1829 | */ | 1840 | */ |
1830 | break; | 1841 | break; |
1831 | if (ss->cancel_attach) | 1842 | if (ss->cancel_attach) |
1832 | ss->cancel_attach(ss, cgrp, tsk, false); | 1843 | ss->cancel_attach(ss, cgrp, tsk); |
1833 | } | 1844 | } |
1834 | } | 1845 | } |
1835 | return retval; | 1846 | return retval; |