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

Commit f929d399 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge branch 'akpm' (fixes from Andrew Morton)

Merge fixes from Andrew Morton:
 "5 fixes"

* emailed patches from Andrew Morton <akpm@linux-foundation.org>:
  mm: page_alloc: fix zone allocation fairness on UP
  perf: fix perf bug in fork()
  MAINTAINERS: change git URL for mpc5xxx tree
  mm: memcontrol: do not iterate uninitialized memcgs
  ocfs2/dlm: should put mle when goto kill in dlm_assert_master_handler
parents b601ce0f abe5f972
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -5484,7 +5484,7 @@ F: drivers/macintosh/
LINUX FOR POWERPC EMBEDDED MPC5XXX
LINUX FOR POWERPC EMBEDDED MPC5XXX
M:	Anatolij Gustschin <agust@denx.de>
M:	Anatolij Gustschin <agust@denx.de>
L:	linuxppc-dev@lists.ozlabs.org
L:	linuxppc-dev@lists.ozlabs.org
T:	git git://git.denx.de/linux-2.6-agust.git
T:	git git://git.denx.de/linux-denx-agust.git
S:	Maintained
S:	Maintained
F:	arch/powerpc/platforms/512x/
F:	arch/powerpc/platforms/512x/
F:	arch/powerpc/platforms/52xx/
F:	arch/powerpc/platforms/52xx/
+4 −0
Original line number Original line Diff line number Diff line
@@ -2039,6 +2039,10 @@ int dlm_assert_master_handler(struct o2net_msg *msg, u32 len, void *data,
	     "and killing the other node now!  This node is OK and can continue.\n");
	     "and killing the other node now!  This node is OK and can continue.\n");
	__dlm_print_one_lock_resource(res);
	__dlm_print_one_lock_resource(res);
	spin_unlock(&res->spinlock);
	spin_unlock(&res->spinlock);
	spin_lock(&dlm->master_lock);
	if (mle)
		__dlm_put_mle(mle);
	spin_unlock(&dlm->master_lock);
	spin_unlock(&dlm->spinlock);
	spin_unlock(&dlm->spinlock);
	*ret_data = (void *)res;
	*ret_data = (void *)res;
	dlm_put(dlm);
	dlm_put(dlm);
+3 −1
Original line number Original line Diff line number Diff line
@@ -7948,9 +7948,11 @@ int perf_event_init_task(struct task_struct *child)


	for_each_task_context_nr(ctxn) {
	for_each_task_context_nr(ctxn) {
		ret = perf_event_init_context(child, ctxn);
		ret = perf_event_init_context(child, ctxn);
		if (ret)
		if (ret) {
			perf_event_free_task(child);
			return ret;
			return ret;
		}
		}
	}


	return 0;
	return 0;
}
}
+3 −2
Original line number Original line Diff line number Diff line
@@ -1360,7 +1360,7 @@ static struct task_struct *copy_process(unsigned long clone_flags,
		goto bad_fork_cleanup_policy;
		goto bad_fork_cleanup_policy;
	retval = audit_alloc(p);
	retval = audit_alloc(p);
	if (retval)
	if (retval)
		goto bad_fork_cleanup_policy;
		goto bad_fork_cleanup_perf;
	/* copy all the process information */
	/* copy all the process information */
	shm_init_task(p);
	shm_init_task(p);
	retval = copy_semundo(clone_flags, p);
	retval = copy_semundo(clone_flags, p);
@@ -1566,8 +1566,9 @@ static struct task_struct *copy_process(unsigned long clone_flags,
	exit_sem(p);
	exit_sem(p);
bad_fork_cleanup_audit:
bad_fork_cleanup_audit:
	audit_free(p);
	audit_free(p);
bad_fork_cleanup_policy:
bad_fork_cleanup_perf:
	perf_event_free_task(p);
	perf_event_free_task(p);
bad_fork_cleanup_policy:
#ifdef CONFIG_NUMA
#ifdef CONFIG_NUMA
	mpol_put(p->mempolicy);
	mpol_put(p->mempolicy);
bad_fork_cleanup_threadgroup_lock:
bad_fork_cleanup_threadgroup_lock:
+31 −5
Original line number Original line Diff line number Diff line
@@ -292,6 +292,9 @@ struct mem_cgroup {
	/* vmpressure notifications */
	/* vmpressure notifications */
	struct vmpressure vmpressure;
	struct vmpressure vmpressure;


	/* css_online() has been completed */
	int initialized;

	/*
	/*
	 * the counter to account for mem+swap usage.
	 * the counter to account for mem+swap usage.
	 */
	 */
@@ -1099,10 +1102,21 @@ static struct mem_cgroup *__mem_cgroup_iter_next(struct mem_cgroup *root,
	 * skipping css reference should be safe.
	 * skipping css reference should be safe.
	 */
	 */
	if (next_css) {
	if (next_css) {
		if ((next_css == &root->css) ||
		struct mem_cgroup *memcg = mem_cgroup_from_css(next_css);
		    ((next_css->flags & CSS_ONLINE) &&

		     css_tryget_online(next_css)))
		if (next_css == &root->css)
			return mem_cgroup_from_css(next_css);
			return memcg;

		if (css_tryget_online(next_css)) {
			/*
			 * Make sure the memcg is initialized:
			 * mem_cgroup_css_online() orders the the
			 * initialization against setting the flag.
			 */
			if (smp_load_acquire(&memcg->initialized))
				return memcg;
			css_put(next_css);
		}


		prev_css = next_css;
		prev_css = next_css;
		goto skip_node;
		goto skip_node;
@@ -5549,6 +5563,7 @@ mem_cgroup_css_online(struct cgroup_subsys_state *css)
{
{
	struct mem_cgroup *memcg = mem_cgroup_from_css(css);
	struct mem_cgroup *memcg = mem_cgroup_from_css(css);
	struct mem_cgroup *parent = mem_cgroup_from_css(css->parent);
	struct mem_cgroup *parent = mem_cgroup_from_css(css->parent);
	int ret;


	if (css->id > MEM_CGROUP_ID_MAX)
	if (css->id > MEM_CGROUP_ID_MAX)
		return -ENOSPC;
		return -ENOSPC;
@@ -5585,7 +5600,18 @@ mem_cgroup_css_online(struct cgroup_subsys_state *css)
	}
	}
	mutex_unlock(&memcg_create_mutex);
	mutex_unlock(&memcg_create_mutex);


	return memcg_init_kmem(memcg, &memory_cgrp_subsys);
	ret = memcg_init_kmem(memcg, &memory_cgrp_subsys);
	if (ret)
		return ret;

	/*
	 * Make sure the memcg is initialized: mem_cgroup_iter()
	 * orders reading memcg->initialized against its callers
	 * reading the memcg members.
	 */
	smp_store_release(&memcg->initialized, 1);

	return 0;
}
}


/*
/*
Loading