+ mm-migrate-do-not-touch-page-mem_cgroup-of-live-pages-fix-2.patch added to -mm tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



The patch titled
     Subject: mm-migrate-do-not-touch-page-mem_cgroup-of-live-pages-fix-2
has been added to the -mm tree.  Its filename is
     mm-migrate-do-not-touch-page-mem_cgroup-of-live-pages-fix-2.patch

This patch should soon appear at
    http://ozlabs.org/~akpm/mmots/broken-out/mm-migrate-do-not-touch-page-mem_cgroup-of-live-pages-fix-2.patch
and later at
    http://ozlabs.org/~akpm/mmotm/broken-out/mm-migrate-do-not-touch-page-mem_cgroup-of-live-pages-fix-2.patch

Before you just go and hit "reply", please:
   a) Consider who else should be cc'ed
   b) Prefer to cc a suitable mailing list as well
   c) Ideally: find the original patch on the mailing list and do a
      reply-to-all to that, adding suitable additional cc's

*** Remember to use Documentation/SubmitChecklist when testing your code ***

The -mm tree is included into linux-next and is updated
there every 3-4 working days

------------------------------------------------------
From: Vladimir Davydov <vdavydov@xxxxxxxxxxxxx>
Subject: mm-migrate-do-not-touch-page-mem_cgroup-of-live-pages-fix-2

It must be safe to move these calls outside tree_lock:

Will hopefully fix the lockdep splat:

[ 3587.997451] =================================
[ 3587.997453] [ INFO: inconsistent lock state ]
[ 3587.997456] 4.5.0-rc2-next-20160203-dbg-00007-g37a0a9d-dirty #377 Not tainted
[ 3587.997457] ---------------------------------
[ 3587.997459] inconsistent {IN-SOFTIRQ-W} -> {SOFTIRQ-ON-W} usage.
[ 3587.997462] cc1plus/22766 [HC0[0]:SC0[0]:HE1:SE1] takes:
[ 3587.997464]  (&(&mapping->tree_lock)->rlock){+.?...}, at: [<ffffffff8113aaee>] migrate_page_move_mapping+0xbd/0x33f
[ 3587.997474] {IN-SOFTIRQ-W} state was registered at:
[ 3587.997476]   [<ffffffff81082515>] __lock_acquire+0x973/0x18fc
[ 3587.997481]   [<ffffffff81083c77>] lock_acquire+0x10d/0x1a8
[ 3587.997484]   [<ffffffff813c3486>] _raw_spin_lock_irqsave+0x3d/0x51
[ 3587.997489]   [<ffffffff81100552>] test_clear_page_writeback+0x75/0x1b4
[ 3587.997493]   [<ffffffff810f53cb>] end_page_writeback+0x29/0x4a
[ 3587.997497]   [<ffffffff8117ffd5>] end_buffer_async_write+0xfb/0x176
[ 3587.997501]   [<ffffffff8117fb53>] end_bio_bh_io_sync+0x2c/0x37
[ 3587.997503]   [<ffffffff811d0a43>] bio_endio+0x53/0x5b
[ 3587.997508]   [<ffffffff811d8548>] blk_update_request+0x1fb/0x34d
[ 3587.997512]   [<ffffffffa00ed512>] scsi_end_request+0x31/0x182 [scsi_mod]
[ 3587.997522]   [<ffffffffa00eec2d>] scsi_io_completion+0x186/0x46e [scsi_mod]
[ 3587.997530]   [<ffffffffa00e7aa2>] scsi_finish_command+0xd4/0xdd [scsi_mod]
[ 3587.997537]   [<ffffffffa00ee51c>] scsi_softirq_done+0xe0/0xe7 [scsi_mod]
[ 3587.997544]   [<ffffffff811df3ef>] blk_done_softirq+0x84/0x8b
[ 3587.997548]   [<ffffffff8104625c>] __do_softirq+0x196/0x3f5
[ 3587.997552]   [<ffffffff810466aa>] irq_exit+0x40/0x94
[ 3587.997554]   [<ffffffff813c6041>] do_IRQ+0x101/0x119
[ 3587.997558]   [<ffffffff813c4689>] ret_from_intr+0x0/0x19
[ 3587.997561]   [<ffffffff812d9906>] cpuidle_enter+0x17/0x19
[ 3587.997565]   [<ffffffff8107c32a>] call_cpuidle+0x3e/0x40
[ 3587.997569]   [<ffffffff8107c65b>] cpu_startup_entry+0x242/0x35e
[ 3587.997572]   [<ffffffff813bd4fa>] rest_init+0x131/0x137
[ 3587.997575]   [<ffffffff816d4ec1>] start_kernel+0x3dd/0x3ea
[ 3587.997579]   [<ffffffff816d42f1>] x86_64_start_reservations+0x2a/0x2c
[ 3587.997582]   [<ffffffff816d445d>] x86_64_start_kernel+0x16a/0x178
[ 3587.997586] irq event stamp: 191930
[ 3587.997587] hardirqs last  enabled at (191929): [<ffffffff810fb0da>] free_hot_cold_page+0x166/0x179
[ 3587.997591] hardirqs last disabled at (191930): [<ffffffff813c34ad>] _raw_spin_lock_irq+0x13/0x47
[ 3587.997594] softirqs last  enabled at (191758): [<ffffffff810463a5>] __do_softirq+0x2df/0x3f5
[ 3587.997597] softirqs last disabled at (191741): [<ffffffff810466aa>] irq_exit+0x40/0x94
[ 3587.997600] 
               other info that might help us debug this:
