Re: [patch 12/12] mm: correctly synchronize rss-counters at exit/exec
From: Konstantin Khlebnikov <hidden>
Date: 2012-06-08 13:29:10
Also in:
lkml, stable
Oleg Nesterov wrote:
On 06/08, Konstantin Khlebnikov wrote:quoted
As result you can see "BUG: Bad rss-counter state mm:ffff88040783a680 idx:1 val:-1" in dmesg There left only one problem: nobody calls sync_mm_rss() after put_user() in mm_release().Both callers call sync_mm_rss() to make check_mm() happy. But please see the changelog, I think we should move it into mm_release(). See the patch below (on top of v2 I sent). I need to recheck.
Patch below broken: it removes one hunk from kernel/exit.c twice. And it does not add anything into mm_release().
quoted hunk ↗ jump to hunk
As for xacct_add_tsk(), yes it can "miss" that put_user(). But this is what we have now, I think we do not care. Oleg.--- x/fs/exec.c +++ x/fs/exec.c@@ -822,7 +822,6 @@ static int exec_mmap(struct mm_struct *m mm_release(tsk, old_mm); if (old_mm) { - sync_mm_rss(old_mm); /* * Make sure that if there is a core dump in progress * for the old mm, we get out and die instead of going --- x/kernel/exit.c +++ x/kernel/exit.c@@ -656,7 +656,6 @@ static void exit_mm(struct task_struct * if (!mm) return; - sync_mm_rss(mm); /* * Serialize with any possible pending coredump. * We must hold mmap_sem around checking core_state --- x/kernel/taskstats.c +++ x/kernel/taskstats.c@@ -630,8 +630,7 @@ void taskstats_exit(struct task_struct * if (!stats) goto err; - if (tsk->mm) - sync_mm_rss(tsk->mm); + sync_mm_rss(tsk->mm); fill_stats(tsk, stats); /* --- x/kernel/exit.c +++ x/kernel/exit.c@@ -656,7 +656,6 @@ static void exit_mm(struct task_struct * if (!mm) return; - sync_mm_rss(mm); /* * Serialize with any possible pending coredump. * We must hold mmap_sem around checking core_state
-- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>