Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1a698a4a authored by Tejun Heo's avatar Tejun Heo
Browse files

Merge branch 'for-3.14-fixes' into for-3.15



Pending kernfs conversion depends on fixes in for-3.14-fixes.  Pull it
into for-3.15.

Signed-off-by: default avatarTejun Heo <tj@kernel.org>
parents 3417ae1f 48573a89
Loading
Loading
Loading
Loading
+2 −0
Original line number Original line Diff line number Diff line
@@ -2408,8 +2408,10 @@ F: tools/power/cpupower/


CPUSETS
CPUSETS
M:	Li Zefan <lizefan@huawei.com>
M:	Li Zefan <lizefan@huawei.com>
L:	cgroups@vger.kernel.org
W:	http://www.bullopensource.org/cpuset/
W:	http://www.bullopensource.org/cpuset/
W:	http://oss.sgi.com/projects/cpusets/
W:	http://oss.sgi.com/projects/cpusets/
T:	git git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup.git
S:	Maintained
S:	Maintained
F:	Documentation/cgroups/cpusets.txt
F:	Documentation/cgroups/cpusets.txt
F:	include/linux/cpuset.h
F:	include/linux/cpuset.h
+1 −0
Original line number Original line Diff line number Diff line
@@ -24,6 +24,7 @@
#include <linux/cpu_pm.h>
#include <linux/cpu_pm.h>
#include <linux/suspend.h>
#include <linux/suspend.h>
#include <linux/err.h>
#include <linux/err.h>
#include <linux/slab.h>
#include <linux/clk/tegra.h>
#include <linux/clk/tegra.h>


#include <asm/smp_plat.h>
#include <asm/smp_plat.h>
+1 −0
Original line number Original line Diff line number Diff line
@@ -18,6 +18,7 @@
#include <linux/lockd/bind.h>
#include <linux/lockd/bind.h>
#include <linux/nfs_mount.h>
#include <linux/nfs_mount.h>
#include <linux/freezer.h>
#include <linux/freezer.h>
#include <linux/xattr.h>


