)]}'
{
  "log": [
    {
      "commit": "a41c58a6665cc995e237303b05db42100b71b65e",
      "tree": "49842a2cde1ad77232cd4a5dadb5cb9796e2aee5",
      "parents": [
        "481fe17e973fb97aa3edf17c69557afe88d8334f"
      ],
      "author": {
        "name": "Hillf Danton",
        "email": "dhillf@gmail.com",
        "time": "Mon Dec 19 17:11:57 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 20 10:25:04 2011 -0800"
      },
      "message": "memcg: keep root group unchanged if creation fails\n\nIf the request is to create non-root group and we fail to meet it, we\nshould leave the root unchanged.\n\nSigned-off-by: Hillf Danton \u003cdhillf@gmail.com\u003e\nAcked-by: Hugh Dickins \u003chughd@google.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Balbir Singh \u003cbsingharora@gmail.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: \u003cstable@vger.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": "32aaeffbd4a7457bf2f7448b33b5946ff2a960eb",
      "tree": "faf7ad871d87176423ff9ed1d1ba4d9c688fc23f",
      "parents": [
        "208bca0860406d16398145ddd950036a737c3c9d",
        "67b84999b1a8b1af5625b1eabe92146c5eb42932"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sun Nov 06 19:44:47 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sun Nov 06 19:44:47 2011 -0800"
      },
      "message": "Merge branch \u0027modsplit-Oct31_2011\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/paulg/linux\n\n* \u0027modsplit-Oct31_2011\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/paulg/linux: (230 commits)\n  Revert \"tracing: Include module.h in define_trace.h\"\n  irq: don\u0027t put module.h into irq.h for tracking irqgen modules.\n  bluetooth: macroize two small inlines to avoid module.h\n  ip_vs.h: fix implicit use of module_get/module_put from module.h\n  nf_conntrack.h: fix up fallout from implicit moduleparam.h presence\n  include: replace linux/module.h with \"struct module\" wherever possible\n  include: convert various register fcns to macros to avoid include chaining\n  crypto.h: remove unused crypto_tfm_alg_modname() inline\n  uwb.h: fix implicit use of asm/page.h for PAGE_SIZE\n  pm_runtime.h: explicitly requires notifier.h\n  linux/dmaengine.h: fix implicit use of bitmap.h and asm/page.h\n  miscdevice.h: fix up implicit use of lists and types\n  stop_machine.h: fix implicit use of smp.h for smp_processor_id\n  of: fix implicit use of errno.h in include/linux/of.h\n  of_platform.h: delete needless include \u003clinux/module.h\u003e\n  acpi: remove module.h include from platform/aclinux.h\n  miscdevice.h: delete unnecessary inclusion of module.h\n  device_cgroup.h: delete needless include \u003clinux/module.h\u003e\n  net: sch_generic remove redundant use of \u003clinux/module.h\u003e\n  net: inet_timewait_sock doesnt need \u003clinux/module.h\u003e\n  ...\n\nFix up trivial conflicts (other header files, and  removal of the ab3550 mfd driver) in\n - drivers/media/dvb/frontends/dibx000_common.c\n - drivers/media/video/{mt9m111.c,ov6650.c}\n - drivers/mfd/ab3550-core.c\n - include/linux/dmaengine.h\n"
    },
    {
      "commit": "4799401fef9d5951b2da384c5eb08034c48e08a0",
      "tree": "94f9113c6870f46811aaa0f08cdb3ca2beba1e9c",
      "parents": [
        "a61ed3cec51cfd4877855c24890ab8d3e2b143e3"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Wed Nov 02 13:38:33 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Nov 02 16:07:00 2011 -0700"
      },
      "message": "memcg: Fix race condition in memcg_check_events() with this_cpu usage\n\nVarious code in memcontrol.c () calls this_cpu_read() on the calculations\nto be done from two different percpu variables, or does an open-coded\nread-modify-write on a single percpu variable.\n\nDisable preemption throughout these operations so that the writes go to\nthe correct palces.\n\n[hannes@cmpxchg.org: added this_cpu to __this_cpu conversion]\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\nCc: Greg Thelen \u003cgthelen@google.com\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nCc: Peter Zijlstra \u003cpeterz@infradead.org\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": "a61ed3cec51cfd4877855c24890ab8d3e2b143e3",
      "tree": "3ffb850513b202c8eb0ac09ad6d307719bd39856",
      "parents": [
        "9b272977e3b99a8699361d214b51f98c8a9e0e7b"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "jweiner@redhat.com",
        "time": "Wed Nov 02 13:38:29 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Nov 02 16:07:00 2011 -0700"
      },
      "message": "memcg: close race between charge and putback\n\nThere is a potential race between a thread charging a page and another\nthread putting it back to the LRU list:\n\n  charge:                         putback:\n  SetPageCgroupUsed               SetPageLRU\n  PageLRU \u0026\u0026 add to memcg LRU     PageCgroupUsed \u0026\u0026 add to memcg LRU\n\nThe order of setting one flag and checking the other is crucial, otherwise\nthe charge may observe !PageLRU while the putback observes !PageCgroupUsed\nand the page is not linked to the memcg LRU at all.\n\nGlobal memory pressure may fix this by trying to isolate and putback the\npage for reclaim, where that putback would link it to the memcg LRU again.\n Without that, the memory cgroup is undeletable due to a charge whose\nphysical page can not be found and moved out.\n\nSigned-off-by: Johannes Weiner \u003cjweiner@redhat.com\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nAcked-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\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "9b272977e3b99a8699361d214b51f98c8a9e0e7b",
      "tree": "2113cee95a42ea893aa6eddb01b14e563153fabb",
      "parents": [
        "0a619e58703b86d53d07e938eade9a91a4a863c6"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "jweiner@redhat.com",
        "time": "Wed Nov 02 13:38:23 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Nov 02 16:07:00 2011 -0700"
      },
      "message": "memcg: skip scanning active lists based on individual size\n\nReclaim decides to skip scanning an active list when the corresponding\ninactive list is above a certain size in comparison to leave the assumed\nworking set alone while there are still enough reclaim candidates around.\n\nThe memcg implementation of comparing those lists instead reports whether\nthe whole memcg is low on the requested type of inactive pages,\nconsidering all nodes and zones.\n\nThis can lead to an oversized active list not being scanned because of the\nstate of the other lists in the memcg, as well as an active list being\nscanned while its corresponding inactive list has enough pages.\n\nNot only is this wrong, it\u0027s also a scalability hazard, because the global\nmemory state over all nodes and zones has to be gathered for each memcg\nand zone scanned.\n\nMake these calculations purely based on the size of the two LRU lists\nthat are actually affected by the outcome of the decision.\n\nSigned-off-by: Johannes Weiner \u003cjweiner@redhat.com\u003e\nReviewed-by: Rik van Riel \u003criel@redhat.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nAcked-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\nReviewed-by: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nReviewed-by: 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": "0a619e58703b86d53d07e938eade9a91a4a863c6",
      "tree": "0579cebdbdbb90507db04b320acb4191f8a86f2e",
      "parents": [
        "715a5ee82ab3c07430f748630044354132add5ad"
      ],
      "author": {
        "name": "Igor Mammedov",
        "email": "imammedo@redhat.com",
        "time": "Wed Nov 02 13:38:21 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Nov 02 16:07:00 2011 -0700"
      },
      "message": "memcg: do not expose uninitialized mem_cgroup_per_node to world\n\nIf somebody is touching data too early, it might be easier to diagnose a\nproblem when dereferencing NULL at mem-\u003einfo.nodeinfo[node] than trying to\nunderstand why mem_cgroup_per_zone is [un|partly]initialized.\n\nSigned-off-by: Igor Mammedov \u003cimammedo@redhat.com\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\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": "715a5ee82ab3c07430f748630044354132add5ad",
      "tree": "f77a20fbcd0e19dcb3b65f511194e01e8095bf6a",
      "parents": [
        "c0ff4b8540a5c158b8e5bafb7d767298b67b0b92"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Wed Nov 02 13:38:18 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Nov 02 16:06:59 2011 -0700"
      },
      "message": "memcg: fix oom schedule_timeout()\n\nBefore calling schedule_timeout(), task state should be changed.\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.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": "c0ff4b8540a5c158b8e5bafb7d767298b67b0b92",
      "tree": "a47a2bcd0b7b80056cde7ba6b1263aae78f77212",
      "parents": [
        "ff7ee93f47151e23601856e7eb5510babf956571"
      ],
      "author": {
        "name": "Raghavendra K T",
        "email": "raghavendra.kt@linux.vnet.ibm.com",
        "time": "Wed Nov 02 13:38:15 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Nov 02 16:06:59 2011 -0700"
      },
      "message": "memcg: rename mem variable to memcg\n\nThe memcg code sometimes uses \"struct mem_cgroup *mem\" and sometimes uses\n\"struct mem_cgroup *memcg\".  Rename all mem variables to memcg in source\nfile.\n\nSigned-off-by: Raghavendra K T \u003craghavendra.kt@linux.vnet.ibm.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.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": "4356f21d09283dc6d39a6f7287a65ddab61e2808",
      "tree": "34822a1662ea83291455834556a4fb5bf98ecd72",
      "parents": [
        "b9e84ac1536d35aee03b2601f19694949f0bd506"
      ],
      "author": {
        "name": "Minchan Kim",
        "email": "minchan.kim@gmail.com",
        "time": "Mon Oct 31 17:06:47 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Oct 31 17:30:44 2011 -0700"
      },
      "message": "mm: change isolate mode from #define to bitwise type\n\nChange ISOLATE_XXX macro with bitwise isolate_mode_t type.  Normally,\nmacro isn\u0027t recommended as it\u0027s type-unsafe and making debugging harder as\nsymbol cannot be passed throught to the debugger.\n\nQuote from Johannes\n\" Hmm, it would probably be cleaner to fully convert the isolation mode\ninto independent flags.  INACTIVE, ACTIVE, BOTH is currently a\ntri-state among flags, which is a bit ugly.\"\n\nThis patch moves isolate mode from swap.h to mmzone.h by memcontrol.h\n\nSigned-off-by: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Mel Gorman \u003cmgorman@suse.de\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nCc: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Andrea Arcangeli \u003caarcange@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": "b9e15bafdf1aa20791cdefdcbf1ccf7d7aa03aaa",
      "tree": "459af0df6234a50b43b87078fd252941e231cbc3",
      "parents": [
        "e25934a51772f47edd94d7b7d08b0e167769639c"
      ],
      "author": {
        "name": "Paul Gortmaker",
        "email": "paul.gortmaker@windriver.com",
        "time": "Thu May 26 16:00:52 2011 -0400"
      },
      "committer": {
        "name": "Paul Gortmaker",
        "email": "paul.gortmaker@windriver.com",
        "time": "Mon Oct 31 09:20:12 2011 -0400"
      },
      "message": "mm: Add export.h for EXPORT_SYMBOL to active symbol exporters\n\nThese files were getting \u003clinux/module.h\u003e via an implicit include\npath, but we want to crush those out of existence since they cost\ntime during compiles of processing thousands of lines of headers\nfor no reason.  Give them the lightweight header that just contains\nthe EXPORT_SYMBOL infrastructure.\n\nSigned-off-by: Paul Gortmaker \u003cpaul.gortmaker@windriver.com\u003e\n"
    },
    {
      "commit": "185efc0f9a1f2d6ad6d4782c5d9e529f3290567f",
      "tree": "9330dac6b7f17fad7d99e444b3544210109e2d99",
      "parents": [
        "a4d3e9e76337059406fcf3ead288c0df22a790e9"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "jweiner@redhat.com",
        "time": "Wed Sep 14 16:21:58 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Sep 14 18:09:38 2011 -0700"
      },
      "message": "memcg: Revert \"memcg: add memory.vmscan_stat\"\n\nRevert the post-3.0 commit 82f9d486e59f5 (\"memcg: add\nmemory.vmscan_stat\").\n\nThe implementation of per-memcg reclaim statistics violates how memcg\nhierarchies usually behave: hierarchically.\n\nThe reclaim statistics are accounted to child memcgs and the parent\nhitting the limit, but not to hierarchy levels in between.  Usually,\nhierarchical statistics are perfectly recursive, with each level\nrepresenting the sum of itself and all its children.\n\nSince this exports statistics to userspace, this may lead to confusion\nand problems with changing things after the release, so revert it now,\nwe can try again later.\n\nSigned-off-by: Johannes Weiner \u003cjweiner@redhat.com\u003e\nAcked-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: 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": "23751be0094012eb6b4756fa80ca54b3eb83069f",
      "tree": "30c33d9165bb33d64bd42d6e9bc1e4cbed1c0780",
      "parents": [
        "86383b55791bd97e88ef493e33ef521ee244f3d9"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "jweiner@redhat.com",
        "time": "Thu Aug 25 15:59:16 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Aug 25 16:25:34 2011 -0700"
      },
      "message": "memcg: fix hierarchical oom locking\n\nCommit 79dfdaccd1d5 (\"memcg: make oom_lock 0 and 1 based rather than\ncounter\") tried to oom lock the hierarchy and roll back upon\nencountering an already locked memcg.\n\nThe code is confused when it comes to detecting a locked memcg, though,\nso it would fail and rollback after locking one memcg and encountering\nan unlocked second one.\n\nThe result is that oom-locking hierarchies fails unconditionally and\nthat every oom killer invocation simply goes to sleep on the oom\nwaitqueue forever.  The tasks practically hang forever without anyone\nintervening, possibly holding locks that trip up unrelated tasks, too.\n\nSigned-off-by: Johannes Weiner \u003cjweiner@redhat.com\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\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": "5af12d0efdbd9967cc71a0a10c4025c4255a6254",
      "tree": "e5e036671dc7ae02bebaf201126d6c19104e02d1",
      "parents": [
        "a801876638c5ce650223476c4eb8f37cea32dc1c"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "jweiner@redhat.com",
        "time": "Thu Aug 25 15:59:07 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Aug 25 16:25:33 2011 -0700"
      },
      "message": "memcg: pin execution to current cpu while draining stock\n\nCommit d1a05b6973c7 (\"memcg do not try to drain per-cpu caches without\npages\") added a drain_local_stock() call to a preemptible section.\n\nThe draining task looks up the cpu-local stock twice to set the\ndraining-flag, then to drain the stock and clear the flag again.  If the\ntask is migrated to a different CPU in between, noone will clear the\nflag on the first stock and it will be forever undrainable.  Its charge\ncan not be recovered and the cgroup can not be deleted anymore.\n\nProperly pin the task to the executing CPU while draining stocks.\n\nSigned-off-by: Johannes Weiner \u003cjweiner@redhat.com\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\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": "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": "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": "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": "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": "453a9bf347f1e22a5bb3605ced43b2366921221d",
      "tree": "dfe355892b8ace86f74f6b8a34ad86da159f697d",
      "parents": [
        "4d0c066d29f030d47d19678f8008933e67dd3b72"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Fri Jul 08 15:39:43 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jul 08 21:14:44 2011 -0700"
      },
      "message": "memcg: fix numa scan information update to be triggered by memory event\n\ncommit 889976dbcb12 (\"memcg: reclaim memory from nodes in round-robin\norder\") adds an numa node round-robin for memcg.  But the information is\nupdated once per 10sec.\n\nThis patch changes the update trigger from jiffies to memcg\u0027s event count.\n After this patch, numa scan information will be updated when we see 1024\nevents of pagein/pageout under a memcg.\n\n[akpm@linux-foundation.org: attempt to repair code layout]\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\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": "4d0c066d29f030d47d19678f8008933e67dd3b72",
      "tree": "96f46e845b7a937b2e41b735061f696d2cb03293",
      "parents": [
        "0b43c3aab0137595335b08b340a3f3e5af9818a6"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Fri Jul 08 15:39:42 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jul 08 21:14:43 2011 -0700"
      },
      "message": "memcg: fix reclaimable lru check in memcg\n\nNow, in mem_cgroup_hierarchical_reclaim(), mem_cgroup_local_usage() is\nused for checking whether the memcg contains reclaimable pages or not.  If\nno pages in it, the routine skips it.\n\nBut, mem_cgroup_local_usage() contains Unevictable pages and cannot handle\n\"noswap\" condition correctly.  This doesn\u0027t work on a swapless system.\n\nThis patch adds test_mem_cgroup_reclaimable() and replaces\nmem_cgroup_local_usage().  test_mem_cgroup_reclaimable() see LRU counter\nand returns correct answer to the caller.  And this new function has\n\"noswap\" argument and can see only FILE LRU if necessary.\n\n[akpm@linux-foundation.org: coding-style fixes]\n[akpm@linux-foundation.org: fix kerneldoc layout]\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\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": "072441e21ddcd1140606b7d4ef6eab579a86b0b3",
      "tree": "6f059ad83c09dfbeb1def29e805839db3e5bf85f",
      "parents": [
        "5b8ba10198a109f8a02380648c5d29000caa9c55"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Mon Jun 27 16:18:02 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jun 27 18:00:12 2011 -0700"
      },
      "message": "mm: move shmem prototypes to shmem_fs.h\n\nBefore adding any more global entry points into shmem.c, gather such\nprototypes into shmem_fs.h.  Remove mm\u0027s own declarations from swap.h,\nbut for now leave the ones in mm.h: because shmem_file_setup() and\nshmem_zero_setup() are called from various places, and we should not\nforce other subsystems to update immediately.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "fbc29a25e484be073e7d762c9f7f1d4bf8aecc48",
      "tree": "276a9e1e0c3d8f653dd821c049ec4b6940a06c1d",
      "parents": [
        "26fe616844491a41a1abc02e29f7a9d1ec2f8ddb"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Wed Jun 15 15:08:46 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Jun 15 20:04:01 2011 -0700"
      },
      "message": "memcg: avoid percpu cached charge draining at softlimit\n\nBased on Michal Hocko\u0027s comment.\n\nWe are not draining per cpu cached charges during soft limit reclaim\nbecause background reclaim doesn\u0027t care about charges.  It tries to free\nsome memory and charges will not give any.\n\nCached charges might influence only selection of the biggest soft limit\noffender but as the call is done only after the selection has been already\ndone it makes no change.\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nReviewed-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": "26fe616844491a41a1abc02e29f7a9d1ec2f8ddb",
      "tree": "cd8747ad8e96d6ebda771db41b96db11a4b09f26",
      "parents": [
        "7ae534d074e01e54d5cfbc9734b73fdfc855501f"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Wed Jun 15 15:08:45 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Jun 15 20:04:01 2011 -0700"
      },
      "message": "memcg: fix percpu cached charge draining frequency\n\nFor performance, memory cgroup caches some \"charge\" from res_counter into\nper cpu cache.  This works well but because it\u0027s cache, it needs to be\nflushed in some cases.  Typical cases are\n\n   1. when someone hit limit.\n\n   2. when rmdir() is called and need to charges to be 0.\n\nBut \"1\" has problem.\n\nRecently, with large SMP machines, we see many kworker runs because of\nflushing memcg\u0027s cache.  Bad things in implementation are that even if a\ncpu contains a cache for memcg not related to a memcg which hits limit,\ndrain code is called.\n\nThis patch does\n        A) check percpu cache contains a useful data or not.\n        B) check other asynchronous percpu draining doesn\u0027t run.\n        C) don\u0027t call local cpu callback.\n\n(*)This patch avoid changing the calling condition with hard-limit.\n\nWhen I run \"cat 1Gfile \u003e /dev/null\" under 300M limit memcg,\n\n[Before]\n13767 kamezawa  20   0 98.6m  424  416 D 10.0  0.0   0:00.61 cat\n   58 root      20   0     0    0    0 S  0.6  0.0   0:00.09 kworker/2:1\n   60 root      20   0     0    0    0 S  0.6  0.0   0:00.08 kworker/4:1\n    4 root      20   0     0    0    0 S  0.3  0.0   0:00.02 kworker/0:0\n   57 root      20   0     0    0    0 S  0.3  0.0   0:00.05 kworker/1:1\n   61 root      20   0     0    0    0 S  0.3  0.0   0:00.05 kworker/5:1\n   62 root      20   0     0    0    0 S  0.3  0.0   0:00.05 kworker/6:1\n   63 root      20   0     0    0    0 S  0.3  0.0   0:00.05 kworker/7:1\n\n[After]\n 2676 root      20   0 98.6m  416  416 D  9.3  0.0   0:00.87 cat\n 2626 kamezawa  20   0 15192 1312  920 R  0.3  0.0   0:00.28 top\n    1 root      20   0 19384 1496 1204 S  0.0  0.0   0:00.66 init\n    2 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kthreadd\n    3 root      20   0     0    0    0 S  0.0  0.0   0:00.00 ksoftirqd/0\n    4 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kworker/0:0\n\n[akpm@linux-foundation.org: make percpu_charge_mutex static, tweak comments]\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nReviewed-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nTested-by: 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": "7ae534d074e01e54d5cfbc9734b73fdfc855501f",
      "tree": "8c815762779fd79cc83db788aa29e6239212c3f4",
      "parents": [
        "733eda7ac316cd4e550fa096e4ed42356dc546e7"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Wed Jun 15 15:08:44 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Jun 15 20:04:01 2011 -0700"
      },
      "message": "memcg: fix wrong check of noswap with softlimit\n\nHierarchical reclaim doesn\u0027t swap out if memsw and resource limits are\nthye same (memsw_is_minimum \u003d\u003d true) because we would hit mem+swap limit\nanyway (during hard limit reclaim).\n\nIf it comes to the soft limit we shouldn\u0027t consider memsw_is_minimum at\nall because it doesn\u0027t make much sense.  Either the soft limit is bellow\nthe hard limit and then we cannot hit mem+swap limit or the direct reclaim\ntakes a precedence.\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nReviewed-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nAcked-by: 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": "8957712710e045044e3c44375c6a87d7ffa17d51",
      "tree": "94d801709cb1a57d12695ba9b2f8da42996e178e",
      "parents": [
        "45d16f09ddd66597e561876f5652c05bf986360a"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Wed Jun 15 15:08:41 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Jun 15 20:04:01 2011 -0700"
      },
      "message": "mm: memory.numa_stat: fix file permission\n\nCommit 406eb0c9ba76 (\"memcg: add memory.numastat api for numa\nstatistics\") adds memory.numa_stat file for memory cgroup.  But the file\npermissions are wrong.\n\n  [kamezawa@bluextal linux-2.6]$ ls -l /cgroup/memory/A/memory.numa_stat\n  ---------- 1 root root 0 Jun  9 18:36 /cgroup/memory/A/memory.numa_stat\n\nThis patch fixes the permission as\n\n  [root@bluextal kamezawa]# ls -l /cgroup/memory/A/memory.numa_stat\n  -r--r--r-- 1 root root 0 Jun 10 16:49 /cgroup/memory/A/memory.numa_stat\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: 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": "a433658c30974fc87ba3ff52d7e4e6299762aa3d",
      "tree": "8df65e22af520ca5c020281763e6874d0bb51bc5",
      "parents": [
        "e1bbd19bc4afef7adb80cca163800391c4f5773d"
      ],
      "author": {
        "name": "KOSAKI Motohiro",
        "email": "kosaki.motohiro@jp.fujitsu.com",
        "time": "Wed Jun 15 15:08:13 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Jun 15 20:03:59 2011 -0700"
      },
      "message": "vmscan,memcg: memcg aware swap token\n\nCurrently, memcg reclaim can disable swap token even if the swap token mm\ndoesn\u0027t belong in its memory cgroup.  It\u0027s slightly risky.  If an admin\ncreates very small mem-cgroup and silly guy runs contentious heavy memory\npressure workload, every tasks are going to lose swap token and then\nsystem may become unresponsive.  That\u0027s bad.\n\nThis patch adds \u0027memcg\u0027 parameter into disable_swap_token().  and if the\nparameter doesn\u0027t match swap token, VM doesn\u0027t disable it.\n\n[akpm@linux-foundation.org: coding-style fixes]\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nReviewed-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nReviewed-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": "456f998ec817ebfa254464be4f089542fa390645",
      "tree": "5976aa500638f0bbade1a672233cad71765b89b8",
      "parents": [
        "406eb0c9ba765eb066406fd5ce9d5e2b169a4d5a"
      ],
      "author": {
        "name": "Ying Han",
        "email": "yinghan@google.com",
        "time": "Thu May 26 16:25:38 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu May 26 17:12:36 2011 -0700"
      },
      "message": "memcg: add the pagefault count into memcg stats\n\nTwo new stats in per-memcg memory.stat which tracks the number of page\nfaults and number of major page faults.\n\n  \"pgfault\"\n  \"pgmajfault\"\n\nThey are different from \"pgpgin\"/\"pgpgout\" stat which count number of\npages charged/discharged to the cgroup and have no meaning of reading/\nwriting page to disk.\n\nIt is valuable to track the two stats for both measuring application\u0027s\nperformance as well as the efficiency of the kernel page reclaim path.\nCounting pagefaults per process is useful, but we also need the aggregated\nvalue since processes are monitored and controlled in cgroup basis in\nmemcg.\n\nFunctional test: check the total number of pgfault/pgmajfault of all\nmemcgs and compare with global vmstat value:\n\n  $ cat /proc/vmstat | grep fault\n  pgfault 1070751\n  pgmajfault 553\n\n  $ cat /dev/cgroup/memory.stat | grep fault\n  pgfault 1071138\n  pgmajfault 553\n  total_pgfault 1071142\n  total_pgmajfault 553\n\n  $ cat /dev/cgroup/A/memory.stat | grep fault\n  pgfault 199\n  pgmajfault 0\n  total_pgfault 199\n  total_pgmajfault 0\n\nPerformance test: run page fault test(pft) wit 16 thread on faulting in\n15G anon pages in 16G container.  There is no regression noticed on the\n\"flt/cpu/s\"\n\nSample output from pft:\n\n  TAG pft:anon-sys-default:\n    Gb  Thr CLine   User     System     Wall    flt/cpu/s fault/wsec\n    15   16   1     0.67s   233.41s    14.76s   16798.546 266356.260\n\n  +-------------------------------------------------------------------------+\n      N           Min           Max        Median           Avg        Stddev\n  x  10     16682.962     17344.027     16913.524     16928.812      166.5362\n  +  10     16695.568     16923.896     16820.604     16824.652     84.816568\n  No difference proven at 95.0% confidence\n\n[akpm@linux-foundation.org: fix build]\n[hughd@google.com: shmem fix]\nSigned-off-by: Ying Han \u003cyinghan@google.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nReviewed-by: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nAcked-by: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\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": "406eb0c9ba765eb066406fd5ce9d5e2b169a4d5a",
      "tree": "71805cc1bcf4b1a4e7eb58a726d2ba21d913ba1a",
      "parents": [
        "1bac180bd29e03989f50054af97b53b8d37a364a"
      ],
      "author": {
        "name": "Ying Han",
        "email": "yinghan@google.com",
        "time": "Thu May 26 16:25:37 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu May 26 17:12:36 2011 -0700"
      },
      "message": "memcg: add memory.numastat api for numa statistics\n\nThe new API exports numa_maps per-memcg basis.  This is a piece of useful\ninformation where it exports per-memcg page distribution across real numa\nnodes.\n\nOne of the usecases is evaluating application performance by combining\nthis information w/ the cpu allocation to the application.\n\nThe output of the memory.numastat tries to follow w/ simiar format of\nnuma_maps like:\n\n  total\u003d\u003ctotal pages\u003e N0\u003d\u003cnode 0 pages\u003e N1\u003d\u003cnode 1 pages\u003e ...\n  file\u003d\u003ctotal file pages\u003e N0\u003d\u003cnode 0 pages\u003e N1\u003d\u003cnode 1 pages\u003e ...\n  anon\u003d\u003ctotal anon pages\u003e N0\u003d\u003cnode 0 pages\u003e N1\u003d\u003cnode 1 pages\u003e ...\n  unevictable\u003d\u003ctotal anon pages\u003e N0\u003d\u003cnode 0 pages\u003e N1\u003d\u003cnode 1 pages\u003e ...\n\nAnd we have per-node:\n\n  total \u003d file + anon + unevictable\n\n  $ cat /dev/cgroup/memory/memory.numa_stat\n  total\u003d250020 N0\u003d87620 N1\u003d52367 N2\u003d45298 N3\u003d64735\n  file\u003d225232 N0\u003d83402 N1\u003d46160 N2\u003d40522 N3\u003d55148\n  anon\u003d21053 N0\u003d3424 N1\u003d6207 N2\u003d4776 N3\u003d6646\n  unevictable\u003d3735 N0\u003d794 N1\u003d0 N2\u003d0 N3\u003d2941\n\nSigned-off-by: Ying Han \u003cyinghan@google.com\u003e\nCc: Balbir Singh \u003cbalbir@in.ibm.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Minchan Kim \u003cminchan.kim@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": "1bac180bd29e03989f50054af97b53b8d37a364a",
      "tree": "6797cb73a27c1e8b7d1ea79764356dc69486dad4",
      "parents": [
        "4fd14ebf6e3b66423dfac2bc9defda7b83ee07b3"
      ],
      "author": {
        "name": "Ying Han",
        "email": "yinghan@google.com",
        "time": "Thu May 26 16:25:36 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu May 26 17:12:35 2011 -0700"
      },
      "message": "memcg: rename mem_cgroup_zone_nr_pages() to mem_cgroup_zone_nr_lru_pages()\n\nThe caller of the function has been renamed to zone_nr_lru_pages(), and\nthis is just fixing up in the memcg code.  The current name is easily to\nbe mis-read as zone\u0027s total number of pages.\n\nSigned-off-by: Ying Han \u003cyinghan@google.com\u003e\nAcked-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nReviewed-by: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: Balbir Singh \u003cbalbir@in.ibm.com\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": "4fd14ebf6e3b66423dfac2bc9defda7b83ee07b3",
      "tree": "38fb451bf2e480091bf88540139378b68cdd2494",
      "parents": [
        "246e87a9393448c20873bc5dee64be68ed559e24"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Thu May 26 16:25:35 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu May 26 17:12:35 2011 -0700"
      },
      "message": "memcg: remove unused retry signal from reclaim\n\nIf the memcg reclaim code detects the target memcg below its limit it\nexits and returns a guaranteed non-zero value so that the charge is\nretried.\n\nNowadays, the charge side checks the memcg limit itself and does not rely\non this non-zero return value trick.\n\nThis patch removes it.  The reclaim code will now always return the true\nnumber of pages it reclaimed on its own.\n\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-by: Rik van Riel\u003criel@redhat.com\u003e\nAcked-by: Ying Han\u003cyinghan@google.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nReviewed-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Mel Gorman \u003cmgorman@suse.de\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": "889976dbcb1218119fdd950fb7819084e37d7d37",
      "tree": "7508706ddb6bcbe0f673aca3744f30f281b17734",
      "parents": [
        "4e4c941c108eff10844d2b441d96dab44f32f424"
      ],
      "author": {
        "name": "Ying Han",
        "email": "yinghan@google.com",
        "time": "Thu May 26 16:25:33 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu May 26 17:12:35 2011 -0700"
      },
      "message": "memcg: reclaim memory from nodes in round-robin order\n\nPresently, memory cgroup\u0027s direct reclaim frees memory from the current\nnode.  But this has some troubles.  Usually when a set of threads works in\na cooperative way, they tend to operate on the same node.  So if they hit\nlimits under memcg they will reclaim memory from themselves, damaging the\nactive working set.\n\nFor example, assume 2 node system which has Node 0 and Node 1 and a memcg\nwhich has 1G limit.  After some work, file cache remains and the usages\nare\n\n   Node 0:  1M\n   Node 1:  998M.\n\nand run an application on Node 0, it will eat its foot before freeing\nunnecessary file caches.\n\nThis patch adds round-robin for NUMA and adds equal pressure to each node.\nWhen using cpuset\u0027s spread memory feature, this will work very well.\n\nBut yes, a better algorithm is needed.\n\n[akpm@linux-foundation.org: comment editing]\n[kamezawa.hiroyu@jp.fujitsu.com: fix time comparisons]\nSigned-off-by: Ying Han \u003cyinghan@google.com\u003e\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Balbir Singh \u003cbalbir@in.ibm.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "39cc98f1f8aa949afeea89f424c7494b0785d7da",
      "tree": "d16d69a1c2f1db6150642d47927d77615507e856",
      "parents": [
        "d149e3b25d7c5f33de9aa866303926fa53535aa7"
      ],
      "author": {
        "name": "Michal Hocko",
        "email": "mhocko@suse.cz",
        "time": "Thu May 26 16:25:28 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu May 26 17:12:35 2011 -0700"
      },
      "message": "memcg: remove pointless next_mz nullification in mem_cgroup_soft_limit_reclaim()\n\nnext_mz is assigned to NULL if __mem_cgroup_largest_soft_limit_node\nselects the same mz.  This doesn\u0027t make much sense as we assign to the\nvariable right in the next loop.\n\nCompiler will probably optimize this out but it is little bit confusing\nfor the code reading.\n\nSigned-off-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nAcked-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbalbir@linux.vnet.ibm.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": "0ae5e89c60c9eb87da36a2614836bc434b0ec2ad",
      "tree": "0d509fd83ac7e7d2f52dfcbba769c43aeeb68b5f",
      "parents": [
        "f042e707ee671e4beb5389abeb9a1819a2cf5532"
      ],
      "author": {
        "name": "Ying Han",
        "email": "yinghan@google.com",
        "time": "Thu May 26 16:25:25 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu May 26 17:12:35 2011 -0700"
      },
      "message": "memcg: count the soft_limit reclaim in global background reclaim\n\nThe global kswapd scans per-zone LRU and reclaims pages regardless of the\ncgroup. It breaks memory isolation since one cgroup can end up reclaiming\npages from another cgroup. Instead we should rely on memcg-aware target\nreclaim including per-memcg kswapd and soft_limit hierarchical reclaim under\nmemory pressure.\n\nIn the global background reclaim, we do soft reclaim before scanning the\nper-zone LRU. However, the return value is ignored. This patch is the first\nstep to skip shrink_zone() if soft_limit reclaim does enough work.\n\nThis is part of the effort which tries to reduce reclaiming pages in global\nLRU in memcg. The per-memcg background reclaim patchset further enhances the\nper-cgroup targetting reclaim, which I should have V4 posted shortly.\n\nTry running multiple memory intensive workloads within seperate memcgs. Watch\nthe counters of soft_steal in memory.stat.\n\n  $ cat /dev/cgroup/A/memory.stat | grep \u0027soft\u0027\n  soft_steal 240000\n  soft_scan 240000\n  total_soft_steal 240000\n  total_soft_scan 240000\n\nThis patch:\n\nIn the global background reclaim, we do soft reclaim before scanning the\nper-zone LRU.  However, the return value is ignored.\n\nWe would like to skip shrink_zone() if soft_limit reclaim does enough\nwork.  Also, we need to make the memory pressure balanced across per-memcg\nzones, like the logic vm-core.  This patch is the first step where we\nstart with counting the nr_scanned and nr_reclaimed from soft_limit\nreclaim into the global scan_control.\n\nSigned-off-by: Ying Han \u003cyinghan@google.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Balbir Singh \u003cbalbir@in.ibm.com\u003e\nAcked-by: 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": "f780bdb7c1c73009cb57adcf99ef50027d80bf3c",
      "tree": "d15668ffcc40a2aaa31723b87cfda0b166f84d57",
      "parents": [
        "4714d1d32d97239fb5ae3e10521d3f133a899b66"
      ],
      "author": {
        "name": "Ben Blum",
        "email": "bblum@andrew.cmu.edu",
        "time": "Thu May 26 16:25:19 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu May 26 17:12:34 2011 -0700"
      },
      "message": "cgroups: add per-thread subsystem callbacks\n\nAdd cgroup subsystem callbacks for per-thread attachment in atomic contexts\n\nAdd can_attach_task(), pre_attach(), and attach_task() as new callbacks\nfor cgroups\u0027s subsystem interface.  Unlike can_attach and attach, these\nare for per-thread operations, to be called potentially many times when\nattaching an entire threadgroup.\n\nAlso, the old \"bool threadgroup\" interface is removed, as replaced by\nthis.  All subsystems are modified for the new interface - of note is\ncpuset, which requires from/to nodemasks for attach to be globally scoped\n(though per-cpuset would work too) to persist from its pre_attach to\nattach_task and attach.\n\nThis is a pre-patch for cgroup-procs-writable.patch.\n\nSigned-off-by: Ben Blum \u003cbblum@andrew.cmu.edu\u003e\nCc: \"Eric W. Biederman\" \u003cebiederm@xmission.com\u003e\nCc: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nCc: Matt Helsley \u003cmatthltc@us.ibm.com\u003e\nReviewed-by: Paul Menage \u003cmenage@google.com\u003e\nCc: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: Miao Xie \u003cmiaox@cn.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": "a2c8990aed5ab000491732b07c8c4465d1b389b8",
      "tree": "1aaac1e831410ac3e59c969f05426315d2054c28",
      "parents": [
        "5b52fc890bece77bffb9fade69239f71384ef02b"
      ],
      "author": {
        "name": "Michal Hocko",
        "email": "mhocko@suse.cz",
        "time": "Tue May 24 17:12:50 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed May 25 08:39:36 2011 -0700"
      },
      "message": "memsw: remove noswapaccount kernel parameter\n\nThe noswapaccount parameter has been deprecated since 2.6.38 without any\ncomplaints from users so we can remove it.  swapaccount\u003d0|1 can be used\ninstead.\n\nAs we are removing the parameter we can also clean up swapaccount because\nit doesn\u0027t have to accept an empty string anymore (to match noswapaccount)\nand so we can push \u003d into __setup macro rather than checking \"\u003d1\" resp.\n\"\u003d0\" strings\n\nSigned-off-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Hiroyuki Kamezawa \u003ckamezawa.hiroyuki@gmail.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "25985edcedea6396277003854657b5f3cb31a628",
      "tree": "f026e810210a2ee7290caeb737c23cb6472b7c38",
      "parents": [
        "6aba74f2791287ec407e0f92487a725a25908067"
      ],
      "author": {
        "name": "Lucas De Marchi",
        "email": "lucas.demarchi@profusion.mobi",
        "time": "Wed Mar 30 22:57:33 2011 -0300"
      },
      "committer": {
        "name": "Lucas De Marchi",
        "email": "lucas.demarchi@profusion.mobi",
        "time": "Thu Mar 31 11:26:23 2011 -0300"
      },
      "message": "Fix common misspellings\n\nFixes generated by \u0027codespell\u0027 and manually reviewed.\n\nSigned-off-by: Lucas De Marchi \u003clucas.demarchi@profusion.mobi\u003e\n"
    },
    {
      "commit": "5a6475a4e162200f43855e2d42bbf55bcca1a9f2",
      "tree": "361ef686ef833cd1560e884ca1420d512e4d06bb",
      "parents": [
        "6cfddb261555dd0c0529a5fb7cf8bc5b85ad95a5"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Wed Mar 23 16:42:42 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 23 19:46:33 2011 -0700"
      },
      "message": "memcg: fix leak on wrong LRU with FUSE\n\nfs/fuse/dev.c::fuse_try_move_page() does\n\n   (1) remove a page by -\u003esteal()\n   (2) re-add the page to page cache\n   (3) link the page to LRU if it was not on LRU at (1)\n\nThis implies the page is _on_ LRU when it\u0027s added to radix-tree.  So, the\npage is added to memory cgroup while it\u0027s on LRU.  because LRU is lazy and\nno one flushs it.\n\nThis is the same behavior as SwapCache and needs special care as\n - remove page from LRU before overwrite pc-\u003emem_cgroup.\n - add page to LRU after overwrite pc-\u003emem_cgroup.\n\nAnd we need to taking care of pagevec.\n\nIf PageLRU(page) is set before we add PCG_USED bit, the page will not be\nadded to memcg\u0027s LRU (in short period).  So, regardlress of PageLRU(page)\nvalue before commit_charge(), we need to check PageLRU(page) after\ncommit_charge().\n\nAddresses https://bugzilla.kernel.org/show_bug.cgi?id\u003d30432\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nReviewed-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Miklos Szeredi \u003cmiklos@szeredi.hu\u003e\nCc: Balbir Singh \u003cbalbir@in.ibm.com\u003e\nReported-by: Daniel Poelzleithner \u003cpoelzi@poelzi.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "4be4489feae6da890765cc1bdc1af5e4f8c4b75f",
      "tree": "c7c1154aaba8e59523024c119fdf769284023a35",
      "parents": [
        "7a159cc9d7987cdb4853f8711f5f89e01cfffe42"
      ],
      "author": {
        "name": "Andrew Morton",
        "email": "akpm@linux-foundation.org",
        "time": "Wed Mar 23 16:42:39 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 23 19:46:32 2011 -0700"
      },
      "message": "mm/memcontrol.c: suppress uninitialized-var warning with older gcc\u0027s\n\nmm/memcontrol.c: In function \u0027mem_cgroup_force_empty\u0027:\nmm/memcontrol.c:2280: warning: \u0027flags\u0027 may be used uninitialized in this function\n\nIt\u0027s a false positive.\n\nCc: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Greg Thelen \u003cgthelen@google.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\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": "7a159cc9d7987cdb4853f8711f5f89e01cfffe42",
      "tree": "027e8468d40bfdb51ad9694ec1d5256bb2fdb36f",
      "parents": [
        "e9f8974f2f559b00c87ccfba67bca3903f913d50"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Wed Mar 23 16:42:38 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 23 19:46:31 2011 -0700"
      },
      "message": "memcg: use native word page statistics counters\n\nThe statistic counters are in units of pages, there is no reason to make\nthem 64-bit wide on 32-bit machines.\n\nMake them native words.  Since they are signed, this leaves 31 bit on\n32-bit machines, which can represent roughly 8TB assuming a page size of\n4k.\n\n[akpm@linux-foundation.org: coding-style fixes]\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nSigned-off-by: Greg Thelen \u003cgthelen@google.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\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": "e9f8974f2f559b00c87ccfba67bca3903f913d50",
      "tree": "d19f8f7d15eb56e7af98c7ad63db8e86d5873fff",
      "parents": [
        "7ec99d6213b579a84c85ad37f2aa8ded4857c53c"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Wed Mar 23 16:42:37 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 23 19:46:31 2011 -0700"
      },
      "message": "memcg: break out event counters from other stats\n\nFor increasing and decreasing per-cpu cgroup usage counters it makes sense\nto use signed types, as single per-cpu values might go negative during\nupdates.  But this is not the case for only-ever-increasing event\ncounters.\n\nAll the counters have been signed 64-bit so far, which was enough to count\nevents even with the sign bit wasted.\n\nThis patch:\n- divides s64 counters into signed usage counters and unsigned\n  monotonically increasing event counters.\n- converts unsigned event counters into \u0027unsigned long\u0027 rather than\n  \u0027u64\u0027.  This matches the type used by the /proc/vmstat event counters.\n\nThe next patch narrows the signed usage counters type (on 32-bit CPUs,\nthat is).\n\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nSigned-off-by: Greg Thelen \u003cgthelen@google.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\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": "7ec99d6213b579a84c85ad37f2aa8ded4857c53c",
      "tree": "d05bb74c5ca30650ff0622cd1ffd2fd6ddecebd6",
      "parents": [
        "7ffd4ca7a2cdd7a18f0b499a4e9e0e7cf36ba018"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Wed Mar 23 16:42:36 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 23 19:46:30 2011 -0700"
      },
      "message": "memcg: unify charge/uncharge quantities to units of pages\n\nThere is no clear pattern when we pass a page count and when we pass a\nbyte count that is a multiple of PAGE_SIZE.\n\nWe never charge or uncharge subpage quantities, so convert it all to page\ncounts.\n\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "7ffd4ca7a2cdd7a18f0b499a4e9e0e7cf36ba018",
      "tree": "1a2678ce91b9dfb2118d19e0ec457ca5582793f9",
      "parents": [
        "11c9ea4e80fc3be83485667204c68d0a732f3757"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Wed Mar 23 16:42:35 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 23 19:46:30 2011 -0700"
      },
      "message": "memcg: convert uncharge batching from bytes to page granularity\n\nWe never uncharge subpage quantities.\n\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "11c9ea4e80fc3be83485667204c68d0a732f3757",
      "tree": "71f68fb56e427c3ebe12e205e6ea56d72e7bd6ea",
      "parents": [
        "e7018b8d27e0c9aa2200e5b393e0fe9093c6565c"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Wed Mar 23 16:42:34 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 23 19:46:29 2011 -0700"
      },
      "message": "memcg: convert per-cpu stock from bytes to page granularity\n\nWe never keep subpage quantities in the per-cpu stock.\n\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "e7018b8d27e0c9aa2200e5b393e0fe9093c6565c",
      "tree": "13a4d92cd78bc6f97d9a2b6d77880c9ea5d67aa1",
      "parents": [
        "bf1ff2635a5fda207fc870df348bfc766e8dcd4d"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Wed Mar 23 16:42:33 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 23 19:46:29 2011 -0700"
      },
      "message": "memcg: keep only one charge cancelling function\n\nWe have two charge cancelling functions: one takes a page count, the other\na page size.  The second one just divides the parameter by PAGE_SIZE and\nthen calls the first one.  This is trivial, no need for an extra function.\n\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "bf1ff2635a5fda207fc870df348bfc766e8dcd4d",
      "tree": "d4085b3bdbe608f6c8f708cb93080051b341d7fe",
      "parents": [
        "4dc03de1b29901b61cb27e4cab44a7f578dc0fc9"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Wed Mar 23 16:42:32 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 23 19:46:29 2011 -0700"
      },
      "message": "memcg: remove memcg-\u003ereclaim_param_lock\n\nThe reclaim_param_lock is only taken around single reads and writes to\ninteger variables and is thus superfluous.  Drop it.\n\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nReviewed-by: Minchan Kim \u003cminchan.kim@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": "4dc03de1b29901b61cb27e4cab44a7f578dc0fc9",
      "tree": "4edca28cf1636015eacd8012023804e4f27b2e34",
      "parents": [
        "6b3ae58efca06623c197fd6d91ded4aa3a8fe039"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Wed Mar 23 16:42:31 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 23 19:46:28 2011 -0700"
      },
      "message": "memcg: charged pages always have valid per-memcg zone info\n\npage_cgroup_zoneinfo() will never return NULL for a charged page, remove\nthe check for it in mem_cgroup_get_reclaim_stat_from_page().\n\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nReviewed-by: Minchan Kim \u003cminchan.kim@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": "6b3ae58efca06623c197fd6d91ded4aa3a8fe039",
      "tree": "6460e4e1ce206d391b862a3d398a9e22e33ecb3c",
      "parents": [
        "5564e88ba6fd2f6dcd83a592771810cd84b5ae80"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Wed Mar 23 16:42:30 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 23 19:46:28 2011 -0700"
      },
      "message": "memcg: remove direct page_cgroup-to-page pointer\n\nIn struct page_cgroup, we have a full word for flags but only a few are\nreserved.  Use the remaining upper bits to encode, depending on\nconfiguration, the node or the section, to enable page_cgroup-to-page\nlookups without a direct pointer.\n\nThis saves a full word for every page in a system with memory cgroups\nenabled.\n\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: Randy Dunlap \u003crandy.dunlap@oracle.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "5564e88ba6fd2f6dcd83a592771810cd84b5ae80",
      "tree": "e2b3a0835067825308a254c7531c891d4d69e701",
      "parents": [
        "de3638d9cdc89ac899225996b8dcedbcbc53bdd2"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Wed Mar 23 16:42:29 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 23 19:46:27 2011 -0700"
      },
      "message": "memcg: condense page_cgroup-to-page lookup points\n\nThe per-cgroup LRU lists string up \u0027struct page_cgroup\u0027s.  To get from\nthose structures to the page they represent, a lookup is required.\nCurrently, the lookup is done through a direct pointer in struct\npage_cgroup, so a lot of functions down the callchain do this lookup by\nthemselves instead of receiving the page pointer from their callers.\n\nThe next patch removes this pointer, however, and the lookup is no longer\nthat straight-forward.  In preparation for that, this patch only leaves\nthe non-optional lookups when coming directly from the LRU list and passes\nthe page down the stack.\n\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nCc: Minchan Kim \u003cminchan.kim@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": "de3638d9cdc89ac899225996b8dcedbcbc53bdd2",
      "tree": "86293e32728fdd5696cd321bc65aec09c89d17f3",
      "parents": [
        "97a6c37b34f46feed2544bd40891ee6dd0fd1554"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Wed Mar 23 16:42:28 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 23 19:46:27 2011 -0700"
      },
      "message": "memcg: fold __mem_cgroup_move_account into caller\n\nIt is one logical function, no need to have it split up.\n\nAlso, get rid of some checks from the inner function that ensured the\nsanity of the outer function.\n\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nCc: Minchan Kim \u003cminchan.kim@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": "97a6c37b34f46feed2544bd40891ee6dd0fd1554",
      "tree": "6135189ba1f589d7a3b10c5e24da9a42ea9036f5",
      "parents": [
        "ad324e94475a04cfcdfdb11ad20f8ea81268e411"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Wed Mar 23 16:42:27 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 23 19:46:26 2011 -0700"
      },
      "message": "memcg: change page_cgroup_zoneinfo signature\n\nInstead of passing a whole struct page_cgroup to this function, let it\ntake only what it really needs from it: the struct mem_cgroup and the\npage.\n\nThis has the advantage that reading pc-\u003emem_cgroup is now done at the same\nplace where the ordering rules for this pointer are enforced and\nexplained.\n\nIt is also in preparation for removing the pc-\u003epage backpointer.\n\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nCc: Minchan Kim \u003cminchan.kim@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": "ad324e94475a04cfcdfdb11ad20f8ea81268e411",
      "tree": "4326bb602a3528071ffd6f3030c3a82c76a3454e",
      "parents": [
        "f212ad7cf9c73f8a7fa160e223dcb3f074441a72"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Wed Mar 23 16:42:26 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 23 19:46:26 2011 -0700"
      },
      "message": "memcg: no uncharged pages reach page_cgroup_zoneinfo\n\nThis patch series removes the direct page pointer from struct page_cgroup,\nwhich saves 20% of per-page memcg memory overhead (Fedora and Ubuntu\nenable memcg per default, openSUSE apparently too).\n\nThe node id or section number is encoded in the remaining free bits of\npc-\u003eflags which allows calculating the corresponding page without the\nextra pointer.\n\nI ran, what I think is, a worst-case microbenchmark that just cats a large\nsparse file to /dev/null, because it means that walking the LRU list on\nbehalf of per-cgroup reclaim and looking up pages from page_cgroups is\nhappening constantly and at a high rate.  But it made no measurable\ndifference.  A profile reported a 0.11% share of the new\nlookup_cgroup_page() function in this benchmark.\n\nThis patch:\n\nAll callsites check PCG_USED before passing pc-\u003emem_cgroup, so the latter\nis never NULL.\n\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nAcked-by: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nCc: Minchan Kim \u003cminchan.kim@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": "f212ad7cf9c73f8a7fa160e223dcb3f074441a72",
      "tree": "95789ef7ce662e86a3e4aded5dfb97c51dc7b0a0",
      "parents": [
        "af4a662144884a7dbb19acbef70878b3b955f928"
      ],
      "author": {
        "name": "Daisuke Nishimura",
        "email": "nishimura@mxp.nes.nec.co.jp",
        "time": "Wed Mar 23 16:42:25 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 23 19:46:25 2011 -0700"
      },
      "message": "memcg: add memcg sanity checks at allocating and freeing pages\n\nAdd checks at allocating or freeing a page whether the page is used (iow,\ncharged) from the view point of memcg.\n\nThis check may be useful in debugging a problem and we did similar checks\nbefore the commit 52d4b9ac(memcg: allocate all page_cgroup at boot).\n\nThis patch adds some overheads at allocating or freeing memory, so it\u0027s\nenabled only when CONFIG_DEBUG_VM is enabled.\n\nSigned-off-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nCc: Minchan Kim \u003cminchan.kim@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": "af4a662144884a7dbb19acbef70878b3b955f928",
      "tree": "f16b04ed13de1ad1938af551e406879b90d4b0ca",
      "parents": [
        "c14f35c70e068392ccae0b2d6f755baea5eed4d6"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Wed Mar 23 16:42:24 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 23 19:46:25 2011 -0700"
      },
      "message": "memcg: remove NULL check from lookup_page_cgroup() result\n\nThe page_cgroup array is set up before even fork is initialized.  I\nseriously doubt that this code executes before the array is alloc\u0027d.\n\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nCc: Minchan Kim \u003cminchan.kim@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": "c14f35c70e068392ccae0b2d6f755baea5eed4d6",
      "tree": "1e3265ba63a859ee0b45ae89303afea4de19012c",
      "parents": [
        "3403968d7a7dc373901cad0cad56b3afcb09cc50"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Wed Mar 23 16:42:23 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 23 19:46:24 2011 -0700"
      },
      "message": "memcg: remove impossible conditional when committing\n\nNo callsite ever passes a NULL pointer for a struct mem_cgroup * to the\ncommitting function.  There is no need to check for it.\n\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nCc: Minchan Kim \u003cminchan.kim@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": "3403968d7a7dc373901cad0cad56b3afcb09cc50",
      "tree": "9c73d17914dab16fd90dcbae4bac303a98987da0",
      "parents": [
        "9d11ea9f163a14920487bdda77461e64d600fd48"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Wed Mar 23 16:42:22 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 23 19:46:24 2011 -0700"
      },
      "message": "memcg: remove unused page flag bitfield defines\n\nThese definitions have been unused since \u00274b3bde4 memcg: remove the\noverhead associated with the root cgroup\u0027.\n\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nCc: Minchan Kim \u003cminchan.kim@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": "9d11ea9f163a14920487bdda77461e64d600fd48",
      "tree": "9435e30836ee97f3e8c235451bc944cdc8a345c4",
      "parents": [
        "b7c6167848fa36e32f1874b95c1edc02881cd040"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Wed Mar 23 16:42:21 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 23 19:46:23 2011 -0700"
      },
      "message": "memcg: simplify the way memory limits are checked\n\nSince transparent huge pages, checking whether memory cgroups are below\ntheir limits is no longer enough, but the actual amount of chargeable\nspace is important.\n\nTo not have more than one limit-checking interface, replace\nmemory_cgroup_check_under_limit() and memory_cgroup_check_margin() with a\nsingle memory_cgroup_margin() that returns the chargeable space and leaves\nthe comparison to the callsite.\n\nSoft limits are now checked the other way round, by using the already\nexisting function that returns the amount by which soft limits are\nexceeded: res_counter_soft_limit_excess().\n\nAlso remove all the corresponding functions on the res_counter side that\nare now no longer used.\n\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nAcked-by: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nCc: Minchan Kim \u003cminchan.kim@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": "b7c6167848fa36e32f1874b95c1edc02881cd040",
      "tree": "d160acb871f2be4e0e7095c662b647e12a199dac",
      "parents": [
        "56039efa18f2530fc23e8ef19e716b65ee2a1d1e"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Wed Mar 23 16:42:20 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 23 19:46:23 2011 -0700"
      },
      "message": "memcg: soft limit reclaim should end at limit not below\n\nSoft limit reclaim continues until the usage is below the current soft\nlimit, but the documented semantics are actually that soft limit reclaim\nwill push usage back until the soft limits are met again.\n\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nAcked-by: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nCc: Minchan Kim \u003cminchan.kim@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": "56039efa18f2530fc23e8ef19e716b65ee2a1d1e",
      "tree": "a61cbd2f760e93363657622de2cd1591db028458",
      "parents": [
        "6c191cd01a935e5b53ef43c9403c771bb7a32b60"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Wed Mar 23 16:42:19 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 23 19:46:22 2011 -0700"
      },
      "message": "memcg: fix ugly initialization of return value is in caller\n\nRemove initialization of vaiable in caller of memory cgroup function.\nActually, it\u0027s return value of memcg function but it\u0027s initialized in\ncaller.\n\nSome memory cgroup uses following style to bring the result of start\nfunction to the end function for avoiding races.\n\n   mem_cgroup_start_A(\u0026(*ptr))\n   /* Something very complicated can happen here. */\n   mem_cgroup_end_A(*ptr)\n\nIn some calls, *ptr should be initialized to NULL be caller.  But it\u0027s\nugly.  This patch fixes that *ptr is initialized by _start function.\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "033193275b3ffcfe7f3fde7b569f3d207f6cd6a0",
      "tree": "fc65fa02248f855f0f63e087f35a507b6abb5617",
      "parents": [
        "278df9f451dc71dcd002246be48358a473504ad0"
      ],
      "author": {
        "name": "Dave Hansen",
        "email": "dave@linux.vnet.ibm.com",
        "time": "Tue Mar 22 16:32:56 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Mar 22 17:44:04 2011 -0700"
      },
      "message": "pagewalk: only split huge pages when necessary\n\nRight now, if a mm_walk has either -\u003epte_entry or -\u003epmd_entry set, it will\nunconditionally split any transparent huge pages it runs in to.  In\npractice, that means that anyone doing a\n\n\tcat /proc/$pid/smaps\n\nwill unconditionally break down every huge page in the process and depend\non khugepaged to re-collapse it later.  This is fairly suboptimal.\n\nThis patch changes that behavior.  It teaches each -\u003epmd_entry handler\n(there are five) that they must break down the THPs themselves.  Also, the\n_generic_ code will never break down a THP unless a -\u003epte_entry handler is\nactually set.\n\nThis means that the -\u003epmd_entry handlers can now choose to deal with THPs\nwithout breaking them down.\n\n[akpm@linux-foundation.org: coding-style fixes]\nSigned-off-by: Dave Hansen \u003cdave@linux.vnet.ibm.com\u003e\nAcked-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nAcked-by: David Rientjes \u003crientjes@google.com\u003e\nReviewed-by: Eric B Munson \u003cemunson@mgebm.net\u003e\nTested-by: Eric B Munson \u003cemunson@mgebm.net\u003e\nCc: Michael J Wolf \u003cmjwolf@us.ibm.com\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Matt Mackall \u003cmpm@selenic.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": "3f58a82943337fb6e79acfa5346719a97d3c0b98",
      "tree": "667441ac13c845edac93c937d0baba03a2021ea8",
      "parents": [
        "315601809d124d046abd6c3ffa346d0dbd7aa29d"
      ],
      "author": {
        "name": "Minchan Kim",
        "email": "minchan.kim@gmail.com",
        "time": "Tue Mar 22 16:32:53 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Mar 22 17:44:03 2011 -0700"
      },
      "message": "memcg: move memcg reclaimable page into tail of inactive list\n\nThe rotate_reclaimable_page function moves just written out pages, which\nthe VM wanted to reclaim, to the end of the inactive list.  That way the\nVM will find those pages first next time it needs to free memory.\n\nThis patch applies the rule in memcg.  It can help to prevent unnecessary\nworking page eviction of memcg.\n\nSigned-off-by: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nAcked-by: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nReviewed-by: Rik van Riel \u003criel@redhat.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nAcked-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Andrea Arcangeli \u003caarcange@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": "ef6a3c63112e865d632ff7c478ba7c7160cad0d1",
      "tree": "d0bd3ee2b79674e22b8dd3f318814cd4789697b8",
      "parents": [
        "318b275fbca1ab9ec0862de71420e0e92c3d1aa7"
      ],
      "author": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Tue Mar 22 16:30:52 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Mar 22 17:44:02 2011 -0700"
      },
      "message": "mm: add replace_page_cache_page() function\n\nThis function basically does:\n\n     remove_from_page_cache(old);\n     page_cache_release(old);\n     add_to_page_cache_locked(new);\n\nExcept it does this atomically, so there\u0027s no possibility for the \"add\" to\nfail because of a race.\n\nIf memory cgroups are enabled, then the memory cgroup charge is also moved\nfrom the old page to the new.\n\nThis function is currently used by fuse to move pages into the page cache\non read, instead of copying the page contents.\n\n[minchan.kim@gmail.com: add freepage() hook to replace_page_cache_page()]\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nAcked-by: Rik van Riel \u003criel@redhat.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nSigned-off-by: Minchan Kim \u003cminchan.kim@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": "3751d60430fe4c26460a5ca8ad8672d32f93bcb1",
      "tree": "f0bbefb76a4fc328ca441bd71fc49a5a091bb323",
      "parents": [
        "8493ae439f7038b502df1d687e61dde54c27ca92"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Tue Feb 01 15:52:45 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Feb 02 16:03:19 2011 -0800"
      },
      "message": "memcg: fix event counting breakage from recent THP update\n\nChanges in e401f1761 (\"memcg: modify accounting function for supporting\nTHP better\") adds nr_pages to support multiple page size in\nmemory_cgroup_charge_statistics.\n\nBut counting the number of event nees abs(nr_pages) for increasing\ncounters.  This patch fixes event counting.\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nReviewed-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbalbir@in.ibm.com\u003e\nCc: Minchan Kim \u003cminchan.kim@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": "8493ae439f7038b502df1d687e61dde54c27ca92",
      "tree": "ba8dafa7eb3292c8d2ca4597ef6f2f06c7dcd6a6",
      "parents": [
        "19942822df65ee4a47c2e6d6d70cace1b7f01710"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Tue Feb 01 15:52:44 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Feb 02 16:03:19 2011 -0800"
      },
      "message": "memcg: never OOM when charging huge pages\n\nHuge page coverage should obviously have less priority than the continued\nexecution of a process.\n\nNever kill a process when charging it a huge page fails.  Instead, give up\nafter the first failed reclaim attempt and fall back to regular pages.\n\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nReviewed-by: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\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": "19942822df65ee4a47c2e6d6d70cace1b7f01710",
      "tree": "1fe6fdcc92ae7e64014c04676fc91e0105bdf344",
      "parents": [
        "9221edb7120e2dc3ae90f1c58514979f7ba40e46"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Tue Feb 01 15:52:43 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Feb 02 16:03:19 2011 -0800"
      },
      "message": "memcg: prevent endless loop when charging huge pages to near-limit group\n\nIf reclaim after a failed charging was unsuccessful, the limits are\nchecked again, just in case they settled by means of other tasks.\n\nThis is all fine as long as every charge is of size PAGE_SIZE, because in\nthat case, being below the limit means having at least PAGE_SIZE bytes\navailable.\n\nBut with transparent huge pages, we may end up in an endless loop where\ncharging and reclaim fail, but we keep going because the limits are not\nyet exceeded, although not allowing for a huge page.\n\nFix this up by explicitely checking for enough room, not just whether we\nare within limits.\n\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nReviewed-by: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\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": "9221edb7120e2dc3ae90f1c58514979f7ba40e46",
      "tree": "73818b41f9b7d73cc20fb9f4efbbe73a89b25058",
      "parents": [
        "af241a083404acda7ba3690e5b7697949d729fcc"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Tue Feb 01 15:52:42 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Feb 02 16:03:19 2011 -0800"
      },
      "message": "memcg: prevent endless loop when charging huge pages\n\nThe charging code can encounter a charge size that is bigger than a\nregular page in two situations: one is a batched charge to fill the\nper-cpu stocks, the other is a huge page charge.\n\nThis code is distributed over two functions, however, and only the outer\none is aware of huge pages.  In case the charging fails, the inner\nfunction will tell the outer function to retry if the charge size is\nbigger than regular pages--assuming batched charging is the only case.\nAnd the outer function will retry forever charging a huge page.\n\nThis patch makes sure the inner function can distinguish between batch\ncharging and a single huge page charge.  It will only signal another\nattempt if batch charging failed, and go into regular reclaim when it is\ncalled on behalf of a huge page.\n\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nReviewed-by: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\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": "552b372ba9db85751e7db2998f07cca2e51f5865",
      "tree": "9d3aed4ed1959aeedc05be5436910ced5afc6928",
      "parents": [
        "fceda1bf498677501befc7da72fd2e4de7f18466"
      ],
      "author": {
        "name": "Michal Hocko",
        "email": "mhocko@suse.cz",
        "time": "Tue Feb 01 15:52:31 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Feb 02 16:03:18 2011 -0800"
      },
      "message": "memsw: deprecate noswapaccount kernel parameter and schedule it for removal\n\nnoswapaccount couldn\u0027t be used to control memsw for both on/off cases so\nwe have added swapaccount[\u003d0|1] parameter.  This way we can turn the\nfeature in two ways noswapaccount resp.  swapaccount\u003d0.  We have kept the\noriginal noswapaccount but I think we should remove it after some time as\nit just makes more command line parameters without any advantages and also\nthe code to handle parameters is uglier if we want both parameters.\n\nSigned-off-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nRequested-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.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": "fceda1bf498677501befc7da72fd2e4de7f18466",
      "tree": "c23057e5368fc00b0f1c662ea9bd4b3b123c370c",
      "parents": [
        "afe8a887550f7cc24eb16449670b93f6b43c32d8"
      ],
      "author": {
        "name": "Michal Hocko",
        "email": "mhocko@suse.cz",
        "time": "Tue Feb 01 15:52:30 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Feb 02 16:03:18 2011 -0800"
      },
      "message": "memsw: handle swapaccount kernel parameter correctly\n\n__setup based kernel command line parameters handlers which are handled in\nobsolete_checksetup are provided with the parameter value including \u003d\n(more precisely everything right after the parameter name).\n\nThis means that the current implementation of swapaccount[\u003d1|0] doesn\u0027t\nwork at all because if there is a value for the parameter then we are\ntesting for \"0\" resp.  \"1\" but we are getting \"\u003d0\" resp.  \"\u003d1\" and if\nthere is no parameter value we are getting an empty string rather than\nNULL.\n\nThe original noswapccount parameter, which doesn\u0027t care about the value,\nworks correctly.\n\nSigned-off-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\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": "52dbb9050936fd33ceb45f10529dbc992507c058",
      "tree": "1c3663f50b7dec0bd852b02d76095b9a5618d7b7",
      "parents": [
        "3d37c4a9199920964ffdfaec6335d93b9dcf9ca5"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Tue Jan 25 15:07:29 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Jan 26 10:50:04 2011 +1000"
      },
      "message": "memcg: fix race at move_parent around compound_order()\n\nA fix up mem_cgroup_move_parent() which use compound_order() in\nasynchronous manner.  This compound_order() may return unknown value\nbecause we don\u0027t take lock.  Use PageTransHuge() and HPAGE_SIZE instead\nof it.\n\nAlso clean up for mem_cgroup_move_parent().\n - remove unnecessary initialization of local variable.\n - rename charge_size -\u003e page_size\n - remove unnecessary (wrong) comment.\n - added a comment about THP.\n\nNote:\n Current design take compound_page_lock() in caller of move_account().\n This should be revisited when we implement direct move_task of hugepage\n without splitting.\n\n[akpm@linux-foundation.org: coding-style fixes]\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nReviewed-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbalbir@in.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "3d37c4a9199920964ffdfaec6335d93b9dcf9ca5",
      "tree": "ee37989687d869817aa870a7fb4c405b7907c030",
      "parents": [
        "01c88e2d6b7330c0cc5867fe2297e7d826e1337d"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Tue Jan 25 15:07:28 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Jan 26 10:50:03 2011 +1000"
      },
      "message": "memcg: bugfix check mem_cgroup_disabled() at split fixup\n\nmem_cgroup_disabled() should be checked at splitting.  If disabled, no\nheavy work is necesary.\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nReviewed-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Balbir Singh \u003cbalbir@in.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "01c88e2d6b7330c0cc5867fe2297e7d826e1337d",
      "tree": "0a905aa1558af7fd401d768ead121e2b11a4a2f4",
      "parents": [
        "28bd65781c848d95ba6a7f58b5c4b8265a804ec6"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Tue Jan 25 15:07:27 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Jan 26 10:50:03 2011 +1000"
      },
      "message": "memcg: fix account leak at failure of memsw acconting\n\nCommit 4b53433468 (\"memcg: clean up try_charge main loop\") removes a\ncancel of charge at case: memory charge-\u003e success.  mem+swap charge-\u003e\nfailure.\n\nThis leaks usage of memory.  Fix it.\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nReviewed-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbalbir@in.ibm.com\u003e\nCc: \u003cstable@kernel.org\u003e\t[2.6.36+]\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "8dba474f034c322d96ada39cb20cac711d80dcb2",
      "tree": "ef007c5c3088b2ef83be074a7720892b6b8e5e4b",
      "parents": [
        "2ff754fa8f416e82327f2d8f1354a033b66286df"
      ],
      "author": {
        "name": "Jesper Juhl",
        "email": "jj@chaosbits.net",
        "time": "Tue Jan 25 15:07:24 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Jan 26 10:50:01 2011 +1000"
      },
      "message": "mm/memcontrol.c: fix uninitialized variable use in mem_cgroup_move_parent()\n\nIn mm/memcontrol.c::mem_cgroup_move_parent() there\u0027s a path that jumps\nto the \u0027put_back\u0027 label\n\n  \tret \u003d __mem_cgroup_try_charge(NULL, gfp_mask, \u0026parent, false, charge);\n  \tif (ret || !parent)\n  \t\tgoto put_back;\n\nwhere we\u0027ll\n\n  \tif (charge \u003e PAGE_SIZE)\n  \t\tcompound_unlock_irqrestore(page, flags);\n\nbut, we have not assigned anything to \u0027flags\u0027 at this point, nor have we\ncalled \u0027compound_lock_irqsave()\u0027 (which is what sets \u0027flags\u0027).  The\n\u0027put_back\u0027 label should be moved below the call to\ncompound_unlock_irqrestore() as per this patch.\n\nSigned-off-by: Jesper Juhl \u003cjj@chaosbits.net\u003e\nCc: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Pavel Emelianov \u003cxemul@openvz.org\u003e\nCc: \"Kirill A. Shutemov\" \u003ckirill@shutemov.name\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "713735b4233fad3ae35b5cad656baa41413887ca",
      "tree": "bba0310f23fb911106e04d75eebe1c6ee7e8d423",
      "parents": [
        "2550326ac7a062fdfc204f9a3b98bdb9179638fc"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Thu Jan 20 14:44:31 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 20 17:02:06 2011 -0800"
      },
      "message": "memcg: correctly order reading PCG_USED and pc-\u003emem_cgroup\n\nThe placement of the read-side barrier is confused: the writer first\nsets pc-\u003emem_cgroup, then PCG_USED.  The read-side barrier has to be\nbetween testing PCG_USED and reading pc-\u003emem_cgroup.\n\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "987eba66e0e6aa654d60881a14731a353ee0acb4",
      "tree": "04138f68481ccd3e8f9447037c3737c568fa3330",
      "parents": [
        "ece35ca810326946ddc930c43356312ad5de44d4"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Thu Jan 20 14:44:25 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 20 17:02:06 2011 -0800"
      },
      "message": "memcg: fix rmdir, force_empty with THP\n\nNow, when THP is enabled, memcg\u0027s rmdir() function is broken because\nmove_account() for THP page is not supported.\n\nThis will cause account leak or -EBUSY issue at rmdir().\nThis patch fixes the issue by supporting move_account() THP pages.\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 \u003cbalbir@linux.vnet.ibm.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "ece35ca810326946ddc930c43356312ad5de44d4",
      "tree": "7e9138fbd0da696f695b45dddd8baa587bd284a4",
      "parents": [
        "ca3e021417eed30ec2b64ce88eb0acf64aa9bc29"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Thu Jan 20 14:44:24 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 20 17:02:06 2011 -0800"
      },
      "message": "memcg: fix LRU accounting with THP\n\nmemory cgroup\u0027s LRU stat should take care of size of pages because\nTransparent Hugepage inserts hugepage into LRU.  If this value is the\nnumber wrong, memory reclaim will not work well.\n\nNote: only head page of THP\u0027s huge page is linked into LRU.\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 \u003cbalbir@linux.vnet.ibm.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "ca3e021417eed30ec2b64ce88eb0acf64aa9bc29",
      "tree": "710590e51764d56c12d00744c402ab15c0d14a6b",
      "parents": [
        "e401f1761c0b01966e36e41e2c385d455a7b44ee"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Thu Jan 20 14:44:24 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 20 17:02:06 2011 -0800"
      },
      "message": "memcg: fix USED bit handling at uncharge in THP\n\nNow, under THP:\n\nat charge:\n  - PageCgroupUsed bit is set to all page_cgroup on a hugepage.\n    ....set to 512 pages.\nat uncharge\n  - PageCgroupUsed bit is unset on the head page.\n\nSo, some pages will remain with \"Used\" bit.\n\nThis patch fixes that Used bit is set only to the head page.\nUsed bits for tail pages will be set at splitting if necessary.\n\nThis patch adds this lock order:\n   compound_lock() -\u003e page_cgroup_move_lock().\n\n[akpm@linux-foundation.org: fix warning]\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "e401f1761c0b01966e36e41e2c385d455a7b44ee",
      "tree": "3b1ac772f0708ba0b1c963663ce6d0d0f79884b6",
      "parents": [
        "20d9600cb407b0b55fef6ee814b60345c6f58264"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Thu Jan 20 14:44:23 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 20 17:02:05 2011 -0800"
      },
      "message": "memcg: modify accounting function for supporting THP better\n\nmem_cgroup_charge_statisics() was designed for charging a page but now, we\nhave transparent hugepage.  To fix problems (in following patch) it\u0027s\nrequired to change the function to get the number of pages as its\narguments.\n\nThe new function gets following as argument.\n  - type of page rather than \u0027pc\u0027\n  - size of page which is accounted.\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 \u003cbalbir@linux.vnet.ibm.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "50de1dd967d4ba3b8a90ebe7a4f5feca24191317",
      "tree": "ed2aa4352ae3c2887a90ef6279588a7048397d1b",
      "parents": [
        "17295c88a160c6eea3fcf46cec9d08a0fcb02db9"
      ],
      "author": {
        "name": "Daisuke Nishimura",
        "email": "nishimura@mxp.nes.nec.co.jp",
        "time": "Thu Jan 13 15:47:43 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 17:32:51 2011 -0800"
      },
      "message": "memcg: fix memory migration of shmem swapcache\n\nIn the current implementation mem_cgroup_end_migration() decides whether\nthe page migration has succeeded or not by checking \"oldpage-\u003emapping\".\n\nBut if we are tring to migrate a shmem swapcache, the page-\u003emapping of it\nis NULL from the begining, so the check would be invalid.  As a result,\nmem_cgroup_end_migration() assumes the migration has succeeded even if\nit\u0027s not, so \"newpage\" would be freed while it\u0027s not uncharged.\n\nThis patch fixes it by passing mem_cgroup_end_migration() the result of\nthe page migration.\n\nSigned-off-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nReviewed-by: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nReviewed-by: Johannes Weiner \u003channes@cmpxchg.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": "17295c88a160c6eea3fcf46cec9d08a0fcb02db9",
      "tree": "35fe45824b5ddd6d406d2d7d7562438a4725e57e",
      "parents": [
        "dfe076b0971a783469bc2066e85d46e23c8acb1c"
      ],
      "author": {
        "name": "Jesper Juhl",
        "email": "jj@chaosbits.net",
        "time": "Thu Jan 13 15:47:42 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 17:32:51 2011 -0800"
      },
      "message": "memcg: use [kv]zalloc[_node] rather than [kv]malloc+memset\n\nIn mem_cgroup_alloc() we currently do either kmalloc() or vmalloc() then\nfollowed by memset() to zero the memory.  This can be more efficiently\nachieved by using kzalloc() and vzalloc().  There\u0027s also one situation\nwhere we can use kzalloc_node() - this is what\u0027s new in this version of\nthe patch.\n\nSigned-off-by: Jesper Juhl \u003cjj@chaosbits.net\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nCc: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nCc: Li Zefan \u003clizf@cn.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": "dfe076b0971a783469bc2066e85d46e23c8acb1c",
      "tree": "ee0856c119ed898212da2555f936fb3284c5ff59",
      "parents": [
        "043d18b1e5bdfc4870b8a19d00f0d5c636a5c231"
      ],
      "author": {
        "name": "Daisuke Nishimura",
        "email": "nishimura@mxp.nes.nec.co.jp",
        "time": "Thu Jan 13 15:47:41 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 17:32:51 2011 -0800"
      },
      "message": "memcg: fix deadlock between cpuset and memcg\n\nCommit b1dd693e (\"memcg: avoid deadlock between move charge and\ntry_charge()\") can cause another deadlock about mmap_sem on task migration\nif cpuset and memcg are mounted onto the same mount point.\n\nAfter the commit, cgroup_attach_task() has sequence like:\n\ncgroup_attach_task()\n  ss-\u003ecan_attach()\n    cpuset_can_attach()\n    mem_cgroup_can_attach()\n      down_read(\u0026mmap_sem)        (1)\n  ss-\u003eattach()\n    cpuset_attach()\n      mpol_rebind_mm()\n        down_write(\u0026mmap_sem)     (2)\n        up_write(\u0026mmap_sem)\n      cpuset_migrate_mm()\n        do_migrate_pages()\n          down_read(\u0026mmap_sem)\n          up_read(\u0026mmap_sem)\n    mem_cgroup_move_task()\n      mem_cgroup_clear_mc()\n        up_read(\u0026mmap_sem)\n\nWe can cause deadlock at (2) because we\u0027ve already aquire the mmap_sem at (1).\n\nBut the commit itself is necessary to fix deadlocks which have existed\nbefore the commit like:\n\nEx.1)\n                move charge             |        try charge\n  --------------------------------------+------------------------------\n    mem_cgroup_can_attach()             |  down_write(\u0026mmap_sem)\n      mc.moving_task \u003d current          |    ..\n      mem_cgroup_precharge_mc()         |  __mem_cgroup_try_charge()\n        mem_cgroup_count_precharge()    |    prepare_to_wait()\n          down_read(\u0026mmap_sem)          |    if (mc.moving_task)\n          -\u003e cannot aquire the lock     |    -\u003e true\n                                        |      schedule()\n                                        |      -\u003e move charge should wake it up\n\nEx.2)\n                move charge             |        try charge\n  --------------------------------------+------------------------------\n    mem_cgroup_can_attach()             |\n      mc.moving_task \u003d current          |\n      mem_cgroup_precharge_mc()         |\n        mem_cgroup_count_precharge()    |\n          down_read(\u0026mmap_sem)          |\n          ..                            |\n          up_read(\u0026mmap_sem)            |\n                                        |  down_write(\u0026mmap_sem)\n    mem_cgroup_move_task()              |    ..\n      mem_cgroup_move_charge()          |  __mem_cgroup_try_charge()\n        down_read(\u0026mmap_sem)            |    prepare_to_wait()\n        -\u003e cannot aquire the lock       |    if (mc.moving_task)\n                                        |    -\u003e true\n                                        |      schedule()\n                                        |      -\u003e move charge should wake it up\n\nThis patch fixes all of these problems by:\n1. revert the commit.\n2. To fix the Ex.1, we set mc.moving_task after mem_cgroup_count_precharge()\n   has released the mmap_sem.\n3. To fix the Ex.2, we use down_read_trylock() instead of down_read() in\n   mem_cgroup_move_charge() and, if it has failed to aquire the lock, cancel\n   all extra charges, wake up all waiters, and retry trylock.\n\nSigned-off-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nReported-by: Ben Blum \u003cbblum@andrew.cmu.edu\u003e\nCc: Miao Xie \u003cmiaox@cn.fujitsu.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: Paul Menage \u003cmenage@google.com\u003e\nCc: Hiroyuki Kamezawa \u003ckamezawa.hiroyuki@gmail.com\u003e\nCc: Balbir Singh \u003cbalbir@in.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "043d18b1e5bdfc4870b8a19d00f0d5c636a5c231",
      "tree": "c2392e1fb2c1f7b23446ae4c59aa2d35134ab3d3",
      "parents": [
        "f3e8eb70b1807d1b30aa6972af0cf30077c40112"
      ],
      "author": {
        "name": "Minchan Kim",
        "email": "minchan.kim@gmail.com",
        "time": "Thu Jan 13 15:47:40 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 17:32:50 2011 -0800"
      },
      "message": "memcg: remove unnecessary return from void-returning mem_cgroup_del_lru_list()\n\nSigned-off-by: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nAcked-by: Balbir Singh \u003cbalbir@linux.vnet.ibm.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": "f3e8eb70b1807d1b30aa6972af0cf30077c40112",
      "tree": "5b541e4850fa6a9922b288e9efd7c632021657f6",
      "parents": [
        "dbd4ea78f002df283c95d9774837041735fa1bf9"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Thu Jan 13 15:47:39 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 17:32:50 2011 -0800"
      },
      "message": "memcg: fix unit mismatch in memcg oom limit calculation\n\nAdding the number of swap pages to the byte limit of a memory control\ngroup makes no sense.  Convert the pages to bytes before adding them.\n\nThe only user of this code is the OOM killer, and the way it is used means\nthat the error results in a higher OOM badness value.  Since the cgroup\nlimit is the same for all tasks in the cgroup, the error should have no\npractical impact at the moment.\n\nBut let\u0027s not wait for future or changing users to trip over it.\n\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Greg Thelen \u003cgthelen@google.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Balbir Singh \u003cbalbir@in.ibm.com\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": "dbd4ea78f002df283c95d9774837041735fa1bf9",
      "tree": "e709c6c5c026b1c230bb87ddcfe8415aaf255820",
      "parents": [
        "2a7106f2cb0768d00fe8c1eb42a754a7d8518f08"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Thu Jan 13 15:47:38 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 17:32:50 2011 -0800"
      },
      "message": "memcg: add lock to synchronize page accounting and migration\n\nIntroduce a new bit spin lock, PCG_MOVE_LOCK, to synchronize the page\naccounting and migration code.  This reworks the locking scheme of\n_update_stat() and _move_account() by adding new lock bit PCG_MOVE_LOCK,\nwhich is always taken under IRQ disable.\n\n1. If pages are being migrated from a memcg, then updates to that\n   memcg page statistics are protected by grabbing PCG_MOVE_LOCK using\n   move_lock_page_cgroup().  In an upcoming commit, memcg dirty page\n   accounting will be updating memcg page accounting (specifically: num\n   writeback pages) from IRQ context (softirq).  Avoid a deadlocking\n   nested spin lock attempt by disabling irq on the local processor when\n   grabbing the PCG_MOVE_LOCK.\n\n2. lock for update_page_stat is used only for avoiding race with\n   move_account().  So, IRQ awareness of lock_page_cgroup() itself is not\n   a problem.  The problem is between mem_cgroup_update_page_stat() and\n   mem_cgroup_move_account_page().\n\nTrade-off:\n  * Changing lock_page_cgroup() to always disable IRQ (or\n    local_bh) has some impacts on performance and I think\n    it\u0027s bad to disable IRQ when it\u0027s not necessary.\n  * adding a new lock makes move_account() slower.  Score is\n    here.\n\nPerformance Impact: moving a 8G anon process.\n\nBefore:\n\treal    0m0.792s\n\tuser    0m0.000s\n\tsys     0m0.780s\n\nAfter:\n\treal    0m0.854s\n\tuser    0m0.000s\n\tsys     0m0.842s\n\nThis score is bad but planned patches for optimization can reduce\nthis impact.\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nSigned-off-by: Greg Thelen \u003cgthelen@google.com\u003e\nReviewed-by: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nAcked-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Andrea Righi \u003carighi@develer.com\u003e\nCc: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nCc: Wu Fengguang \u003cfengguang.wu@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": "2a7106f2cb0768d00fe8c1eb42a754a7d8518f08",
      "tree": "730bef06e752c1edcb2d475fd193f94bea00bf6a",
      "parents": [
        "ece72400c2a27a3d726cb0854449f991d9fcd2da"
      ],
      "author": {
        "name": "Greg Thelen",
        "email": "gthelen@google.com",
        "time": "Thu Jan 13 15:47:37 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 17:32:50 2011 -0800"
      },
      "message": "memcg: create extensible page stat update routines\n\nReplace usage of the mem_cgroup_update_file_mapped() memcg\nstatistic update routine with two new routines:\n* mem_cgroup_inc_page_stat()\n* mem_cgroup_dec_page_stat()\n\nAs before, only the file_mapped statistic is managed.  However, these more\ngeneral interfaces allow for new statistics to be more easily added.  New\nstatistics are added with memcg dirty page accounting.\n\nSigned-off-by: Greg Thelen \u003cgthelen@google.com\u003e\nSigned-off-by: Andrea Righi \u003carighi@develer.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: Wu Fengguang \u003cfengguang.wu@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": "37c2ac7872a9387542616f658d20ac25f5bdb32e",
      "tree": "d115915db4a61e261012bf0f9c4cf14630243d71",
      "parents": [
        "91600e9e592e48736e630851c83da2ad6bf0e91f"
      ],
      "author": {
        "name": "Andrea Arcangeli",
        "email": "aarcange@redhat.com",
        "time": "Thu Jan 13 15:47:16 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 17:32:47 2011 -0800"
      },
      "message": "thp: compound_trans_order\n\nRead compound_trans_order safe. Noop for CONFIG_TRANSPARENT_HUGEPAGE\u003dn.\n\nSigned-off-by: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\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": "2c888cfbc1b45508a44763d85ba2e8ac43faff5f",
      "tree": "9a7f2214e5d6a01d5724ae63d4d50cddeb2293ff",
      "parents": [
        "97562cd243298acf573620c764a1037bd545c9bc"
      ],
      "author": {
        "name": "Rik van Riel",
        "email": "riel@redhat.com",
        "time": "Thu Jan 13 15:47:13 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 17:32:46 2011 -0800"
      },
      "message": "thp: fix anon memory statistics with transparent hugepages\n\nCount each transparent hugepage as HPAGE_PMD_NR pages in the LRU\nstatistics, so the Active(anon) and Inactive(anon) statistics in\n/proc/meminfo are correct.\n\nSigned-off-by: Rik van Riel \u003criel@redhat.com\u003e\nSigned-off-by: Andrea Arcangeli \u003caarcange@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": "152c9ccb75548c027fa3103efa4fa4e19a345449",
      "tree": "d22e8f71b3e0689fc0e3ae21609ae1abe5bc4d2f",
      "parents": [
        "ec1685109f1314a30919489ef2800ed626a38c1e"
      ],
      "author": {
        "name": "Daisuke Nishimura",
        "email": "nishimura@mxp.nes.nec.co.jp",
        "time": "Thu Jan 13 15:46:56 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 17:32:43 2011 -0800"
      },
      "message": "thp: transhuge-memcg: commit tail pages at charge\n\nBy this patch, when a transparent hugepage is charged, not only the head\npage but also all the tail pages are committed, IOW pc-\u003emem_cgroup and\npc-\u003eflags of tail pages are set.\n\nWithout this patch:\n\n- Tail pages are not linked to any memcg\u0027s LRU at splitting. This causes many\n  problems, for example, the charged memcg\u0027s directory can never be rmdir\u0027ed\n  because it doesn\u0027t have enough pages to scan to make the usage decrease to 0.\n- \"rss\" field in memory.stat would be incorrect. Moreover, usage_in_bytes in\n  root cgroup is calculated by the stat not by res_counter(since 2.6.32),\n  it would be incorrect too.\n\nSigned-off-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nSigned-off-by: Andrea Arcangeli \u003caarcange@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": "ec1685109f1314a30919489ef2800ed626a38c1e",
      "tree": "48ac32238182623af24b6c25be456c0ca432047b",
      "parents": [
        "500d65d471018d9a13b0d51b7e141ed2a3555c1d"
      ],
      "author": {
        "name": "Andrea Arcangeli",
        "email": "aarcange@redhat.com",
        "time": "Thu Jan 13 15:46:56 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 17:32:43 2011 -0800"
      },
      "message": "thp: memcg compound\n\nTeach memcg to charge/uncharge compound pages.\n\nSigned-off-by: Andrea Arcangeli \u003caarcange@redhat.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": "ebb76ce16daf6908dc030dec1c00827d37129fe5",
      "tree": "28abdc67466bb5d8d4566e36c914518b0533b4bf",
      "parents": [
        "b83be6f20a0e468f715b14225c9f897538dfe5ad"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Wed Dec 29 14:07:11 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Dec 30 10:07:06 2010 -0800"
      },
      "message": "memcg: fix wrong VM_BUG_ON() in try_charge()\u0027s mm-\u003eowner check\n\nAt __mem_cgroup_try_charge(), VM_BUG_ON(!mm-\u003eowner) is checked.\nBut as commented in mem_cgroup_from_task(), mm-\u003eowner can be NULL\nin some racy case. This check of VM_BUG_ON() is bad.\n\nA possible story to hit this is at swapoff()-\u003etry_to_unuse(). It passes\nmm_struct to mem_cgroup_try_charge_swapin() while mm-\u003eowner is NULL. If we\ncan\u0027t get proper mem_cgroup from swap_cgroup information, mm-\u003eowner is used\nas charge target and we see NULL.\n\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nReported-by: Hugh Dickins \u003chughd@google.com\u003e\nReported-by: Thomas Meyer \u003cthomas@m3y3r.de\u003e\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nReviewed-by: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nCc: stable@kernel.org\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "a42c390cfa0c2612459d7226ba11612847ca3a64",
      "tree": "1dc06659b4f232461eb6852b8c4d17f8305aca91",
      "parents": [
        "b1dd693e5b9348bd68a80e679e03cf9c0973b01b"
      ],
      "author": {
        "name": "Michal Hocko",
        "email": "mhocko@suse.cz",
        "time": "Wed Nov 24 12:57:08 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Nov 25 06:50:45 2010 +0900"
      },
      "message": "cgroups: make swap accounting default behavior configurable\n\nSwap accounting can be configured by CONFIG_CGROUP_MEM_RES_CTLR_SWAP\nconfiguration option and then it is turned on by default.  There is a boot\noption (noswapaccount) which can disable this feature.\n\nThis makes it hard for distributors to enable the configuration option as\nthis feature leads to a bigger memory consumption and this is a no-go for\ngeneral purpose distribution kernel.  On the other hand swap accounting\nmay be very usuful for some workloads.\n\nThis patch adds a new configuration option which controls the default\nbehavior (CGROUP_MEM_RES_CTLR_SWAP_ENABLED).  If the option is selected\nthen the feature is turned on by default.\n\nIt also adds a new boot parameter swapaccount[\u003d1|0] which enhances the\noriginal noswapaccount parameter semantic by means of enable/disable logic\n(defaults to 1 if no value is provided to be still consistent with\nnoswapaccount).\n\nThe default behavior is unchanged (if CONFIG_CGROUP_MEM_RES_CTLR_SWAP is\nenabled then CONFIG_CGROUP_MEM_RES_CTLR_SWAP_ENABLED is enabled as well)\n\nSigned-off-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nAcked-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbalbir@linux.vnet.ibm.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": "b1dd693e5b9348bd68a80e679e03cf9c0973b01b",
      "tree": "557c8e0634fba47ea61ed9fbb8742d907c567944",
      "parents": [
        "11e7946f196e5fdde20584e3e58c60335ee3b3bc"
      ],
      "author": {
        "name": "Daisuke Nishimura",
        "email": "nishimura@mxp.nes.nec.co.jp",
        "time": "Wed Nov 24 12:57:06 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Nov 25 06:50:44 2010 +0900"
      },
      "message": "memcg: avoid deadlock between move charge and try_charge()\n\n__mem_cgroup_try_charge() can be called under down_write(\u0026mmap_sem)(e.g.\nmlock does it). This means it can cause deadlock if it races with move charge:\n\nEx.1)\n                move charge             |        try charge\n  --------------------------------------+------------------------------\n    mem_cgroup_can_attach()             |  down_write(\u0026mmap_sem)\n      mc.moving_task \u003d current          |    ..\n      mem_cgroup_precharge_mc()         |  __mem_cgroup_try_charge()\n        mem_cgroup_count_precharge()    |    prepare_to_wait()\n          down_read(\u0026mmap_sem)          |    if (mc.moving_task)\n          -\u003e cannot aquire the lock     |    -\u003e true\n                                        |      schedule()\n\nEx.2)\n                move charge             |        try charge\n  --------------------------------------+------------------------------\n    mem_cgroup_can_attach()             |\n      mc.moving_task \u003d current          |\n      mem_cgroup_precharge_mc()         |\n        mem_cgroup_count_precharge()    |\n          down_read(\u0026mmap_sem)          |\n          ..                            |\n          up_read(\u0026mmap_sem)            |\n                                        |  down_write(\u0026mmap_sem)\n    mem_cgroup_move_task()              |    ..\n      mem_cgroup_move_charge()          |  __mem_cgroup_try_charge()\n        down_read(\u0026mmap_sem)            |    prepare_to_wait()\n        -\u003e cannot aquire the lock       |    if (mc.moving_task)\n                                        |    -\u003e true\n                                        |      schedule()\n\nTo avoid this deadlock, we do all the move charge works (both can_attach() and\nattach()) under one mmap_sem section.\nAnd after this patch, we set/clear mc.moving_task outside mc.lock, because we\nuse the lock only to check mc.from/to.\n\nSigned-off-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.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": "112bc2e120a94a511858918d6866a4978f9c500e",
      "tree": "032f59b4eca42074de6a30e0d4c13426cbbf86c8",
      "parents": [
        "69e83dad5207f8f03c9699e57e1febb114383cb8"
      ],
      "author": {
        "name": "Kirill A. Shutemov",
        "email": "kirill@shutemov.name",
        "time": "Wed Nov 24 12:56:58 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Nov 25 06:50:40 2010 +0900"
      },
      "message": "memcg: fix false positive VM_BUG on non-SMP\n\nFix this:\n\n  kernel BUG at mm/memcontrol.c:2155!\n  invalid opcode: 0000 [#1]\n  last sysfs file:\n\n  Pid: 18, comm: sh Not tainted 2.6.37-rc3 #3 /Bochs\n  EIP: 0060:[\u003cc10731b2\u003e] EFLAGS: 00000246 CPU: 0\n  EIP is at mem_cgroup_move_account+0xe2/0xf0\n  EAX: 00000004 EBX: c6f931d4 ECX: c681c300 EDX: c681c000\n  ESI: c681c300 EDI: ffffffea EBP: c681c000 ESP: c46f3e30\n   DS: 007b ES: 007b FS: 0000 GS: 0033 SS: 0068\n  Process sh (pid: 18, ti\u003dc46f2000 task\u003dc6826e60 task.ti\u003dc46f2000)\n  Stack:\n   00000155 c681c000 0805f000 c46ee180 c46f3e5c c7058820 c1074d37 00000000\n   08060000 c46db9a0 c46ec080 c7058820 0805f000 08060000 c46f3e98 c1074c50\n   c106c75e c46f3e98 c46ec080 08060000 0805ffff c46db9a0 c46f3e98 c46e0340\n  Call Trace:\n   [\u003cc1074d37\u003e] ? mem_cgroup_move_charge_pte_range+0xe7/0x130\n   [\u003cc1074c50\u003e] ? mem_cgroup_move_charge_pte_range+0x0/0x130\n   [\u003cc106c75e\u003e] ? walk_page_range+0xee/0x1d0\n   [\u003cc10725d6\u003e] ? mem_cgroup_move_task+0x66/0x90\n   [\u003cc1074c50\u003e] ? mem_cgroup_move_charge_pte_range+0x0/0x130\n   [\u003cc1072570\u003e] ? mem_cgroup_move_task+0x0/0x90\n   [\u003cc1042616\u003e] ? cgroup_attach_task+0x136/0x200\n   [\u003cc1042878\u003e] ? cgroup_tasks_write+0x48/0xc0\n   [\u003cc1041e9e\u003e] ? cgroup_file_write+0xde/0x220\n   [\u003cc101398d\u003e] ? do_page_fault+0x17d/0x3f0\n   [\u003cc108a79d\u003e] ? alloc_fd+0x2d/0xd0\n   [\u003cc1041dc0\u003e] ? cgroup_file_write+0x0/0x220\n   [\u003cc1077ba2\u003e] ? vfs_write+0x92/0xc0\n   [\u003cc1077c81\u003e] ? sys_write+0x41/0x70\n   [\u003cc1140e3d\u003e] ? syscall_call+0x7/0xb\n  Code: 03 00 74 09 8b 44 24 04 e8 1c f1 ff ff 89 73 04 8d 86 b0 00 00 00 b9 01 00 00 00 89 da 31 ff e8 65 f5 ff ff e9 4d ff ff ff 0f 0b \u003c0f\u003e 0b 0f 0b 0f 0b 90 8d b4 26 00 00 00 00 83 ec 10 8b 0d f4 e3\n  EIP: [\u003cc10731b2\u003e] mem_cgroup_move_account+0xe2/0xf0 SS:ESP 0068:c46f3e30\n  ---[ end trace 7daa1582159b6532 ]---\n\nlock_page_cgroup and unlock_page_cgroup are implemented using\nbit_spinlock.  bit_spinlock doesn\u0027t touch the bit if we are on non-SMP\nmachine, so we can\u0027t use the bit to check whether the lock was taken.\n\nLet\u0027s introduce is_page_cgroup_locked based on bit_spin_is_locked instead\nof PageCgroupLocked to fix it.\n\n[akpm@linux-foundation.org: s/is_page_cgroup_locked/page_is_cgroup_locked/]\nSigned-off-by: Kirill A. Shutemov \u003ckirill@shutemov.name\u003e\nReviewed-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujtisu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "d2e61b8dc99fdb36e0fd176e25365f69afda4ff9",
      "tree": "580325e7a44fc02d985bca17a1d7601e6ed81cb9",
      "parents": [
        "1093736b3c34319b8f1825a4423414d9cf397d73"
      ],
      "author": {
        "name": "Dan Carpenter",
        "email": "error27@gmail.com",
        "time": "Thu Nov 11 14:05:12 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Nov 12 07:55:31 2010 -0800"
      },
      "message": "memcg: null dereference on allocation failure\n\nThe original code had a null dereference if alloc_percpu() failed.  This\nwas introduced in commit 711d3d2c9bc3 (\"memcg: cpu hotplug aware percpu\ncount updates\")\n\nSigned-off-by: Dan Carpenter \u003cerror27@gmail.com\u003e\nReviewed-by: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: 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": "26174efd42100eefac67732c0c12f41a205fa335",
      "tree": "81a7d758a3fcfd755e9e94ee7f66854133c281cf",
      "parents": [
        "1489ebad8b5b20300562f634f279cb9c435fd90b"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Wed Oct 27 15:33:43 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Oct 27 18:03:10 2010 -0700"
      },
      "message": "memcg: generic filestat update interface\n\nThis patch extracts the core logic from mem_cgroup_update_file_mapped() as\nmem_cgroup_update_file_stat() and adds a wrapper.\n\nAs a planned future update, memory cgroup has to count dirty pages to\nimplement dirty_ratio/limit.  And more, the number of dirty pages is\nrequired to kick flusher thread to start writeback.  (Now, no kick.)\n\nThis patch is preparation for it and makes other statistics implementation\nclearer.  Just a clean up.\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nReviewed-by: Greg Thelen \u003cgthelen@google.com\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"
    }
  ],
  "next": "1489ebad8b5b20300562f634f279cb9c435fd90b"
}