[ 3587.997602]  Possible unsafe locking scenario:

[ 3587.997604]        CPU0
[ 3587.997605]        ----
[ 3587.997607]   lock(&(&mapping->tree_lock)->rlock);
[ 3587.997610]   <Interrupt>
[ 3587.997611]     lock(&(&mapping->tree_lock)->rlock);
[ 3587.997614] 
                *** DEADLOCK ***

[ 3587.997617] 2 locks held by cc1plus/22766:
[ 3587.997618]  #0:  (&mm->mmap_sem){++++++}, at: [<ffffffff81036ee0>] __do_page_fault+0x140/0x35a
[ 3587.997626]  #1:  (&(&mapping->tree_lock)->rlock){+.?...}, at: [<ffffffff8113aaee>] migrate_page_move_mapping+0xbd/0x33f
[ 3587.997633] 
               stack backtrace:
[ 3587.997636] CPU: 7 PID: 22766 Comm: cc1plus Not tainted 4.5.0-rc2-next-20160203-dbg-00007-g37a0a9d-dirty #377
[ 3587.997638]  0000000000000000 ffff88010f73f818 ffffffff811f1b02 ffffffff81f35160
[ 3587.997643]  ffff88013813e900 ffff88010f73f850 ffffffff810f3000 0000000000000006
[ 3587.997647]  ffff88013813f058 ffff88013813e900 ffffffff8107f99d 0000000000000006
[ 3587.997651] Call Trace:
[ 3587.997656]  [<ffffffff811f1b02>] dump_stack+0x67/0x90
[ 3587.997660]  [<ffffffff810f3000>] print_usage_bug.part.24+0x259/0x268
[ 3587.997663]  [<ffffffff8107f99d>] ? check_usage_forwards+0x11c/0x11c
[ 3587.997666]  [<ffffffff81080579>] mark_lock+0x381/0x567
[ 3587.997670]  [<ffffffff810807bd>] mark_held_locks+0x5e/0x74
[ 3587.997673]  [<ffffffff813c363f>] ? _raw_spin_unlock_irq+0x2c/0x4a
[ 3587.997676]  [<ffffffff8108093f>] trace_hardirqs_on_caller+0x16c/0x188
[ 3587.997679]  [<ffffffff81080968>] trace_hardirqs_on+0xd/0xf
[ 3587.997682]  [<ffffffff813c363f>] _raw_spin_unlock_irq+0x2c/0x4a
[ 3587.997686]  [<ffffffff81148bef>] unlock_page_lru+0x11f/0x12a
[ 3587.997689]  [<ffffffff8114a90f>] mem_cgroup_migrate+0x196/0x1d9
[ 3587.997692]  [<ffffffff8113abf3>] migrate_page_move_mapping+0x1c2/0x33f
[ 3587.997696]  [<ffffffff8113b669>] buffer_migrate_page+0x47/0x102
[ 3587.997699]  [<ffffffff8113b4e4>] move_to_new_page+0x56/0x194
[ 3587.997702]  [<ffffffff8113bb6b>] migrate_pages+0x447/0x978
[ 3587.997705]  [<ffffffff811171f0>] ? isolate_freepages_block+0x353/0x353
[ 3587.997708]  [<ffffffff81115cd6>] ? pageblock_pfn_to_page+0xbf/0xbf
[ 3587.997711]  [<ffffffff81118834>] compact_zone+0x690/0x92e
[ 3587.997714]  [<ffffffff81118b40>] compact_zone_order+0x6e/0x8a
[ 3587.997717]  [<ffffffff81118dc3>] try_to_compact_pages+0x151/0x28f
[ 3587.997720]  [<ffffffff81118dc3>] ? try_to_compact_pages+0x151/0x28f
[ 3587.997723]  [<ffffffff8108111a>] ? __lock_is_held+0x3c/0x57
[ 3587.997726]  [<ffffffff810fc471>] __alloc_pages_direct_compact+0x3e/0xeb
[ 3587.997729]  [<ffffffff810fc965>] __alloc_pages_nodemask+0x447/0xb8b
[ 3587.997732]  [<ffffffff81120a18>] ? handle_mm_fault+0x8b4/0x16bf
[ 3587.997737]  [<ffffffff8106409f>] ? __might_sleep+0x75/0x7c
[ 3587.997740]  [<ffffffff81140704>] do_huge_pmd_anonymous_page+0x1d1/0x3fc
[ 3587.997744]  [<ffffffff811202ae>] ? handle_mm_fault+0x14a/0x16bf
[ 3587.997747]  [<ffffffff81120623>] handle_mm_fault+0x4bf/0x16bf
[ 3587.997750]  [<ffffffff8108111a>] ? __lock_is_held+0x3c/0x57
[ 3587.997754]  [<ffffffff81036f7f>] __do_page_fault+0x1df/0x35a
[ 3587.997757]  [<ffffffff8103712c>] do_page_fault+0xc/0xe
[ 3587.997760]  [<ffffffff813c5892>] page_fault+0x22/0x30

