)]}'
{
  "commit": "8891d6da17db0f9bb507d3a017f130b9970c3087",
  "tree": "fd0fa107c4b85649722b9921a4bcdb35776eb36f",
  "parents": [
    "a189d0350f387786b1fb5a5d19e3a5ab0bc0cceb"
  ],
  "author": {
    "name": "KOSAKI Motohiro",
    "email": "kosaki.motohiro@jp.fujitsu.com",
    "time": "Wed Nov 12 13:26:53 2008 -0800"
  },
  "committer": {
    "name": "Linus Torvalds",
    "email": "torvalds@linux-foundation.org",
    "time": "Wed Nov 12 17:17:16 2008 -0800"
  },
  "message": "mm: remove lru_add_drain_all() from the munlock path\n\nlockdep warns about following message at boot time on one of my test\nmachine.  Then, schedule_on_each_cpu() sholdn\u0027t be called when the task\nhave mmap_sem.\n\nActually, lru_add_drain_all() exist to prevent the unevictalble pages\nstay on reclaimable lru list.  but currenct unevictable code can rescue\nunevictable pages although it stay on reclaimable list.\n\nSo removing is better.\n\nIn addition, this patch add lru_add_drain_all() to sys_mlock() and\nsys_mlockall().  it isn\u0027t must.  but it reduce the failure of moving to\nunevictable list.  its failure can rescue in vmscan later.  but reducing\nis better.\n\nNote, if above rescuing happend, the Mlocked and the Unevictable field\nmismatching happend in /proc/meminfo.  but it doesn\u0027t cause any real\ntrouble.\n\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n[ INFO: possible circular locking dependency detected ]\n2.6.28-rc2-mm1 #2\n-------------------------------------------------------\nlvm/1103 is trying to acquire lock:\n (\u0026cpu_hotplug.lock){--..}, at: [\u003cc0130789\u003e] get_online_cpus+0x29/0x50\n\nbut task is already holding lock:\n (\u0026mm-\u003emmap_sem){----}, at: [\u003cc01878ae\u003e] sys_mlockall+0x4e/0xb0\n\nwhich lock already depends on the new lock.\n\nthe existing dependency chain (in reverse order) is:\n\n-\u003e #3 (\u0026mm-\u003emmap_sem){----}:\n       [\u003cc0153da2\u003e] check_noncircular+0x82/0x110\n       [\u003cc0185e6a\u003e] might_fault+0x4a/0xa0\n       [\u003cc0156161\u003e] validate_chain+0xb11/0x1070\n       [\u003cc0185e6a\u003e] might_fault+0x4a/0xa0\n       [\u003cc0156923\u003e] __lock_acquire+0x263/0xa10\n       [\u003cc015714c\u003e] lock_acquire+0x7c/0xb0\t\t\t(*) grab mmap_sem\n       [\u003cc0185e6a\u003e] might_fault+0x4a/0xa0\n       [\u003cc0185e9b\u003e] might_fault+0x7b/0xa0\n       [\u003cc0185e6a\u003e] might_fault+0x4a/0xa0\n       [\u003cc0294dd0\u003e] copy_to_user+0x30/0x60\n       [\u003cc01ae3ec\u003e] filldir+0x7c/0xd0\n       [\u003cc01e3a6a\u003e] sysfs_readdir+0x11a/0x1f0\t\t\t(*) grab sysfs_mutex\n       [\u003cc01ae370\u003e] filldir+0x0/0xd0\n       [\u003cc01ae370\u003e] filldir+0x0/0xd0\n       [\u003cc01ae4c6\u003e] vfs_readdir+0x86/0xa0\t\t\t(*) grab i_mutex\n       [\u003cc01ae75b\u003e] sys_getdents+0x6b/0xc0\n       [\u003cc010355a\u003e] syscall_call+0x7/0xb\n       [\u003cffffffff\u003e] 0xffffffff\n\n-\u003e #2 (sysfs_mutex){--..}:\n       [\u003cc0153da2\u003e] check_noncircular+0x82/0x110\n       [\u003cc01e3d2c\u003e] sysfs_addrm_start+0x2c/0xc0\n       [\u003cc0156161\u003e] validate_chain+0xb11/0x1070\n       [\u003cc01e3d2c\u003e] sysfs_addrm_start+0x2c/0xc0\n       [\u003cc0156923\u003e] __lock_acquire+0x263/0xa10\n       [\u003cc015714c\u003e] lock_acquire+0x7c/0xb0\t\t\t(*) grab sysfs_mutex\n       [\u003cc01e3d2c\u003e] sysfs_addrm_start+0x2c/0xc0\n       [\u003cc04f8b55\u003e] mutex_lock_nested+0xa5/0x2f0\n       [\u003cc01e3d2c\u003e] sysfs_addrm_start+0x2c/0xc0\n       [\u003cc01e3d2c\u003e] sysfs_addrm_start+0x2c/0xc0\n       [\u003cc01e3d2c\u003e] sysfs_addrm_start+0x2c/0xc0\n       [\u003cc01e422f\u003e] create_dir+0x3f/0x90\n       [\u003cc01e42a9\u003e] sysfs_create_dir+0x29/0x50\n       [\u003cc04faaf5\u003e] _spin_unlock+0x25/0x40\n       [\u003cc028f21d\u003e] kobject_add_internal+0xcd/0x1a0\n       [\u003cc028f37a\u003e] kobject_set_name_vargs+0x3a/0x50\n       [\u003cc028f41d\u003e] kobject_init_and_add+0x2d/0x40\n       [\u003cc019d4d2\u003e] sysfs_slab_add+0xd2/0x180\n       [\u003cc019d580\u003e] sysfs_add_func+0x0/0x70\n       [\u003cc019d5dc\u003e] sysfs_add_func+0x5c/0x70\t\t\t(*) grab slub_lock\n       [\u003cc01400f2\u003e] run_workqueue+0x172/0x200\n       [\u003cc014008f\u003e] run_workqueue+0x10f/0x200\n       [\u003cc0140bd0\u003e] worker_thread+0x0/0xf0\n       [\u003cc0140c6c\u003e] worker_thread+0x9c/0xf0\n       [\u003cc0143c80\u003e] autoremove_wake_function+0x0/0x50\n       [\u003cc0140bd0\u003e] worker_thread+0x0/0xf0\n       [\u003cc0143972\u003e] kthread+0x42/0x70\n       [\u003cc0143930\u003e] kthread+0x0/0x70\n       [\u003cc01042db\u003e] kernel_thread_helper+0x7/0x1c\n       [\u003cffffffff\u003e] 0xffffffff\n\n-\u003e #1 (slub_lock){----}:\n       [\u003cc0153d2d\u003e] check_noncircular+0xd/0x110\n       [\u003cc04f650f\u003e] slab_cpuup_callback+0x11f/0x1d0\n       [\u003cc0156161\u003e] validate_chain+0xb11/0x1070\n       [\u003cc04f650f\u003e] slab_cpuup_callback+0x11f/0x1d0\n       [\u003cc015433d\u003e] mark_lock+0x35d/0xd00\n       [\u003cc0156923\u003e] __lock_acquire+0x263/0xa10\n       [\u003cc015714c\u003e] lock_acquire+0x7c/0xb0\n       [\u003cc04f650f\u003e] slab_cpuup_callback+0x11f/0x1d0\n       [\u003cc04f93a3\u003e] down_read+0x43/0x80\n       [\u003cc04f650f\u003e] slab_cpuup_callback+0x11f/0x1d0\t\t(*) grab slub_lock\n       [\u003cc04f650f\u003e] slab_cpuup_callback+0x11f/0x1d0\n       [\u003cc04fd9ac\u003e] notifier_call_chain+0x3c/0x70\n       [\u003cc04f5454\u003e] _cpu_up+0x84/0x110\n       [\u003cc04f552b\u003e] cpu_up+0x4b/0x70\t\t\t\t(*) grab cpu_hotplug.lock\n       [\u003cc06d1530\u003e] kernel_init+0x0/0x170\n       [\u003cc06d15e5\u003e] kernel_init+0xb5/0x170\n       [\u003cc06d1530\u003e] kernel_init+0x0/0x170\n       [\u003cc01042db\u003e] kernel_thread_helper+0x7/0x1c\n       [\u003cffffffff\u003e] 0xffffffff\n\n-\u003e #0 (\u0026cpu_hotplug.lock){--..}:\n       [\u003cc0155bff\u003e] validate_chain+0x5af/0x1070\n       [\u003cc040f7e0\u003e] dev_status+0x0/0x50\n       [\u003cc0156923\u003e] __lock_acquire+0x263/0xa10\n       [\u003cc015714c\u003e] lock_acquire+0x7c/0xb0\n       [\u003cc0130789\u003e] get_online_cpus+0x29/0x50\n       [\u003cc04f8b55\u003e] mutex_lock_nested+0xa5/0x2f0\n       [\u003cc0130789\u003e] get_online_cpus+0x29/0x50\n       [\u003cc0130789\u003e] get_online_cpus+0x29/0x50\n       [\u003cc017bc30\u003e] lru_add_drain_per_cpu+0x0/0x10\n       [\u003cc0130789\u003e] get_online_cpus+0x29/0x50\t\t\t(*) grab cpu_hotplug.lock\n       [\u003cc0140cf2\u003e] schedule_on_each_cpu+0x32/0xe0\n       [\u003cc0187095\u003e] __mlock_vma_pages_range+0x85/0x2c0\n       [\u003cc0156945\u003e] __lock_acquire+0x285/0xa10\n       [\u003cc0188f09\u003e] vma_merge+0xa9/0x1d0\n       [\u003cc0187450\u003e] mlock_fixup+0x180/0x200\n       [\u003cc0187548\u003e] do_mlockall+0x78/0x90\t\t\t(*) grab mmap_sem\n       [\u003cc01878e1\u003e] sys_mlockall+0x81/0xb0\n       [\u003cc010355a\u003e] syscall_call+0x7/0xb\n       [\u003cffffffff\u003e] 0xffffffff\n\nother info that might help us debug this:\n\n1 lock held by lvm/1103:\n #0:  (\u0026mm-\u003emmap_sem){----}, at: [\u003cc01878ae\u003e] sys_mlockall+0x4e/0xb0\n\nstack backtrace:\nPid: 1103, comm: lvm Not tainted 2.6.28-rc2-mm1 #2\nCall Trace:\n [\u003cc01555fc\u003e] print_circular_bug_tail+0x7c/0xd0\n [\u003cc0155bff\u003e] validate_chain+0x5af/0x1070\n [\u003cc040f7e0\u003e] dev_status+0x0/0x50\n [\u003cc0156923\u003e] __lock_acquire+0x263/0xa10\n [\u003cc015714c\u003e] lock_acquire+0x7c/0xb0\n [\u003cc0130789\u003e] get_online_cpus+0x29/0x50\n [\u003cc04f8b55\u003e] mutex_lock_nested+0xa5/0x2f0\n [\u003cc0130789\u003e] get_online_cpus+0x29/0x50\n [\u003cc0130789\u003e] get_online_cpus+0x29/0x50\n [\u003cc017bc30\u003e] lru_add_drain_per_cpu+0x0/0x10\n [\u003cc0130789\u003e] get_online_cpus+0x29/0x50\n [\u003cc0140cf2\u003e] schedule_on_each_cpu+0x32/0xe0\n [\u003cc0187095\u003e] __mlock_vma_pages_range+0x85/0x2c0\n [\u003cc0156945\u003e] __lock_acquire+0x285/0xa10\n [\u003cc0188f09\u003e] vma_merge+0xa9/0x1d0\n [\u003cc0187450\u003e] mlock_fixup+0x180/0x200\n [\u003cc0187548\u003e] do_mlockall+0x78/0x90\n [\u003cc01878e1\u003e] sys_mlockall+0x81/0xb0\n [\u003cc010355a\u003e] syscall_call+0x7/0xb\n\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nTested-by: Kamalesh Babulal \u003ckamalesh@linux.vnet.ibm.com\u003e\nCc: Lee Schermerhorn \u003cLee.Schermerhorn@hp.com\u003e\nCc: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nCc: Heiko Carstens \u003cheiko.carstens@de.ibm.com\u003e\nCc: Nick Piggin \u003cnickpiggin@yahoo.com.au\u003e\nCc: Hugh Dickins \u003chugh@veritas.com\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nCc: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "008ea70b7afa9a2baed56cdc9b6b43ef0b05a6ff",
      "old_mode": 33188,
      "old_path": "mm/mlock.c",
      "new_id": "a6da2aee940af0873f46bd1b88b24a36242979b3",
      "new_mode": 33188,
      "new_path": "mm/mlock.c"
    }
  ]
}