#include "iostat.h"
#include "iostat.h"
#include "internal.h"
#include "internal.h"
+18 −17
Original line number Original line Diff line number Diff line
@@ -1494,10 +1494,10 @@ static struct dentry *cgroup_mount(struct file_system_type *fs_type,
		mutex_lock(&inode->i_mutex);
		mutex_lock(&inode->i_mutex);
		mutex_lock(&cgroup_mutex);
		mutex_lock(&cgroup_mutex);


		root_cgrp->id = idr_alloc(&root->cgroup_idr, root_cgrp,
		ret = idr_alloc(&root->cgroup_idr, root_cgrp, 0, 1, GFP_KERNEL);
					   0, 1, GFP_KERNEL);
		if (ret < 0)
		if (root_cgrp->id < 0)
			goto unlock_drop;
			goto unlock_drop;
		root_cgrp->id = ret;


		/* Check for name clashes with existing mounts */
		/* Check for name clashes with existing mounts */
		ret = -EBUSY;
		ret = -EBUSY;
@@ -2687,10 +2687,7 @@ static int cgroup_cfts_commit(struct cftype *cfts, bool is_add)
	 */
	 */
	update_before = cgroup_serial_nr_next;
	update_before = cgroup_serial_nr_next;


	mutex_unlock(&cgroup_mutex);

	/* add/rm files for all cgroups created before */
	/* add/rm files for all cgroups created before */
	rcu_read_lock();
	css_for_each_descendant_pre(css, cgroup_css(root, ss)) {
	css_for_each_descendant_pre(css, cgroup_css(root, ss)) {
		struct cgroup *cgrp = css->cgroup;
		struct cgroup *cgrp = css->cgroup;


@@ -2699,23 +2696,19 @@ static int cgroup_cfts_commit(struct cftype *cfts, bool is_add)


		inode = cgrp->dentry->d_inode;
		inode = cgrp->dentry->d_inode;
		dget(cgrp->dentry);
		dget(cgrp->dentry);
		rcu_read_unlock();

		dput(prev);
		dput(prev);
		prev = cgrp->dentry;
		prev = cgrp->dentry;


		mutex_unlock(&cgroup_mutex);
		mutex_lock(&inode->i_mutex);
		mutex_lock(&inode->i_mutex);
		mutex_lock(&cgroup_mutex);
		mutex_lock(&cgroup_mutex);
		if (cgrp->serial_nr < update_before && !cgroup_is_dead(cgrp))
		if (cgrp->serial_nr < update_before && !cgroup_is_dead(cgrp))
			ret = cgroup_addrm_files(cgrp, cfts, is_add);
			ret = cgroup_addrm_files(cgrp, cfts, is_add);
		mutex_unlock(&cgroup_mutex);
		mutex_unlock(&inode->i_mutex);
		mutex_unlock(&inode->i_mutex);

		rcu_read_lock();
		if (ret)
		if (ret)
			break;
			break;
	}
	}
	rcu_read_unlock();
	mutex_unlock(&cgroup_mutex);
	dput(prev);
	dput(prev);
	deactivate_super(sb);
	deactivate_super(sb);
	return ret;
	return ret;
@@ -4082,7 +4075,7 @@ static long cgroup_create(struct cgroup *parent, struct dentry *dentry,
	struct cgroup *cgrp;
	struct cgroup *cgrp;
	struct cgroup_name *name;
	struct cgroup_name *name;
	struct cgroupfs_root *root = parent->root;
	struct cgroupfs_root *root = parent->root;
	int ssid, err = 0;
	int ssid, err;
	struct cgroup_subsys *ss;
	struct cgroup_subsys *ss;
	struct super_block *sb = root->sb;
	struct super_block *sb = root->sb;


@@ -4092,8 +4085,10 @@ static long cgroup_create(struct cgroup *parent, struct dentry *dentry,
		return -ENOMEM;
		return -ENOMEM;


	name = cgroup_alloc_name(dentry);
	name = cgroup_alloc_name(dentry);
	if (!name)
	if (!name) {
		err = -ENOMEM;
		goto err_free_cgrp;
		goto err_free_cgrp;
	}
	rcu_assign_pointer(cgrp->name, name);
	rcu_assign_pointer(cgrp->name, name);


	/*
	/*
@@ -4101,8 +4096,10 @@ static long cgroup_create(struct cgroup *parent, struct dentry *dentry,
	 * a half-baked cgroup.
	 * a half-baked cgroup.
	 */
	 */
	cgrp->id = idr_alloc(&root->cgroup_idr, NULL, 1, 0, GFP_KERNEL);
	cgrp->id = idr_alloc(&root->cgroup_idr, NULL, 1, 0, GFP_KERNEL);
	if (cgrp->id < 0)
	if (cgrp->id < 0) {
		err = -ENOMEM;
		goto err_free_name;
		goto err_free_name;
	}


	/*
	/*
	 * Only live parents can have children.  Note that the liveliness
	 * Only live parents can have children.  Note that the liveliness
@@ -4589,12 +4586,16 @@ static int __init cgroup_wq_init(void)
	/*
	/*
	 * There isn't much point in executing destruction path in
	 * There isn't much point in executing destruction path in
	 * parallel.  Good chunk is serialized with cgroup_mutex anyway.
	 * parallel.  Good chunk is serialized with cgroup_mutex anyway.
	 * Use 1 for @max_active.
	 *
	 * XXX: Must be ordered to make sure parent is offlined after
	 * children.  The ordering requirement is for memcg where a
	 * parent's offline may wait for a child's leading to deadlock.  In
	 * the long term, this should be fixed from memcg side.
	 *
	 *
	 * We would prefer to do this in cgroup_init() above, but that
	 * We would prefer to do this in cgroup_init() above, but that
	 * is called before init_workqueues(): so leave this until after.
	 * is called before init_workqueues(): so leave this until after.
	 */
	 */
	cgroup_destroy_wq = alloc_workqueue("cgroup_destroy", 0, 1);
	cgroup_destroy_wq = alloc_ordered_workqueue("cgroup_destroy", 0);
	BUG_ON(!cgroup_destroy_wq);
	BUG_ON(!cgroup_destroy_wq);


	/*
	/*
+1 −0
Original line number Original line Diff line number Diff line
@@ -9,6 +9,7 @@
#include <linux/kbd_kern.h>
#include <linux/kbd_kern.h>
#include <linux/vt.h>
#include <linux/vt.h>
#include <linux/module.h>
#include <linux/module.h>
#include <linux/slab.h>
#include "power.h"
#include "power.h"


#define SUSPEND_CONSOLE	(MAX_NR_CONSOLES-1)
#define SUSPEND_CONSOLE	(MAX_NR_CONSOLES-1)
Loading