Re: [-mm][PATCH 4/4] Add memrlimit controller accounting and control (v5)

Vivek Goyal
2008-05-21T17:25:01Z

On Wed, May 21, 2008 at 09:00:12PM +0530, Balbir Singh wrote:

[..]
> +static void memrlimit_cgroup_move_task(struct cgroup_subsys *ss,
> + struct cgroup *cgrp,
> + struct cgroup *old_cgrp,
> + struct task_struct *p)
> +{
> + struct mm_struct *mm;
> + struct memrlimit_cgroup *memrcg, *old_memrcg;
> +
> + mm = get_task_mm(p);
> + if (mm == NULL)
> + return;
> +
> + /*
> + * Hold mmap_sem, so that total_vm does not change underneath us
> + */
> + down_read(&mm->mmap_sem);
> +
> + rcu_read_lock();
> + if (p != rcu_dereference(mm->owner))
> + goto out;
> +

Hi Balbir,

How does rcu help here? We are not dereferencing mm->owner. So even if
task_struct it was pointing to goes away, should not be a problem.

OTOH, while updating the mm->owner in mmm_update_next_owner(), we
are not using rcu_assing_pointer() and synchronize_rcu()/call_rcu(). Is
this the right usage if mm->owner is rcu protected?

Thanks
Vivek