Reported-by: Sergey Senozhatsky <sergey.senozhatsky@xxxxxxxxx>
Cc: Johannes Weiner <hannes@xxxxxxxxxxx>
Cc: Michal Hocko <mhocko@xxxxxxx>
Cc: Vladimir Davydov <vdavydov@xxxxxxxxxxxxx>
Cc: Greg Thelen <gthelen@xxxxxxxxxx>
Cc: Hugh Dickins <hughd@xxxxxxxxxx>
Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>
---

 mm/migrate.c |    9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff -puN mm/migrate.c~mm-migrate-do-not-touch-page-mem_cgroup-of-live-pages-fix-2 mm/migrate.c
--- a/mm/migrate.c~mm-migrate-do-not-touch-page-mem_cgroup-of-live-pages-fix-2
+++ a/mm/migrate.c
@@ -379,8 +379,6 @@ int migrate_page_move_mapping(struct add
 	if (PageSwapBacked(page))
 		SetPageSwapBacked(newpage);
 
-	mem_cgroup_migrate(page, newpage);
-
 	get_page(newpage);	/* add cache reference */
 	if (PageSwapCache(page)) {
 		SetPageSwapCache(newpage);
@@ -430,6 +428,8 @@ int migrate_page_move_mapping(struct add
 	}
 	local_irq_enable();
 
+	mem_cgroup_migrate(page, newpage);
+
 	return MIGRATEPAGE_SUCCESS;
 }
 
@@ -463,8 +463,6 @@ int migrate_huge_page_move_mapping(struc
 	newpage->index = page->index;
 	newpage->mapping = page->mapping;
 
-	mem_cgroup_migrate(page, newpage);
-
 	get_page(newpage);
 
 	radix_tree_replace_slot(pslot, newpage);
@@ -472,6 +470,9 @@ int migrate_huge_page_move_mapping(struc
 	page_unfreeze_refs(page, expected_count - 1);
 
 	spin_unlock_irq(&mapping->tree_lock);
+
+	mem_cgroup_migrate(page, newpage);
+
 	return MIGRATEPAGE_SUCCESS;
 }
 
_

Patches currently in -mm which might be from vdavydov@xxxxxxxxxxxxx are

mm-vmscan-do-not-clear-shrinker_numa_aware-if-nr_node_ids-==-1.patch
mm-migrate-do-not-touch-page-mem_cgroup-of-live-pages-fix-2.patch

--
To unsubscribe from this list: send the line "unsubscribe mm-commits" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Kernel Newbies FAQ]     [Kernel Archive]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [Bugtraq]     [Photo]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]

  Powered by Linux