)]}'
{
  "log": [
    {
      "commit": "f982f91516fa4cfd9d20518833cd04ad714585be",
      "tree": "15c7992ad6e54fbda868a026afd5ecf98f9b1bca",
      "parents": [
        "97c24d1d455df17ca3ef281d1a290988f4686643"
      ],
      "author": {
        "name": "Clemens Ladisch",
        "email": "clemens@ladisch.de",
        "time": "Tue Jun 21 22:09:50 2011 +0200"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sun Aug 14 12:32:52 2011 -0700"
      },
      "message": "mm: fix wrong vmap address calculations with odd NR_CPUS values\n\nCommit db64fe02258f (\"mm: rewrite vmap layer\") introduced code that does\naddress calculations under the assumption that VMAP_BLOCK_SIZE is a\npower of two.  However, this might not be true if CONFIG_NR_CPUS is not\nset to a power of two.\n\nWrong vmap_block index/offset values could lead to memory corruption.\nHowever, this has never been observed in practice (or never been\ndiagnosed correctly); what caught this was the BUG_ON in vb_alloc() that\nchecks for inconsistent vmap_block indices.\n\nTo fix this, ensure that VMAP_BLOCK_SIZE always is a power of two.\n\nBugLink: https://bugzilla.kernel.org/show_bug.cgi?id\u003d31572\nReported-by: Pavel Kysilka \u003cgoldenfish@linuxsoft.cz\u003e\nReported-by: Matias A. Fonzo \u003cselk@dragora.org\u003e\nSigned-off-by: Clemens Ladisch \u003cclemens@ladisch.de\u003e\nSigned-off-by: Stefan Richter \u003cstefanr@s5r6.in-berlin.de\u003e\nCc: Nick Piggin \u003cnpiggin@suse.de\u003e\nCc: Jeremy Fitzhardinge \u003cjeremy@goop.org\u003e\nCc: Krzysztof Helt \u003ckrzysztof.h1@poczta.fm\u003e\nCc: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nCc: 2.6.28+ \u003cstable@kernel.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "9f50fad65b87a8776ae989ca059ad6c17925dfc3",
      "tree": "9d15fc968323357da6b3a534c4c40ff3192cf2f9",
      "parents": [
        "47e180d6523081605c970f806572beab8a205537"
      ],
      "author": {
        "name": "Michal Hocko",
        "email": "mhocko@suse.cz",
        "time": "Tue Aug 09 11:56:26 2011 +0200"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Aug 09 17:04:43 2011 -0700"
      },
      "message": "Revert \"memcg: get rid of percpu_charge_mutex lock\"\n\nThis reverts commit 8521fc50d433507a7cdc96bec280f9e5888a54cc.\n\nThe patch incorrectly assumes that using atomic FLUSHING_CACHED_CHARGE\nbit operations is sufficient but that is not true.  Johannes Weiner has\nreported a crash during parallel memory cgroup removal:\n\n  BUG: unable to handle kernel NULL pointer dereference at 0000000000000018\n  IP: [\u003cffffffff81083b70\u003e] css_is_ancestor+0x20/0x70\n  Oops: 0000 [#1] PREEMPT SMP\n  Pid: 19677, comm: rmdir Tainted: G        W   3.0.0-mm1-00188-gf38d32b #35 ECS MCP61M-M3/MCP61M-M3\n  RIP: 0010:[\u003cffffffff81083b70\u003e]  css_is_ancestor+0x20/0x70\n  RSP: 0018:ffff880077b09c88  EFLAGS: 00010202\n  Process rmdir (pid: 19677, threadinfo ffff880077b08000, task ffff8800781bb310)\n  Call Trace:\n   [\u003cffffffff810feba3\u003e] mem_cgroup_same_or_subtree+0x33/0x40\n   [\u003cffffffff810feccf\u003e] drain_all_stock+0x11f/0x170\n   [\u003cffffffff81103211\u003e] mem_cgroup_force_empty+0x231/0x6d0\n   [\u003cffffffff811036c4\u003e] mem_cgroup_pre_destroy+0x14/0x20\n   [\u003cffffffff81080559\u003e] cgroup_rmdir+0xb9/0x500\n   [\u003cffffffff81114d26\u003e] vfs_rmdir+0x86/0xe0\n   [\u003cffffffff81114e7b\u003e] do_rmdir+0xfb/0x110\n   [\u003cffffffff81114ea6\u003e] sys_rmdir+0x16/0x20\n   [\u003cffffffff8154d76b\u003e] system_call_fastpath+0x16/0x1b\n\nWe are crashing because we try to dereference cached memcg when we are\nchecking whether we should wait for draining on the cache.  The cache is\nalready cleaned up, though.\n\nThere is also a theoretical chance that the cached memcg gets freed\nbetween we test for the FLUSHING_CACHED_CHARGE and dereference it in\nmem_cgroup_same_or_subtree:\n\n        CPU0                    CPU1                         CPU2\n  mem\u003dstock-\u003ecached\n  stock-\u003ecached\u003dNULL\n                              clear_bit\n                                                        test_and_set_bit\n  test_bit()                    ...\n  \u003cpreempted\u003e             mem_cgroup_destroy\n  use after free\n\nThe percpu_charge_mutex protected from this race because sync draining\nis exclusive.\n\nIt is safer to revert now and come up with a more parallel\nimplementation later.\n\nSigned-off-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nReported-by: Johannes Weiner \u003cjweiner@redhat.com\u003e\nAcked-by: Johannes Weiner \u003cjweiner@redhat.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: stable@kernel.org\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "81107188f123e3c2217ac2f2feb2a1147904c62f",
      "tree": "53626e529423c12d082cbcc23012de0b39f26e4d",
      "parents": [
        "ef62fb32b7b21731e41aea3c1e08bcdb407c9eb9"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "cl@linux.com",
        "time": "Tue Aug 09 13:01:32 2011 -0500"
      },
      "committer": {
        "name": "Pekka Enberg",
        "email": "penberg@kernel.org",
        "time": "Tue Aug 09 21:12:31 2011 +0300"
      },
      "message": "slub: Fix partial count comparison confusion\n\ndeactivate_slab() has the comparison if more than the minimum number of\npartial pages are in the partial list wrong. An effect of this may be that\nempty pages are not freed from deactivate_slab(). The result could be an\nOOM due to growth of the partial slabs per node. Frees mostly occur from\n__slab_free which is okay so this would only affect use cases where a lot\nof switching around of per cpu slabs occur.\n\nSwitching per cpu slabs occurs with high frequency if debugging options are\nenabled.\n\nReported-and-tested-by: Xiaotian Feng \u003cxtfeng@gmail.com\u003e\nSigned-off-by: Christoph Lameter \u003ccl@linux.com\u003e\nSigned-off-by: Pekka Enberg \u003cpenberg@kernel.org\u003e\n"
    },
    {
      "commit": "ef62fb32b7b21731e41aea3c1e08bcdb407c9eb9",
      "tree": "f508ace02d80e7b80791aff0ada407ae104de7e3",
      "parents": [
        "6fbabb20faed9c08f8b96de4182bd721cbd1cfcf"
      ],
      "author": {
        "name": "Akinobu Mita",
        "email": "akinobu.mita@gmail.com",
        "time": "Sun Aug 07 18:30:38 2011 +0900"
      },
      "committer": {
        "name": "Pekka Enberg",
        "email": "penberg@kernel.org",
        "time": "Tue Aug 09 16:37:48 2011 +0300"
      },
      "message": "slub: fix check_bytes() for slub debugging\n\nThe check_bytes() function is used by slub debugging.  It returns a pointer\nto the first unmatching byte for a character in the given memory area.\n\nIf the character for matching byte is greater than 0x80, check_bytes()\ndoesn\u0027t work.  Becuase 64-bit pattern is generated as below.\n\n\tvalue64 \u003d value | value \u003c\u003c 8 | value \u003c\u003c 16 | value \u003c\u003c 24;\n\tvalue64 \u003d value64 | value64 \u003c\u003c 32;\n\nThe integer promotions are performed and sign-extended as the type of value\nis u8.  The upper 32 bits of value64 is 0xffffffff in the first line, and\nthe second line has no effect.\n\nThis fixes the 64-bit pattern generation.\n\nSigned-off-by: Akinobu Mita \u003cakinobu.mita@gmail.com\u003e\nCc: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nCc: Matt Mackall \u003cmpm@selenic.com\u003e\nReviewed-by: Marcin Slusarz \u003cmarcin.slusarz@gmail.com\u003e\nAcked-by: Eric Dumazet \u003ceric.dumazet@gmail.com\u003e\nSigned-off-by: Pekka Enberg \u003cpenberg@kernel.org\u003e\n"
    },
    {
      "commit": "6fbabb20faed9c08f8b96de4182bd721cbd1cfcf",
      "tree": "932af354e7ac134bdf684fedce14f7c7bc94ba42",
      "parents": [
        "322a8b034003c0d46d39af85bf24fee27b902f48"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "cl@linux.com",
        "time": "Mon Aug 08 11:16:56 2011 -0500"
      },
      "committer": {
        "name": "Pekka Enberg",
        "email": "penberg@kernel.org",
        "time": "Tue Aug 09 16:36:02 2011 +0300"
      },
      "message": "slub: Fix full list corruption if debugging is on\n\nWhen a slab is freed by __slab_free() and the slab can only contain a\nsingle object ever then it was full (and therefore not on the partial\nlists but on the full list in the debug case) before we reached\nslab_empty.\n\nThis caused the following full list corruption when SLUB debugging was enabled:\n\n  [ 5913.233035] ------------[ cut here ]------------\n  [ 5913.233097] WARNING: at lib/list_debug.c:53 __list_del_entry+0x8d/0x98()\n  [ 5913.233101] Hardware name: Adamo 13\n  [ 5913.233105] list_del corruption. prev-\u003enext should be ffffea000434fd20, but was ffffea0004199520\n  [ 5913.233108] Modules linked in: nfs fscache fuse ebtable_nat ebtables ppdev parport_pc lp parport ipt_MASQUERADE iptable_nat nf_nat nfsd lockd nfs_acl auth_rpcgss xt_CHECKSUM sunrpc iptable_mangle bridge stp llc cpufreq_ondemand acpi_cpufreq freq_table mperf ip6t_REJECT nf_conntrack_ipv6 nf_defrag_ipv6 ip6table_filter ip6_tables rfcomm bnep arc4 iwlagn snd_hda_codec_hdmi snd_hda_codec_idt snd_hda_intel btusb mac80211 snd_hda_codec bluetooth snd_hwdep snd_seq snd_seq_device snd_pcm usb_debug dell_wmi sparse_keymap cdc_ether usbnet cdc_acm uvcvideo cdc_wdm mii cfg80211 snd_timer dell_laptop videodev dcdbas snd microcode v4l2_compat_ioctl32 soundcore joydev tg3 pcspkr snd_page_alloc iTCO_wdt i2c_i801 rfkill iTCO_vendor_support wmi virtio_net kvm_intel kvm ipv6 xts gf128mul dm_crypt i915 drm_kms_helper drm i2c_algo_bit i2c_core video [last unloaded: scsi_wait_scan]\n  [ 5913.233213] Pid: 0, comm: swapper Not tainted 3.0.0+ #127\n  [ 5913.233213] Call Trace:\n  [ 5913.233213]  \u003cIRQ\u003e  [\u003cffffffff8105df18\u003e] warn_slowpath_common+0x83/0x9b\n  [ 5913.233213]  [\u003cffffffff8105dfd3\u003e] warn_slowpath_fmt+0x46/0x48\n  [ 5913.233213]  [\u003cffffffff8127e7c1\u003e] __list_del_entry+0x8d/0x98\n  [ 5913.233213]  [\u003cffffffff8127e7da\u003e] list_del+0xe/0x2d\n  [ 5913.233213]  [\u003cffffffff814e0430\u003e] __slab_free+0x1db/0x235\n  [ 5913.233213]  [\u003cffffffff811706ab\u003e] ? bvec_free_bs+0x35/0x37\n  [ 5913.233213]  [\u003cffffffff811706ab\u003e] ? bvec_free_bs+0x35/0x37\n  [ 5913.233213]  [\u003cffffffff811706ab\u003e] ? bvec_free_bs+0x35/0x37\n  [ 5913.233213]  [\u003cffffffff81133085\u003e] kmem_cache_free+0x88/0x102\n  [ 5913.233213]  [\u003cffffffff811706ab\u003e] bvec_free_bs+0x35/0x37\n  [ 5913.233213]  [\u003cffffffff811706e1\u003e] bio_free+0x34/0x64\n  [ 5913.233213]  [\u003cffffffff813dc390\u003e] dm_bio_destructor+0x12/0x14\n  [ 5913.233213]  [\u003cffffffff8116fef6\u003e] bio_put+0x2b/0x2d\n  [ 5913.233213]  [\u003cffffffff813dccab\u003e] clone_endio+0x9e/0xb4\n  [ 5913.233213]  [\u003cffffffff8116f7dd\u003e] bio_endio+0x2d/0x2f\n  [ 5913.233213]  [\u003cffffffffa00148da\u003e] crypt_dec_pending+0x5c/0x8b [dm_crypt]\n  [ 5913.233213]  [\u003cffffffffa00150a9\u003e] crypt_endio+0x78/0x81 [dm_crypt]\n\n[ Full discussion here: https://lkml.org/lkml/2011/8/4/375 ]\n\nMake sure that we remove such a slab also from the full lists.\n\nReported-and-tested-by: Dave Jones \u003cdavej@redhat.com\u003e\nReported-and-tested-by: Xiaotian Feng \u003cxtfeng@gmail.com\u003e\nSigned-off-by: Christoph Lameter \u003ccl@linux.com\u003e\nSigned-off-by: Pekka Enberg \u003cpenberg@kernel.org\u003e\n"
    },
    {
      "commit": "f03683b8fb7e03862d2f1366a16c1b01732a5741",
      "tree": "af8143877e0d56e6a8206d937027a1fd8d8a9ec1",
      "parents": [
        "7f3bf7cd348cead84f8027b32aa30ea49fa64df5",
        "30765b92ada267c5395fc788623cb15233276f5c"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Aug 04 16:44:04 2011 -1000"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Aug 04 16:44:04 2011 -1000"
      },
      "message": "Merge branch \u0027core-urgent-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip\n\n* \u0027core-urgent-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:\n  slab, lockdep: Annotate the locks before using them\n  lockdep: Clear whole lockdep_map on initialization\n  slab, lockdep: Annotate slab -\u003e rcu -\u003e debug_object -\u003e slab\n  lockdep: Fix up warning\n  lockdep: Fix trace_hardirqs_on_caller()\n  futex: Fix regression with read only mappings\n"
    },
    {
      "commit": "30765b92ada267c5395fc788623cb15233276f5c",
      "tree": "83d4f62be66252537b634880170015ed051faa6e",
      "parents": [
        "f59de8992aa6dc85e81aadc26b0f69e17809721d"
      ],
      "author": {
        "name": "Peter Zijlstra",
        "email": "peterz@infradead.org",
        "time": "Thu Jul 28 23:22:56 2011 +0200"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Thu Aug 04 10:18:00 2011 +0200"
      },
      "message": "slab, lockdep: Annotate the locks before using them\n\nFernando found we hit the regular OFF_SLAB \u0027recursion\u0027 before we\nannotate the locks, cure this.\n\nThe relevant portion of the stack-trace:\n\n\u003e [    0.000000]  [\u003cc085e24f\u003e] rt_spin_lock+0x50/0x56\n\u003e [    0.000000]  [\u003cc04fb406\u003e] __cache_free+0x43/0xc3\n\u003e [    0.000000]  [\u003cc04fb23f\u003e] kmem_cache_free+0x6c/0xdc\n\u003e [    0.000000]  [\u003cc04fb2fe\u003e] slab_destroy+0x4f/0x53\n\u003e [    0.000000]  [\u003cc04fb396\u003e] free_block+0x94/0xc1\n\u003e [    0.000000]  [\u003cc04fc551\u003e] do_tune_cpucache+0x10b/0x2bb\n\u003e [    0.000000]  [\u003cc04fc8dc\u003e] enable_cpucache+0x7b/0xa7\n\u003e [    0.000000]  [\u003cc0bd9d3c\u003e] kmem_cache_init_late+0x1f/0x61\n\u003e [    0.000000]  [\u003cc0bba687\u003e] start_kernel+0x24c/0x363\n\u003e [    0.000000]  [\u003cc0bba0ba\u003e] i386_start_kernel+0xa9/0xaf\n\nReported-by: Fernando Lopez-Lezcano \u003cnando@ccrma.Stanford.EDU\u003e\nAcked-by: Pekka Enberg \u003cpenberg@kernel.org\u003e\nSigned-off-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nLink: http://lkml.kernel.org/r/1311888176.2617.379.camel@laptop\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "83835b3d9aec8e9f666d8223d8a386814f756266",
      "tree": "6112e44af7202c41b48d468eff8b5a28138efd33",
      "parents": [
        "70a0686a72c7a7e554b404ca11406ceec709d425"
      ],
      "author": {
        "name": "Peter Zijlstra",
        "email": "peterz@infradead.org",
        "time": "Fri Jul 22 15:26:05 2011 +0200"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Thu Aug 04 10:17:54 2011 +0200"
      },
      "message": "slab, lockdep: Annotate slab -\u003e rcu -\u003e debug_object -\u003e slab\n\nLockdep thinks there\u0027s lock recursion through:\n\n\tkmem_cache_free()\n\t  cache_flusharray()\n\t    spin_lock(\u0026l3-\u003elist_lock)  \u003c----------------.\n\t    free_block()                                |\n\t      slab_destroy()                            |\n\t\tcall_rcu()                              |\n\t\t  debug_object_activate()               |\n\t\t    debug_object_init()                 |\n\t\t      __debug_object_init()             |\n\t\t\tkmem_cache_alloc()              |\n\t\t\t  cache_alloc_refill()          |\n\t\t\t    spin_lock(\u0026l3-\u003elist_lock) --\u0027\n\nNow debug objects doesn\u0027t use SLAB_DESTROY_BY_RCU and hence there is no\nactual possibility of recursing. Luckily debug objects marks it slab\nwith SLAB_DEBUG_OBJECTS so we can identify the thing.\n\nMark all SLAB_DEBUG_OBJECTS (all one!) slab caches with a special\nlockdep key so that lockdep sees its a different cachep.\n\nAlso add a WARN on trying to create a SLAB_DESTROY_BY_RCU |\nSLAB_DEBUG_OBJECTS cache, to avoid possible future trouble.\n\nReported-and-tested-by: Sebastian Siewior \u003csebastian@breakpoint.cc\u003e\n[ fixes to the initial patch ]\nReported-by: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nAcked-by: Pekka Enberg \u003cpenberg@kernel.org\u003e\nSigned-off-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nLink: http://lkml.kernel.org/r/1311341165.27400.58.camel@twins\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "c0c770e610cc4cdcd66c7e939bdf89cc3e72f79d",
      "tree": "7cf6807258fef2a85a2ff212f4f4eb6d9dc336c6",
      "parents": [
        "a9e4e6e14c322e08d1c615afc8f504fb415f9613",
        "d0e323b47057f4492b8fa22345f38d80a469bf8d"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Aug 03 21:53:27 2011 -1000"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Aug 03 21:53:27 2011 -1000"
      },
      "message": "Merge branch \u0027apei-release\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux-acpi-2.6\n\n* \u0027apei-release\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux-acpi-2.6:\n  ACPI, APEI, EINJ Param support is disabled by default\n  APEI GHES: 32-bit buildfix\n  ACPI: APEI build fix\n  ACPI, APEI, GHES: Add hardware memory error recovery support\n  HWPoison: add memory_failure_queue()\n  ACPI, APEI, GHES, Error records content based throttle\n  ACPI, APEI, GHES, printk support for recoverable error via NMI\n  lib, Make gen_pool memory allocator lockless\n  lib, Add lock-less NULL terminated single list\n  Add Kconfig option ARCH_HAVE_NMI_SAFE_CMPXCHG\n  ACPI, APEI, Add WHEA _OSC support\n  ACPI, APEI, Add APEI bit support in generic _OSC call\n  ACPI, APEI, GHES, Support disable GHES at boot time\n  ACPI, APEI, GHES, Prevent GHES to be built as module\n  ACPI, APEI, Use apei_exec_run_optional in APEI EINJ and ERST\n  ACPI, APEI, Add apei_exec_run_optional\n  ACPI, APEI, GHES, Do not ratelimit fatal error printk before panic\n  ACPI, APEI, ERST, Fix erst-dbg long record reading issue\n  ACPI, APEI, ERST, Prevent erst_dbg from loading if ERST is disabled\n"
    },
    {
      "commit": "8079b1c859c44f27d63da4951f5038a16589a563",
      "tree": "677e77a4c9d3b9c33427196cb5f860ebcf530b15",
      "parents": [
        "e504f3fdd63d486d45b18009e5a65f2e329acb0a"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Wed Aug 03 16:21:28 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Aug 03 14:25:24 2011 -1000"
      },
      "message": "mm: clarify the radix_tree exceptional cases\n\nMake the radix_tree exceptional cases, mostly in filemap.c, clearer.\n\nIt\u0027s hard to devise a suitable snappy name that illuminates the use by\nshmem/tmpfs for swap, while keeping filemap/pagecache/radix_tree\ngenerality.  And akpm points out that /* radix_tree_deref_retry(page) */\ncomments look like calls that have been commented out for unknown\nreason.\n\nSkirt the naming difficulty by rearranging these blocks to handle the\ntransient radix_tree_deref_retry(page) case first; then just explain the\nremaining shmem/tmpfs swap case in a comment.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "e504f3fdd63d486d45b18009e5a65f2e329acb0a",
      "tree": "2d02a5c29a922fae626a69cd0fc92cae37d7918e",
      "parents": [
        "31475dd611209413bace21651a400afb91d0bd9d"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Wed Aug 03 16:21:27 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Aug 03 14:25:24 2011 -1000"
      },
      "message": "tmpfs radix_tree: locate_item to speed up swapoff\n\nWe have already acknowledged that swapoff of a tmpfs file is slower than\nit was before conversion to the generic radix_tree: a little slower\nthere will be acceptable, if the hotter paths are faster.\n\nBut it was a shock to find swapoff of a 500MB file 20 times slower on my\nlaptop, taking 10 minutes; and at that rate it significantly slows down\nmy testing.\n\nNow, most of that turned out to be overhead from PROVE_LOCKING and\nPROVE_RCU: without those it was only 4 times slower than before; and\nmore realistic tests on other machines don\u0027t fare as badly.\n\nI\u0027ve tried a number of things to improve it, including tagging the swap\nentries, then doing lookup by tag: I\u0027d expected that to halve the time,\nbut in practice it\u0027s erratic, and often counter-productive.\n\nThe only change I\u0027ve so far found to make a consistent improvement, is\nto short-circuit the way we go back and forth, gang lookup packing\nentries into the array supplied, then shmem scanning that array for the\ntarget entry.  Scanning in place doubles the speed, so it\u0027s now only\ntwice as slow as before (or three times slower when the PROVEs are on).\n\nSo, add radix_tree_locate_item() as an expedient, once-off,\nsingle-caller hack to do the lookup directly in place.  #ifdef it on\nCONFIG_SHMEM and CONFIG_SWAP, as much to document its limited\napplicability as save space in other configurations.  And, sadly,\n#include sched.h for cond_resched().\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "31475dd611209413bace21651a400afb91d0bd9d",
      "tree": "679c1cb33e211a4f2e5c0f47bb836393c9454d35",
      "parents": [
        "69f07ec938712b58755add82dd3d0b35f01317cc"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Wed Aug 03 16:21:27 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Aug 03 14:25:24 2011 -1000"
      },
      "message": "mm: a few small updates for radix-swap\n\nRemove PageSwapBacked (!page_is_file_cache) cases from\nadd_to_page_cache_locked() and add_to_page_cache_lru(): those pages now\ngo through shmem_add_to_page_cache().\n\nRemove a comment on maximum tmpfs size from fsstack_copy_inode_size(),\nand add a comment on swap entries to invalidate_mapping_pages().\n\nAnd mincore_page() uses find_get_page() on what might be shmem or a\ntmpfs file: allow for a radix_tree_exceptional_entry(), and proceed to\nfind_get_page() on swapper_space if so (oh, swapper_space needs #ifdef).\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nAcked-by: Rik van Riel \u003criel@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "69f07ec938712b58755add82dd3d0b35f01317cc",
      "tree": "7a0a704ed4bc79dbba50454093469d0ce31ef1a4",
      "parents": [
        "6922c0c7abd387374255801f7739624867e8acad"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Wed Aug 03 16:21:26 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Aug 03 14:25:24 2011 -1000"
      },
      "message": "tmpfs: use kmemdup for short symlinks\n\nBut we\u0027ve not yet removed the old swp_entry_t i_direct[16] from\nshmem_inode_info.  That\u0027s because it was still being shared with the\ninline symlink.  Remove it now (saving 64 or 128 bytes from shmem inode\nsize), and use kmemdup() for short symlinks, say, those up to 128 bytes.\n\nI wonder why mpol_free_shared_policy() is done in shmem_destroy_inode()\nrather than shmem_evict_inode(), where we usually do such freeing? I\nguess it doesn\u0027t matter, and I\u0027m not into NUMA mpol testing right now.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nAcked-by: Rik van Riel \u003criel@redhat.com\u003e\nReviewed-by: Pekka Enberg \u003cpenberg@kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "6922c0c7abd387374255801f7739624867e8acad",
      "tree": "851ec456dbca49ee78c302fd62839e9889a75290",
      "parents": [
        "aa3b189551ad8e5cc1d9c663735c131650238278"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Wed Aug 03 16:21:25 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Aug 03 14:25:24 2011 -1000"
      },
      "message": "tmpfs: convert shmem_writepage and enable swap\n\nConvert shmem_writepage() to use shmem_delete_from_page_cache() to use\nshmem_radix_tree_replace() to substitute swap entry for page pointer\natomically in the radix tree.\n\nAs with shmem_add_to_page_cache(), it\u0027s not entirely satisfactory to be\ncopying such code from delete_from_swap_cache, but again judged easier\nto sell than making its other callers go through the extras.\n\nRemove the toy implementation\u0027s shmem_put_swap() and shmem_get_swap(),\nnow unreferenced, and the hack to disable swap: it\u0027s now good to go.\n\nThe way things have worked out, info-\u003elock no longer helps to guard the\nshmem_swaplist: we increment swapped under shmem_swaplist_mutex only.\nThat global mutex exclusion between shmem_writepage() and shmem_unuse()\nis not pretty, and we ought to find another way; but it\u0027s been forced on\nus by recent race discoveries, not a consequence of this patchset.\n\nAnd what has become of the WARN_ON_ONCE(1) free_swap_and_cache() if a\nswap entry was found already present? That\u0027s no longer possible, the\n(unknown) one inserting this page into filecache would hit the swap\nentry occupying that slot.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nAcked-by: Rik van Riel \u003criel@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "aa3b189551ad8e5cc1d9c663735c131650238278",
      "tree": "c789ab5c7f890a6065811d8bba15a784caf9e859",
      "parents": [
        "54af60421822bb9cb664dd5cd7aac46c01ccfcf8"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Wed Aug 03 16:21:24 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Aug 03 14:25:24 2011 -1000"
      },
      "message": "tmpfs: convert mem_cgroup shmem to radix-swap\n\nRemove mem_cgroup_shmem_charge_fallback(): it was only required when we\nhad to move swappage to filecache with GFP_NOWAIT.\n\nRemove the GFP_NOWAIT special case from mem_cgroup_cache_charge(), by\nmoving its call out from shmem_add_to_page_cache() to two of thats three\ncallers.  But leave it doing mem_cgroup_uncharge_cache_page() on error:\nalthough asymmetrical, it\u0027s easier for all 3 callers to handle.\n\nThese two changes would also be appropriate if anyone were to start\nusing shmem_read_mapping_page_gfp() with GFP_NOWAIT.\n\nRemove mem_cgroup_get_shmem_target(): mc_handle_file_pte() can test\nradix_tree_exceptional_entry() to get what it needs for itself.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nAcked-by: Rik van Riel \u003criel@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "54af60421822bb9cb664dd5cd7aac46c01ccfcf8",
      "tree": "b62d2b9ccc2b467ee5406bb0d3494db6a5f96582",
      "parents": [
        "46f65ec15c6878a2b4a49f6e01b20b201b46a9e4"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Wed Aug 03 16:21:24 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Aug 03 14:25:23 2011 -1000"
      },
      "message": "tmpfs: convert shmem_getpage_gfp to radix-swap\n\nConvert shmem_getpage_gfp(), the engine-room of shmem, to expect page or\nswap entry returned from radix tree by find_lock_page().\n\nWhereas the repetitive old method proceeded mainly under info-\u003elock,\ndropping and repeating whenever one of the conditions needed was not\nmet, now we can proceed without it, leaving shmem_add_to_page_cache() to\ncheck for a race.\n\nThis way there is no need to preallocate a page, no need for an early\nradix_tree_preload(), no need for mem_cgroup_shmem_charge_fallback().\n\nMove the error unwinding down to the bottom instead of repeating it\nthroughout.  ENOSPC handling is a little different from before: there is\nno longer any race between find_lock_page() and finding swap, but we can\narrive at ENOSPC before calling shmem_recalc_inode(), which might\noccasionally discover freed space.\n\nBe stricter to check i_size before returning.  info-\u003elock is used for\nlittle but alloced, swapped, i_blocks updates.  Move i_blocks updates\nout from under the max_blocks check, so even an unlimited size\u003d0 mount\ncan show accurate du.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nAcked-by: Rik van Riel \u003criel@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "46f65ec15c6878a2b4a49f6e01b20b201b46a9e4",
      "tree": "3b72804ee87b4a5c7ec86b5059e20ddea82d3c2c",
      "parents": [
        "7a5d0fbb29936fad7f17b1cb001b0c33a5f13328"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Wed Aug 03 16:21:23 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Aug 03 14:25:23 2011 -1000"
      },
      "message": "tmpfs: convert shmem_unuse_inode to radix-swap\n\nConvert shmem_unuse_inode() to use a lockless gang lookup of the radix\ntree, searching for matching swap.\n\nThis is somewhat slower than the old method: because of repeated radix\ntree descents, because of copying entries up, but probably most because\nthe old method noted and skipped once a vector page was cleared of swap.\nPerhaps we can devise a use of radix tree tagging to achieve that later.\n\nshmem_add_to_page_cache() uses shmem_radix_tree_replace() to compensate\nfor the lockless lookup by checking that the expected entry is in place,\nunder lock.  It is not very satisfactory to be copying this much from\nadd_to_page_cache_locked(), but I think easier to sell than insisting\nthat every caller of add_to_page_cache*() go through the extras.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nAcked-by: Rik van Riel \u003criel@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "7a5d0fbb29936fad7f17b1cb001b0c33a5f13328",
      "tree": "903c66ee195451f45c782155a8eb6dd6e7217522",
      "parents": [
        "bda97eab0cc9c6385b9f26abdda6459f630f4513"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Wed Aug 03 16:21:22 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Aug 03 14:25:23 2011 -1000"
      },
      "message": "tmpfs: convert shmem_truncate_range to radix-swap\n\nDisable the toy swapping implementation in shmem_writepage() - it\u0027s hard\nto support two schemes at once - and convert shmem_truncate_range() to a\nlockless gang lookup of swap entries along with pages, freeing both.\n\nSince the second loop tightens its noose until all entries of either\nkind have been squeezed out (and we shall make sure that there\u0027s not an\ninstant when neither is visible), there is no longer a need for yet\nanother pass below.\n\nshmem_radix_tree_replace() compensates for the lockless lookup by\nchecking that the expected entry is in place, under lock, before\nreplacing it.  Here it just deletes, but will be used in later patches\nto substitute swap entry for page or page for swap entry.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nAcked-by: Rik van Riel \u003criel@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "bda97eab0cc9c6385b9f26abdda6459f630f4513",
      "tree": "bfa418b90c5889a1cd33836fd8f0a2f0232e3dac",
      "parents": [
        "41ffe5d5ceef7f7ff2ff18e320d88ca6d629efaf"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Wed Aug 03 16:21:21 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Aug 03 14:25:23 2011 -1000"
      },
      "message": "tmpfs: copy truncate_inode_pages_range\n\nBring truncate.c\u0027s code for truncate_inode_pages_range() inline into\nshmem_truncate_range(), replacing its first call (there\u0027s a followup\ncall below, but leave that one, it will disappear next).\n\nDon\u0027t play with it yet, apart from leaving out the cleancache flush, and\n(importantly) the nrpages \u003d\u003d 0 skip, and moving shmem_setattr()\u0027s\npartial page preparation into its partial page handling.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nAcked-by: Rik van Riel \u003criel@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "41ffe5d5ceef7f7ff2ff18e320d88ca6d629efaf",
      "tree": "66ce800fb7911ed037aa574f46729646ce485d0b",
      "parents": [
        "285b2c4fdd69ea73b4762785d8c6be83b6c074a6"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Wed Aug 03 16:21:21 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Aug 03 14:25:23 2011 -1000"
      },
      "message": "tmpfs: miscellaneous trivial cleanups\n\nWhile it\u0027s at its least, make a number of boring nitpicky cleanups to\nshmem.c, mostly for consistency of variable naming.  Things like \"swap\"\ninstead of \"entry\", \"pgoff_t index\" instead of \"unsigned long idx\".\n\nAnd since everything else here is prefixed \"shmem_\", better change\ninit_tmpfs() to shmem_init().\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nAcked-by: Rik van Riel \u003criel@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "285b2c4fdd69ea73b4762785d8c6be83b6c074a6",
      "tree": "b350a54d8bca3e87ca47d2ad14bb71a53c9bb593",
      "parents": [
        "a2c16d6cb0e478812829ca84aeabd02e36af35eb"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Wed Aug 03 16:21:20 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Aug 03 14:25:23 2011 -1000"
      },
      "message": "tmpfs: demolish old swap vector support\n\nThe maximum size of a shmem/tmpfs file has been limited by the maximum\nsize of its triple-indirect swap vector.  With 4kB page size, maximum\nfilesize was just over 2TB on a 32-bit kernel, but sadly one eighth of\nthat on a 64-bit kernel.  (With 8kB page size, maximum filesize was just\nover 4TB on a 64-bit kernel, but 16TB on a 32-bit kernel,\nMAX_LFS_FILESIZE being then more restrictive than swap vector layout.)\n\nIt\u0027s a shame that tmpfs should be more restrictive than ramfs, and this\nlimitation has now been noticed.  Add another level to the swap vector?\nNo, it became obscure and hard to maintain, once I complicated it to\nmake use of highmem pages nine years ago: better choose another way.\n\nSurely, if 2.4 had had the radix tree pagecache introduced in 2.5, then\ntmpfs would never have invented its own peculiar radix tree: we would\nhave fitted swap entries into the common radix tree instead, in much the\nsame way as we fit swap entries into page tables.\n\nAnd why should each file have a separate radix tree for its pages and\nfor its swap entries? The swap entries are required precisely where and\nwhen the pages are not.  We want to put them together in a single radix\ntree: which can then avoid much of the locking which was needed to\nprevent them from being exchanged underneath us.\n\nThis also avoids the waste of memory devoted to swap vectors, first in\nthe shmem_inode itself, then at least two more pages once a file grew\nbeyond 16 data pages (pages accounted by df and du, but not by memcg).\nAllocated upfront, to avoid allocation when under swapping pressure, but\npure waste when CONFIG_SWAP is not set - I have never spattered around\nthe ifdefs to prevent that, preferring this move to sharing the common\nradix tree instead.\n\nThere are three downsides to sharing the radix tree.  One, that it binds\ntmpfs more tightly to the rest of mm, either requiring knowledge of swap\nentries in radix tree there, or duplication of its code here in shmem.c.\nI believe that the simplications and memory savings (and probable higher\nperformance, not yet measured) justify that.\n\nTwo, that on HIGHMEM systems with SWAP enabled, it\u0027s the lowmem radix\nnodes that cannot be freed under memory pressure - whereas before it was\nthe less precious highmem swap vector pages that could not be freed.\nI\u0027m hoping that 64-bit has now been accessible for long enough, that the\nhighmem argument has grown much less persuasive.\n\nThree, that swapoff is slower than it used to be on tmpfs files, since\nit\u0027s using a simple generic mechanism not tailored to it: I find this\nnoticeable, and shall want to improve, but maybe nobody else will\nnotice.\n\nSo...  now remove most of the old swap vector code from shmem.c.  But,\nfor the moment, keep the simple i_direct vector of 16 pages, with simple\naccessors shmem_put_swap() and shmem_get_swap(), as a toy implementation\nto help mark where swap needs to be handled in subsequent patches.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nAcked-by: Rik van Riel \u003criel@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "a2c16d6cb0e478812829ca84aeabd02e36af35eb",
      "tree": "7803a522da5deee7ce753dc5404dca01f42aa176",
      "parents": [
        "6328650bb4d854a7dc1498d1c0048b838b0d340c"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Wed Aug 03 16:21:19 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Aug 03 14:25:22 2011 -1000"
      },
      "message": "mm: let swap use exceptional entries\n\nIf swap entries are to be stored along with struct page pointers in a\nradix tree, they need to be distinguished as exceptional entries.\n\nMost of the handling of swap entries in radix tree will be contained in\nshmem.c, but a few functions in filemap.c\u0027s common code need to check\nfor their appearance: find_get_page(), find_lock_page(),\nfind_get_pages() and find_get_pages_contig().\n\nSo as not to slow their fast paths, tuck those checks inside the\nexisting checks for unlikely radix_tree_deref_slot(); except for\nfind_lock_page(), where it is an added test.  And make it a BUG in\nfind_get_pages_tag(), which is not applied to tmpfs files.\n\nA part of the reason for eliminating shmem_readpage() earlier, was to\nminimize the places where common code would need to allow for swap\nentries.\n\nThe swp_entry_t known to swapfile.c must be massaged into a slightly\ndifferent form when stored in the radix tree, just as it gets massaged\ninto a pte_t when stored in page tables.\n\nIn an i386 kernel this limits its information (type and page offset) to\n30 bits: given 32 \"types\" of swapfile and 4kB pagesize, that\u0027s a maximum\nswapfile size of 128GB.  Which is less than the 512GB we previously\nallowed with X86_PAE (where the swap entry can occupy the entire upper\n32 bits of a pte_t), but not a new limitation on 32-bit without PAE; and\nthere\u0027s not a new limitation on 64-bit (where swap filesize is already\nlimited to 16TB by a 32-bit page offset).  Thirty areas of 128GB is\nprobably still enough swap for a 64GB 32-bit machine.\n\nProvide swp_to_radix_entry() and radix_to_swp_entry() conversions, and\nenforce filesize limit in read_swap_header(), just as for ptes.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nAcked-by: Rik van Riel \u003criel@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "6328650bb4d854a7dc1498d1c0048b838b0d340c",
      "tree": "0e265dc86f7c4451647c1e227843cdd1530f9651",
      "parents": [
        "70d327198a434edb95b3d858bc8010b8add28e3e"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Wed Aug 03 16:21:18 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Aug 03 14:25:22 2011 -1000"
      },
      "message": "radix_tree: exceptional entries and indices\n\nA patchset to extend tmpfs to MAX_LFS_FILESIZE by abandoning its\npeculiar swap vector, instead keeping a file\u0027s swap entries in the same\nradix tree as its struct page pointers: thus saving memory, and\nsimplifying its code and locking.\n\nThis patch:\n\nThe radix_tree is used by several subsystems for different purposes.  A\nmajor use is to store the struct page pointers of a file\u0027s pagecache for\nmemory management.  But what if mm wanted to store something other than\npage pointers there too?\n\nThe low bit of a radix_tree entry is already used to denote an indirect\npointer, for internal use, and the unlikely radix_tree_deref_retry()\ncase.\n\nDefine the next bit as denoting an exceptional entry, and supply inline\nfunctions radix_tree_exception() to return non-0 in either unlikely\ncase, and radix_tree_exceptional_entry() to return non-0 in the second\ncase.\n\nIf a subsystem already uses radix_tree with that bit set, no problem: it\ndoes not affect internal workings at all, but is defined for the\nconvenience of those storing well-aligned pointers in the radix_tree.\n\nThe radix_tree_gang_lookups have an implicit assumption that the caller\ncan deduce the offset of each entry returned e.g.  by the page-\u003eindex of\na struct page.  But that may not be feasible for some kinds of item to\nbe stored there.\n\nradix_tree_gang_lookup_slot() allow for an optional indices argument,\noutput array in which to return those offsets.  The same could be added\nto other radix_tree_gang_lookups, but for now keep it to the only one\nfor which we need it.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nAcked-by: Rik van Riel \u003criel@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "dd48c085c1cdf9446f92826f1fd451167fb6c2fd",
      "tree": "d62870378cc08af36ea7a41531436bdebddec232",
      "parents": [
        "f48d1915b86f06a943087e5f9b29542a1ef4cd4d"
      ],
      "author": {
        "name": "Akinobu Mita",
        "email": "akinobu.mita@gmail.com",
        "time": "Wed Aug 03 16:21:01 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Aug 03 14:25:20 2011 -1000"
      },
      "message": "fault-injection: add ability to export fault_attr in arbitrary directory\n\ninit_fault_attr_dentries() is used to export fault_attr via debugfs.\nBut it can only export it in debugfs root directory.\n\nPer Forlin is working on mmc_fail_request which adds support to inject\ndata errors after a completed host transfer in MMC subsystem.\n\nThe fault_attr for mmc_fail_request should be defined per mmc host and\nexport it in debugfs directory per mmc host like\n/sys/kernel/debug/mmc0/mmc_fail_request.\n\ninit_fault_attr_dentries() doesn\u0027t help for mmc_fail_request.  So this\nintroduces fault_create_debugfs_attr() which is able to create a\ndirectory in the arbitrary directory and replace\ninit_fault_attr_dentries().\n\n[akpm@linux-foundation.org: extraneous semicolon, per Randy]\nSigned-off-by: Akinobu Mita \u003cakinobu.mita@gmail.com\u003e\nTested-by: Per Forlin \u003cper.forlin@linaro.org\u003e\nCc: Jens Axboe \u003caxboe@kernel.dk\u003e\nCc: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nCc: Pekka Enberg \u003cpenberg@kernel.org\u003e\nCc: Matt Mackall \u003cmpm@selenic.com\u003e\nCc: Randy Dunlap \u003crdunlap@xenotime.net\u003e\nCc: Stephen Rothwell \u003csfr@canb.auug.org.au\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "d0e323b47057f4492b8fa22345f38d80a469bf8d",
      "tree": "feb760c7e2cdb1e43640417409428ab858910ea3",
      "parents": [
        "c027a474a68065391c8773f6e83ed5412657e369",
        "c3e6088e1036f8084bc7444b38437da136b7588b"
      ],
      "author": {
        "name": "Len Brown",
        "email": "len.brown@intel.com",
        "time": "Wed Aug 03 11:30:42 2011 -0400"
      },
      "committer": {
        "name": "Len Brown",
        "email": "len.brown@intel.com",
        "time": "Wed Aug 03 11:30:42 2011 -0400"
      },
      "message": "Merge branch \u0027apei\u0027 into apei-release\n\nSome trivial conflicts due to other various merges\nadding to the end of common lists sooner than this one.\n\n\tarch/ia64/Kconfig\n\tarch/powerpc/Kconfig\n\tarch/x86/Kconfig\n\tlib/Kconfig\n\tlib/Makefile\n\nSigned-off-by: Len Brown \u003clen.brown@intel.com\u003e\n"
    },
    {
      "commit": "ea8f5fb8a71fddaf5f3a17100d3247855701f732",
      "tree": "052c3f7e699745394a35063d2a58c4ef0995f3c5",
      "parents": [
        "152cef40a808d3034e383465b3f7d6783613e458"
      ],
      "author": {
        "name": "Huang Ying",
        "email": "ying.huang@intel.com",
        "time": "Wed Jul 13 13:14:27 2011 +0800"
      },
      "committer": {
        "name": "Len Brown",
        "email": "len.brown@intel.com",
        "time": "Wed Aug 03 11:15:58 2011 -0400"
      },
      "message": "HWPoison: add memory_failure_queue()\n\nmemory_failure() is the entry point for HWPoison memory error\nrecovery.  It must be called in process context.  But commonly\nhardware memory errors are notified via MCE or NMI, so some delayed\nexecution mechanism must be used.  In MCE handler, a work queue + ring\nbuffer mechanism is used.\n\nIn addition to MCE, now APEI (ACPI Platform Error Interface) GHES\n(Generic Hardware Error Source) can be used to report memory errors\ntoo.  To add support to APEI GHES memory recovery, a mechanism similar\nto that of MCE is implemented.  memory_failure_queue() is the new\nentry point that can be called in IRQ context.  The next step is to\nmake MCE handler uses this interface too.\n\nSigned-off-by: Huang Ying \u003cying.huang@intel.com\u003e\nCc: Andi Kleen \u003cak@linux.intel.com\u003e\nCc: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nCc: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Len Brown \u003clen.brown@intel.com\u003e\n"
    },
    {
      "commit": "c027a474a68065391c8773f6e83ed5412657e369",
      "tree": "6d3c8caba5ebf736c3f9ef3cacb708cbdb9869c2",
      "parents": [
        "cfe22345ad5ef29e192e157fdc3e17d357e4bc24"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Sat Jul 30 16:35:02 2011 +0200"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Aug 01 15:24:12 2011 -1000"
      },
      "message": "oom: task-\u003emm \u003d\u003d NULL doesn\u0027t mean the memory was freed\n\nexit_mm() sets -\u003emm \u003d\u003d NULL then it does mmput()-\u003eexit_mmap() which\nfrees the memory.\n\nHowever select_bad_process() checks -\u003emm !\u003d NULL before TIF_MEMDIE,\nso it continues to kill other tasks even if we have the oom-killed\ntask freeing its memory.\n\nChange select_bad_process() to check -\u003emm after TIF_MEMDIE, but skip\nthe tasks which have already passed exit_notify() to ensure a zombie\nwith TIF_MEMDIE set can\u0027t block oom-killer. Alternatively we could\nprobably clear TIF_MEMDIE after exit_mmap().\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nReviewed-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "6581058f44533f9d45548bcfe986c125376859e9",
      "tree": "a5c811ace1fea5bccfbc5146048b5d2b3655bdcf",
      "parents": [
        "fa9d594c46679485c5e3642d2bd9e874a7e07b19",
        "eacbbae385bf492229e84024863960d3160547c7"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sun Jul 31 06:25:37 2011 -1000"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sun Jul 31 06:25:37 2011 -1000"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/penberg/slab-2.6\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/penberg/slab-2.6:\n  slab: use NUMA_NO_NODE\n  slab: remove one NR_CPUS dependency\n"
    },
    {
      "commit": "eacbbae385bf492229e84024863960d3160547c7",
      "tree": "894a5d7dc97722e84f2b3a712962cbd8e44e1a64",
      "parents": [
        "acfe7d74484d6ccb25a80b8ff259fceceac0473e"
      ],
      "author": {
        "name": "Andrew Morton",
        "email": "akpm@linux-foundation.org",
        "time": "Thu Jul 28 13:59:49 2011 -0700"
      },
      "committer": {
        "name": "Pekka Enberg",
        "email": "penberg@kernel.org",
        "time": "Sun Jul 31 18:14:21 2011 +0300"
      },
      "message": "slab: use NUMA_NO_NODE\n\nUse the nice enumerated constant.\n\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Pekka Enberg \u003cpenberg@kernel.org\u003e\n"
    },
    {
      "commit": "c11abbbaa3252875c5740a6880b9a1a6f1e2a870",
      "tree": "692143f7edd1157ef499bff21143e0d6df7cace5",
      "parents": [
        "1d3fe4a75b691285cded47c9f1a91b30d25287b0",
        "9e577e8b46ab0c38970c0f0cd7eae62e6dffddee"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Jul 30 08:21:48 2011 -1000"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Jul 30 08:21:48 2011 -1000"
      },
      "message": "Merge branch \u0027slub/lockless\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/penberg/slab-2.6\n\n* \u0027slub/lockless\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/penberg/slab-2.6: (21 commits)\n  slub: When allocating a new slab also prep the first object\n  slub: disable interrupts in cmpxchg_double_slab when falling back to pagelock\n  Avoid duplicate _count variables in page_struct\n  Revert \"SLUB: Fix build breakage in linux/mm_types.h\"\n  SLUB: Fix build breakage in linux/mm_types.h\n  slub: slabinfo update for cmpxchg handling\n  slub: Not necessary to check for empty slab on load_freelist\n  slub: fast release on full slab\n  slub: Add statistics for the case that the current slab does not match the node\n  slub: Get rid of the another_slab label\n  slub: Avoid disabling interrupts in free slowpath\n  slub: Disable interrupts in free_debug processing\n  slub: Invert locking and avoid slab lock\n  slub: Rework allocator fastpaths\n  slub: Pass kmem_cache struct to lock and freeze slab\n  slub: explicit list_lock taking\n  slub: Add cmpxchg_double_slab()\n  mm: Rearrange struct page\n  slub: Move page-\u003efrozen handling near where the page-\u003efreelist handling occurs\n  slub: Do not use frozen page flag but a bit in the page counters\n  ...\n"
    },
    {
      "commit": "acfe7d74484d6ccb25a80b8ff259fceceac0473e",
      "tree": "0de2cb086983813091e426015e218643016b3bc9",
      "parents": [
        "95b6886526bb510b8370b625a49bc0ab3b8ff10f"
      ],
      "author": {
        "name": "Eric Dumazet",
        "email": "eric.dumazet@gmail.com",
        "time": "Mon Jul 25 08:55:42 2011 +0200"
      },
      "committer": {
        "name": "Pekka Enberg",
        "email": "penberg@kernel.org",
        "time": "Thu Jul 28 13:40:08 2011 +0300"
      },
      "message": "slab: remove one NR_CPUS dependency\n\nReduce high order allocations in do_tune_cpucache() for some setups.\n(NR_CPUS\u003d4096 -\u003e we need 64KB)\n\nSigned-off-by: Eric Dumazet \u003ceric.dumazet@gmail.com\u003e\nAcked-by: Christoph Lameter \u003ccl@linux.com\u003e\nSigned-off-by: Pekka Enberg \u003cpenberg@kernel.org\u003e\n"
    },
    {
      "commit": "60063497a95e716c9a689af3be2687d261f115b4",
      "tree": "6ce0d68db76982c53df46aee5f29f944ebf2c320",
      "parents": [
        "148817ba092f9f6edd35bad3c6c6b8e8f90fe2ed"
      ],
      "author": {
        "name": "Arun Sharma",
        "email": "asharma@fb.com",
        "time": "Tue Jul 26 16:09:06 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 26 16:49:47 2011 -0700"
      },
      "message": "atomic: use \u003clinux/atomic.h\u003e\n\nThis allows us to move duplicated code in \u003casm/atomic.h\u003e\n(atomic_inc_not_zero() for now) to \u003clinux/atomic.h\u003e\n\nSigned-off-by: Arun Sharma \u003casharma@fb.com\u003e\nReviewed-by: Eric Dumazet \u003ceric.dumazet@gmail.com\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: David Miller \u003cdavem@davemloft.net\u003e\nCc: Eric Dumazet \u003ceric.dumazet@gmail.com\u003e\nAcked-by: Mike Frysinger \u003cvapier@gentoo.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "b2588c4b4c3c075e9b45d61065d86c60de2b6441",
      "tree": "66942e8a252101aaa7e1f0a2ee2c3d8288dda659",
      "parents": [
        "810f09b87b75d7cc3906ffffe4311003f37caa2a"
      ],
      "author": {
        "name": "Akinobu Mita",
        "email": "akinobu.mita@gmail.com",
        "time": "Tue Jul 26 16:09:03 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 26 16:49:46 2011 -0700"
      },
      "message": "fail_page_alloc: simplify debugfs initialization\n\nNow cleanup_fault_attr_dentries() recursively removes a directory, So we\ncan simplify the error handling in the initialization code and no need\nto hold dentry structs for each debugfs file.\n\nSigned-off-by: Akinobu Mita \u003cakinobu.mita@gmail.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "810f09b87b75d7cc3906ffffe4311003f37caa2a",
      "tree": "0c1df5b5dbcc724d3c5cefd9ae4e5168121183d5",
      "parents": [
        "7f5ddcc8d3eaccd5e169fda738530f937509645e"
      ],
      "author": {
        "name": "Akinobu Mita",
        "email": "akinobu.mita@gmail.com",
        "time": "Tue Jul 26 16:09:02 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 26 16:49:46 2011 -0700"
      },
      "message": "failslab: simplify debugfs initialization\n\nNow cleanup_fault_attr_dentries() recursively removes a directory, So we\ncan simplify the error handling in the initialization code and no need\nto hold dentry structs for each debugfs file.\n\nSigned-off-by: Akinobu Mita \u003cakinobu.mita@gmail.com\u003e\nCc: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nCc: Pekka Enberg \u003cpenberg@kernel.org\u003e\nCc: Matt Mackall \u003cmpm@selenic.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "7f5ddcc8d3eaccd5e169fda738530f937509645e",
      "tree": "14f5581871040f98bbdab864314e1afc00a19a4c",
      "parents": [
        "8307fc257cf3931d87e172bd8663e80c3d1e56a3"
      ],
      "author": {
        "name": "Akinobu Mita",
        "email": "akinobu.mita@gmail.com",
        "time": "Tue Jul 26 16:09:02 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 26 16:49:46 2011 -0700"
      },
      "message": "fault-injection: use debugfs_remove_recursive\n\nUse debugfs_remove_recursive() to simplify initialization and\ndeinitialization of fault injection debugfs files.\n\nSigned-off-by: Akinobu Mita \u003cakinobu.mita@gmail.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "778d3b0ff0654ad7092bf823fd32010066b12365",
      "tree": "cd0073d8c513e1c56fd6950c4ec985f16fd004ad",
      "parents": [
        "8521fc50d433507a7cdc96bec280f9e5888a54cc"
      ],
      "author": {
        "name": "Michal Hocko",
        "email": "mhocko@suse.cz",
        "time": "Tue Jul 26 16:08:30 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 26 16:49:43 2011 -0700"
      },
      "message": "cpusets: randomize node rotor used in cpuset_mem_spread_node()\n\n[ This patch has already been accepted as commit 0ac0c0d0f837 but later\n  reverted (commit 35926ff5fba8) because it itroduced arch specific\n  __node_random which was defined only for x86 code so it broke other\n  archs.  This is a followup without any arch specific code.  Other than\n  that there are no functional changes.]\n\nSome workloads that create a large number of small files tend to assign\ntoo many pages to node 0 (multi-node systems).  Part of the reason is\nthat the rotor (in cpuset_mem_spread_node()) used to assign nodes starts\nat node 0 for newly created tasks.\n\nThis patch changes the rotor to be initialized to a random node number\nof the cpuset.\n\n[akpm@linux-foundation.org: fix layout]\n[Lee.Schermerhorn@hp.com: Define stub numa_random() for !NUMA configuration]\n[mhocko@suse.cz: Make it arch independent]\n[akpm@linux-foundation.org: fix CONFIG_NUMA\u003dy, MAX_NUMNODES\u003e1 build]\nSigned-off-by: Jack Steiner \u003csteiner@sgi.com\u003e\nSigned-off-by: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nSigned-off-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nReviewed-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nCc: Pekka Enberg \u003cpenberg@cs.helsinki.fi\u003e\nCc: Paul Menage \u003cmenage@google.com\u003e\nCc: Jack Steiner \u003csteiner@sgi.com\u003e\nCc: Robin Holt \u003cholt@sgi.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: Jack Steiner \u003csteiner@sgi.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nCc: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Paul Menage \u003cmenage@google.com\u003e\nCc: Pekka Enberg \u003cpenberg@cs.helsinki.fi\u003e\nCc: Robin Holt \u003cholt@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "8521fc50d433507a7cdc96bec280f9e5888a54cc",
      "tree": "b89d7b2eb34ba80b52e1f89ca767a86847df59b8",
      "parents": [
        "3e92041d68b40c47faa34c7dc08fc650a6c36adc"
      ],
      "author": {
        "name": "Michal Hocko",
        "email": "mhocko@suse.cz",
        "time": "Tue Jul 26 16:08:29 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 26 16:49:43 2011 -0700"
      },
      "message": "memcg: get rid of percpu_charge_mutex lock\n\npercpu_charge_mutex protects from multiple simultaneous per-cpu charge\ncaches draining because we might end up having too many work items.  At\nleast this was the case until commit 26fe61684449 (\"memcg: fix percpu\ncached charge draining frequency\") when we introduced a more targeted\ndraining for async mode.\n\nNow that also sync draining is targeted we can safely remove mutex\nbecause we will not send more work than the current number of CPUs.\nFLUSHING_CACHED_CHARGE protects from sending the same work multiple\ntimes and stock-\u003enr_pages \u003d\u003d 0 protects from pointless sending a work if\nthere is obviously nothing to be done.  This is of course racy but we\ncan live with it as the race window is really small (we would have to\nsee FLUSHING_CACHED_CHARGE cleared while nr_pages would be still\nnon-zero).\n\nThe only remaining place where we can race is synchronous mode when we\nrely on FLUSHING_CACHED_CHARGE test which might have been set by other\ndrainer on the same group but we should wait in that case as well.\n\nSigned-off-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Balbir Singh \u003cbsingharora@gmail.com\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "3e92041d68b40c47faa34c7dc08fc650a6c36adc",
      "tree": "29eab5bcd1bbf333cb25ed140a245645f9d7e0c4",
      "parents": [
        "d38144b7a5f8d0a5e05d549177191374c6911009"
      ],
      "author": {
        "name": "Michal Hocko",
        "email": "mhocko@suse.cz",
        "time": "Tue Jul 26 16:08:29 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 26 16:49:43 2011 -0700"
      },
      "message": "memcg: add mem_cgroup_same_or_subtree() helper\n\nWe are checking whether a given two groups are same or at least in the\nsame subtree of a hierarchy at several places.  Let\u0027s make a helper for\nit to make code easier to read.\n\nSigned-off-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Balbir Singh \u003cbsingharora@gmail.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "d38144b7a5f8d0a5e05d549177191374c6911009",
      "tree": "ca0737291d22791c66aad10ad1218afc3dac51fd",
      "parents": [
        "d1a05b6973c7cb33144fa965d73facc708ffc37d"
      ],
      "author": {
        "name": "Michal Hocko",
        "email": "mhocko@suse.cz",
        "time": "Tue Jul 26 16:08:28 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 26 16:49:42 2011 -0700"
      },
      "message": "memcg: unify sync and async per-cpu charge cache draining\n\nCurrently we have two ways how to drain per-CPU caches for charges.\ndrain_all_stock_sync will synchronously drain all caches while\ndrain_all_stock_async will asynchronously drain only those that refer to\na given memory cgroup or its subtree in hierarchy.  Targeted async\ndraining has been introduced by 26fe6168 (memcg: fix percpu cached\ncharge draining frequency) to reduce the cpu workers number.\n\nsync draining is currently triggered only from mem_cgroup_force_empty\nwhich is triggered only by userspace (mem_cgroup_force_empty_write) or\nwhen a cgroup is removed (mem_cgroup_pre_destroy).  Although these are\nnot usually frequent operations it still makes some sense to do targeted\ndraining as well, especially if the box has many CPUs.\n\nThis patch unifies both methods to use the single code (drain_all_stock)\nwhich relies on the original async implementation and just adds\nflush_work to wait on all caches that are still under work for the sync\nmode.  We are using FLUSHING_CACHED_CHARGE bit check to prevent from\nwaiting on a work that we haven\u0027t triggered.  Please note that both sync\nand async functions are currently protected by percpu_charge_mutex so we\ncannot race with other drainers.\n\nSigned-off-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nReviewed-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Balbir Singh \u003cbsingharora@gmail.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "d1a05b6973c7cb33144fa965d73facc708ffc37d",
      "tree": "463a8bfedd56b4972f273c816fa62a55d7bc4754",
      "parents": [
        "82f9d486e59f588c7d100865c36510644abda356"
      ],
      "author": {
        "name": "Michal Hocko",
        "email": "mhocko@suse.cz",
        "time": "Tue Jul 26 16:08:27 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 26 16:49:42 2011 -0700"
      },
      "message": "memcg: do not try to drain per-cpu caches without pages\n\ndrain_all_stock_async tries to optimize a work to be done on the work\nqueue by excluding any work for the current CPU because it assumes that\nthe context we are called from already tried to charge from that cache\nand it\u0027s failed so it must be empty already.\n\nWhile the assumption is correct we can optimize it even more by checking\nthe current number of pages in the cache.  This will also reduce a work\non other CPUs with an empty stock.\n\nFor the current CPU we can simply call drain_local_stock rather than\ndeferring it to the work queue.\n\n[kamezawa.hiroyu@jp.fujitsu.com: use drain_local_stock for current CPU optimization]\nSigned-off-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "82f9d486e59f588c7d100865c36510644abda356",
      "tree": "266f3dcf4f57538196bddd77a129adfb2752335b",
      "parents": [
        "108b6a78463bb8c7163e4f9779f36ad8bbade334"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Tue Jul 26 16:08:26 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 26 16:49:42 2011 -0700"
      },
      "message": "memcg: add memory.vmscan_stat\n\nThe commit log of 0ae5e89c60c9 (\"memcg: count the soft_limit reclaim\nin...\") says it adds scanning stats to memory.stat file.  But it doesn\u0027t\nbecause we considered we needed to make a concensus for such new APIs.\n\nThis patch is a trial to add memory.scan_stat. This shows\n  - the number of scanned pages(total, anon, file)\n  - the number of rotated pages(total, anon, file)\n  - the number of freed pages(total, anon, file)\n  - the number of elaplsed time (including sleep/pause time)\n\n  for both of direct/soft reclaim.\n\nThe biggest difference with oringinal Ying\u0027s one is that this file\ncan be reset by some write, as\n\n  # echo 0 ...../memory.scan_stat\n\nExample of output is here. This is a result after make -j 6 kernel\nunder 300M limit.\n\n  [kamezawa@bluextal ~]$ cat /cgroup/memory/A/memory.scan_stat\n  [kamezawa@bluextal ~]$ cat /cgroup/memory/A/memory.vmscan_stat\n  scanned_pages_by_limit 9471864\n  scanned_anon_pages_by_limit 6640629\n  scanned_file_pages_by_limit 2831235\n  rotated_pages_by_limit 4243974\n  rotated_anon_pages_by_limit 3971968\n  rotated_file_pages_by_limit 272006\n  freed_pages_by_limit 2318492\n  freed_anon_pages_by_limit 962052\n  freed_file_pages_by_limit 1356440\n  elapsed_ns_by_limit 351386416101\n  scanned_pages_by_system 0\n  scanned_anon_pages_by_system 0\n  scanned_file_pages_by_system 0\n  rotated_pages_by_system 0\n  rotated_anon_pages_by_system 0\n  rotated_file_pages_by_system 0\n  freed_pages_by_system 0\n  freed_anon_pages_by_system 0\n  freed_file_pages_by_system 0\n  elapsed_ns_by_system 0\n  scanned_pages_by_limit_under_hierarchy 9471864\n  scanned_anon_pages_by_limit_under_hierarchy 6640629\n  scanned_file_pages_by_limit_under_hierarchy 2831235\n  rotated_pages_by_limit_under_hierarchy 4243974\n  rotated_anon_pages_by_limit_under_hierarchy 3971968\n  rotated_file_pages_by_limit_under_hierarchy 272006\n  freed_pages_by_limit_under_hierarchy 2318492\n  freed_anon_pages_by_limit_under_hierarchy 962052\n  freed_file_pages_by_limit_under_hierarchy 1356440\n  elapsed_ns_by_limit_under_hierarchy 351386416101\n  scanned_pages_by_system_under_hierarchy 0\n  scanned_anon_pages_by_system_under_hierarchy 0\n  scanned_file_pages_by_system_under_hierarchy 0\n  rotated_pages_by_system_under_hierarchy 0\n  rotated_anon_pages_by_system_under_hierarchy 0\n  rotated_file_pages_by_system_under_hierarchy 0\n  freed_pages_by_system_under_hierarchy 0\n  freed_anon_pages_by_system_under_hierarchy 0\n  freed_file_pages_by_system_under_hierarchy 0\n  elapsed_ns_by_system_under_hierarchy 0\n\ntotal_xxxx is for hierarchy management.\n\nThis will be useful for further memcg developments and need to be\ndevelopped before we do some complicated rework on LRU/softlimit\nmanagement.\n\nThis patch adds a new struct memcg_scanrecord into scan_control struct.\nsc-\u003enr_scanned at el is not designed for exporting information.  For\nexample, nr_scanned is reset frequentrly and incremented +2 at scanning\nmapped pages.\n\nTo avoid complexity, I added a new param in scan_control which is for\nexporting scanning score.\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nCc: Andrew Bresticker \u003cabrestic@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "108b6a78463bb8c7163e4f9779f36ad8bbade334",
      "tree": "f23a3d4835cf61ba73b918169355bafbf20e3966",
      "parents": [
        "4508378b9523e22a2a0175d8bf64d932fb10a67d"
      ],
      "author": {
        "name": "Daisuke Nishimura",
        "email": "nishimura@mxp.nes.nec.co.jp",
        "time": "Tue Jul 26 16:08:25 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 26 16:49:42 2011 -0700"
      },
      "message": "memcg: fix behavior of mem_cgroup_resize_limit()\n\nCommit 22a668d7c3ef (\"memcg: fix behavior under memory.limit equals to\nmemsw.limit\") introduced \"memsw_is_minimum\" flag, which becomes true\nwhen mem_limit \u003d\u003d memsw_limit.  The flag is checked at the beginning of\nreclaim, and \"noswap\" is set if the flag is true, because using swap is\nmeaningless in this case.\n\nThis works well in most cases, but when we try to shrink mem_limit,\nwhich is the same as memsw_limit now, we might fail to shrink mem_limit\nbecause swap doesn\u0027t used.\n\nThis patch fixes this behavior by:\n - check MEM_CGROUP_RECLAIM_SHRINK at the begining of reclaim\n - If it is set, don\u0027t set \"noswap\" flag even if memsw_is_minimum is true.\n\nSigned-off-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbsingharora@gmail.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nCc: \u003cstable@kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "4508378b9523e22a2a0175d8bf64d932fb10a67d",
      "tree": "f7ebd57322edc18ff91ed7d71236fbbd5633c21c",
      "parents": [
        "1af8efe965676ab30d6c8a5b1fccc9229f339a3b"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Tue Jul 26 16:08:24 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 26 16:49:42 2011 -0700"
      },
      "message": "memcg: fix vmscan count in small memcgs\n\nCommit 246e87a93934 (\"memcg: fix get_scan_count() for small targets\")\nfixes the memcg/kswapd behavior against small targets and prevent vmscan\npriority too high.\n\nBut the implementation is too naive and adds another problem to small\nmemcg.  It always force scan to 32 pages of file/anon and doesn\u0027t handle\nswappiness and other rotate_info.  It makes vmscan to scan anon LRU\nregardless of swappiness and make reclaim bad.  This patch fixes it by\nadjusting scanning count with regard to swappiness at el.\n\nAt a test \"cat 1G file under 300M limit.\" (swappiness\u003d20)\n before patch\n        scanned_pages_by_limit 360919\n        scanned_anon_pages_by_limit 180469\n        scanned_file_pages_by_limit 180450\n        rotated_pages_by_limit 31\n        rotated_anon_pages_by_limit 25\n        rotated_file_pages_by_limit 6\n        freed_pages_by_limit 180458\n        freed_anon_pages_by_limit 19\n        freed_file_pages_by_limit 180439\n        elapsed_ns_by_limit 429758872\n after patch\n        scanned_pages_by_limit 180674\n        scanned_anon_pages_by_limit 24\n        scanned_file_pages_by_limit 180650\n        rotated_pages_by_limit 35\n        rotated_anon_pages_by_limit 24\n        rotated_file_pages_by_limit 11\n        freed_pages_by_limit 180634\n        freed_anon_pages_by_limit 0\n        freed_file_pages_by_limit 180634\n        elapsed_ns_by_limit 367119089\n        scanned_pages_by_system 0\n\nthe numbers of scanning anon are decreased(as expected), and elapsed time\nreduced. By this patch, small memcgs will work better.\n(*) Because the amount of file-cache is much bigger than anon,\n    recalaim_stat\u0027s rotate-scan counter make scanning files more.\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "1af8efe965676ab30d6c8a5b1fccc9229f339a3b",
      "tree": "832cfd92cae498d9af1687bccc77344143df97a1",
      "parents": [
        "79dfdaccd1d5b40ff7cf4a35a0e63696ebb78b4d"
      ],
      "author": {
        "name": "Michal Hocko",
        "email": "mhocko@suse.cz",
        "time": "Tue Jul 26 16:08:24 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 26 16:49:42 2011 -0700"
      },
      "message": "memcg: change memcg_oom_mutex to spinlock\n\nmemcg_oom_mutex is used to protect memcg OOM path and eventfd interface\nfor oom_control.  None of the critical sections which it protects sleep\n(eventfd_signal works from atomic context and the rest are simple linked\nlist resp.  oom_lock atomic operations).\n\nMutex is also too heavyweight for those code paths because it triggers a\nlot of scheduling.  It also makes makes convoying effects more visible\nwhen we have a big number of oom killing because we take the lock\nmutliple times during mem_cgroup_handle_oom so we have multiple places\nwhere many processes can sleep.\n\nSigned-off-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Balbir Singh \u003cbsingharora@gmail.com\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "79dfdaccd1d5b40ff7cf4a35a0e63696ebb78b4d",
      "tree": "27eeb38c9ca690a19f05e06a2a46f094b20bfd52",
      "parents": [
        "bb2a0de92c891b8feeedc0178acb3ae009d899a8"
      ],
      "author": {
        "name": "Michal Hocko",
        "email": "mhocko@suse.cz",
        "time": "Tue Jul 26 16:08:23 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 26 16:49:42 2011 -0700"
      },
      "message": "memcg: make oom_lock 0 and 1 based rather than counter\n\nCommit 867578cb (\"memcg: fix oom kill behavior\") introduced a oom_lock\ncounter which is incremented by mem_cgroup_oom_lock when we are about to\nhandle memcg OOM situation.  mem_cgroup_handle_oom falls back to a sleep\nif oom_lock \u003e 1 to prevent from multiple oom kills at the same time.\nThe counter is then decremented by mem_cgroup_oom_unlock called from the\nsame function.\n\nThis works correctly but it can lead to serious starvations when we have\nmany processes triggering OOM and many CPUs available for them (I have\ntested with 16 CPUs).\n\nConsider a process (call it A) which gets the oom_lock (the first one\nthat got to mem_cgroup_handle_oom and grabbed memcg_oom_mutex) and other\nprocesses that are blocked on the mutex.  While A releases the mutex and\ncalls mem_cgroup_out_of_memory others will wake up (one after another)\nand increase the counter and fall into sleep (memcg_oom_waitq).\n\nOnce A finishes mem_cgroup_out_of_memory it takes the mutex again and\ndecreases oom_lock and wakes other tasks (if releasing memory by\nsomebody else - e.g.  killed process - hasn\u0027t done it yet).\n\nA testcase would look like:\n  Assume malloc XXX is a program allocating XXX Megabytes of memory\n  which touches all allocated pages in a tight loop\n  # swapoff SWAP_DEVICE\n  # cgcreate -g memory:A\n  # cgset -r memory.oom_control\u003d0   A\n  # cgset -r memory.limit_in_bytes\u003d 200M\n  # for i in `seq 100`\n  # do\n  #     cgexec -g memory:A   malloc 10 \u0026\n  # done\n\nThe main problem here is that all processes still race for the mutex and\nthere is no guarantee that we will get counter back to 0 for those that\ngot back to mem_cgroup_handle_oom.  In the end the whole convoy\nin/decreases the counter but we do not get to 1 that would enable\nkilling so nothing useful can be done.  The time is basically unbounded\nbecause it highly depends on scheduling and ordering on mutex (I have\nseen this taking hours...).\n\nThis patch replaces the counter by a simple {un}lock semantic.  As\nmem_cgroup_oom_{un}lock works on the a subtree of a hierarchy we have to\nmake sure that nobody else races with us which is guaranteed by the\nmemcg_oom_mutex.\n\nWe have to be careful while locking subtrees because we can encounter a\nsubtree which is already locked: hierarchy:\n\n          A\n        /   \\\n       B     \\\n      /\\      \\\n     C  D     E\n\nB - C - D tree might be already locked.  While we want to enable locking\nE subtree because OOM situations cannot influence each other we\ndefinitely do not want to allow locking A.\n\nTherefore we have to refuse lock if any subtree is already locked and\nclear up the lock for all nodes that have been set up to the failure\npoint.\n\nOn the other hand we have to make sure that the rest of the world will\nrecognize that a group is under OOM even though it doesn\u0027t have a lock.\nTherefore we have to introduce under_oom variable which is incremented\nand decremented for the whole subtree when we enter resp.  leave\nmem_cgroup_handle_oom.  under_oom, unlike oom_lock, doesn\u0027t need be\nupdated under memcg_oom_mutex because its users only check a single\ngroup and they use atomic operations for that.\n\nThis can be checked easily by the following test case:\n\n  # cgcreate -g memory:A\n  # cgset -r memory.use_hierarchy\u003d1 A\n  # cgset -r memory.oom_control\u003d1   A\n  # cgset -r memory.limit_in_bytes\u003d 100M\n  # cgset -r memory.memsw.limit_in_bytes\u003d 100M\n  # cgcreate -g memory:A/B\n  # cgset -r memory.oom_control\u003d1 A/B\n  # cgset -r memory.limit_in_bytes\u003d20M\n  # cgset -r memory.memsw.limit_in_bytes\u003d20M\n  # cgexec -g memory:A/B malloc 30  \u0026    #-\u003ethis will be blocked by OOM of group B\n  # cgexec -g memory:A   malloc 80  \u0026    #-\u003ethis will be blocked by OOM of group A\n\nWhile B gets oom_lock A will not get it.  Both of them go into sleep and\nwait for an external action.  We can make the limit higher for A to\nenforce waking it up\n\n  # cgset -r memory.memsw.limit_in_bytes\u003d300M A\n  # cgset -r memory.limit_in_bytes\u003d300M A\n\nmalloc in A has to wake up even though it doesn\u0027t have oom_lock.\n\nFinally, the unlock path is very easy because we always unlock only the\nsubtree we have locked previously while we always decrement under_oom.\n\nSigned-off-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Balbir Singh \u003cbsingharora@gmail.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "bb2a0de92c891b8feeedc0178acb3ae009d899a8",
      "tree": "c2c0b3ad66c8da0e48c021927b2d747fb08b7ef3",
      "parents": [
        "1f4c025b5a5520fd2571244196b1b01ad96d18f6"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Tue Jul 26 16:08:22 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 26 16:49:42 2011 -0700"
      },
      "message": "memcg: consolidate memory cgroup lru stat functions\n\nIn mm/memcontrol.c, there are many lru stat functions as..\n\n  mem_cgroup_zone_nr_lru_pages\n  mem_cgroup_node_nr_file_lru_pages\n  mem_cgroup_nr_file_lru_pages\n  mem_cgroup_node_nr_anon_lru_pages\n  mem_cgroup_nr_anon_lru_pages\n  mem_cgroup_node_nr_unevictable_lru_pages\n  mem_cgroup_nr_unevictable_lru_pages\n  mem_cgroup_node_nr_lru_pages\n  mem_cgroup_nr_lru_pages\n  mem_cgroup_get_local_zonestat\n\nSome of them are under #ifdef MAX_NUMNODES \u003e1 and others are not.\nThis seems bad. This patch consolidates all functions into\n\n  mem_cgroup_zone_nr_lru_pages()\n  mem_cgroup_node_nr_lru_pages()\n  mem_cgroup_nr_lru_pages()\n\nFor these functions, \"which LRU?\" information is passed by a mask.\n\nexample:\n  mem_cgroup_nr_lru_pages(mem, BIT(LRU_ACTIVE_ANON))\n\nAnd I added some macro as ALL_LRU, ALL_LRU_FILE, ALL_LRU_ANON.\n\nexample:\n  mem_cgroup_nr_lru_pages(mem, ALL_LRU)\n\nBTW, considering layout of NUMA memory placement of counters, this patch seems\nto be better.\n\nNow, when we gather all LRU information, we scan in following orer\n    for_each_lru -\u003e for_each_node -\u003e for_each_zone.\n\nThis means we\u0027ll touch cache lines in different node in turn.\n\nAfter patch, we\u0027ll scan\n    for_each_node -\u003e for_each_zone -\u003e for_each_lru(mask)\n\nThen, we\u0027ll gather information in the same cacheline at once.\n\n[akpm@linux-foundation.org: fix warnigns, build error]\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbsingharora@gmail.com\u003e\nCc: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "1f4c025b5a5520fd2571244196b1b01ad96d18f6",
      "tree": "f2123a44c9e838eac7d08fe13443cfa04cc23f33",
      "parents": [
        "b830ac1d9a2262093bb0f3f6a2fd2a1c8278daf5"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Tue Jul 26 16:08:21 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 26 16:49:42 2011 -0700"
      },
      "message": "memcg: export memory cgroup\u0027s swappiness with mem_cgroup_swappiness()\n\nEach memory cgroup has a \u0027swappiness\u0027 value which can be accessed by\nget_swappiness(memcg).  The major user is try_to_free_mem_cgroup_pages()\nand swappiness is passed by argument.  It\u0027s propagated by scan_control.\n\nget_swappiness() is a static function but some planned updates will need\nto get swappiness from files other than memcontrol.c This patch exports\nget_swappiness() as mem_cgroup_swappiness().  With this, we can remove the\nargument of swapiness from try_to_free...  and drop swappiness from\nscan_control.  only memcg uses it.\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbsingharora@gmail.com\u003e\nCc: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nCc: Shaohua Li \u003cshaohua.li@intel.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "f01ef569cddb1a8627b1c6b3a134998ad1cf4b22",
      "tree": "29ea1a0942c8549c24411e976cd6891c7e995e89",
      "parents": [
        "a93a1329271038f0e8337061d3b41b3b212a851e",
        "bcff25fc8aa47a13faff8b4b992589813f7b450a"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 26 10:39:54 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 26 10:39:54 2011 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/wfg/writeback\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/wfg/writeback: (27 commits)\n  mm: properly reflect task dirty limits in dirty_exceeded logic\n  writeback: don\u0027t busy retry writeback on new/freeing inodes\n  writeback: scale IO chunk size up to half device bandwidth\n  writeback: trace global_dirty_state\n  writeback: introduce max-pause and pass-good dirty limits\n  writeback: introduce smoothed global dirty limit\n  writeback: consolidate variable names in balance_dirty_pages()\n  writeback: show bdi write bandwidth in debugfs\n  writeback: bdi write bandwidth estimation\n  writeback: account per-bdi accumulated written pages\n  writeback: make writeback_control.nr_to_write straight\n  writeback: skip tmpfs early in balance_dirty_pages_ratelimited_nr()\n  writeback: trace event writeback_queue_io\n  writeback: trace event writeback_single_inode\n  writeback: remove .nonblocking and .encountered_congestion\n  writeback: remove writeback_control.more_io\n  writeback: skip balance_dirty_pages() for in-memory fs\n  writeback: add bdi_dirty_limit() kernel-doc\n  writeback: avoid extra sync work at enqueue time\n  writeback: elevate queue_io() into wb_writeback()\n  ...\n\nFix up trivial conflicts in fs/fs-writeback.c and mm/filemap.c\n"
    },
    {
      "commit": "45b583b10a8b438b970e95a7d1d4db22c9e35004",
      "tree": "14fa481598289df0459580c582b48a9d95db51f6",
      "parents": [
        "154dd78d30b56ffb8b447f629bfcceb14150e5c4",
        "f19da2ce8ef5e49b8b8ea199c3601dd45d71b262"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jul 25 21:00:19 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jul 25 21:00:19 2011 -0700"
      },
      "message": "Merge \u0027akpm\u0027 patch series\n\n* Merge akpm patch series: (122 commits)\n  drivers/connector/cn_proc.c: remove unused local\n  Documentation/SubmitChecklist: add RCU debug config options\n  reiserfs: use hweight_long()\n  reiserfs: use proper little-endian bitops\n  pnpacpi: register disabled resources\n  drivers/rtc/rtc-tegra.c: properly initialize spinlock\n  drivers/rtc/rtc-twl.c: check return value of twl_rtc_write_u8() in twl_rtc_set_time()\n  drivers/rtc: add support for Qualcomm PMIC8xxx RTC\n  drivers/rtc/rtc-s3c.c: support clock gating\n  drivers/rtc/rtc-mpc5121.c: add support for RTC on MPC5200\n  init: skip calibration delay if previously done\n  misc/eeprom: add eeprom access driver for digsy_mtc board\n  misc/eeprom: add driver for microwire 93xx46 EEPROMs\n  checkpatch.pl: update $logFunctions\n  checkpatch: make utf-8 test --strict\n  checkpatch.pl: add ability to ignore various messages\n  checkpatch: add a \"prefer __aligned\" check\n  checkpatch: validate signature styles and To: and Cc: lines\n  checkpatch: add __rcu as a sparse modifier\n  checkpatch: suggest using min_t or max_t\n  ...\n\nDid this as a merge because of (trivial) conflicts in\n - Documentation/feature-removal-schedule.txt\n - arch/xtensa/include/asm/uaccess.h\nthat were just easier to fix up in the merge than in the patch series.\n"
    },
    {
      "commit": "ae891a1b93bf62e9aaa116a7a71312375047fc9f",
      "tree": "83e821e818654da3e3443ecddd757665251db6e0",
      "parents": [
        "5190f0c030f46b3169205f34f6d9ef480fa39ef2"
      ],
      "author": {
        "name": "Maxin B John",
        "email": "maxin.john@gmail.com",
        "time": "Mon Jul 25 17:12:59 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jul 25 20:57:14 2011 -0700"
      },
      "message": "devres: fix possible use after free\n\ndevres uses the pointer value as key after it\u0027s freed, which is safe but\ntriggers spurious use-after-free warnings on some static analysis tools.\nRearrange code to avoid such warnings.\n\nSigned-off-by: Maxin B. John \u003cmaxin.john@gmail.com\u003e\nReviewed-by: Rolf Eike Beer \u003ceike-kernel@sf-tec.de\u003e\nAcked-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "99b12e3d882bc7ebdfe0de381dff3b16d21c38f7",
      "tree": "2aa21f5b5a6e03e49cd7af4dbd1b38ec451b09d7",
      "parents": [
        "48f170fb7d7db8789ccc23e051af61f62af5f685"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Mon Jul 25 17:12:37 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jul 25 20:57:11 2011 -0700"
      },
      "message": "writeback: account NR_WRITTEN at IO completion time\n\nNR_WRITTEN is now accounted at block IO enqueue time, which is not very\naccurate as to common understanding.  This moves NR_WRITTEN accounting to\nthe IO completion time and makes it more consistent with BDI_WRITTEN,\nwhich is used for bandwidth estimation.\n\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nCc: Michael Rubin \u003cmrubin@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "48f170fb7d7db8789ccc23e051af61f62af5f685",
      "tree": "d4dcb91583b7b831a20deed6979be713ad2892b7",
      "parents": [
        "27ab700626f048407e9466d389a43c7d3aa45967"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Mon Jul 25 17:12:37 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jul 25 20:57:11 2011 -0700"
      },
      "message": "tmpfs: simplify unuse and writepage\n\nshmem_unuse_inode() and shmem_writepage() contain a little code to cope\nwith pages inserted independently into the filecache, probably by a\nfilesystem stacked on top of tmpfs, then fed to its -\u003ereadpage() or\n-\u003ewritepage().\n\nUnionfs was indeed experimenting with working in that way three years ago,\nbut I find no current examples: nowadays the stacking filesystems use vfs\ninterfaces to the lower filesystem.\n\nIt\u0027s now illegal: remove most of that code, adding some WARN_ON_ONCEs.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nCc: Erez Zadok \u003cezk@fsl.cs.sunysb.edu\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "27ab700626f048407e9466d389a43c7d3aa45967",
      "tree": "a8d371d8a3727110310cba457840be0f2cfb77c6",
      "parents": [
        "e83c32e8f92724a06a22a3b42f3afc07db93e131"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Mon Jul 25 17:12:36 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jul 25 20:57:11 2011 -0700"
      },
      "message": "tmpfs: simplify filepage/swappage\n\nWe can now simplify shmem_getpage_gfp(): there is no longer a dilemma of\nfilepage passed in via shmem_readpage(), then swappage found, which must\nthen be copied over to it.\n\nAlthough at first it\u0027s tempting to replace the **pagep arg by returning\nstruct page *, that makes a mess of IS_ERR_OR_NULL(page)s in all the\ncallers, so leave as is.\n\nInsert BUG_ON(!PageUptodate) when we find and lock page: some of the\ncomplication came from uninitialized pages inserted into filecache prior\nto readpage; but now we\u0027re in control, and only release pagelock on\nfilecache once it\u0027s uptodate (if an error occurs in reading back from\nswap, the page remains in swapcache, never moved to filecache).\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "e83c32e8f92724a06a22a3b42f3afc07db93e131",
      "tree": "eeefe97f26e7b4faf672eba777a12749bfdad024",
      "parents": [
        "9276aad6c898dbcc31d095f2934dedd5cbb2e93e"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Mon Jul 25 17:12:35 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jul 25 20:57:11 2011 -0700"
      },
      "message": "tmpfs: simplify prealloc_page\n\nThe prealloc_page handling in shmem_getpage_gfp() is unnecessarily\ncomplicated: first simplify that before going on to filepage/swappage.\n\nThat\u0027s right, don\u0027t report ENOMEM when the preallocation fails: we may or\nmay not need the page.  But simply report ENOMEM once we find we do need\nit, instead of dropping lock, repeating allocation, unwinding on failure\netc.  And leave the out label on the fast path, don\u0027t goto.\n\nFix something that looks like a bug but turns out not to be: set\nPageSwapBacked on prealloc_page before its mem_cgroup_cache_charge(), as\nthe removed case was doing.  That\u0027s important before adding to LRU\n(determines which LRU the page goes on), and does affect which path it\ntakes through memcontrol.c, but in the end MEM_CGROUP_CHANGE_TYPE_ SHMEM\nis handled no differently from CACHE.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nAcked-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nCc: \"Zhang, Yanmin\" \u003cyanmin.zhang@intel.com\u003e\nCc: Tim Chen \u003ctim.c.chen@linux.intel.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "9276aad6c898dbcc31d095f2934dedd5cbb2e93e",
      "tree": "7ba68f82aa8b747e11d9cfb79c4fe06188b7b2c7",
      "parents": [
        "68da9f055755ee2609a1686722e6d6a7980019ee"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Mon Jul 25 17:12:34 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jul 25 20:57:11 2011 -0700"
      },
      "message": "tmpfs: remove_shmem_readpage\n\nRemove that pernicious shmem_readpage() at last: the things we needed it\nfor (splice, loop, sendfile, i915 GEM) are now fully taken care of by\nshmem_file_splice_read() and shmem_read_mapping_page_gfp().\n\nThis removal clears the way for a simpler shmem_getpage_gfp(), since page\nis never passed in; but leave most of that cleanup until after.\n\nsys_readahead() and sys_fadvise(POSIX_FADV_WILLNEED) will now EINVAL,\ninstead of unexpectedly trying to read ahead on tmpfs: if that proves to\nbe an issue for someone, then we can either arrange for them to return\nsuccess instead, or try to implement async readahead on tmpfs.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "68da9f055755ee2609a1686722e6d6a7980019ee",
      "tree": "9f2810f28a7852b0ed3390f7fa0d29979a2997c2",
      "parents": [
        "71f0e07a605fad1fb6b288e4dc1dd8dfa78f4872"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Mon Jul 25 17:12:34 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jul 25 20:57:11 2011 -0700"
      },
      "message": "tmpfs: pass gfp to shmem_getpage_gfp\n\nMake shmem_getpage() a wrapper, passing mapping_gfp_mask() down to\nshmem_getpage_gfp(), which in turn passes gfp down to shmem_swp_alloc().\n\nChange shmem_read_mapping_page_gfp() to use shmem_getpage_gfp() in the\nCONFIG_SHMEM case; but leave tiny !SHMEM using read_cache_page_gfp().\n\nAdd a BUG_ON() in case anyone happens to call this on a non-shmem mapping;\nthough we might later want to let that case route to read_cache_page_gfp().\n\nIt annoys me to have these two almost-redundant args, gfp and fault_type:\nI can\u0027t find a better way; but initialize fault_type only in shmem_fault().\n\nNote that before, read_cache_page_gfp() was allocating i915_gem\u0027s pages\nwith __GFP_NORETRY as intended; but the corresponding swap vector pages\ngot allocated without it, leaving a small possibility of OOM.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "71f0e07a605fad1fb6b288e4dc1dd8dfa78f4872",
      "tree": "1eac7c25f32ac88bba52a31179989e62773aa079",
      "parents": [
        "708e3508c2a2204cc276dcdb543009a441bfe91b"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Mon Jul 25 17:12:33 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jul 25 20:57:11 2011 -0700"
      },
      "message": "tmpfs: refine shmem_file_splice_read\n\nTidy up shmem_file_splice_read():\n\nRemove readahead: okay, we could implement shmem readahead on swap,\nbut have never done so before, swap being the slow exceptional path.\n\nUse shmem_getpage() instead of find_or_create_page() plus -\u003ereadpage().\n\nRemove several comments: sorry, I found them more distracting than\nhelpful, and this will not be the reference version of splice_read().\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "708e3508c2a2204cc276dcdb543009a441bfe91b",
      "tree": "9e301ba4ebf3b34a00228c26977feebfba8ad9ef",
      "parents": [
        "2efaca927f5cd7ecd0f1554b8f9b6a9a2c329c03"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Mon Jul 25 17:12:32 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jul 25 20:57:11 2011 -0700"
      },
      "message": "tmpfs: clone shmem_file_splice_read()\n\nCopy __generic_file_splice_read() and generic_file_splice_read() from\nfs/splice.c to shmem_file_splice_read() in mm/shmem.c.  Make\npage_cache_pipe_buf_ops and spd_release_page() accessible to it.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nCc: Jens Axboe \u003cjaxboe@fusionio.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "2efaca927f5cd7ecd0f1554b8f9b6a9a2c329c03",
      "tree": "1bea042a7c712e861d7734db59b3311375c439c3",
      "parents": [
        "72c4783210f77fd743f0a316858d33f27db51e7c"
      ],
      "author": {
        "name": "Benjamin Herrenschmidt",
        "email": "benh@kernel.crashing.org",
        "time": "Mon Jul 25 17:12:32 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jul 25 20:57:11 2011 -0700"
      },
      "message": "mm/futex: fix futex writes on archs with SW tracking of dirty \u0026 young\n\nI haven\u0027t reproduced it myself but the fail scenario is that on such\nmachines (notably ARM and some embedded powerpc), if you manage to hit\nthat futex path on a writable page whose dirty bit has gone from the PTE,\nyou\u0027ll livelock inside the kernel from what I can tell.\n\nIt will go in a loop of trying the atomic access, failing, trying gup to\n\"fix it up\", getting succcess from gup, go back to the atomic access,\nfailing again because dirty wasn\u0027t fixed etc...\n\nSo I think you essentially hang in the kernel.\n\nThe scenario is probably rare\u0027ish because affected architecture are\nembedded and tend to not swap much (if at all) so we probably rarely hit\nthe case where dirty is missing or young is missing, but I think Shan has\na piece of SW that can reliably reproduce it using a shared writable\nmapping \u0026 fork or something like that.\n\nOn archs who use SW tracking of dirty \u0026 young, a page without dirty is\neffectively mapped read-only and a page without young unaccessible in the\nPTE.\n\nAdditionally, some architectures might lazily flush the TLB when relaxing\nwrite protection (by doing only a local flush), and expect a fault to\ninvalidate the stale entry if it\u0027s still present on another processor.\n\nThe futex code assumes that if the \"in_atomic()\" access -EFAULT\u0027s, it can\n\"fix it up\" by causing get_user_pages() which would then be equivalent to\ntaking the fault.\n\nHowever that isn\u0027t the case.  get_user_pages() will not call\nhandle_mm_fault() in the case where the PTE seems to have the right\npermissions, regardless of the dirty and young state.  It will eventually\nupdate those bits ...  in the struct page, but not in the PTE.\n\nAdditionally, it will not handle the lazy TLB flushing that can be\nrequired by some architectures in the fault case.\n\nBasically, gup is the wrong interface for the job.  The patch provides a\nmore appropriate one which boils down to just calling handle_mm_fault()\nsince what we are trying to do is simulate a real page fault.\n\nThe futex code currently attempts to write to user memory within a\npagefault disabled section, and if that fails, tries to fix it up using\nget_user_pages().\n\nThis doesn\u0027t work on archs where the dirty and young bits are maintained\nby software, since they will gate access permission in the TLB, and will\nnot be updated by gup().\n\nIn addition, there\u0027s an expectation on some archs that a spurious write\nfault triggers a local TLB flush, and that is missing from the picture as\nwell.\n\nI decided that adding those \"features\" to gup() would be too much for this\nalready too complex function, and instead added a new simpler\nfixup_user_fault() which is essentially a wrapper around handle_mm_fault()\nwhich the futex code can call.\n\n[akpm@linux-foundation.org: coding-style fixes]\n[akpm@linux-foundation.org: fix some nits Darren saw, fiddle comment layout]\nSigned-off-by: Benjamin Herrenschmidt \u003cbenh@kernel.crashing.org\u003e\nReported-by: Shan Hai \u003chaishan.bai@gmail.com\u003e\nTested-by: Shan Hai \u003chaishan.bai@gmail.com\u003e\nCc: David Laight \u003cDavid.Laight@ACULAB.COM\u003e\nAcked-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Darren Hart \u003cdarren.hart@intel.com\u003e\nCc: \u003cstable@kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "72c4783210f77fd743f0a316858d33f27db51e7c",
      "tree": "4efc95eb0aaade090bac42e72c5973ada6d2cdb1",
      "parents": [
        "76d3fbf8fbf6cc78ceb63549e0e0c5bc8a88f838"
      ],
      "author": {
        "name": "Konstantin Khlebnikov",
        "email": "khlebnikov@openvz.org",
        "time": "Mon Jul 25 17:12:31 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jul 25 20:57:11 2011 -0700"
      },
      "message": "mm: remove useless rcu lock-unlock from mapping_tagged()\n\nradix_tree_tagged() is lockless - it reads from a member of the raid-tree\nroot node.  It does not require any protection.\n\nSigned-off-by: Konstantin Khlebnikov \u003ckhlebnikov@openvz.org\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "76d3fbf8fbf6cc78ceb63549e0e0c5bc8a88f838",
      "tree": "cebd9474333db6965fe6af7cc3f652d3091b658b",
      "parents": [
        "cd38b115d5ad79b0100ac6daa103c4fe2c50a913"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mgorman@suse.de",
        "time": "Mon Jul 25 17:12:30 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jul 25 20:57:10 2011 -0700"
      },
      "message": "mm: page allocator: reconsider zones for allocation after direct reclaim\n\nWith zone_reclaim_mode enabled, it\u0027s possible for zones to be considered\nfull in the zonelist_cache so they are skipped in the future.  If the\nprocess enters direct reclaim, the ZLC may still consider zones to be full\neven after reclaiming pages.  Reconsider all zones for allocation if\ndirect reclaim returns successfully.\n\nSigned-off-by: Mel Gorman \u003cmgorman@suse.de\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Christoph Lameter \u003ccl@linux.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "cd38b115d5ad79b0100ac6daa103c4fe2c50a913",
      "tree": "ffa8b05c42d0c53ffdd1dee6ce2570bba1d5db2f",
      "parents": [
        "1d65f86db14806cf7b1218c7b4ecb8b4db5af27d"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mgorman@suse.de",
        "time": "Mon Jul 25 17:12:29 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jul 25 20:57:10 2011 -0700"
      },
      "message": "mm: page allocator: initialise ZLC for first zone eligible for zone_reclaim\n\nThere have been a small number of complaints about significant stalls\nwhile copying large amounts of data on NUMA machines reported on a\ndistribution bugzilla.  In these cases, zone_reclaim was enabled by\ndefault due to large NUMA distances.  In general, the complaints have not\nbeen about the workload itself unless it was a file server (in which case\nthe recommendation was disable zone_reclaim).\n\nThe stalls are mostly due to significant amounts of time spent scanning\nthe preferred zone for pages to free.  After a failure, it might fallback\nto another node (as zonelists are often node-ordered rather than\nzone-ordered) but stall quickly again when the next allocation attempt\noccurs.  In bad cases, each page allocated results in a full scan of the\npreferred zone.\n\nPatch 1 checks the preferred zone for recent allocation failure\n        which is particularly important if zone_reclaim has failed\n        recently.  This avoids rescanning the zone in the near future and\n        instead falling back to another node.  This may hurt node locality\n        in some cases but a failure to zone_reclaim is more expensive than\n        a remote access.\n\nPatch 2 clears the zlc information after direct reclaim.\n        Otherwise, zone_reclaim can mark zones full, direct reclaim can\n        reclaim enough pages but the zone is still not considered for\n        allocation.\n\nThis was tested on a 24-thread 2-node x86_64 machine.  The tests were\nfocused on large amounts of IO.  All tests were bound to the CPUs on\nnode-0 to avoid disturbances due to processes being scheduled on different\nnodes.  The kernels tested are\n\n3.0-rc6-vanilla\t\tVanilla 3.0-rc6\nzlcfirst\t\tPatch 1 applied\nzlcreconsider\t\tPatches 1+2 applied\n\nFS-Mark\n./fs_mark  -d  /tmp/fsmark-10813  -D  100  -N  5000  -n  208  -L  35  -t  24  -S0  -s  524288\n                fsmark-3.0-rc6       3.0-rc6       \t\t3.0-rc6\n                   vanilla\t\t\t zlcfirs \tzlcreconsider\nFiles/s  min          54.90 ( 0.00%)       49.80 (-10.24%)       49.10 (-11.81%)\nFiles/s  mean        100.11 ( 0.00%)      135.17 (25.94%)      146.93 (31.87%)\nFiles/s  stddev       57.51 ( 0.00%)      138.97 (58.62%)      158.69 (63.76%)\nFiles/s  max         361.10 ( 0.00%)      834.40 (56.72%)      802.40 (55.00%)\nOverhead min       76704.00 ( 0.00%)    76501.00 ( 0.27%)    77784.00 (-1.39%)\nOverhead mean    1485356.51 ( 0.00%)  1035797.83 (43.40%)  1594680.26 (-6.86%)\nOverhead stddev  1848122.53 ( 0.00%)   881489.88 (109.66%)  1772354.90 ( 4.27%)\nOverhead max     7989060.00 ( 0.00%)  3369118.00 (137.13%) 10135324.00 (-21.18%)\nMMTests Statistics: duration\nUser/Sys Time Running Test (seconds)        501.49    493.91    499.93\nTotal Elapsed Time (seconds)               2451.57   2257.48   2215.92\n\nMMTests Statistics: vmstat\nPage Ins                                       46268       63840       66008\nPage Outs                                   90821596    90671128    88043732\nSwap Ins                                           0           0           0\nSwap Outs                                          0           0           0\nDirect pages scanned                        13091697     8966863     8971790\nKswapd pages scanned                               0     1830011     1831116\nKswapd pages reclaimed                             0     1829068     1829930\nDirect pages reclaimed                      13037777     8956828     8648314\nKswapd efficiency                               100%         99%         99%\nKswapd velocity                                0.000     810.643     826.346\nDirect efficiency                                99%         99%         96%\nDirect velocity                             5340.128    3972.068    4048.788\nPercentage direct scans                         100%         83%         83%\nPage writes by reclaim                             0           3           0\nSlabs scanned                                 796672      720640      720256\nDirect inode steals                          7422667     7160012     7088638\nKswapd inode steals                                0     1736840     2021238\n\nTest completes far faster with a large increase in the number of files\ncreated per second.  Standard deviation is high as a small number of\niterations were much higher than the mean.  The number of pages scanned by\nzone_reclaim is reduced and kswapd is used for more work.\n\nLARGE DD\n               \t\t3.0-rc6       3.0-rc6       3.0-rc6\n                   \tvanilla     zlcfirst     zlcreconsider\ndownload tar           59 ( 0.00%)   59 ( 0.00%)   55 ( 7.27%)\ndd source files       527 ( 0.00%)  296 (78.04%)  320 (64.69%)\ndelete source          36 ( 0.00%)   19 (89.47%)   20 (80.00%)\nMMTests Statistics: duration\nUser/Sys Time Running Test (seconds)        125.03    118.98    122.01\nTotal Elapsed Time (seconds)                624.56    375.02    398.06\n\nMMTests Statistics: vmstat\nPage Ins                                     3594216      439368      407032\nPage Outs                                   23380832    23380488    23377444\nSwap Ins                                           0           0           0\nSwap Outs                                          0         436         287\nDirect pages scanned                        17482342    69315973    82864918\nKswapd pages scanned                               0      519123      575425\nKswapd pages reclaimed                             0      466501      522487\nDirect pages reclaimed                       5858054     2732949     2712547\nKswapd efficiency                               100%         89%         90%\nKswapd velocity                                0.000    1384.254    1445.574\nDirect efficiency                                33%          3%          3%\nDirect velocity                            27991.453  184832.737  208171.929\nPercentage direct scans                         100%         99%         99%\nPage writes by reclaim                             0        5082       13917\nSlabs scanned                                  17280       29952       35328\nDirect inode steals                           115257     1431122      332201\nKswapd inode steals                                0           0      979532\n\nThis test downloads a large tarfile and copies it with dd a number of\ntimes - similar to the most recent bug report I\u0027ve dealt with.  Time to\ncompletion is reduced.  The number of pages scanned directly is still\ndisturbingly high with a low efficiency but this is likely due to the\nnumber of dirty pages encountered.  The figures could probably be improved\nwith more work around how kswapd is used and how dirty pages are handled\nbut that is separate work and this result is significant on its own.\n\nStreaming Mapped Writer\nMMTests Statistics: duration\nUser/Sys Time Running Test (seconds)        124.47    111.67    112.64\nTotal Elapsed Time (seconds)               2138.14   1816.30   1867.56\n\nMMTests Statistics: vmstat\nPage Ins                                       90760       89124       89516\nPage Outs                                  121028340   120199524   120736696\nSwap Ins                                           0          86          55\nSwap Outs                                          0           0           0\nDirect pages scanned                       114989363    96461439    96330619\nKswapd pages scanned                        56430948    56965763    57075875\nKswapd pages reclaimed                      27743219    27752044    27766606\nDirect pages reclaimed                         49777       46884       36655\nKswapd efficiency                                49%         48%         48%\nKswapd velocity                            26392.541   31363.631   30561.736\nDirect efficiency                                 0%          0%          0%\nDirect velocity                            53780.091   53108.759   51581.004\nPercentage direct scans                          67%         62%         62%\nPage writes by reclaim                           385         122        1513\nSlabs scanned                                  43008       39040       42112\nDirect inode steals                                0          10           8\nKswapd inode steals                              733         534         477\n\nThis test just creates a large file mapping and writes to it linearly.\nTime to completion is again reduced.\n\nThe gains are mostly down to two things.  In many cases, there is less\nscanning as zone_reclaim simply gives up faster due to recent failures.\nThe second reason is that memory is used more efficiently.  Instead of\nscanning the preferred zone every time, the allocator falls back to\nanother zone and uses it instead improving overall memory utilisation.\n\nThis patch: initialise ZLC for first zone eligible for zone_reclaim.\n\nThe zonelist cache (ZLC) is used among other things to record if\nzone_reclaim() failed for a particular zone recently.  The intention is to\navoid a high cost scanning extremely long zonelists or scanning within the\nzone uselessly.\n\nCurrently the zonelist cache is setup only after the first zone has been\nconsidered and zone_reclaim() has been called.  The objective was to avoid\na costly setup but zone_reclaim is itself quite expensive.  If it is\nfailing regularly such as the first eligible zone having mostly mapped\npages, the cost in scanning and allocation stalls is far higher than the\nZLC initialisation step.\n\nThis patch initialises ZLC before the first eligible zone calls\nzone_reclaim().  Once initialised, it is checked whether the zone failed\nzone_reclaim recently.  If it has, the zone is skipped.  As the first zone\nis now being checked, additional care has to be taken about zones marked\nfull.  A zone can be marked \"full\" because it should not have enough\nunmapped pages for zone_reclaim but this is excessive as direct reclaim or\nkswapd may succeed where zone_reclaim fails.  Only mark zones \"full\" after\nzone_reclaim fails if it failed to reclaim enough pages after scanning.\n\nSigned-off-by: Mel Gorman \u003cmgorman@suse.de\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Christoph Lameter \u003ccl@linux.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "1d65f86db14806cf7b1218c7b4ecb8b4db5af27d",
      "tree": "01a2c4e3feb48327220b1fd8d09cf805c20eee7f",
      "parents": [
        "d515afe88a32e567c550e3db914f3e378f86453a"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Mon Jul 25 17:12:27 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jul 25 20:57:10 2011 -0700"
      },
      "message": "mm: preallocate page before lock_page() at filemap COW\n\nCurrently we are keeping faulted page locked throughout whole __do_fault\ncall (except for page_mkwrite code path) after calling file system\u0027s fault\ncode.  If we do early COW, we allocate a new page which has to be charged\nfor a memcg (mem_cgroup_newpage_charge).\n\nThis function, however, might block for unbounded amount of time if memcg\noom killer is disabled or fork-bomb is running because the only way out of\nthe OOM situation is either an external event or OOM-situation fix.\n\nIn the end we are keeping the faulted page locked and blocking other\nprocesses from faulting it in which is not good at all because we are\nbasically punishing potentially an unrelated process for OOM condition in\na different group (I have seen stuck system because of ld-2.11.1.so being\nlocked).\n\nWe can do test easily.\n\n % cgcreate -g memory:A\n % cgset -r memory.limit_in_bytes\u003d64M A\n % cgset -r memory.memsw.limit_in_bytes\u003d64M A\n % cd kernel_dir; cgexec -g memory:A make -j\n\nThen, the whole system will live-locked until you kill \u0027make -j\u0027\nby hands (or push reboot...) This is because some important page in a\na shared library are locked.\n\nConsidering again, the new page is not necessary to be allocated\nwith lock_page() held. And usual page allocation may dive into\nlong memory reclaim loop with holding lock_page() and can cause\nvery long latency.\n\nThere are 3 ways.\n  1. do allocation/charge before lock_page()\n     Pros. - simple and can handle page allocation in the same manner.\n             This will reduce holding time of lock_page() in general.\n     Cons. - we do page allocation even if -\u003efault() returns error.\n\n  2. do charge after unlock_page(). Even if charge fails, it\u0027s just OOM.\n     Pros. - no impact to non-memcg path.\n     Cons. - implemenation requires special cares of LRU and we need to modify\n             page_add_new_anon_rmap()...\n\n  3. do unlock-\u003echarge-\u003elock again method.\n     Pros. - no impact to non-memcg path.\n     Cons. - This may kill LOCK_PAGE_RETRY optimization. We need to release\n             lock and get it again...\n\nThis patch moves \"charge\" and memory allocation for COW page\nbefore lock_page(). Then, we can avoid scanning LRU with holding\na lock on a page and latency under lock_page() will be reduced.\n\nThen, above livelock disappears.\n\n[akpm@linux-foundation.org: fix code layout]\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nReported-by: Lutz Vieweg \u003clvml@5t9.de\u003e\nOriginal-idea-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "d515afe88a32e567c550e3db914f3e378f86453a",
      "tree": "0129002decdd5c1f8bcb521aacdba73e0d1699c3",
      "parents": [
        "d0823576bf4b8eafce1b56f98613465a0352a376"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Mon Jul 25 17:12:26 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jul 25 20:57:10 2011 -0700"
      },
      "message": "tmpfs: no need to use i_lock\n\n2.6.36\u0027s 7e496299d4d2 (\"tmpfs: make tmpfs scalable with percpu_counter for\nused blocks\") to make tmpfs scalable with percpu_counter used\ninode-\u003ei_lock in place of sbinfo-\u003estat_lock around i_blocks updates; but\nthat was adverse to scalability, and unnecessary, since info-\u003elock is\nalready held there in the fast paths.\n\nRemove those uses of i_lock, and add info-\u003elock in the three error paths\nwhere it\u0027s then needed across shmem_free_blocks().  It\u0027s not actually\nneeded across shmem_unacct_blocks(), but they\u0027re so often paired that it\nlooks wrong to split them apart.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nAcked-by: Tim Chen \u003ctim.c.chen@linux.intel.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "d0823576bf4b8eafce1b56f98613465a0352a376",
      "tree": "bfc182422f665b39d7ae703a198ea7144fea122b",
      "parents": [
        "b85e0effd3dcbf9118b896232f59526ab1a39a74"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Mon Jul 25 17:12:25 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jul 25 20:57:10 2011 -0700"
      },
      "message": "mm: pincer in truncate_inode_pages_range\n\ntruncate_inode_pages_range()\u0027s final loop has a nice pincer property,\nbringing start and end together, squeezing out the last pages.  But the\nrange handling missed out on that, just sliding up the range, perhaps\nletting pages come in behind it.  Add one more test to give it the same\npincer effect.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "b85e0effd3dcbf9118b896232f59526ab1a39a74",
      "tree": "32200b2e4052d50d4eb1771e555eaf66d7c4cfc8",
      "parents": [
        "8a549bea51138be2126a2cc6aabe8f17ef66b79b"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Mon Jul 25 17:12:25 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jul 25 20:57:10 2011 -0700"
      },
      "message": "mm: consistent truncate and invalidate loops\n\nMake the pagevec_lookup loops in truncate_inode_pages_range(),\ninvalidate_mapping_pages() and invalidate_inode_pages2_range() more\nconsistent with each other.\n\nThey were relying upon page-\u003eindex of an unlocked page, but apologizing\nfor it: accept it, embrace it, add comments and WARN_ONs, and simplify the\nindex handling.\n\ninvalidate_inode_pages2_range() had special handling for a wrapped\npage-\u003eindex + 1 \u003d 0 case; but MAX_LFS_FILESIZE doesn\u0027t let us anywhere\nnear there, and a corrupt page-\u003eindex in the radix_tree could cause more\ntrouble than that would catch.  Remove that wrapped handling.\n\ninvalidate_inode_pages2_range() uses min() to limit the pagevec_lookup\nwhen near the end of the range: copy that into the other two, although\nit\u0027s less useful than you might think (it limits the use of the buffer,\nrather than the indices looked up).\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "8a549bea51138be2126a2cc6aabe8f17ef66b79b",
      "tree": "dc6e0afdf59808238dd44c685d897da98852fca5",
      "parents": [
        "85821aab39b3403a8b5731812a930b78684d1642"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Mon Jul 25 17:12:24 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jul 25 20:57:10 2011 -0700"
      },
      "message": "mm: tidy vmtruncate_range and related functions\n\nUse consistent variable names in truncate_pagecache(), truncate_setsize(),\nvmtruncate() and vmtruncate_range().\n\nunmap_mapping_range() and vmtruncate_range() have mismatched interfaces:\ndon\u0027t change either, but make the vmtruncates more precise about what they\nexpect unmap_mapping_range() to do.\n\nvmtruncate_range() is currently called only with page-aligned start and\nend+1: can handle unaligned start, but unaligned end+1 would hit BUG_ON in\ntruncate_inode_pages_range() (lacks partial clearing of the end page).\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "5e5358e7cf48aa079b8761a7d806ad536023745c",
      "tree": "8a0668541c8b356b46c32eea7f28a2f72259eef6",
      "parents": [
        "df077ac4687500e02a273a628057ff5ab17dc19f"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Mon Jul 25 17:12:23 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jul 25 20:57:10 2011 -0700"
      },
      "message": "mm: cleanup descriptions of filler arg\n\nThe often-NULL data arg to read_cache_page() and read_mapping_page()\nfunctions is misdescribed as \"destination for read data\": no, it\u0027s the\nfirst arg to the filler function, often struct file * to -\u003ereadpage().\n\nSatisfy checkpatch.pl on those filler prototypes, and tidy up the\ndeclarations in linux/pagemap.h.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "c15bef3099c346f2124367bff46954b59e13c3ee",
      "tree": "ec09c0b25eae42d6693a08decde7aee02f296978",
      "parents": [
        "c9d8c3d0896bfa5b57531ecc41a85ffbc6d87dbe"
      ],
      "author": {
        "name": "Dmitry Fink",
        "email": "dmitry.fink@palm.com",
        "time": "Mon Jul 25 17:12:19 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jul 25 20:57:09 2011 -0700"
      },
      "message": "mmap: fix and tidy up overcommit page arithmetic\n\n- shmem pages are not immediately available, but they are not\n  potentially available either, even if we swap them out, they will just\n  relocate from memory into swap, total amount of immediate and\n  potentially available memory is not going to be affected, so we\n  shouldn\u0027t count them as potentially free in the first place.\n\n- nr_free_pages() is not an expensive operation anymore, there is no\n  need to split the decision making in two halves and repeat code.\n\nSigned-off-by: Dmitry Fink \u003cdmitry.fink@palm.com\u003e\nReviewed-by: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nAcked-by: Hugh Dickins \u003chughd@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "c9d8c3d0896bfa5b57531ecc41a85ffbc6d87dbe",
      "tree": "0de7519c20e066c820d37ff32be319745e7a2f8e",
      "parents": [
        "be8f684d73d8d916847e996bf69cef14352872c6"
      ],
      "author": {
        "name": "Andrew Morton",
        "email": "akpm@linux-foundation.org",
        "time": "Mon Jul 25 17:12:18 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jul 25 20:57:09 2011 -0700"
      },
      "message": "mm/memblock.c: avoid abuse of RED_INACTIVE\n\nRED_INACTIVE is a slab thing, and reusing it for memblock was\ninappropriate, because memblock is dealing with phys_addr_t\u0027s which have a\nKconfigurable sizeof().\n\nCreate a new poison type for this application.  Fixes the sparse warning\n\n    warning: cast truncates bits from constant value (9f911029d74e35b becomes 9d74e35b)\n\nReported-by: H Hartley Sweeten \u003chartleys@visionengravers.com\u003e\nTested-by: H Hartley Sweeten \u003chartleys@visionengravers.com\u003e\nAcked-by: Pekka Enberg \u003cpenberg@kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "11239836c04b50ba8453ec58ca7a7bd716ef02c1",
      "tree": "358705632aecb348e35f01fcc26281326d5a514a",
      "parents": [
        "6ac47520063b230641a64062b8a229201cd0a3a8"
      ],
      "author": {
        "name": "David Rientjes",
        "email": "rientjes@google.com",
        "time": "Mon Jul 25 17:12:17 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jul 25 20:57:09 2011 -0700"
      },
      "message": "oom: remove references to old badness() function\n\nThe badness() function in the oom killer was renamed to oom_badness() in\na63d83f427fb (\"oom: badness heuristic rewrite\") since it is a globally\nexported function for clarity.\n\nThe prototype for the old function still existed in linux/oom.h, so remove\nit.  There are no existing users.\n\nAlso fixes documentation and comment references to badness() and adjusts\nthem accordingly.\n\nSigned-off-by: David Rientjes \u003crientjes@google.com\u003e\nReviewed-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "6ac47520063b230641a64062b8a229201cd0a3a8",
      "tree": "e26a25226f980a50468f001bbd3243d74d0d9768",
      "parents": [
        "32f84528fbb5177275193a3311be8756f0cbd62c"
      ],
      "author": {
        "name": "Andrew Morton",
        "email": "akpm@linux-foundation.org",
        "time": "Mon Jul 25 17:12:16 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jul 25 20:57:09 2011 -0700"
      },
      "message": "mm/memory.c: remove ZAP_BLOCK_SIZE\n\nZAP_BLOCK_SIZE became unused in the preemptible-mmu_gather work (\"mm:\nRemove i_mmap_lock lockbreak\").  So zap it.\n\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "32f84528fbb5177275193a3311be8756f0cbd62c",
      "tree": "8b2bbc3e35ddc6ce17e6b7ab68b50d6bc1a565f9",
      "parents": [
        "d788e80a8c83ecdbdd55b6e985cced9cfe3a815b"
      ],
      "author": {
        "name": "Chris Forbes",
        "email": "chrisf@ijw.co.nz",
        "time": "Mon Jul 25 17:12:14 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jul 25 20:57:09 2011 -0700"
      },
      "message": "mm: hugetlb: fix coding style issues\n\nFix coding style issues flagged by checkpatch.pl\n\nSigned-off-by: Chris Forbes \u003cchrisf@ijw.co.nz\u003e\nAcked-by: Eric B Munson \u003cemunson@mgebm.net\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "d788e80a8c83ecdbdd55b6e985cced9cfe3a815b",
      "tree": "d287900bc24e17b7d65f1f57b9c59901040ea01d",
      "parents": [
        "1bb36fbd4d58ec3fab4dab5ed39a2af492c263ea"
      ],
      "author": {
        "name": "Chris Wright",
        "email": "chrisw@sous-sol.org",
        "time": "Mon Jul 25 17:12:14 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jul 25 20:57:09 2011 -0700"
      },
      "message": "mm/huge_memory.c: minor lock simplification in __khugepaged_exit\n\nThe lock is released first thing in all three branches.  Simplify this by\nunconditionally releasing lock and remove else clause which was only there\nto be sure lock was released.\n\nSigned-off-by: Chris Wright \u003cchrisw@sous-sol.org\u003e\nReviewed-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nAcked-by: Johannes Weiner \u003cjweiner@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "1bb36fbd4d58ec3fab4dab5ed39a2af492c263ea",
      "tree": "b381b2a4a0d212053516073a8bd21e7b4c59cfad",
      "parents": [
        "00a66d2974485d7d95d61d5772142b2a2231ed2a"
      ],
      "author": {
        "name": "Daniel Kiper",
        "email": "dkiper@net-space.pl",
        "time": "Mon Jul 25 17:12:13 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jul 25 20:57:09 2011 -0700"
      },
      "message": "mm/page_cgroup.c: simplify code by using SECTION_ALIGN_UP() and SECTION_ALIGN_DOWN() macros\n\nCommit a539f3533b78e3 (\"mm: add SECTION_ALIGN_UP() and\nSECTION_ALIGN_DOWN() macro\") introduced the SECTION_ALIGN_UP() and\nSECTION_ALIGN_DOWN() macros.  Use those macros to increase code\nreadability.\n\nSigned-off-by: Daniel Kiper \u003cdkiper@net-space.pl\u003e\nAcked-by: David Rientjes \u003crientjes@google.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "00a66d2974485d7d95d61d5772142b2a2231ed2a",
      "tree": "14d5ca10dfc641594e7109902cdabb4a3c408d98",
      "parents": [
        "dd78553b5e7a0b34c0b60478d04ee16d8d8f4fa7"
      ],
      "author": {
        "name": "WANG Cong",
        "email": "xiyou.wangcong@gmail.com",
        "time": "Mon Jul 25 17:12:12 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jul 25 20:57:09 2011 -0700"
      },
      "message": "mm: remove the leftovers of noswapaccount\n\nIn commit a2c8990aed5ab (\"memsw: remove noswapaccount kernel parameter\"),\nMichal forgot to remove some left pieces of noswapaccount in the tree,\nthis patch removes them all.\n\nSigned-off-by: WANG Cong \u003cxiyou.wangcong@gmail.com\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "dd78553b5e7a0b34c0b60478d04ee16d8d8f4fa7",
      "tree": "18bdb94761365c248392d29004f68d9181955ead",
      "parents": [
        "c27fe4c8942d3ca715986f79cc26f44608d7d9fb"
      ],
      "author": {
        "name": "KOSAKI Motohiro",
        "email": "kosaki.motohiro@jp.fujitsu.com",
        "time": "Mon Jul 25 17:12:11 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jul 25 20:57:09 2011 -0700"
      },
      "message": "pagewalk: fix code comment for THP\n\nCommit bae9c19bf1 (\"thp: split_huge_page_mm/vma\") changed locking behavior\nof walk_page_range().  Thus this patch changes the comment too.\n\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Naoya Horiguchi \u003cn-horiguchi@ah.jp.nec.com\u003e\nCc: Hiroyuki Kamezawa \u003ckamezawa.hiroyuki@gmail.com\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: Matt Mackall \u003cmpm@selenic.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "c27fe4c8942d3ca715986f79cc26f44608d7d9fb",
      "tree": "d954d0417c941f5e51cf029608311ef04acd9575",
      "parents": [
        "6c6d5280431544e4036886ea74e3334a98bc5f96"
      ],
      "author": {
        "name": "KOSAKI Motohiro",
        "email": "kosaki.motohiro@jp.fujitsu.com",
        "time": "Mon Jul 25 17:12:10 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jul 25 20:57:08 2011 -0700"
      },
      "message": "pagewalk: add locking-rule comments\n\nOriginally, walk_hugetlb_range() didn\u0027t require a caller take any lock.\nBut commit d33b9f45bd (\"mm: hugetlb: fix hugepage memory leak in\nwalk_page_range\") changed its rule.  Because it added find_vma() call in\nwalk_hugetlb_range().\n\nAny locking-rule change commit should write a doc too.\n\n[akpm@linux-foundation.org: clarify comment]\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Naoya Horiguchi \u003cn-horiguchi@ah.jp.nec.com\u003e\nCc: Hiroyuki Kamezawa \u003ckamezawa.hiroyuki@gmail.com\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: Matt Mackall \u003cmpm@selenic.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "6c6d5280431544e4036886ea74e3334a98bc5f96",
      "tree": "1362944d254ff1dfa609d84a1e4182a77ce3ca07",
      "parents": [
        "4b6ddbf7ed4ef2f40e0a27418146eedaa68953c6"
      ],
      "author": {
        "name": "KOSAKI Motohiro",
        "email": "kosaki.motohiro@jp.fujitsu.com",
        "time": "Mon Jul 25 17:12:09 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jul 25 20:57:08 2011 -0700"
      },
      "message": "pagewalk: don\u0027t look up vma if walk-\u003ehugetlb_entry is unused\n\nCurrently, walk_page_range() calls find_vma() every page table for walk\niteration.  but it\u0027s completely unnecessary if walk-\u003ehugetlb_entry is\nunused.  And we don\u0027t have to assume find_vma() is a lightweight\noperation.  So this patch checks the walk-\u003ehugetlb_entry and avoids the\nfind_vma() call if possible.\n\nThis patch also makes some cleanups.  1) remove ugly uninitialized_var()\nand 2) #ifdef in function body.\n\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Naoya Horiguchi \u003cn-horiguchi@ah.jp.nec.com\u003e\nCc: Hiroyuki Kamezawa \u003ckamezawa.hiroyuki@gmail.com\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: Matt Mackall \u003cmpm@selenic.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "4b6ddbf7ed4ef2f40e0a27418146eedaa68953c6",
      "tree": "27ab200848514a467f656281073b9c0f86cb7dcc",
      "parents": [
        "45ebb840257b060ec54416aebffd9747e210962c"
      ],
      "author": {
        "name": "KOSAKI Motohiro",
        "email": "kosaki.motohiro@jp.fujitsu.com",
        "time": "Mon Jul 25 17:12:09 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jul 25 20:57:08 2011 -0700"
      },
      "message": "pagewalk: fix walk_page_range() don\u0027t check find_vma() result properly\n\nThe doc of find_vma() says,\n\n    /* Look up the first VMA which satisfies  addr \u003c vm_end,  NULL if none. */\n    struct vm_area_struct *find_vma(struct mm_struct *mm, unsigned long addr)\n    {\n     (snip)\n\nThus, caller should confirm whether the returned vma matches a desired one.\n\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Naoya Horiguchi \u003cn-horiguchi@ah.jp.nec.com\u003e\nCc: Hiroyuki Kamezawa \u003ckamezawa.hiroyuki@gmail.com\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: Matt Mackall \u003cmpm@selenic.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "45ebb840257b060ec54416aebffd9747e210962c",
      "tree": "0236eba5f2f420dccae80f97a70192ef965d6f5f",
      "parents": [
        "53bb01f593d50188c8d638f89db96f9b6b042bcd"
      ],
      "author": {
        "name": "KOSAKI Motohiro",
        "email": "kosaki.motohiro@jp.fujitsu.com",
        "time": "Mon Jul 25 17:12:08 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jul 25 20:57:08 2011 -0700"
      },
      "message": "mm: swap-token: add a comment for priority aging\n\nDocument some swap token aging design decisions.\n\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nAcked-by: Rik van Riel \u003criel@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "53bb01f593d50188c8d638f89db96f9b6b042bcd",
      "tree": "b764d8becd99aee7b337a47fbd71032800831c6d",
      "parents": [
        "e21c7ffd6f7493aa01bccd17ebc13dbdfecce880"
      ],
      "author": {
        "name": "KOSAKI Motohiro",
        "email": "kosaki.motohiro@jp.fujitsu.com",
        "time": "Mon Jul 25 17:12:07 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jul 25 20:57:08 2011 -0700"
      },
      "message": "mm: swap-token: makes global variables to function local\n\nglobal_faults and last_aging are only used in grab_swap_token().  Move\nthem into grab_swap_token().\n\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nAcked-by: Rik van Riel \u003criel@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "e21c7ffd6f7493aa01bccd17ebc13dbdfecce880",
      "tree": "e9854cb777d2b2f108c5131020db96c08e098fb4",
      "parents": [
        "080e2be7884322daffe75a831e879fbe7de383ab"
      ],
      "author": {
        "name": "KOSAKI Motohiro",
        "email": "kosaki.motohiro@jp.fujitsu.com",
        "time": "Mon Jul 25 17:12:06 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jul 25 20:57:08 2011 -0700"
      },
      "message": "mm: swap-token: fix dead link\n\nhttp://www.cs.wm.edu/~sjiang/token.pdf is now dead.  Replace it with an\nalive alternative.\n\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nAcked-by: Rik van Riel \u003criel@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "9d0ad8ca43ce8023bb834a409c2258bd7197fb05",
      "tree": "551120ae34bee2ee8a8e596ffc004e4ad36f5731",
      "parents": [
        "ef22f6a70c9186c8e25f757b0e8f7374b37f69bf"
      ],
      "author": {
        "name": "Daniel Kiper",
        "email": "dkiper@net-space.pl",
        "time": "Mon Jul 25 17:12:05 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jul 25 20:57:08 2011 -0700"
      },
      "message": "mm: extend memory hotplug API to allow memory hotplug in virtual machines\n\nThis patch contains online_page_callback and apropriate functions for\nregistering/unregistering online page callbacks.  It allows to do some\nmachine specific tasks during online page stage which is required to\nimplement memory hotplug in virtual machines.  Currently this patch is\nrequired by latest memory hotplug support for Xen balloon driver patch\nwhich will be posted soon.\n\nAdditionally, originial online_page() function was splited into\nfollowing functions doing \"atomic\" operations:\n\n  - __online_page_set_limits() - set new limits for memory management code,\n  - __online_page_increment_counters() - increment totalram_pages and totalhigh_pages,\n  - __online_page_free() - free page to allocator.\n\nIt was done to:\n  - not duplicate existing code,\n  - ease hotplug code devolpment by usage of well defined interface,\n  - avoid stupid bugs which are unavoidable when the same code\n    (by design) is developed in many places.\n\n[akpm@linux-foundation.org: use explicit indirect-call syntax]\nSigned-off-by: Daniel Kiper \u003cdkiper@net-space.pl\u003e\nReviewed-by: Konrad Rzeszutek Wilk \u003ckonrad.wilk@oracle.com\u003e\nCc: Ian Campbell \u003cian.campbell@citrix.com\u003e\nCc: Jeremy Fitzhardinge \u003cjeremy@goop.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "ccb6108f5b0b541d3eb332c3a73e645c0f84278e",
      "tree": "4c0a5c8bc1165d574e5cf4c023cefa13e9454b04",
      "parents": [
        "2b934c6236983392d01bef22e43af3051cac16f5"
      ],
      "author": {
        "name": "Peter Zijlstra",
        "email": "peterz@infradead.org",
        "time": "Mon Jul 25 17:11:57 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jul 25 20:57:07 2011 -0700"
      },
      "message": "mm/backing-dev.c: reset bdi min_ratio in bdi_unregister()\n\nVito said:\n\n: The system has many usb disks coming and going day to day, with their\n: respective bdi\u0027s having min_ratio set to 1 when inserted.  It works for\n: some time until eventually min_ratio can no longer be set, even when the\n: active set of bdi\u0027s seen in /sys/class/bdi/*/min_ratio doesn\u0027t add up to\n: anywhere near 100.\n:\n: This then leads to an unrelated starvation problem caused by write-heavy\n: fuse mounts being used atop the usb disks, a problem the min_ratio setting\n: at the underlying devices bdi effectively prevents.\n\nFix this leakage by resetting the bdi min_ratio when unregistering the\nBDI.\n\nSigned-off-by: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nReported-by: Vito Caputo \u003clkml@pengaru.com\u003e\nCc: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nCc: Miklos Szeredi \u003cmiklos@szeredi.hu\u003e\nCc: \u003cstable@kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "33dd4e0ec91138c3d80e790c08a3db47426c81f2",
      "tree": "5b244874a004cc8a34033846f4e504c9306bf025",
      "parents": [
        "ee8f248d266ec6966c0ce6b7dec24de43dcc1b58"
      ],
      "author": {
        "name": "Ian Campbell",
        "email": "ian.campbell@citrix.com",
        "time": "Mon Jul 25 17:11:51 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jul 25 20:57:07 2011 -0700"
      },
      "message": "mm: make some struct page\u0027s const\n\nThese uses are read-only and in a subsequent patch I have a const struct\npage in my hand...\n\n[akpm@linux-foundation.org: fix warnings in lowmem_page_address()]\nSigned-off-by: Ian Campbell \u003cian.campbell@citrix.com\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Michel Lespinasse \u003cwalken@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "ee8f248d266ec6966c0ce6b7dec24de43dcc1b58",
      "tree": "ca81ada1dc1b46b9fb066331c599d48db4532b39",
      "parents": [
        "2b37c35e6552b0d04d5db9728bc7af22d53f731a"
      ],
      "author": {
        "name": "Becky Bruce",
        "email": "beckyb@kernel.crashing.org",
        "time": "Mon Jul 25 17:11:50 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jul 25 20:57:07 2011 -0700"
      },
      "message": "hugetlb: add phys addr to struct huge_bootmem_page\n\nThis is needed on HIGHMEM systems - we don\u0027t always have a virtual\naddress so store the physical address and map it in as needed.\n\n[akpm@linux-foundation.org: cleanup]\nSigned-off-by: Becky Bruce \u003cbeckyb@kernel.crashing.org\u003e\nCc: Benjamin Herrenschmidt \u003cbenh@kernel.crashing.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "d3ec4844d449cf7af9e749f73ba2052fb7b72fc2",
      "tree": "c515913e85f7e50878c83da2a88bc5a7269d087c",
      "parents": [
        "0003230e8200699860f0b10af524dc47bf8aecad",
        "df2e301fee3c2c2a87592151397ad7699bb14c37"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jul 25 13:56:39 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jul 25 13:56:39 2011 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial: (43 commits)\n  fs: Merge split strings\n  treewide: fix potentially dangerous trailing \u0027;\u0027 in #defined values/expressions\n  uwb: Fix misspelling of neighbourhood in comment\n  net, netfilter: Remove redundant goto in ebt_ulog_packet\n  trivial: don\u0027t touch files that are removed in the staging tree\n  lib/vsprintf: replace link to Draft by final RFC number\n  doc: Kconfig: `to be\u0027 -\u003e `be\u0027\n  doc: Kconfig: Typo: square -\u003e squared\n  doc: Konfig: Documentation/power/{pm \u003d\u003e apm-acpi}.txt\n  drivers/net: static should be at beginning of declaration\n  drivers/media: static should be at beginning of declaration\n  drivers/i2c: static should be at beginning of declaration\n  XTENSA: static should be at beginning of declaration\n  SH: static should be at beginning of declaration\n  MIPS: static should be at beginning of declaration\n  ARM: static should be at beginning of declaration\n  rcu: treewide: Do not use rcu_read_lock_held when calling rcu_dereference_check\n  Update my e-mail address\n  PCIe ASPM: forcedly -\u003e forcibly\n  gma500: push through device driver tree\n  ...\n\nFix up trivial conflicts:\n - arch/arm/mach-ep93xx/dma-m2p.c (deleted)\n - drivers/gpio/gpio-ep93xx.c (renamed and context nearby)\n - drivers/net/r8169.c (just context changes)\n"
    },
    {
      "commit": "0003230e8200699860f0b10af524dc47bf8aecad",
      "tree": "8addb0c889b32111d6973c46cd3d0a5b5c17606c",
      "parents": [
        "4b478cedcdc1b2d131170f22bd3f916e53472f52",
        "4e34e719e457f2e031297175410fc0bd4016a085"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jul 25 12:53:15 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jul 25 12:53:15 2011 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6:\n  fs: take the ACL checks to common code\n  bury posix_acl_..._masq() variants\n  kill boilerplates around posix_acl_create_masq()\n  generic_acl: no need to clone acl just to push it to set_cached_acl()\n  kill boilerplate around posix_acl_chmod_masq()\n  reiserfs: cache negative ACLs for v1 stat format\n  xfs: cache negative ACLs if there is no attribute fork\n  9p: do no return 0 from -\u003echeck_acl without actually checking\n  vfs: move ACL cache lookup into generic code\n  CIFS: Fix oops while mounting with prefixpath\n  xfs: Fix wrong return value of xfs_file_aio_write\n  fix devtmpfs race\n  caam: don\u0027t pass bogus S_IFCHR to debugfs_create_...()\n  get rid of create_proc_entry() abuses - proc_mkdir() is there for purpose\n  asus-wmi: -\u003eis_visible() can\u0027t return negative\n  fix jffs2 ACLs on big-endian with 16bit mode_t\n  9p: close ACL leaks\n  ocfs2_init_acl(): fix a leak\n  VFS : mount lock scalability for internal mounts\n"
    },
    {
      "commit": "4e34e719e457f2e031297175410fc0bd4016a085",
      "tree": "ab969a371e0d2efc6bfbf503ca6cdfce3af3bf6c",
      "parents": [
        "edde854e8bb34a7f32fa993d721f1da0faf64165"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Sat Jul 23 17:37:31 2011 +0200"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Jul 25 14:30:23 2011 -0400"
      },
      "message": "fs: take the ACL checks to common code\n\nReplace the -\u003echeck_acl method with a -\u003eget_acl method that simply reads an\nACL from disk after having a cache miss.  This means we can replace the ACL\nchecking boilerplate code with a single implementation in namei.c.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "9e577e8b46ab0c38970c0f0cd7eae62e6dffddee",
      "tree": "068d8d50963b53a8ce25470328ff6ebe5a51b198",
      "parents": [
        "1d07171c5e58e68a76a141970a3a5e816a414ce6"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "cl@linux.com",
        "time": "Fri Jul 22 09:35:14 2011 -0500"
      },
      "committer": {
        "name": "Pekka Enberg",
        "email": "penberg@kernel.org",
        "time": "Mon Jul 25 20:58:19 2011 +0300"
      },
      "message": "slub: When allocating a new slab also prep the first object\n\nWe need to branch to the debug code for the first object if we allocate\na new slab otherwise the first object will be marked wrongly as inactive.\n\nTested-by: Rabin Vincent \u003crabin@rab.in\u003e\nSigned-off-by: Christoph Lameter \u003ccl@linux.com\u003e\nSigned-off-by: Pekka Enberg \u003cpenberg@kernel.org\u003e\n"
    },
    {
      "commit": "096a705bbc080a4041636d07514560da8d78acbe",
      "tree": "38c3c01225709ffa53419083ea6332f8a72610de",
      "parents": [
        "fea80311a939a746533a6d7e7c3183729d6a3faf",
        "5757a6d76cdf6dda2a492c09b985c015e86779b1"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jul 25 10:33:36 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jul 25 10:33:36 2011 -0700"
      },
      "message": "Merge branch \u0027for-3.1/core\u0027 of git://git.kernel.dk/linux-block\n\n* \u0027for-3.1/core\u0027 of git://git.kernel.dk/linux-block: (24 commits)\n  block: strict rq_affinity\n  backing-dev: use synchronize_rcu_expedited instead of synchronize_rcu\n  block: fix patch import error in max_discard_sectors check\n  block: reorder request_queue to remove 64 bit alignment padding\n  CFQ: add think time check for group\n  CFQ: add think time check for service tree\n  CFQ: move think time check variables to a separate struct\n  fixlet: Remove fs_excl from struct task.\n  cfq: Remove special treatment for metadata rqs.\n  block: document blk_plug list access\n  block: avoid building too big plug list\n  compat_ioctl: fix make headers_check regression\n  block: eliminate potential for infinite loop in blkdev_issue_discard\n  compat_ioctl: fix warning caused by qemu\n  block: flush MEDIA_CHANGE from drivers on close(2)\n  blk-throttle: Make total_nr_queued unsigned\n  block: Add __attribute__((format(printf...) and fix fallout\n  fs/partitions/check.c: make local symbols static\n  block:remove some spare spaces in genhd.c\n  block:fix the comment error in blkdev.h\n  ...\n"
    },
    {
      "commit": "50a15981a1fac7e019ff7c3cba87531fb580f065",
      "tree": "320ff80a5a01ae6936ac0a83cffb99e1f50adccf",
      "parents": [
        "f433c4aec9999d1bf2ed8c328196f3b0ad5f75db"
      ],
      "author": {
        "name": "Martin Schwidefsky",
        "email": "schwidefsky@de.ibm.com",
        "time": "Sun Jul 24 10:47:59 2011 +0200"
      },
      "committer": {
        "name": "Martin Schwidefsky",
        "email": "schwidefsky@de.ibm.com",
        "time": "Sun Jul 24 10:48:00 2011 +0200"
      },
      "message": "[S390] reference bit testing for unmapped pages\n\nOn x86 a page without a mapper is by definition not referenced / old.\nThe s390 architecture keeps the reference bit in the storage key and\nthe current code will check the storage key for page without a mapper.\nThis leads to an interesting effect: the first time an s390 system\nneeds to write pages to swap it only finds referenced pages. This\ncauses a lot of pages to get added and written to the swap device.\nTo avoid this behaviour change page_referenced to query the storage\nkey only if there is a mapper of the page.\n\nSigned-off-by: Martin Schwidefsky \u003cschwidefsky@de.ibm.com\u003e\n"
    },
    {
      "commit": "bcff25fc8aa47a13faff8b4b992589813f7b450a",
      "tree": "ae93e2b8ba1417bf6327f79154c69b9afc8328bb",
      "parents": [
        "fcc5c22218a18509a7412bf074fc9a7a5d874a8a"
      ],
      "author": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Fri Jul 01 13:31:25 2011 -0600"
      },
      "committer": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Sun Jul 24 10:51:52 2011 +0800"
      },
      "message": "mm: properly reflect task dirty limits in dirty_exceeded logic\n\nWe set bdi-\u003edirty_exceeded (and thus ratelimiting code starts to\ncall balance_dirty_pages() every 8 pages) when a per-bdi limit is\nexceeded or global limit is exceeded. But per-bdi limit also depends\non the task. Thus different tasks reach the limit on that bdi at\ndifferent levels of dirty pages. The result is that with current code\nbdi-\u003edirty_exceeded ping-ponged between 1 and 0 depending on which task\njust got into balance_dirty_pages().\n\nWe fix the issue by clearing bdi-\u003edirty_exceeded only when per-bdi amount\nof dirty pages drops below the threshold (7/8 * bdi_dirty_limit) where task\nlimits already do not have any influence.\n\nImpact:  The end result is, the dirty pages are kept more tightly under\ncontrol, with the average number slightly lowered than before.  This\nreduces the risk to throttle light dirtiers and hence more responsive.\nHowever it may add overheads by enforcing balance_dirty_pages() calls\non every 8 pages when there are 2+ heavy dirtiers.\n\nCC: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nCC: Christoph Hellwig \u003chch@infradead.org\u003e\nCC: Dave Chinner \u003cdavid@fromorbit.com\u003e\nCC: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\n"
    },
    {
      "commit": "ef3230880abd36553ab442363d3c9a0661f00769",
      "tree": "d314461b25b76f62d27d7356dcc7fb8157982e61",
      "parents": [
        "4c64500eada358165d0bb9a20d6c7d30821995b4"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Sat Jul 23 20:44:24 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sat Jul 23 20:44:24 2011 +0200"
      },
      "message": "backing-dev: use synchronize_rcu_expedited instead of synchronize_rcu\n\nbacking-dev: use synchronize_rcu_expedited instead of synchronize_rcu\n\nsynchronize_rcu sleeps several timer ticks. synchronize_rcu_expedited is\nmuch faster.\n\nWith 100Hz timer frequency, when we remove 10000 block devices with\n\"dmsetup remove_all\" command, it takes 27 minutes. With this patch,\nremoving 10000 block devices takes only 15 seconds.\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "bbd9d6f7fbb0305c9a592bf05a32e87eb364a4ff",
      "tree": "12b2bb4202b05f6ae6a43c6ce830a0472043dbe5",
      "parents": [
        "8e204874db000928e37199c2db82b7eb8966cc3c",
        "5a9a43646cf709312d71eca71cef90ad802f28f9"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jul 22 19:02:39 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jul 22 19:02:39 2011 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6: (107 commits)\n  vfs: use ERR_CAST for err-ptr tossing in lookup_instantiate_filp\n  isofs: Remove global fs lock\n  jffs2: fix IN_DELETE_SELF on overwriting rename() killing a directory\n  fix IN_DELETE_SELF on overwriting rename() on ramfs et.al.\n  mm/truncate.c: fix build for CONFIG_BLOCK not enabled\n  fs:update the NOTE of the file_operations structure\n  Remove dead code in dget_parent()\n  AFS: Fix silly characters in a comment\n  switch d_add_ci() to d_splice_alias() in \"found negative\" case as well\n  simplify gfs2_lookup()\n  jfs_lookup(): don\u0027t bother with . or ..\n  get rid of useless dget_parent() in btrfs rename() and link()\n  get rid of useless dget_parent() in fs/btrfs/ioctl.c\n  fs: push i_mutex and filemap_write_and_wait down into -\u003efsync() handlers\n  drivers: fix up various -\u003ellseek() implementations\n  fs: handle SEEK_HOLE/SEEK_DATA properly in all fs\u0027s that define their own llseek\n  Ext4: handle SEEK_HOLE/SEEK_DATA generically\n  Btrfs: implement our own -\u003ellseek\n  fs: add SEEK_HOLE and SEEK_DATA flags\n  reiserfs: make reiserfs default to barrier\u003dflush\n  ...\n\nFix up trivial conflicts in fs/xfs/linux-2.6/xfs_super.c due to the new\nshrinker callout for the inode cache, that clashed with the xfs code to\nstart the periodic workers later.\n"
    },
    {
      "commit": "9e39264ed4f687251632c0a6f4a70c2e51719662",
      "tree": "27651ca028328ac5e7b5a030312ad113b6cb8b2b",
      "parents": [
        "dc43d9fa73d82083656fb9c02f4823bcdcfb9f91",
        "1e01979c8f502ac13e3cdece4f38712c5944e6e8"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jul 22 17:04:18 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jul 22 17:04:18 2011 -0700"
      },
      "message": "Merge branch \u0027x86-numa-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip\n\n* \u0027x86-numa-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:\n  x86, numa: Implement pfn -\u003e nid mapping granularity check\n  x86, mm: s/PAGES_PER_ELEMENT/PAGES_PER_SECTION/\n"
    },
    {
      "commit": "0342cbcfced2ee937d7c8e1c63f3d3082da7c7dc",
      "tree": "fb98291d321a50de2dfd99f9bcaa33274f0c3952",
      "parents": [
        "391d6276db9fbdedfbc30e1b56390414f0e55988",
        "7f70893173b056df691b2ee7546bb44fd9abae6a"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jul 22 16:44:08 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jul 22 16:44:08 2011 -0700"
      },
      "message": "Merge branch \u0027core-rcu-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip\n\n* \u0027core-rcu-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:\n  rcu: Fix wrong check in list_splice_init_rcu()\n  net,rcu: Convert call_rcu(xt_rateest_free_rcu) to kfree_rcu()\n  sysctl,rcu: Convert call_rcu(free_head) to kfree\n  vmalloc,rcu: Convert call_rcu(rcu_free_vb) to kfree_rcu()\n  vmalloc,rcu: Convert call_rcu(rcu_free_va) to kfree_rcu()\n  ipc,rcu: Convert call_rcu(ipc_immediate_free) to kfree_rcu()\n  ipc,rcu: Convert call_rcu(free_un) to kfree_rcu()\n  security,rcu: Convert call_rcu(sel_netport_free) to kfree_rcu()\n  security,rcu: Convert call_rcu(sel_netnode_free) to kfree_rcu()\n  ia64,rcu: Convert call_rcu(sn_irq_info_free) to kfree_rcu()\n  block,rcu: Convert call_rcu(disk_free_ptbl_rcu_cb) to kfree_rcu()\n  scsi,rcu: Convert call_rcu(fc_rport_free_rcu) to kfree_rcu()\n  audit_tree,rcu: Convert call_rcu(__put_tree) to kfree_rcu()\n  security,rcu: Convert call_rcu(whitelist_item_free) to kfree_rcu()\n  md,rcu: Convert call_rcu(free_conf) to kfree_rcu()\n"
    },
    {
      "commit": "8209f53d79444747782a28520187abaf689761f2",
      "tree": "726270ea29e037f026d77a99787b9d844531ac42",
      "parents": [
        "22a3b9771117d566def0150ea787fcc95f16e724",
        "eac1b5e57d7abc836e78fd3fbcf77dbeed01edc9"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jul 22 15:06:50 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jul 22 15:06:50 2011 -0700"
      },
      "message": "Merge branch \u0027ptrace\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/oleg/misc\n\n* \u0027ptrace\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/oleg/misc: (39 commits)\n  ptrace: do_wait(traced_leader_killed_by_mt_exec) can block forever\n  ptrace: fix ptrace_signal() \u0026\u0026 STOP_DEQUEUED interaction\n  connector: add an event for monitoring process tracers\n  ptrace: dont send SIGSTOP on auto-attach if PT_SEIZED\n  ptrace: mv send-SIGSTOP from do_fork() to ptrace_init_task()\n  ptrace_init_task: initialize child-\u003ejobctl explicitly\n  has_stopped_jobs: s/task_is_stopped/SIGNAL_STOP_STOPPED/\n  ptrace: make former thread ID available via PTRACE_GETEVENTMSG after PTRACE_EVENT_EXEC stop\n  ptrace: wait_consider_task: s/same_thread_group/ptrace_reparented/\n  ptrace: kill real_parent_is_ptracer() in in favor of ptrace_reparented()\n  ptrace: ptrace_reparented() should check same_thread_group()\n  redefine thread_group_leader() as exit_signal \u003e\u003d 0\n  do not change dead_task-\u003eexit_signal\n  kill task_detached()\n  reparent_leader: check EXIT_DEAD instead of task_detached()\n  make do_notify_parent() __must_check, update the callers\n  __ptrace_detach: avoid task_detached(), check do_notify_parent()\n  kill tracehook_notify_death()\n  make do_notify_parent() return bool\n  ptrace: s/tracehook_tracer_task()/ptrace_parent()/\n  ...\n"
    },
    {
      "commit": "f99b7880cb9863e11441bd8b2f31d4f556ef1a44",
      "tree": "6f3dc6e33e847b431dd899bd968d799f0d4a8fff",
      "parents": [
        "02f8c6aee8df3cdc935e9bdd4f2d020306035dbe",
        "7ea466f2256b02a7047dfd47d76a2f6c1e427e3e"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jul 22 12:44:30 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jul 22 12:44:30 2011 -0700"
      },
      "message": "Merge branch \u0027slab-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/penberg/slab-2.6\n\n* \u0027slab-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/penberg/slab-2.6:\n  slab: fix DEBUG_SLAB warning\n  slab: shrink sizeof(struct kmem_cache)\n  slab: fix DEBUG_SLAB build\n  SLUB: Fix missing \u003clinux/stacktrace.h\u003e include\n  slub: reduce overhead of slub_debug\n  slub: Add method to verify memory is not freed\n  slub: Enable backtrace for create/delete points\n  slab allocators: Provide generic description of alignment defines\n  slab, slub, slob: Unify alignment definition\n  slob/lockdep: Fix gfp flags passed to lockdep\n"
    }
  ],
  "next": "7ea466f2256b02a7047dfd47d76a2f6c1e427e3e"
}
