)]}'
{
  "log": [
    {
      "commit": "4d7b4ac22fbec1a03206c6cde353f2fd6942f828",
      "tree": "2d96a9e9c28cf6fa628a278decc00ad55a8b043b",
      "parents": [
        "3aaf51ace5975050ab43c7d4d7e439e0ae7d13d7",
        "94f3ca95787ada3d64339a4ecb2754236ab563f6"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue May 18 08:19:03 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue May 18 08:19:03 2010 -0700"
      },
      "message": "Merge branch \u0027perf-core-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip\n\n* \u0027perf-core-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip: (311 commits)\n  perf tools: Add mode to build without newt support\n  perf symbols: symbol inconsistency message should be done only at verbose\u003d1\n  perf tui: Add explicit -lslang option\n  perf options: Type check all the remaining OPT_ variants\n  perf options: Type check OPT_BOOLEAN and fix the offenders\n  perf options: Check v type in OPT_U?INTEGER\n  perf options: Introduce OPT_UINTEGER\n  perf tui: Add workaround for slang \u003c 2.1.4\n  perf record: Fix bug mismatch with -c option definition\n  perf options: Introduce OPT_U64\n  perf tui: Add help window to show key associations\n  perf tui: Make \u003c- exit menus too\n  perf newt: Add single key shortcuts for zoom into DSO and threads\n  perf newt: Exit browser unconditionally when CTRL+C, q or Q is pressed\n  perf newt: Fix the \u0027A\u0027/\u0027a\u0027 shortcut for annotate\n  perf newt: Make \u003c- exit the ui_browser\n  x86, perf: P4 PMU - fix counters management logic\n  perf newt: Make \u003c- zoom out filters\n  perf report: Report number of events, not samples\n  perf hist: Clarify events_stats fields usage\n  ...\n\nFix up trivial conflicts in kernel/fork.c and tools/perf/builtin-record.c\n"
    },
    {
      "commit": "747388d78a0ae768fd82b55c4ed38aa646a72364",
      "tree": "03efabf9761209cffef4e8da9b6989887f76428e",
      "parents": [
        "7f0f15464185a92f9d8791ad231bcd7bf6df54e4"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Tue May 11 14:06:59 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue May 11 17:33:42 2010 -0700"
      },
      "message": "memcg: fix css_is_ancestor() RCU locking\n\nSome callers (in memcontrol.c) calls css_is_ancestor() without\nrcu_read_lock.  Because css_is_ancestor() has to access RCU protected\ndata, it should be under rcu_read_lock().\n\nThis makes css_is_ancestor() itself does safe access to RCU protected\narea.  (At least, \"root\" can have refcnt\u003d\u003d0 if it\u0027s not an ancestor of\n\"child\".  So, we need rcu_read_lock().)\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: \"Paul E. McKenney\" \u003cpaulmck@linux.vnet.ibm.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": "7f0f15464185a92f9d8791ad231bcd7bf6df54e4",
      "tree": "a1d4f4c39632659497963b0ccf62828237478d72",
      "parents": [
        "11cad320a4f4bc53d3585c85600c782faa12b99e"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Tue May 11 14:06:58 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue May 11 17:33:42 2010 -0700"
      },
      "message": "memcg: fix css_id() RCU locking for real\n\nCommit ad4ba375373937817404fd92239ef4cadbded23b (\"memcg: css_id() must be\ncalled under rcu_read_lock()\") modifies memcontol.c for fixing RCU check\nmessage.  But Andrew Morton pointed out that the fix doesn\u0027t seems sane\nand it was just for hidining lockdep messages.\n\nThis is a patch for do proper things.  Checking again, all places,\naccessing without rcu_read_lock, that commit fixies was intentional....\nall callers of css_id() has reference count on it.  So, it\u0027s not necessary\nto be under rcu_read_lock().\n\nConsidering again, we can use rcu_dereference_check for css_id().  We know\ncss-\u003eid is valid if css-\u003erefcnt \u003e 0.  (css-\u003eid never changes and freed\nafter css-\u003erefcnt going to be 0.)\n\nThis patch makes use of rcu_dereference_check() in css_id/depth and remove\nunnecessary rcu-read-lock added by the commit.\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: \"Paul E. McKenney\" \u003cpaulmck@linux.vnet.ibm.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": "ab941e0fff3947b6dcc9c578d918d1bba54a6874",
      "tree": "5157de1b28370136fde227ecbd7fd2d38c15d30a",
      "parents": [
        "4a6018f7f4f1075c1a5403b5ec0ee7262187b86c"
      ],
      "author": {
        "name": "Naoya Horiguchi",
        "email": "n-horiguchi@ah.jp.nec.com",
        "time": "Tue May 11 14:06:55 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue May 11 17:33:42 2010 -0700"
      },
      "message": "rmap: remove anon_vma check in page_address_in_vma()\n\nCurrently page_address_in_vma() compares vma-\u003eanon_vma and\npage_anon_vma(page) for parameter check, but in 2.6.34 a vma can have\nmultiple anon_vmas with anon_vma_chain, so current check does not work.\n(For anonymous page shared by multiple processes, some verified (page,vma)\npairs return -EFAULT wrongly.)\n\nWe can go to checking all anon_vmas in the \"same_vma\" chain, but it needs\nto meet lock requirement.  Instead, we can remove anon_vma check safely\nbecause page_address_in_vma() assumes that page and vma are already\nchecked to belong to the identical process.\n\nSigned-off-by: Naoya Horiguchi \u003cn-horiguchi@ah.jp.nec.com\u003e\nReviewed-by: Rik van Riel \u003criel@redhat.com\u003e\nCc: Andi Kleen \u003candi@firstfloor.org\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\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": "4a6018f7f4f1075c1a5403b5ec0ee7262187b86c",
      "tree": "84cec71366550baaa85ac6e8f6349c340bf3586b",
      "parents": [
        "475f9aa6aa538befcbd0fa95bdebada600f247cd"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mel@csn.ul.ie",
        "time": "Tue May 11 14:06:53 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue May 11 17:33:42 2010 -0700"
      },
      "message": "hugetlbfs: kill applications that use MAP_NORESERVE with SIGBUS instead of OOM-killer\n\nOrdinarily, application using hugetlbfs will create mappings with\nreserves.  For shared mappings, these pages are reserved before mmap()\nreturns success and for private mappings, the caller process is guaranteed\nand a child process that cannot get the pages gets killed with sigbus.\n\nAn application that uses MAP_NORESERVE gets no reservations and mmap()\nwill always succeed at the risk the page will not be available at fault\ntime.  This might be used for example on very large sparse mappings where\nthe developer is confident the necessary huge pages exist to satisfy all\nfaults even though the whole mapping cannot be backed by huge pages.\nUnfortunately, if an allocation does fail, VM_FAULT_OOM is returned to the\nfault handler which proceeds to trigger the OOM-killer.  This is\nunhelpful.\n\nEven without hugetlbfs mounted, a user using mmap() can trivially trigger\nthe OOM-killer because VM_FAULT_OOM is returned (will provide example\nprogram if desired - it\u0027s a whopping 24 lines long).  It could be\nconsidered a DOS available to an unprivileged user.\n\nThis patch alters hugetlbfs to kill a process that uses MAP_NORESERVE\nwhere huge pages were not available with SIGBUS instead of triggering the\nOOM killer.\n\nThis change affects hugetlb_cow() as well.  I feel there is a failure case\nin there, but I didn\u0027t create one.  It would need a fairly specific target\nin terms of the faulting application and the hugepage pool size.  The\nhugetlb_no_page() path is much easier to hit but both might as well be\nclosed.\n\nSigned-off-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: Andi Kleen \u003candi@firstfloor.org\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": "91bc482ec5a615e8ecebc106aaf7d0c267d511de",
      "tree": "ad75789a5825fb2da75b2dbdc02d1969bad9b338",
      "parents": [
        "e8e8fade7b351f131433fa44ca5d4e960e1c0f9c",
        "ee84b8243b07c33a5c8aed42b4b2da60cb16d1d2"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri May 07 13:58:21 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri May 07 13:58:21 2010 -0700"
      },
      "message": "Merge branch \u0027core-fixes-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip\n\n* \u0027core-fixes-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:\n  rcu: create rcu_my_thread_group_empty() wrapper\n  memcg: css_id() must be called under rcu_read_lock()\n  cgroup: Check task_lock in task_subsys_state()\n  sched: Fix an RCU warning in print_task()\n  cgroup: Fix an RCU warning in alloc_css_id()\n  cgroup: Fix an RCU warning in cgroup_path()\n  KEYS: Fix an RCU warning in the reading of user keys\n  KEYS: Fix an RCU warning\n"
    },
    {
      "commit": "cce913178118b0b36742eb7544c2b38a0c957ee7",
      "tree": "25a6d7b4e01fea2932e6e2962a75f7a3d8c19a4f",
      "parents": [
        "d9f599e1e6d019968b35d2dc63074b9e8964fa69",
        "4fd38e4595e2f6c9d27732c042a0e16b2753049c"
      ],
      "author": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Fri May 07 11:30:29 2010 +0200"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Fri May 07 11:30:30 2010 +0200"
      },
      "message": "Merge branch \u0027perf/urgent\u0027 into perf/core\n\nMerge reason: Resolve patch dependency\n\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "111c7d82436db4c7673922b6ba021cebb7d26dd8",
      "tree": "e0faa1eb3793b27fa5a05b8e0b1311f83f16e5f6",
      "parents": [
        "8777c793d6a24c7f3adf52b1b1086e9706de4589"
      ],
      "author": {
        "name": "Zhang, Yanmin",
        "email": "yanmin_zhang@linux.intel.com",
        "time": "Thu Apr 01 17:32:30 2010 +0800"
      },
      "committer": {
        "name": "Pekka Enberg",
        "email": "penberg@cs.helsinki.fi",
        "time": "Wed May 05 21:12:19 2010 +0300"
      },
      "message": "slub: Fix bad boundary check in init_kmem_cache_nodes()\n\nFunction init_kmem_cache_nodes is incorrect when checking upper limitation of\nkmalloc_caches. The breakage was introduced by commit\n91efd773c74bb26b5409c85ad755d536448e229c (\"dma kmalloc handling fixes\").\n\nAcked-by: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nSigned-off-by: Pekka Enberg \u003cpenberg@cs.helsinki.fi\u003e\n"
    },
    {
      "commit": "ad4ba375373937817404fd92239ef4cadbded23b",
      "tree": "1c59ebd7a1e3ace3539396dd35ecff0f06132fe8",
      "parents": [
        "1ce7e4ff24fe338438bc7837e02780f202bf202b"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Fri Apr 23 12:26:38 2010 -0700"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Tue May 04 09:25:03 2010 -0700"
      },
      "message": "memcg: css_id() must be called under rcu_read_lock()\n\nThis patch fixes task_in_mem_cgroup(), mem_cgroup_uncharge_swapcache(),\nmem_cgroup_move_swap_account(), and is_target_pte_for_mc() to protect\ncalls to css_id().  An additional RCU lockdep splat was reported for\nmemcg_oom_wake_function(), however, this function is not yet in\nmainline as of 2.6.34-rc5.\n\nReported-by: Li Zefan \u003clizf@cn.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: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nTested-by: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\nCc: Andrew Morton \u003cakpm@linux-foundation.org\u003e\n"
    },
    {
      "commit": "3ca50496c2677a2b3fdd3ede86660fd1433beac6",
      "tree": "97a76d8479a8d8a96e04ed0694b8dbf89457bfcc",
      "parents": [
        "462b04e28a7ec1339c892117c3f20a40e55d0e83",
        "66f41d4c5c8a5deed66fdcc84509376c9a0bf9d8"
      ],
      "author": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Fri Apr 30 09:56:41 2010 +0200"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Fri Apr 30 09:56:44 2010 +0200"
      },
      "message": "Merge commit \u0027v2.6.34-rc6\u0027 into perf/core\n\nMerge reason: update to the latest -rc.\n\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "970b06485ffee36aa3549dfe4c6b2a2c2118354d",
      "tree": "1b0f6f4182e73d19071addf8a209e5fb58483d08",
      "parents": [
        "696e65c3606aa3f587eeb181766baf49ea750cfc",
        "33f60e9640b2f60dde6735293d4aa5ecc5b1d5d5"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Apr 28 07:56:05 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Apr 28 07:56:05 2010 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.dk/linux-2.6-block\n\n* \u0027for-linus\u0027 of git://git.kernel.dk/linux-2.6-block:\n  coda: move backing-dev.h kernel include inside __KERNEL__\n  mtd: ensure that bdi entries are properly initialized and registered\n  Move mtd_bdi_*mappable to mtdcore.c\n  btrfs: convert to using bdi_setup_and_register()\n  Catch filesystems lacking s_bdi\n  drbd: Terminate a connection early if sending the protocol fails\n  drbd: fix memory leak\n  Fix JFFS2 sync silent failure\n  smbfs: add bdi backing to mount session\n  ncpfs: add bdi backing to mount session\n  exofs: add bdi backing to mount session\n  ecryptfs: add bdi backing to mount session\n  coda: add bdi backing to mount session\n  cifs: add bdi backing to mount session\n  afs: add bdi backing to mount session.\n  9p: add bdi backing to mount session\n  bdi: add helper function for doing init and register of a bdi for a file system\n  block: ensure jiffies wrap is handled correctly in blk_rq_timed_out_timer\n"
    },
    {
      "commit": "5892753383090a3eddf0e1b043c95e3b2c7feda5",
      "tree": "f1a1d3b449f275dd34ba34208704e92900032f9b",
      "parents": [
        "a231a1f2714ce3b28445ac512a556d6c95517dab"
      ],
      "author": {
        "name": "Rik van Riel",
        "email": "riel@redhat.com",
        "time": "Mon Apr 26 12:33:03 2010 -0400"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Apr 27 08:26:51 2010 -0700"
      },
      "message": "mmap: check -\u003evm_ops before dereferencing\n\nCheck whether the VMA has a vm_ops before calling close, just\nlike we check vm_ops before calling open a few dozen lines\nhigher up in the function.\n\nSigned-off-by: Rik van Riel \u003criel@redhat.com\u003e\nReported-by: Dan Carpenter \u003cerror27@gmail.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "5129a469a91a91427334c40e29e64c6d0ab68caf",
      "tree": "141a17cbea94c7c9c038187cc7081e1c688eac55",
      "parents": [
        "7e2455c1a123ceadbb35150a610d61e8443fd340"
      ],
      "author": {
        "name": "Jörn Engel",
        "email": "joern@logfs.org",
        "time": "Sun Apr 25 08:54:42 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Sun Apr 25 08:54:42 2010 +0200"
      },
      "message": "Catch filesystems lacking s_bdi\n\nnoop_backing_dev_info is used only as a flag to mark filesystems that\ndon\u0027t have any backing store, like tmpfs, procfs, spufs, etc.\n\nSigned-off-by: Joern Engel \u003cjoern@logfs.org\u003e\n\nChanged the BUG_ON() to a WARN_ON(). Note that adding dirty inodes\nto the noop_backing_dev_info is not legal and will not result in\nthem being flushed, but we already catch this condition in\n__mark_inode_dirty() when checking for a registered bdi.\n\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "22eccdd7d2d94be48ae9b01fef5f52ccbb81dcd5",
      "tree": "346ba02239f0d3a1ed5d1d09fc3d323c29202270",
      "parents": [
        "453dc65931915abc61f92e12bba1fc4747ff5542"
      ],
      "author": {
        "name": "Dan Carpenter",
        "email": "error27@gmail.com",
        "time": "Fri Apr 23 13:18:10 2010 -0400"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Apr 24 11:31:26 2010 -0700"
      },
      "message": "ksm: check for ERR_PTR from follow_page()\n\nThe follow_page() function can potentially return -EFAULT so I added\nchecks for this.\n\nAlso I silenced an uninitialized variable warning on my version of gcc\n(version 4.3.2).\n\nSigned-off-by: Dan Carpenter \u003cerror27@gmail.com\u003e\nAcked-by: Rik van Riel \u003criel@redhat.com\u003e\nAcked-by: Izik Eidus \u003cieidus@redhat.com\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.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": "31f2b0ebc01fd332cb0997f7ce9f9cde29af9e20",
      "tree": "fc9d4cb410052afcc56bb8442a2dbcb8950464a8",
      "parents": [
        "93b4a44f3ad69520d605aace3f3486b8eb754b96"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Fri Apr 23 13:18:01 2010 -0400"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Apr 24 11:31:25 2010 -0700"
      },
      "message": "rmap: anon_vma_prepare() can leak anon_vma_chain\n\nIf find_mergeable_anon_vma() succeeds but another thread installs\n-\u003eanon_vma before we take ptl, then allocated \u003d\u003d NULL but avc should be\nfreed.  Change the code to check avc !\u003d NULL to detect this case.\n\nAlso, a couple of whitespace changes to make the critical section more\nvisible.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nReviewed-by: Rik van Riel \u003criel@redhat.com\u003e\nCc: Hugh Dickins \u003chugh.dickins@tiscali.co.uk\u003e\nCc: Pete Zaitcev \u003czaitcev@redhat.com\u003e\nCc: Borislav Petkov \u003cbp@alien8.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "23be7468e8802a2ac1de6ee3eecb3ec7f14dc703",
      "tree": "2c01e547594b8d7f32ddda47b6bea284d8f19761",
      "parents": [
        "9a6a1ecd9e9b5d046a236da2f7eb6b6812f04229"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mel@csn.ul.ie",
        "time": "Fri Apr 23 13:17:56 2010 -0400"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Apr 24 11:31:25 2010 -0700"
      },
      "message": "hugetlb: fix infinite loop in get_futex_key() when backed by huge pages\n\nIf a futex key happens to be located within a huge page mapped\nMAP_PRIVATE, get_futex_key() can go into an infinite loop waiting for a\npage-\u003emapping that will never exist.\n\nSee https://bugzilla.redhat.com/show_bug.cgi?id\u003d552257 for more details\nabout the problem.\n\nThis patch makes page-\u003emapping a poisoned value that includes\nPAGE_MAPPING_ANON mapped MAP_PRIVATE.  This is enough for futex to\ncontinue but because of PAGE_MAPPING_ANON, the poisoned value is not\ndereferenced or used by futex.  No other part of the VM should be\ndereferencing the page-\u003emapping of a hugetlbfs page as its page cache is\nnot on the LRU.\n\nThis patch fixes the problem with the test case described in the bugzilla.\n\n[akpm@linux-foundation.org: mel cant spel]\nSigned-off-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nAcked-by: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nAcked-by: Darren Hart \u003cdarren@dvhart.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": "93d5c9be1ddd57d4063ce463c9ac2be1e5ee14f1",
      "tree": "65455c40ec8c701789d8f16b825e5c290633c910",
      "parents": [
        "cac36f707119b792b2396aed371d6b5cdc194890"
      ],
      "author": {
        "name": "Andrea Arcangeli",
        "email": "aarcange@redhat.com",
        "time": "Fri Apr 23 13:17:39 2010 -0400"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Apr 24 11:31:24 2010 -0700"
      },
      "message": "memcg: fix prepare migration\n\nIf a signal is pending (task being killed by sigkill)\n__mem_cgroup_try_charge will write NULL into \u0026mem, and css_put will oops\non null pointer dereference.\n\n  BUG: unable to handle kernel NULL pointer dereference at 0000000000000010\n  IP: [\u003cffffffff810fc6cc\u003e] mem_cgroup_prepare_migration+0x7c/0xc0\n  PGD a5d89067 PUD a5d8a067 PMD 0\n  Oops: 0000 [#1] SMP\n  last sysfs file: /sys/devices/platform/microcode/firmware/microcode/loading\n  CPU 0\n  Modules linked in: nfs lockd nfs_acl auth_rpcgss sunrpc acpi_cpufreq pcspkr sg [last unloaded: microcode]\n\n  Pid: 5299, comm: largepages Tainted: G        W  2.6.34-rc3 #3 Penryn1600SLI-110dB/To Be Filled By O.E.M.\n  RIP: 0010:[\u003cffffffff810fc6cc\u003e]  [\u003cffffffff810fc6cc\u003e] mem_cgroup_prepare_migration+0x7c/0xc0\n\n[nishimura@mxp.nes.nec.co.jp: fix merge issues]\nSigned-off-by: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Balbir Singh \u003cbalbir@in.ibm.com\u003e\nSigned-off-by: 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": "70bce3ba77540ebe77b8c0e1ac38d281a23fbb5e",
      "tree": "34b09a49228f0949ff49dce66a433b0dfd83a2dc",
      "parents": [
        "6eca8cc35b50af1037bc919106dd6dd332c959c2",
        "d5a30458a90597915977f06e79406b664a41b8ac"
      ],
      "author": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Fri Apr 23 11:10:28 2010 +0200"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Fri Apr 23 11:10:30 2010 +0200"
      },
      "message": "Merge branch \u0027linus\u0027 into perf/core\n\nMerge reason: merge the latest fixes, update to latest -rc.\n\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "c3c532061e46156e8aab1268f38d66cfb63aeb2d",
      "tree": "8c5b027873b823b04f5564d442477e80e82e8edb",
      "parents": [
        "a534dbe96e9929c7245924d8252d89048c23d569"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Thu Apr 22 11:37:01 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Thu Apr 22 11:39:36 2010 +0200"
      },
      "message": "bdi: add helper function for doing init and register of a bdi for a file system\n\nPretty trivial helper, just sets up the bdi and registers it. An atomic\nsequence count is used to ensure that the registered sysfs names are\nunique.\n\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "e8a03feb54ca7f1768bbdc2b491f9ef654e6d01d",
      "tree": "1ce113d18057e0870e0816f272e21b6716ef321f",
      "parents": [
        "9b030e2006546366c832911ca5eb9e785408795b"
      ],
      "author": {
        "name": "Rik van Riel",
        "email": "riel@redhat.com",
        "time": "Wed Apr 14 17:59:28 2010 -0400"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Apr 19 16:28:20 2010 -0700"
      },
      "message": "rmap: add exclusively owned pages to the newest anon_vma\n\nThe recent anon_vma fixes cause many anonymous pages to end up\nin the parent process anon_vma, even when the page is exclusively\nowned by the current process.\n\nAdding exclusively owned anonymous pages to the top anon_vma\nreduces rmap scanning overhead, especially in workloads with\nforking servers.\n\nThis patch adds a parameter to __page_set_anon_rmap that can\nbe used to indicate whether or not the added page is exclusively\nowned by the current process.\n\nPages added through page_add_new_anon_rmap are exclusively\nowned by the current process, and can be added to the top\nanon_vma.\n\nPages added through page_add_anon_rmap can be either shared\nor exclusively owned, so we do the conservative thing and\nadd it to the oldest anon_vma.\n\nA next step would be to add the exclusive parameter to\npage_add_anon_rmap, to be used from functions where we do\nknow for sure whether a page is exclusively owned.\n\nSigned-off-by: Rik van Riel \u003criel@redhat.com\u003e\nReviewed-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nLightly-tested-by: Borislav Petkov \u003cbp@alien8.de\u003e\nReviewed-by: Minchan Kim \u003cminchan.kim@gmail.com\u003e\n[ Edited to look nicer  - Linus ]\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "ea90002b0fa7bdee86ec22eba1d951f30bf043a6",
      "tree": "7620aa0da5b7314769b177dd0934bb87fe7c993b",
      "parents": [
        "646d87b481dab4ba8301716600dfd276605b0ab0"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Apr 12 12:44:29 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Apr 12 17:54:13 2010 -0700"
      },
      "message": "anonvma: when setting up page-\u003emapping, we need to pick the _oldest_ anonvma\n\nOtherwise we might be mapping in a page in a new mapping, but that page\n(through the swapcache) would later be mapped into an old mapping too.\nThe page-\u003emapping must be the case that works for everybody, not just\nthe mapping that happened to page it in first.\n\nHere\u0027s the scenario:\n\n - page gets allocated/mapped by process A. Let\u0027s call the anon_vma we\n   associate the page with \u0027A\u0027 to keep it easy to track.\n\n - Process A forks, creating process B. The anon_vma in B is \u0027B\u0027, and has\n   a chain that looks like \u0027B\u0027 -\u003e \u0027A\u0027. Everything is fine.\n\n - Swapping happens. The page (with mapping pointing to \u0027A\u0027) gets swapped\n   out (perhaps not to disk - it\u0027s enough to assume that it\u0027s just not\n   mapped any more, and lives entirely in the swap-cache)\n\n - Process B pages it in, which goes like this:\n\n        do_swap_page -\u003e\n          page \u003d lookup_swap_cache(entry);\n         ...\n          set_pte_at(mm, address, page_table, pte);\n          page_add_anon_rmap(page, vma, address);\n\n   And think about what happens here!\n\n   In particular, what happens is that this will now be the \"first\"\n   mapping of that page, so page_add_anon_rmap() used to do\n\n        if (first)\n                __page_set_anon_rmap(page, vma, address);\n\n   and notice what anon_vma it will use? It will use the anon_vma for\n   process B!\n\n   What happens then? Trivial: process \u0027A\u0027 also pages it in (nothing\n   happens, it\u0027s not the first mapping), and then process \u0027B\u0027 execve\u0027s\n   or exits or unmaps, making anon_vma B go away.\n\n   End result: process A has a page that points to anon_vma B, but\n   anon_vma B does not exist any more.  This can go on forever.  Forget\n   about RCU grace periods, forget about locking, forget anything like\n   that.  The bug is simply that page-\u003emapping points to an anon_vma\n   that was correct at one point, but was _not_ the one that was shared\n   by all users of that possible mapping.\n\nChanging it to always use the deepest anon_vma in the anonvma chain gets\nus to the safest model.\n\nThis can be improved in certain cases: if we know the page is private to\njust this particular mapping (for example, it\u0027s a new page, or it is the\nonly swapcache entry), we could pick the top (most specific) anon_vma.\n\nBut that\u0027s a future optimization. Make it _work_ reliably first.\n\nReviewed-by: Rik van Riel \u003criel@redhat.com\u003e\nAcked-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nTested-by: Borislav Petkov \u003cbp@alien8.de\u003e [ \"What do you know, I think you fixed it!\" ]\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "646d87b481dab4ba8301716600dfd276605b0ab0",
      "tree": "d457ef34537cf91ddc91dafc4842de9f43ed9555",
      "parents": [
        "287d97ac032136724143cde8d5964b414d562ee3"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sun Apr 11 17:15:03 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Apr 12 17:54:12 2010 -0700"
      },
      "message": "anon_vma: clone the anon_vma chain in the right order\n\nWe want to walk the chain in reverse order when cloning it, so that the\norder of the result chain will be the same as the order in the source\nchain.  When we add entries to the chain, they go at the head of the\nchain, so we want to add the source head last.\n\nReviewed-by: Rik van Riel \u003criel@redhat.com\u003e\nAcked-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nTested-by: Borislav Petkov \u003cbp@alien8.de\u003e [ \"No, it still oopses\" ]\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "287d97ac032136724143cde8d5964b414d562ee3",
      "tree": "c060c9b3e9fd61507687a419a94c659425de57e4",
      "parents": [
        "d0e9fe1758f222f13ec893f856552d81a10d266d"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Apr 10 15:22:30 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Apr 12 17:54:11 2010 -0700"
      },
      "message": "vma_adjust: fix the copying of anon_vma chains\n\nWhen we move the boundaries between two vma\u0027s due to things like\nmprotect, we need to make sure that the anon_vma of the pages that got\nmoved from one vma to another gets properly copied around.  And that was\nnot always the case, in this rather hard-to-follow code sequence.\n\nClarify the code, and fix it so that it copies the anon_vma from the\nright source.\n\nReviewed-by: Rik van Riel \u003criel@redhat.com\u003e\nAcked-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nTested-by: Borislav Petkov \u003cbp@alien8.de\u003e [ \"Yeah, not so much this one either\" ]\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "d0e9fe1758f222f13ec893f856552d81a10d266d",
      "tree": "93e55a2e26c2b2f40b6d9142515fd14de8eb6647",
      "parents": [
        "0eddb519b9127c73d53db4bf3ec1d45b13f844d1"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Apr 10 10:36:19 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Apr 12 17:53:59 2010 -0700"
      },
      "message": "Simplify and comment on anon_vma re-use for anon_vma_prepare()\n\nThis changes the anon_vma reuse case to require that we only reuse\nsimple anon_vma\u0027s - ie the case when the vma only has a single anon_vma\nassociated with it.\n\nThis means that a reuse of an anon_vma from an adjacent vma will always\nguarantee that both vma\u0027s are associated not only with the same\nanon_vma, they will also have the same anon_vma chain (of just a single\nentry in this case).\n\nAnd since anon_vma re-use was the only case where the same anon_vma\nmight be associated with different chains of anon_vma\u0027s, we now have the\ncase that every vma that shares the same anon_vma will always also have\nthe same chain.  That makes it much easier to think about merging vma\u0027s\nthat share the same anon_vma\u0027s: you can always just drop the other\nanon_vma chain in anon_vma_merge() since you know that they are always\nidentical.\n\nThis also splits up the function to validate the anon_vma re-use, and\nadds a lot of commentary about the possible races.\n\nReviewed-by: Rik van Riel \u003criel@redhat.com\u003e\nAcked-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nTested-by: Borislav Petkov \u003cbp@alien8.de\u003e [ \"That didn\u0027t fix it\" ]\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "2f4084209adc77f9a1c9f38db3019a509e167882",
      "tree": "775657114c885505ecc46605e29ea1470e986f76",
      "parents": [
        "2f10ffcfb28beb35137d9e86992c771b4a6c5f2a",
        "3440c49f5c5ecb4f29b0544aa87da71888404f8f"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Apr 09 11:50:29 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Apr 09 11:50:29 2010 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.dk/linux-2.6-block\n\n* \u0027for-linus\u0027 of git://git.kernel.dk/linux-2.6-block: (34 commits)\n  cfq-iosched: Fix the incorrect timeslice accounting with forced_dispatch\n  loop: Update mtime when writing using aops\n  block: expose the statistics in blkio.time and blkio.sectors for the root cgroup\n  backing-dev: Handle class_create() failure\n  Block: Fix block/elevator.c elevator_get() off-by-one error\n  drbd: lc_element_by_index() never returns NULL\n  cciss: unlock on error path\n  cfq-iosched: Do not merge queues of BE and IDLE classes\n  cfq-iosched: Add additional blktrace log messages in CFQ for easier debugging\n  i2o: Remove the dangerous kobj_to_i2o_device macro\n  block: remove 16 bytes of padding from struct request on 64bits\n  cfq-iosched: fix a kbuild regression\n  block: make CONFIG_BLK_CGROUP visible\n  Remove GENHD_FL_DRIVERFS\n  block: Export max number of segments and max segment size in sysfs\n  block: Finalize conversion of block limits functions\n  block: Fix overrun in lcm() and move it to lib\n  vfs: improve writeback_inodes_wb()\n  paride: fix off-by-one test\n  drbd: fix al-to-on-disk-bitmap for 4k logical_block_size\n  ...\n"
    },
    {
      "commit": "d3e06e2b15590b70ea73733fc4612e4741ff46e0",
      "tree": "021d71809197d8a195708ec9b3b114a0aa6eaa9c",
      "parents": [
        "fc1c183353a113c71675fecd0485e5aa0fe68d72"
      ],
      "author": {
        "name": "Pekka Enberg",
        "email": "penberg@cs.helsinki.fi",
        "time": "Wed Apr 07 19:23:41 2010 +0300"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Apr 09 10:09:50 2010 -0700"
      },
      "message": "slub: Fix kmem_ptr_validate() for non-kernel pointers\n\nAs suggested by Linus, fix up kmem_ptr_validate() to handle non-kernel pointers\nmore graciously. The patch changes kmem_ptr_validate() to use the newly\nintroduced kern_ptr_validate() helper to check that a pointer is a valid kernel\npointer before we attempt to convert it into a \u0027struct page\u0027.\n\nCc: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Matt Mackall \u003cmpm@selenic.com\u003e\nCc: Nick Piggin \u003cnpiggin@suse.de\u003e\nSigned-off-by: Pekka Enberg \u003cpenberg@cs.helsinki.fi\u003e\nAcked-by: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nAcked-by: David Rientjes \u003crientjes@google.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "fc1c183353a113c71675fecd0485e5aa0fe68d72",
      "tree": "25fc50112c80402ab43bd86a3d6b6a99a0c3c128",
      "parents": [
        "4dc86ae1f925b2121d4e75058675895f83e54c71"
      ],
      "author": {
        "name": "Pekka Enberg",
        "email": "penberg@cs.helsinki.fi",
        "time": "Wed Apr 07 19:23:40 2010 +0300"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Apr 09 10:09:50 2010 -0700"
      },
      "message": "slab: Generify kernel pointer validation\n\nAs suggested by Linus, introduce a kern_ptr_validate() helper that does some\nsanity checks to make sure a pointer is a valid kernel pointer.  This is a\npreparational step for fixing SLUB kmem_ptr_validate().\n\nCc: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nCc: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Matt Mackall \u003cmpm@selenic.com\u003e\nCc: Nick Piggin \u003cnpiggin@suse.de\u003e\nSigned-off-by: Pekka Enberg \u003cpenberg@cs.helsinki.fi\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "ca7e0c612005937a4a5a75d3fed90459993de65c",
      "tree": "b574fc0f0189b52ffc87ba20c418228db556faa1",
      "parents": [
        "8141d0050d76e5695011b5ab577ec66fb51a998c",
        "f5284e7635787224dda1a2bf82a4c56b1c75671f"
      ],
      "author": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Thu Apr 08 13:36:36 2010 +0200"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Thu Apr 08 13:37:18 2010 +0200"
      },
      "message": "Merge branch \u0027linus\u0027 into perf/core\n\nSemantic conflict: arch/x86/kernel/cpu/perf_event_intel_ds.c\n\nMerge reason: pick up latest fixes, fix the conflict\n\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "fb1ae635772d679eb312fa447290fc02cd0e4cf1",
      "tree": "45733f9820da1190cd58bfff080edbb02af961a8",
      "parents": [
        "addb2d6c13993060ae75f5005815b19dd2abdd64",
        "472a474c6630efd195d3738339fd1bdc8aa3b1aa"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Apr 07 11:02:23 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Apr 07 11:02:23 2010 -0700"
      },
      "message": "Merge branch \u0027x86-fixes-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/x86/linux-2.6-tip\n\n* \u0027x86-fixes-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/x86/linux-2.6-tip:\n  x86: Fix double enable_IR_x2apic() call on SMP kernel on !SMP boards\n  x86: Increase CONFIG_NODES_SHIFT max to 10\n  ibft, x86: Change reserve_ibft_region() to find_ibft_region()\n  x86, hpet: Fix bug in RTC emulation\n  x86, hpet: Erratum workaround for read after write of HPET comparator\n  bootmem, x86: Fix 32bit numa system without RAM on node 0\n  nobootmem, x86: Fix 32bit numa system without RAM on node 0\n  x86: Handle overlapping mptables\n  x86: Make e820_remove_range to handle all covered case\n  x86-32, resume: do a global tlb flush in S4 resume\n"
    },
    {
      "commit": "8725d5416213a145ccc9c236dbd26830ba409e00",
      "tree": "aff10fc98874adfcb7755ec8bc1f2627036e8dc2",
      "parents": [
        "116354d177ba2da37e91cf884e3d11e67f825efd"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Tue Apr 06 14:35:05 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Apr 07 08:38:05 2010 -0700"
      },
      "message": "memcg: fix race in file_mapped accounting\n\nPresently, memcg\u0027s FILE_MAPPED accounting has following race with\nmove_account (happens at rmdir()).\n\n    increment page-\u003emapcount (rmap.c)\n    mem_cgroup_update_file_mapped()           move_account()\n\t\t\t\t\t      lock_page_cgroup()\n\t\t\t\t\t      check page_mapped() if\n\t\t\t\t\t      page_mapped(page)\u003e1 {\n\t\t\t\t\t\tFILE_MAPPED -1 from old memcg\n\t\t\t\t\t\tFILE_MAPPED +1 to old memcg\n\t\t\t\t\t      }\n\t\t\t\t\t      .....\n\t\t\t\t\t      overwrite pc-\u003emem_cgroup\n\t\t\t\t\t      unlock_page_cgroup()\n    lock_page_cgroup()\n    FILE_MAPPED + 1 to pc-\u003emem_cgroup\n    unlock_page_cgroup()\n\nThen,\n\told memcg (-1 file mapped)\n\tnew memcg (+2 file mapped)\n\nThis happens because move_account see page_mapped() which is not guarded\nby lock_page_cgroup().  This patch adds FILE_MAPPED flag to page_cgroup\nand move account information based on it.  Now, all checks are synchronous\nwith lock_page_cgroup().\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nReviewed-by: Balbir Singh \u003cbalbir@in.ibm.com\u003e\nReviewed-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Andrea Righi \u003carighi@develer.com\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": "116354d177ba2da37e91cf884e3d11e67f825efd",
      "tree": "150227e8a5c9ce8b6dd9333593ed513c8c012686",
      "parents": [
        "57119c34e53bbb8d244c3ff1335ef5145768538f"
      ],
      "author": {
        "name": "Naoya Horiguchi",
        "email": "n-horiguchi@ah.jp.nec.com",
        "time": "Tue Apr 06 14:35:04 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Apr 07 08:38:04 2010 -0700"
      },
      "message": "pagemap: fix pfn calculation for hugepage\n\nWhen we look into pagemap using page-types with option -p, the value of\npfn for hugepages looks wrong (see below.) This is because pte was\nevaluated only once for one vma although it should be updated for each\nhugepage.  This patch fixes it.\n\n  $ page-types -p 3277 -Nl -b huge\n  voffset   offset  len     flags\n  7f21e8a00 11e400  1       ___U___________H_G________________\n  7f21e8a01 11e401  1ff     ________________TG________________\n               ^^^\n  7f21e8c00 11e400  1       ___U___________H_G________________\n  7f21e8c01 11e401  1ff     ________________TG________________\n               ^^^\n\nOne hugepage contains 1 head page and 511 tail pages in x86_64 and each\ntwo lines represent each hugepage.  Voffset and offset mean virtual\naddress and physical address in the page unit, respectively.  The\ndifferent hugepages should not have the same offset value.\n\nWith this patch applied:\n\n  $ page-types -p 3386 -Nl -b huge\n  voffset   offset   len    flags\n  7fec7a600 112c00   1      ___UD__________H_G________________\n  7fec7a601 112c01   1ff    ________________TG________________\n               ^^^\n  7fec7a800 113200   1      ___UD__________H_G________________\n  7fec7a801 113201   1ff    ________________TG________________\n               ^^^\n               OK\n\nMore info:\n\n- This patch modifies walk_page_range()\u0027s hugepage walker.  But the\n  change only affects pagemap_read(), which is the only caller of hugepage\n  callback.\n\n- Without this patch, hugetlb_entry() callback is called per vma, that\n  doesn\u0027t match the natural expectation from its name.\n\n- With this patch, hugetlb_entry() is called per hugepte entry and the\n  callback can become much simpler.\n\nSigned-off-by: Naoya Horiguchi \u003cn-horiguchi@ah.jp.nec.com\u003e\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Matt Mackall \u003cmpm@selenic.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "d6da1a5abc2bf3a06a5bda08e0f6833409234666",
      "tree": "dd6e7a306879b49a7947d3f7015bc84f5e27d869",
      "parents": [
        "6e191f7bb083544dc4fa3879ff81caf97c65d197"
      ],
      "author": {
        "name": "KOSAKI Motohiro",
        "email": "kosaki.motohiro@jp.fujitsu.com",
        "time": "Tue Apr 06 14:34:56 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Apr 07 08:38:03 2010 -0700"
      },
      "message": "mm: revert \"vmscan: get_scan_ratio() cleanup\"\n\nShaohua Li reported his tmpfs streaming I/O test can lead to make oom.\nThe test uses a 6G tmpfs in a system with 3G memory.  In the tmpfs, there\nare 6 copies of kernel source and the test does kbuild for each copy.  His\ninvestigation shows the test has a lot of rotated anon pages and quite few\nfile pages, so get_scan_ratio calculates percent[0] (i.e.  scanning\npercent for anon) to be zero.  Actually the percent[0] shoule be a big\nvalue, but our calculation round it to zero.\n\nAlthough before commit 84b18490 (\"vmscan: get_scan_ratio() cleanup\") , we\nhave the same problem too.  But the old logic can rescue percent[0]\u003d\u003d0\ncase only when priority\u003d\u003d0.  It had hided the real issue.  I didn\u0027t think\nmerely streaming io can makes percent[0]\u003d\u003d0 \u0026\u0026 priority\u003d\u003d0 situation.  but\nI was wrong.\n\nSo, definitely we have to fix such tmpfs streaming io issue.  but anyway I\nrevert the regression commit at first.\n\nThis reverts commit 84b18490d1f1bc7ed5095c929f78bc002eb70f26.\n\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nReported-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.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": "70655c06bd3f25111312d63985888112aed15ac5",
      "tree": "e6db465a10b6ece8f50fbcfce97404f03044e248",
      "parents": [
        "12765517d9dbb477a2432375938f1eb5bdbcb532"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Tue Apr 06 14:34:53 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Apr 07 08:38:03 2010 -0700"
      },
      "message": "readahead: fix NULL filp dereference\n\nbtrfs relocate_file_extent_cluster() calls us with NULL filp:\n\n  [ 4005.426805] BUG: unable to handle kernel NULL pointer dereference at 00000021\n  [ 4005.426818] IP: [\u003cc109a130\u003e] page_cache_sync_readahead+0x18/0x3e\n\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nCc: Yan Zheng \u003cyanzheng@21cn.com\u003e\nReported-by: Kirill A. Shutemov \u003ckirill@shutemov.name\u003e\nTested-by: Kirill A. Shutemov \u003ckirill@shutemov.name\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": "a3a2e76c77fa22b114e421ac11dec0c56c3503fb",
      "tree": "cc67bbd8d5d364e55ea7a00d0b5ad68d5eac08ac",
      "parents": [
        "b01d0942c2b7a3026d2b7d38b5773d3d00420e06"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Tue Apr 06 14:34:42 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Apr 07 08:38:02 2010 -0700"
      },
      "message": "mm: avoid null-pointer deref in sync_mm_rss()\n\n- We weren\u0027t zeroing p-\u003erss_stat[] at fork()\n\n- Consequently sync_mm_rss() was dereferencing tsk-\u003emm for kernel\n  threads and was oopsing.\n\n- Make __sync_task_rss_stat() static, too.\n\nAddresses https://bugzilla.kernel.org/show_bug.cgi?id\u003d15648\n\n[akpm@linux-foundation.org: remove the BUG_ON(!mm-\u003erss)]\nReported-by: Troels Liebe Bentsen \u003ctlb@rapanden.dk\u003e\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\n\"Michael S. Tsirkin\" \u003cmst@redhat.com\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: Rik van Riel \u003criel@redhat.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": "b66696e3c0d8fc01efdbc701eba1276618332cb3",
      "tree": "3094ef42787b8e0c900bce1f2391ced081ed1ba4",
      "parents": [
        "9e74e7c81a24aee66024fc477786bd1de84e293b",
        "a32f3926632e71c8aa23ce32fe2625f8d5f792c2"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Apr 05 09:39:11 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Apr 05 09:39:11 2010 -0700"
      },
      "message": "Merge branch \u0027slabh\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tj/misc\n\n* \u0027slabh\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tj/misc:\n  eeepc-wmi: include slab.h\n  staging/otus: include slab.h from usbdrv.h\n  percpu: don\u0027t implicitly include slab.h from percpu.h\n  kmemcheck: Fix build errors due to missing slab.h\n  include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h\n  iwlwifi: don\u0027t include iwl-dev.h from iwl-devtrace.h\n  x86: don\u0027t include slab.h from arch/x86/include/asm/pgtable_32.h\n\nFix up trivial conflicts in include/linux/percpu.h due to\nis_kernel_percpu_address() having been introduced since the slab.h\ncleanup with the percpu_up.c splitup.\n"
    },
    {
      "commit": "9e74e7c81a24aee66024fc477786bd1de84e293b",
      "tree": "8f172b7e5a86fe6b51e46f1d219e9c0707beab60",
      "parents": [
        "4946d54cb55e86a156216fcfeed5568514b0830f",
        "d5e50daf92df8afcb701fd717b301985691e802f"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Apr 05 09:16:37 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Apr 05 09:16:37 2010 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tj/percpu\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tj/percpu:\n  module: add stub for is_module_percpu_address\n  percpu, module: implement and use is_kernel/module_percpu_address()\n  module: encapsulate percpu handling better and record percpu_size\n"
    },
    {
      "commit": "4946d54cb55e86a156216fcfeed5568514b0830f",
      "tree": "a27a670f2cbe7d689588af24c6c9cda82690c7c2",
      "parents": [
        "db217dece3003df0841bacf9556b5c06aa097dae"
      ],
      "author": {
        "name": "Rik van Riel",
        "email": "riel@redhat.com",
        "time": "Mon Apr 05 12:13:33 2010 -0400"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Apr 05 09:15:51 2010 -0700"
      },
      "message": "rmap: fix anon_vma_fork() memory leak\n\nFix a memory leak in anon_vma_fork(), where we fail to tear down the\nanon_vmas attached to the new VMA in case setting up the new anon_vma\nfails.\n\nThis bug also has the potential to leave behind anon_vma_chain structs\nwith pointers to invalid memory.\n\nReported-by: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nSigned-off-by: Rik van Riel \u003criel@redhat.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "ec5e61aabeac58670691bd0613388d16697d0d81",
      "tree": "59838509358f27334874b90756505785cde29b02",
      "parents": [
        "75ec5a245c7763c397f31ec8964d0a46c54a7386",
        "8bb39f9aa068262732fe44b965d7a6eb5a5a7d67"
      ],
      "author": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Fri Apr 02 19:37:50 2010 +0200"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Fri Apr 02 19:38:10 2010 +0200"
      },
      "message": "Merge branch \u0027perf/urgent\u0027 into perf/core\n\nConflicts:\n\tarch/x86/kernel/cpu/perf_event.c\n\nMerge reason: Resolve the conflict, pick up fixes\n\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "144214537370b4f133a735446ebe86e90cfb2501",
      "tree": "840f26c5a83d4730c28b5c46ec000a76e89adcc9",
      "parents": [
        "a506aedc51093544ff0f9610af6066d18cb6abbe"
      ],
      "author": {
        "name": "Anton Blanchard",
        "email": "anton@samba.org",
        "time": "Fri Apr 02 09:46:55 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri Apr 02 09:46:55 2010 +0200"
      },
      "message": "backing-dev: Handle class_create() failure\n\nI hit this when we had a bug in IDR for a few days. Basically sysfs would\nfail to create new inodes since it uses an IDR and therefore class_create would\nfail.\n\nWhile we are unlikely to see this fail we may as well handle it instead of\noopsing.\n\nSigned-off-by: Anton Blanchard \u003canton@samba.org\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "aa235fc712f379d4194cff9217f07026c452c141",
      "tree": "9807da3453cfb9592c1a45f6fc327b5d227672d5",
      "parents": [
        "337998587f802535896e9ed16d19f97915ccd368"
      ],
      "author": {
        "name": "Yinghai Lu",
        "email": "yinghai@kernel.org",
        "time": "Wed Mar 31 20:45:27 2010 -0700"
      },
      "committer": {
        "name": "H. Peter Anvin",
        "email": "hpa@zytor.com",
        "time": "Thu Apr 01 14:41:19 2010 -0700"
      },
      "message": "bootmem, x86: Fix 32bit numa system without RAM on node 0\n\nWhen 32bit numa is used, free_all_bootmem() will still only go over with\nnode id 0.\n\nIf node 0 doesn\u0027t have RAM installed, the lowest populated node\nbecomes low RAM.\n\nThis one fixes BOOTMEM path by iterating over the bdata_list.\n\n-v3: add more comments, and fix bootmem path too.\n-v4: seperate from one big patch\n\nSigned-off-by: Yinghai Lu \u003cyinghai@kernel.org\u003e\nLKML-Reference: \u003c4BB416D7.6090203@kernel.org\u003e\nSigned-off-by: H. Peter Anvin \u003chpa@zytor.com\u003e\n"
    },
    {
      "commit": "337998587f802535896e9ed16d19f97915ccd368",
      "tree": "f736d3dbbbb9a4b0b02c34c7335fc269d8057f6d",
      "parents": [
        "909fc87b32b3b9e3f0b87dcc5d98319c41900c58"
      ],
      "author": {
        "name": "Yinghai Lu",
        "email": "yinghai@kernel.org",
        "time": "Wed Mar 31 20:44:09 2010 -0700"
      },
      "committer": {
        "name": "H. Peter Anvin",
        "email": "hpa@zytor.com",
        "time": "Thu Apr 01 14:39:29 2010 -0700"
      },
      "message": "nobootmem, x86: Fix 32bit numa system without RAM on node 0\n\nOn one system without RAM on node0, got following boot dump with a 32\nbit NUMA kernel:\n\nearly_node_map[4] active PFN ranges\n    1: 0x00000010 -\u003e 0x00000099\n    1: 0x00000100 -\u003e 0x0007da00\n    1: 0x0007e800 -\u003e 0x0007ffa0\n    1: 0x0007ffae -\u003e 0x0007ffb0\n...\nSubtract (29 early reservations)\n  #000 [0000001000 - 0000002000]\n  #001 [0000089000 - 000008f000]\n  #002 [0000091000 - 0000093500]\n...\n  #027 [007cbfef40 - 007e800000]\n  #028 [007e9ca000 - 007ff95000]\n(0 free memory ranges)\nInitializing HighMem for node 0 (00000000:00000000)\nInitializing HighMem for node 1 (00000000:00000000)\nMemory: 0k/2096832k available (6662k kernel code, 2096300k reserved, 4829k data, 484k init, 0k highmem)\n...\nChecking if this processor honours the WP bit even in supervisor mode...Ok.\nswapper: page allocation failure. order:0, mode:0x0\nPid: 0, comm: swapper Not tainted 2.6.34-rc3-tip-03818-g4b1ea6c-dirty #35\nCall Trace:\n [\u003c4087a5dc\u003e] ? printk+0xf/0x11\n [\u003c40286728\u003e] __alloc_pages_nodemask+0x417/0x487\n [\u003c402a9ce1\u003e] new_slab+0xe2/0x1fe\n [\u003c402aa5b2\u003e] kmem_cache_open+0x185/0x358\n [\u003c402abbc0\u003e] T.954+0x1c/0x60\n [\u003c40d52a29\u003e] kmem_cache_init+0x24/0x113\n [\u003c40d39738\u003e] start_kernel+0x166/0x2e4\n [\u003c40d3940e\u003e] ? unknown_bootoption+0x0/0x18e\n [\u003c40d390ce\u003e] i386_start_kernel+0xce/0xd5\nMem-Info:\nNode 1 DMA per-cpu:\nCPU    0: hi:    0, btch:   1 usd:   0\nNode 1 Normal per-cpu:\nCPU    0: hi:    0, btch:   1 usd:   0\nactive_anon:0 inactive_anon:0 isolated_anon:0\n active_file:0 inactive_file:0 isolated_file:0\n unevictable:0 dirty:0 writeback:0 unstable:0\n free:0 slab_reclaimable:0 slab_unreclaimable:0\n mapped:0 shmem:0 pagetables:0 bounce:0\n\nWhen 32bit NUMA is used, free_all_bootmem() will still only go over with\nnode id 0.\n\nIf node 0 doesn\u0027t have RAM installed, We need to go with node1\nbecause early_node_map still use 1 for all ranges, and ram from node1\nbecome low ram.\n\nUse MAX_NUMNODES like 64-bit NUMA does.\n\nNote: BOOTMEM path has the same problem.\n      this bug exist before We have NO_BOOTMEM support.\n\n-v3: add more comments, and fix bootmem path too.\n-v4: seperate bootmem path fix\n\nSigned-off-by: Yinghai Lu \u003cyinghai@kernel.org\u003e\nLKML-Reference: \u003c4BB41689.9090502@kernel.org\u003e\nSigned-off-by: H. Peter Anvin \u003chpa@zytor.com\u003e\n"
    },
    {
      "commit": "de380b55f92986c1a84198149cb71b7228d15fbd",
      "tree": "dce7168802e1e65754c9b6455d0527dfa853168c",
      "parents": [
        "ea5a9f0c3447889abceb7482c391bb977472eab9"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 24 17:06:43 2010 +0900"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Mar 30 22:02:32 2010 +0900"
      },
      "message": "percpu: don\u0027t implicitly include slab.h from percpu.h\n\npercpu.h has always been including slab.h to get k[mz]alloc/free() for\nUP inline implementation.  percpu.h being used by very low level\nheaders including module.h and sched.h, this meant that a lot files\nunintentionally got slab.h inclusion.\n\nLee Schermerhorn was trying to make topology.h use percpu.h and got\nbitten by this implicit inclusion.  The right thing to do is break\nthis ultimately unnecessary dependency.  The previous patch added\nexplicit inclusion of either gfp.h or slab.h to the source files using\nthem.  This patch updates percpu.h such that slab.h is no longer\nincluded from percpu.h.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nReviewed-by: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nCc: Ingo Molnar \u003cmingo@redhat.com\u003e\nCc: Lee Schermerhorn \u003cLee.Schermerhorn@hp.com\u003e\n"
    },
    {
      "commit": "ea5a9f0c3447889abceb7482c391bb977472eab9",
      "tree": "ca3fa5945eeea2363696b13593efb9094661d865",
      "parents": [
        "5a0e3ad6af8660be21ca98a971cd00f331318c05"
      ],
      "author": {
        "name": "Randy Dunlap",
        "email": "randy.dunlap@oracle.com",
        "time": "Tue Mar 30 03:01:14 2010 +0900"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Mar 30 22:02:32 2010 +0900"
      },
      "message": "kmemcheck: Fix build errors due to missing slab.h\n\nmm/kmemcheck.c:69: error: dereferencing pointer to incomplete type\nmm/kmemcheck.c:69: error: \u0027SLAB_NOTRACK\u0027 undeclared (first use in this function)\nmm/kmemcheck.c:82: error: dereferencing pointer to incomplete type\nmm/kmemcheck.c:94: error: dereferencing pointer to incomplete type\nmm/kmemcheck.c:94: error: dereferencing pointer to incomplete type\nmm/kmemcheck.c:94: error: \u0027SLAB_DESTROY_BY_RCU\u0027 undeclared (first use in this function)\n\nSigned-off-by: Randy Dunlap \u003crandy.dunlap@oracle.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "5a0e3ad6af8660be21ca98a971cd00f331318c05",
      "tree": "5bfb7be11a03176a87296a43ac6647975c00a1d1",
      "parents": [
        "ed391f4ebf8f701d3566423ce8f17e614cde9806"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 24 17:04:11 2010 +0900"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Mar 30 22:02:32 2010 +0900"
      },
      "message": "include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h\n\npercpu.h is included by sched.h and module.h and thus ends up being\nincluded when building most .c files.  percpu.h includes slab.h which\nin turn includes gfp.h making everything defined by the two files\nuniversally available and complicating inclusion dependencies.\n\npercpu.h -\u003e slab.h dependency is about to be removed.  Prepare for\nthis change by updating users of gfp and slab facilities include those\nheaders directly instead of assuming availability.  As this conversion\nneeds to touch large number of source files, the following script is\nused as the basis of conversion.\n\n  http://userweb.kernel.org/~tj/misc/slabh-sweep.py\n\nThe script does the followings.\n\n* Scan files for gfp and slab usages and update includes such that\n  only the necessary includes are there.  ie. if only gfp is used,\n  gfp.h, if slab is used, slab.h.\n\n* When the script inserts a new include, it looks at the include\n  blocks and try to put the new include such that its order conforms\n  to its surrounding.  It\u0027s put in the include block which contains\n  core kernel includes, in the same order that the rest are ordered -\n  alphabetical, Christmas tree, rev-Xmas-tree or at the end if there\n  doesn\u0027t seem to be any matching order.\n\n* If the script can\u0027t find a place to put a new include (mostly\n  because the file doesn\u0027t have fitting include block), it prints out\n  an error message indicating which .h file needs to be added to the\n  file.\n\nThe conversion was done in the following steps.\n\n1. The initial automatic conversion of all .c files updated slightly\n   over 4000 files, deleting around 700 includes and adding ~480 gfp.h\n   and ~3000 slab.h inclusions.  The script emitted errors for ~400\n   files.\n\n2. Each error was manually checked.  Some didn\u0027t need the inclusion,\n   some needed manual addition while adding it to implementation .h or\n   embedding .c file was more appropriate for others.  This step added\n   inclusions to around 150 files.\n\n3. The script was run again and the output was compared to the edits\n   from #2 to make sure no file was left behind.\n\n4. Several build tests were done and a couple of problems were fixed.\n   e.g. lib/decompress_*.c used malloc/free() wrappers around slab\n   APIs requiring slab.h to be added manually.\n\n5. The script was run on all .h files but without automatically\n   editing them as sprinkling gfp.h and slab.h inclusions around .h\n   files could easily lead to inclusion dependency hell.  Most gfp.h\n   inclusion directives were ignored as stuff from gfp.h was usually\n   wildly available and often used in preprocessor macros.  Each\n   slab.h inclusion directive was examined and added manually as\n   necessary.\n\n6. percpu.h was updated not to include slab.h.\n\n7. Build test were done on the following configurations and failures\n   were fixed.  CONFIG_GCOV_KERNEL was turned off for all tests (as my\n   distributed build env didn\u0027t work with gcov compiles) and a few\n   more options had to be turned off depending on archs to make things\n   build (like ipr on powerpc/64 which failed due to missing writeq).\n\n   * x86 and x86_64 UP and SMP allmodconfig and a custom test config.\n   * powerpc and powerpc64 SMP allmodconfig\n   * sparc and sparc64 SMP allmodconfig\n   * ia64 SMP allmodconfig\n   * s390 SMP allmodconfig\n   * alpha SMP allmodconfig\n   * um on x86_64 SMP allmodconfig\n\n8. percpu.h modifications were reverted so that it could be applied as\n   a separate patch and serve as bisection point.\n\nGiven the fact that I had only a couple of failures from tests on step\n6, I\u0027m fairly confident about the coverage of this conversion patch.\nIf there is a breakage, it\u0027s likely to be something in one of the arch\nheaders which should be easily discoverable easily on most builds of\nthe specific arch.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nGuess-its-ok-by: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nCc: Ingo Molnar \u003cmingo@redhat.com\u003e\nCc: Lee Schermerhorn \u003cLee.Schermerhorn@hp.com\u003e\n"
    },
    {
      "commit": "10fad5e46f6c7bdfb01b1a012380a38e3c6ab346",
      "tree": "9ec6e3955e7f879f64ea79812cf5ecd41baa6939",
      "parents": [
        "259354deaaf03d49a02dbb9975d6ec2a54675672"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 10 18:57:54 2010 +0900"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Mar 29 23:07:12 2010 +0900"
      },
      "message": "percpu, module: implement and use is_kernel/module_percpu_address()\n\nlockdep has custom code to check whether a pointer belongs to static\npercpu area which is somewhat broken.  Implement proper\nis_kernel/module_percpu_address() and replace the custom code.\n\nOn UP, percpu variables are regular static variables and can\u0027t be\ndistinguished from them.  Always return %false on UP.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Rusty Russell \u003crusty@rustcorp.com.au\u003e\nCc: Ingo Molnar \u003cmingo@redhat.com\u003e\n"
    },
    {
      "commit": "8128f55a0bc60cf3779135a1f837c4323e77c582",
      "tree": "a6f23d18496049651617f5c5cbe21648fa521f4e",
      "parents": [
        "50da56706b989b99edb20f9c03172df193240c78",
        "c26f91a3df1999ec1b3298372d73f90cbab81106"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Mar 26 15:08:31 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Mar 26 15:08:31 2010 -0700"
      },
      "message": "Merge branch \u0027core-fixes-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip\n\n* \u0027core-fixes-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:\n  x86: Remove excessive early_res debug output\n  softlockup: Stop spurious softlockup messages due to overflow\n  rcu: Fix local_irq_disable() CONFIG_PROVE_RCU\u003dy false positives\n  rcu: Fix tracepoints \u0026 lockdep false positive\n  rcu: Make rcu_read_lock_bh_held() allow for disabled BH\n"
    },
    {
      "commit": "faa4602e47690fb11221e00f9b9697c8dc0d4b19",
      "tree": "af667d1cdff7dc63b6893ee3f27a1f2503229ed1",
      "parents": [
        "7c5ecaf7666617889f337296c610815b519abfa9"
      ],
      "author": {
        "name": "Peter Zijlstra",
        "email": "a.p.zijlstra@chello.nl",
        "time": "Thu Mar 25 14:51:50 2010 +0100"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Fri Mar 26 11:33:55 2010 +0100"
      },
      "message": "x86, perf, bts, mm: Delete the never used BTS-ptrace code\n\nSupport for the PMU\u0027s BTS features has been upstreamed in\nv2.6.32, but we still have the old and disabled ptrace-BTS,\nas Linus noticed it not so long ago.\n\nIt\u0027s buggy: TIF_DEBUGCTLMSR is trampling all over that MSR without\nregard for other uses (perf) and doesn\u0027t provide the flexibility\nneeded for perf either.\n\nIts users are ptrace-block-step and ptrace-bts, since ptrace-bts\nwas never used and ptrace-block-step can be implemented using a\nmuch simpler approach.\n\nSo axe all 3000 lines of it. That includes the *locked_memory*()\nAPIs in mm/mlock.c as well.\n\nReported-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\nSigned-off-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Roland McGrath \u003croland@redhat.com\u003e\nCc: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Markus Metzger \u003cmarkus.t.metzger@intel.com\u003e\nCc: Steven Rostedt \u003crostedt@goodmis.org\u003e\nCc: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nLKML-Reference: \u003c20100325135413.938004390@chello.nl\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "e1ee65d85904c5dd4b9cea1b15d5e85e20eae8a1",
      "tree": "5de7d6dd923a04eda69fdedd1209ea249ef081cf",
      "parents": [
        "7561e8ca0dfaf6fca3feef982830de3b65300e5b"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Thu Mar 25 16:48:44 2010 +0000"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Mar 25 14:13:27 2010 -0700"
      },
      "message": "NOMMU: Fix __get_user_pages() to pin last page on offset buffers\n\nFix __get_user_pages() to make it pin the last page on a buffer that doesn\u0027t\nbegin at the start of a page, but is a multiple of PAGE_SIZE in size.\n\nThe problem is that __get_user_pages() advances the pointer too much when it\niterates to the next page if the page it\u0027s currently looking at isn\u0027t used from\nthe first byte.  This can cause the end of a short VMA to be reached\nprematurely, resulting in the last page being lost.\n\nSigned-off-by: Steven J. Magnani \u003csteve@digidescorp.com\u003e\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "7561e8ca0dfaf6fca3feef982830de3b65300e5b",
      "tree": "8b3fa49efdec009515b9de7503160877953c4027",
      "parents": [
        "39f1cd635cbe8a42c3c74fa6bf9f61c1156bd27b"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Thu Mar 25 16:48:38 2010 +0000"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Mar 25 14:13:26 2010 -0700"
      },
      "message": "NOMMU: Revert \u0027nommu: get_user_pages(): pin last page on non-page-aligned start\u0027\n\nRevert the following patch:\n\n\tcommit c08c6e1f54c85fc299cf9f88cf330d6dd28a9a1d\n\tAuthor: Steven J. Magnani \u003csteve@digidescorp.com\u003e\n\tDate:   Fri Mar 5 13:42:24 2010 -0800\n\n\tnommu: get_user_pages(): pin last page on non-page-aligned start\n\nAs it assumes that the mappings begin at the start of pages - something that\nisn\u0027t necessarily true on NOMMU systems.  On NOMMU systems, it is possible for\na mapping to only occupy part of the page, and not necessarily touch either end\nof it; in fact it\u0027s also possible for multiple non-overlapping mappings to\ncoexist on one page (consider direct mappings of ROMFS files, for example).\n\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\nAcked-by: Steven J. Magnani \u003csteve@digidescorp.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "c6b6ef8bb05af632889c5536513b9f4004961f73",
      "tree": "85f90f246fa1da0d47c48c43a735bbfac33c542e",
      "parents": [
        "7198f3c9b13c7aa1e5d9f7ff74c0ea303174feff"
      ],
      "author": {
        "name": "Lee Schermerhorn",
        "email": "lee.schermerhorn@hp.com",
        "time": "Tue Mar 23 13:35:41 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 24 16:31:22 2010 -0700"
      },
      "message": "mempolicy: fix get_mempolicy() for relative and static nodes\n\nDiscovered while testing other mempolicy changes:\n\nget_mempolicy() does not handle static/relative mode flags correctly.\nReturn the value that the user specified so that it can be restored\nvia set_mempolicy() if desired.\n\nSigned-off-by: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nCc: Hugh Dickins \u003chugh.dickins@tiscali.co.uk\u003e\nCc: Ravikiran Thirumalai \u003ckiran@scalex86.org\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nCc: David Rientjes \u003crientjes@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": "298359c5bf06c04258d7cf552426e198c47e83c1",
      "tree": "d8ba710675a2e4e9dabbc9ee06a4445fb5657ce5",
      "parents": [
        "53feb29767c29c877f9d47dcfe14211b5b0f7ebd"
      ],
      "author": {
        "name": "Michael S. Tsirkin",
        "email": "mst@redhat.com",
        "time": "Tue Mar 23 13:35:37 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 24 16:31:21 2010 -0700"
      },
      "message": "exit: fix oops in sync_mm_rss\n\nIn 2.6.34-rc1, removing vhost_net module causes an oops in sync_mm_rss\n(called from do_exit) when workqueue is destroyed.  This does not happen\non net-next, or with vhost on top of to 2.6.33.\n\nThe issue seems to be introduced by\n34e55232e59f7b19050267a05ff1226e5cd122a5 (\"mm: avoid false sharing of\nmm_counter) which added sync_mm_rss() that is passed task-\u003emm, and\ndereferences it without checking.  If task is a kernel thread, mm might be\nNULL.  I think this might also happen e.g.  with aio.\n\nThis patch fixes the oops by calling sync_mm_rss when task-\u003emm is set to\nNULL.  I also added BUG_ON to detect any other cases where counters get\nincremented while mm is NULL.\n\nThe oops I observed looks like this:\n\nBUG: unable to handle kernel NULL pointer dereference at 00000000000002a8\nIP: [\u003cffffffff810b436d\u003e] sync_mm_rss+0x33/0x6f\nPGD 0\nOops: 0002 [#1] SMP\nlast sysfs file: /sys/devices/system/cpu/cpu7/cache/index2/shared_cpu_map\nCPU 2\nModules linked in: vhost_net(-) tun bridge stp sunrpc ipv6 cpufreq_ondemand acpi_cpufreq freq_table kvm_intel kvm i5000_edac edac_core rtc_cmos bnx2 button i2c_i801 i2c_core rtc_core e1000e sg joydev ide_cd_mod serio_raw pcspkr rtc_lib cdrom virtio_net virtio_blk virtio_pci virtio_ring virtio af_packet e1000 shpchp aacraid uhci_hcd ohci_hcd ehci_hcd [last unloaded: microcode]\n\nPid: 2046, comm: vhost Not tainted 2.6.34-rc1-vhost #25 System Planar/IBM System x3550 -[7978B3G]-\nRIP: 0010:[\u003cffffffff810b436d\u003e]  [\u003cffffffff810b436d\u003e] sync_mm_rss+0x33/0x6f\nRSP: 0018:ffff8802379b7e60  EFLAGS: 00010202\nRAX: 0000000000000008 RBX: ffff88023f2390c0 RCX: 0000000000000000\nRDX: ffff88023f2396b0 RSI: 0000000000000000 RDI: ffff88023f2390c0\nRBP: ffff8802379b7e60 R08: 0000000000000000 R09: 0000000000000000\nR10: ffff88023aecfbc0 R11: 0000000000013240 R12: 0000000000000000\nR13: ffffffff81051a6c R14: ffffe8ffffc0f540 R15: 0000000000000000\nFS:  0000000000000000(0000) GS:ffff880001e80000(0000) knlGS:0000000000000000\nCS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b\nCR2: 00000000000002a8 CR3: 000000023af23000 CR4: 00000000000406e0\nDR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000\nDR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400\nProcess vhost (pid: 2046, threadinfo ffff8802379b6000, task ffff88023f2390c0)\nStack:\n ffff8802379b7ee0 ffffffff81040687 ffffe8ffffc0f558 ffffffffa00a3e2d\n\u003c0\u003e 0000000000000000 ffff88023f2390c0 ffffffff81055817 ffff8802379b7e98\n\u003c0\u003e ffff8802379b7e98 0000000100000286 ffff8802379b7ee0 ffff88023ad47d78\nCall Trace:\n [\u003cffffffff81040687\u003e] do_exit+0x147/0x6c4\n [\u003cffffffffa00a3e2d\u003e] ? handle_rx_net+0x0/0x17 [vhost_net]\n [\u003cffffffff81055817\u003e] ? autoremove_wake_function+0x0/0x39\n [\u003cffffffff81051a6c\u003e] ? worker_thread+0x0/0x229\n [\u003cffffffff810553c9\u003e] kthreadd+0x0/0xf2\n [\u003cffffffff810038d4\u003e] kernel_thread_helper+0x4/0x10\n [\u003cffffffff81055342\u003e] ? kthread+0x0/0x87\n [\u003cffffffff810038d0\u003e] ? kernel_thread_helper+0x0/0x10\nCode: 00 8b 87 6c 02 00 00 85 c0 74 14 48 98 f0 48 01 86 a0 02 00 00 c7 87 6c 02 00 00 00 00 00 00 8b 87 70 02 00 00 85 c0 74 14 48 98 \u003cf0\u003e 48 01 86 a8 02 00 00 c7 87 70 02 00 00 00 00 00 00 8b 87 74\nRIP  [\u003cffffffff810b436d\u003e] sync_mm_rss+0x33/0x6f\n RSP \u003cffff8802379b7e60\u003e\nCR2: 00000000000002a8\n---[ end trace 41603ba922beddd2 ]---\nFixing recursive fault but reboot is needed!\n\n(note: handle_rx_net is a work item using workqueue in question).\nsync_mm_rss+0x33/0x6f gave me a hint. I also tried reverting\n34e55232e59f7b19050267a05ff1226e5cd122a5 and the oops goes away.\n\nThe module in question calls use_mm and later unuse_mm from a kernel\nthread.  It is when this kernel thread is destroyed that the crash\nhappens.\n\nSigned-off-by: Michael S. Tsirkin \u003cmst@redhat.com\u003e\nAndrea Arcangeli \u003caarcange@redhat.com\u003e\nReviewed-by: Rik van Riel \u003criel@redhat.com\u003e\nReviewed-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.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": "926f2ae04f183098cf9a30521776fb2759c8afeb",
      "tree": "2d8583f77478557d508068ccb9bcc62cdc81920d",
      "parents": [
        "12821f5fb942e795f8009ece14bde868893bd811"
      ],
      "author": {
        "name": "KOSAKI Motohiro",
        "email": "kosaki.motohiro@jp.fujitsu.com",
        "time": "Tue Mar 23 13:35:32 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 24 16:31:21 2010 -0700"
      },
      "message": "tmpfs: cleanup mpol_parse_str()\n\nmpol_parse_str() made lots \u0027err\u0027 variable related bug.  Because it is ugly\nand reviewing unfriendly.\n\nThis patch simplifies it.\n\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Ravikiran Thirumalai \u003ckiran@scalex86.org\u003e\nCc: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nAcked-by: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nCc: Hugh Dickins \u003chugh.dickins@tiscali.co.uk\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": "12821f5fb942e795f8009ece14bde868893bd811",
      "tree": "6b83232e845bf8427d7ad313ac31aa910ff6d1f7",
      "parents": [
        "d69b2e63e9172afb4d07c305601b79a55509ac4c"
      ],
      "author": {
        "name": "KOSAKI Motohiro",
        "email": "kosaki.motohiro@jp.fujitsu.com",
        "time": "Tue Mar 23 13:35:31 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 24 16:31:21 2010 -0700"
      },
      "message": "tmpfs: handle MPOL_LOCAL mount option properly\n\ncommit 71fe804b6d5 (mempolicy: use struct mempolicy pointer in\nshmem_sb_info) added mpol\u003dlocal mount option.  but its feature is broken\nsince it was born.  because such code always return 1 (i.e.  mount\nfailure).\n\nThis patch fixes it.\n\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Ravikiran Thirumalai \u003ckiran@scalex86.org\u003e\nCc: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nAcked-by: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nCc: Hugh Dickins \u003chugh.dickins@tiscali.co.uk\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": "d69b2e63e9172afb4d07c305601b79a55509ac4c",
      "tree": "b1abae07eaa3427dedca17427100664cdccf8a38",
      "parents": [
        "413b43deab8377819aba1dbad2abf0c15d59b491"
      ],
      "author": {
        "name": "KOSAKI Motohiro",
        "email": "kosaki.motohiro@jp.fujitsu.com",
        "time": "Tue Mar 23 13:35:30 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 24 16:31:21 2010 -0700"
      },
      "message": "tmpfs: mpol\u003dbind:0 don\u0027t cause mount error.\n\nCurrently, following mount operation cause mount error.\n\n% mount -t tmpfs -ompol\u003dbind:0 none /tmp\n\nBecause commit 71fe804b6d5 (mempolicy: use struct mempolicy pointer in\nshmem_sb_info) corrupted MPOL_BIND parse code.\n\nThis patch restore the needed one.\n\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Ravikiran Thirumalai \u003ckiran@scalex86.org\u003e\nCc: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nAcked-by: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nCc: Hugh Dickins \u003chugh.dickins@tiscali.co.uk\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": "413b43deab8377819aba1dbad2abf0c15d59b491",
      "tree": "07ed7302b20b620f09c479e36c6fd7bd02559860",
      "parents": [
        "8c363afe94b885d39ae2e93e41680282a470ad84"
      ],
      "author": {
        "name": "Ravikiran G Thirumalai",
        "email": "kiran@scalex86.org",
        "time": "Tue Mar 23 13:35:28 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 24 16:31:21 2010 -0700"
      },
      "message": "tmpfs: fix oops on mounts with mpol\u003ddefault\n\nFix an \u0027oops\u0027 when a tmpfs mount point is mounted with the mpol\u003ddefault\nmempolicy.\n\nUpon remounting a tmpfs mount point with \u0027mpol\u003ddefault\u0027 option, the mount\ncode crashed with a null pointer dereference.  The initial problem report\nwas on 2.6.27, but the problem exists in mainline 2.6.34-rc as well.  On\nexamining the code, we see that mpol_new returns NULL if default mempolicy\nwas requested.  This \u0027NULL\u0027 mempolicy is accessed to store the node mask\nresulting in oops.\n\nThe following patch fixes it.\n\nSigned-off-by: Ravikiran Thirumalai \u003ckiran@scalex86.org\u003e\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nAcked-by: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nCc: Hugh Dickins \u003chugh.dickins@tiscali.co.uk\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": "cb53237513bd1e090cce120efe12ede72c932b5f",
      "tree": "43d0665b57b654cf10ea12233e8234367e1634e0",
      "parents": [
        "20072205fcdf7d85cd3101f1f11dfab333c5fd0c"
      ],
      "author": {
        "name": "Robin Holt",
        "email": "holt@sgi.com",
        "time": "Tue Mar 23 13:35:26 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 24 16:31:20 2010 -0700"
      },
      "message": "mm/ksm.c is doing an unneeded _notify in write_protect_page.\n\nksm.c\u0027s write_protect_page implements a lockless means of verifying a page\ndoes not have any users of the page which are not accounted for via other\nkernel tracking means.  It does this by removing the writable pte with TLB\nflushes, checking the page_count against the total known users, and then\nusing set_pte_at_notify to make it a read-only entry.\n\nAn unneeded mmu_notifier callout is made in the case where the known users\ndoes not match the page_count.  In that event, we are inserting the\nidentical pte and there is no need for the set_pte_at_notify, but rather\nthe simpler set_pte_at suffices.\n\nSigned-off-by: Robin Holt \u003cholt@sgi.com\u003e\nAcked-by: Izik Eidus \u003cieidus@redhat.com\u003e\nAcked-by: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nAcked-by: Hugh Dickins \u003chugh.dickins@tiscali.co.uk\u003e\nCc: Chris Wright \u003cchrisw@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": "3fa30460ea502133a18a07b14452cd660906f16f",
      "tree": "0e7bd3404258fae1adc8813a7fc3c21c13ba3cba",
      "parents": [
        "28b8e8d4e2e3e27aa911b5aee59d5194a878f53e"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Tue Mar 23 13:35:21 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 24 16:31:20 2010 -0700"
      },
      "message": "nommu: fix an incorrect comment in the do_mmap_shared_file()\n\nFix an incorrect comment in the do_mmap_shared_file().  If a mapping is\nrequested MAP_SHARED, then a private copy cannot be made and still provide\ncorrect semantics.\n\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\nReported-by: Dave Hudson \u003cuclinux@blueteddy.net\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "e7bbcdf3747e3919c31cfa87853c69d178bce548",
      "tree": "42493b615337a170f3a019fc41dd90c4d4d9b342",
      "parents": [
        "9d34706f42f9b8c15185423d9af98d37ba21d011"
      ],
      "author": {
        "name": "Dan Carpenter",
        "email": "error27@gmail.com",
        "time": "Tue Mar 23 13:35:12 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 24 16:31:19 2010 -0700"
      },
      "message": "memcontrol: fix potential null deref\n\nThere was a potential null deref introduced in c62b1a3b31b5 (\"memcg: use\ngeneric percpu instead of private implementation\").\n\nSigned-off-by: Dan Carpenter \u003cerror27@gmail.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": "5cfb80a73b5a52fb19d8b0611203e4dd58e8e9a2",
      "tree": "bb4db72652827235f1e548c6c9db1a04406c26ad",
      "parents": [
        "ae6be51ed01d6c4aaf249a207b4434bc7785853b"
      ],
      "author": {
        "name": "Daisuke Nishimura",
        "email": "d-nishimura@mtf.biglobe.ne.jp",
        "time": "Tue Mar 23 13:35:11 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 24 16:31:19 2010 -0700"
      },
      "message": "memcg: disable move charge in no mmu case\n\nIn commit 02491447 (\"memcg: move charges of anonymous swap\"), I tried to\ndisable move charge feature in no mmu case by enclosing all the related\nfunctions with \"#ifdef CONFIG_MMU\", but the commit places these ifdefs in\nwrong place.  (it seems that it\u0027s mangled while handling some fixes...)\n\nThis patch fixes it up.\n\nSigned-off-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbalbir@in.ibm.com\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.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": "c26f91a3df1999ec1b3298372d73f90cbab81106",
      "tree": "be7998c5c93e9ce091c732e164848a865522a680",
      "parents": [
        "8c2eb4805d422bdbf60ba00ff233c794d23c3c00"
      ],
      "author": {
        "name": "Jiri Kosina",
        "email": "jkosina@suse.cz",
        "time": "Mon Mar 22 09:32:26 2010 +0100"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Wed Mar 24 19:51:08 2010 +0100"
      },
      "message": "x86: Remove excessive early_res debug output\n\nCommit 08677214e318297 (\"x86: Make 64 bit use early_res instead\nof bootmem  before slab\") introduced early_res replacement for\nbootmem, but left code  in __free_pages_memory() which dumps all\nthe ranges that are beeing freed,  without any additional\ninformation, causing some noise in dmesg during  bootup.\n\nJust remove printing of the ranges, that doesn\u0027t provide\nanything useful  anyway.\n\nWhile at it, remove other commented-out KERN_DEBUG messages in\nthe NO_BOOTMEM code as well.\n\nSigned-off-by: Jiri Kosina \u003cjkosina@suse.cz\u003e\nFound-OK-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Yinghai Lu \u003cyinghai@kernel.org\u003e\nLKML-Reference: \u003calpine.LNX.2.00.1003220931360.18642@pobox.suse.cz\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "e9e58a4ec3b1086d1ed8c915311aef1ae55454fd",
      "tree": "a500ec01cce13fa17f2400ac57f4ad36f4d37bca",
      "parents": [
        "a3d3203e4bb40f253b1541e310dc0f9305be7c84"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Mon Mar 15 00:34:57 2010 -0400"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 17 18:43:47 2010 -0700"
      },
      "message": "memcg: avoid use cmpxchg in swap cgroup maintainance\n\nswap_cgroup uses 2bytes data and uses cmpxchg in a new operation.  2byte\ncmpxchg/xchg is not available on some archs.  This patch replaces\ncmpxchg/xchg with operations under lock.\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nReported-by: Sachin Sant \u003csachinp@in.ibm.com\u003e wrote:\nAcked-by: Balbir Singh \u003cbalbir@in.ibm.com\u003e\nAcked-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nCc: Benjamin Herrenschmidt \u003cbenh@kernel.crashing.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "4e3eaddd142e2142c048c5052a0a9d2604fccfc6",
      "tree": "5bc45a286502e54e790c54948f22364c5afd9d89",
      "parents": [
        "8655e7e3ddec60603c4f6c14cdf642e2ba198df8",
        "b97c4bc16734a2e597dac7f91ee9eb78f4aeef9a"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Mar 13 14:43:01 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Mar 13 14:43:01 2010 -0800"
      },
      "message": "Merge branch \u0027core-fixes-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip\n\n* \u0027core-fixes-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:\n  locking: Make sparse work with inline spinlocks and rwlocks\n  x86/mce: Fix RCU lockdep splats\n  rcu: Increase RCU CPU stall timeouts if PROVE_RCU\n  ftrace: Replace read_barrier_depends() with rcu_dereference_raw()\n  rcu: Suppress RCU lockdep warnings during early boot\n  rcu, ftrace: Fix RCU lockdep splat in ftrace_perf_buf_prepare()\n  rcu: Suppress __mpol_dup() false positive from RCU lockdep\n  rcu: Make rcu_read_lock_sched_held() handle !PREEMPT\n  rcu: Add control variables to lockdep_rcu_dereference() diagnostics\n  rcu, cgroup: Relax the check in task_subsys_state() as early boot is now handled by lockdep-RCU\n  rcu: Use wrapper function instead of exporting tasklist_lock\n  sched, rcu: Fix rcu_dereference() for RCU-lockdep\n  rcu: Make task_subsys_state() RCU-lockdep checks handle boot-time use\n  rcu: Fix holdoff for accelerated GPs for last non-dynticked CPU\n  x86/gart: Unexport gart_iommu_aperture\n\nFix trivial conflicts in kernel/trace/ftrace.c\n"
    },
    {
      "commit": "c32da02342b7521df25fefc2ef20aee0e61cf887",
      "tree": "7e38f664fa3e13602c357d37f77d8adcf82fccc2",
      "parents": [
        "dca1d9f6d7ae428c193f32bd3e9a4ca13176648b",
        "318ae2edc3b29216abd8a2510f3f80b764f06858"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Mar 12 16:04:50 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Mar 12 16:04:50 2010 -0800"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial: (56 commits)\n  doc: fix typo in comment explaining rb_tree usage\n  Remove fs/ntfs/ChangeLog\n  doc: fix console doc typo\n  doc: cpuset: Update the cpuset flag file\n  Fix of spelling in arch/sparc/kernel/leon_kernel.c no longer needed\n  Remove drivers/parport/ChangeLog\n  Remove drivers/char/ChangeLog\n  doc: typo - Table 1-2 should refer to \"status\", not \"statm\"\n  tree-wide: fix typos \"ass?o[sc]iac?te\" -\u003e \"associate\" in comments\n  No need to patch AMD-provided drivers/gpu/drm/radeon/atombios.h\n  devres/irq: Fix devm_irq_match comment\n  Remove reference to kthread_create_on_cpu\n  tree-wide: Assorted spelling fixes\n  tree-wide: fix \u0027lenght\u0027 typo in comments and code\n  drm/kms: fix spelling in error message\n  doc: capitalization and other minor fixes in pnp doc\n  devres: typo fix s/dev/devm/\n  Remove redundant trailing semicolons from macros\n  fix typo \"definetly\" -\u003e \"definitely\" in comment\n  tree-wide: s/widht/width/g typo in comments\n  ...\n\nFix trivial conflict in Documentation/laptops/00-INDEX\n"
    },
    {
      "commit": "867578cbccb0893cc14fc29c670f7185809c90d6",
      "tree": "e4d0cefac265fc64399223bc82ed714a88ebe20c",
      "parents": [
        "0263c12c12ccc90edc9d856fa839f8936183e6d1"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Wed Mar 10 15:22:39 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Mar 12 15:52:38 2010 -0800"
      },
      "message": "memcg: fix oom kill behavior\n\nIn current page-fault code,\n\n\thandle_mm_fault()\n\t\t-\u003e ...\n\t\t-\u003e mem_cgroup_charge()\n\t\t-\u003e map page or handle error.\n\t-\u003e check return code.\n\nIf page fault\u0027s return code is VM_FAULT_OOM, page_fault_out_of_memory() is\ncalled.  But if it\u0027s caused by memcg, OOM should have been already\ninvoked.\n\nThen, I added a patch: a636b327f731143ccc544b966cfd8de6cb6d72c6.  That\npatch records last_oom_jiffies for memcg\u0027s sub-hierarchy and prevents\npage_fault_out_of_memory from being invoked in near future.\n\nBut Nishimura-san reported that check by jiffies is not enough when the\nsystem is terribly heavy.\n\nThis patch changes memcg\u0027s oom logic as.\n * If memcg causes OOM-kill, continue to retry.\n * remove jiffies check which is used now.\n * add memcg-oom-lock which works like perzone oom lock.\n * If current is killed(as a process), bypass charge.\n\nSomething more sophisticated can be added but this pactch does\nfundamental things.\nTODO:\n - add oom notifier\n - add permemcg disable-oom-kill flag and freezer at oom.\n - more chances for wake up oom waiter (when changing memory limit etc..)\n\nReviewed-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nTested-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Balbir Singh \u003cbalbir@in.ibm.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nSigned-off-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": "a0a4db548edcce067c1201ef25cf2bc29f32dca4",
      "tree": "6f8139a582179666cd248d978332ed0e32ad9f0f",
      "parents": [
        "4ab78683c17d739c2a2077141dcf81a02b7fb57e"
      ],
      "author": {
        "name": "Kirill A. Shutemov",
        "email": "kirill@shutemov.name",
        "time": "Wed Mar 10 15:22:34 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Mar 12 15:52:37 2010 -0800"
      },
      "message": "cgroups: remove events before destroying subsystem state objects\n\nEvents should be removed after rmdir of cgroup directory, but before\ndestroying subsystem state objects.  Let\u0027s take reference to cgroup\ndirectory dentry to do that.\n\nSigned-off-by: Kirill A. Shutemov \u003ckirill@shutemov.name\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hioryu@jp.fujitsu.com\u003e\nCc: Paul Menage \u003cmenage@google.com\u003e\nAcked-by: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nCc: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nCc: Pavel Emelyanov \u003cxemul@openvz.org\u003e\nCc: Dan Malek \u003cdan@embeddedalley.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": "daaf1e68874c078a15ae6ae827751839c4d81739",
      "tree": "22ed2e28b1c4f0b714df680ffff6407e519c5c60",
      "parents": [
        "1080d7a30304d03b1d9fd530aacd8aece2d702a2"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Wed Mar 10 15:22:32 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Mar 12 15:52:37 2010 -0800"
      },
      "message": "memcg: handle panic_on_oom\u003dalways case\n\nPresently, if panic_on_oom\u003d2, the whole system panics even if the oom\nhappend in some special situation (as cpuset, mempolicy....).  Then,\npanic_on_oom\u003d2 means painc_on_oom_always.\n\nNow, memcg doesn\u0027t check panic_on_oom flag. This patch adds a check.\n\nBTW, how it\u0027s useful ?\n\nkdump+panic_on_oom\u003d2 is the last tool to investigate what happens in\noom-ed system.  When a task is killed, the sysytem recovers and there will\nbe few hint to know what happnes.  In mission critical system, oom should\nnever happen.  Then, panic_on_oom\u003d2+kdump is useful to avoid next OOM by\nknowing precise information via snapshot.\n\nTODO:\n - For memcg, it\u0027s for isolate system\u0027s memory usage, oom-notiifer and\n   freeze_at_oom (or rest_at_oom) should be implemented. Then, management\n   daemon can do similar jobs (as kdump) or taking snapshot per cgroup.\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: Nick Piggin \u003cnpiggin@suse.de\u003e\nReviewed-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": "d2265e6fa3f220ea5fd37522d13390e9675adcf7",
      "tree": "30e0264bcd379e21507b22243891880b7418f68f",
      "parents": [
        "430e48631e72aeab74d844c57b441f98a2e36eee"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Wed Mar 10 15:22:31 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Mar 12 15:52:37 2010 -0800"
      },
      "message": "memcg : share event counter rather than duplicate\n\nMemcg has 2 eventcountes which counts \"the same\" event.  Just usages are\ndifferent from each other.  This patch tries to reduce event counter.\n\nNow logic uses \"only increment, no reset\" counter and masks for each\nchecks.  Softlimit chesk was done per 1000 evetns.  So, the similar check\ncan be done by !(new_counter \u0026 0x3ff).  Threshold check was done per 100\nevents.  So, the similar check can be done by (!new_counter \u0026 0x7f)\n\nALL event checks are done right after EVENT percpu counter is updated.\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Kirill A. Shutemov \u003ckirill@shutemov.name\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": "430e48631e72aeab74d844c57b441f98a2e36eee",
      "tree": "e1b3eadc1b5c1871db0bf1247af8684b53cae12a",
      "parents": [
        "c62b1a3b31b5e27a6c5c2e91cc5ce05fdb6344d0"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Wed Mar 10 15:22:30 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Mar 12 15:52:37 2010 -0800"
      },
      "message": "memcg: update threshold and softlimit at commit\n\nPresently, move_task does \"batched\" precharge.  Because res_counter or\ncss\u0027s refcnt are not-scalable jobs for memcg, try_charge_()..  tend to be\ndone in batched manner if allowed.\n\nNow, softlimit and threshold check their event counter in try_charge, but\nthe charge is not a per-page event.  And event counter is not updated at\ncharge().  Moreover, precharge doesn\u0027t pass \"page\" to try_charge() and\nsoftlimit tree will be never updated until uncharge() causes an event.\"\n\nSo the best place to check the event counter is commit_charge().  This is\nper-page event by its nature.  This patch move checks to there.\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Kirill A. Shutemov \u003ckirill@shutemov.name\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": "c62b1a3b31b5e27a6c5c2e91cc5ce05fdb6344d0",
      "tree": "6887141ac2afc2a8f3a1a7dfa39a56f6899a9864",
      "parents": [
        "6a6135b64fda39d931a79090f4da37f1c6da4a8c"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Wed Mar 10 15:22:29 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Mar 12 15:52:37 2010 -0800"
      },
      "message": "memcg: use generic percpu instead of private implementation\n\nWhen per-cpu counter for memcg was implemneted, dynamic percpu allocator\nwas not very good.  But now, we have good one and useful macros.  This\npatch replaces memcg\u0027s private percpu counter implementation with generic\ndynamic percpu allocator.\n\nThe benefits are\n\t- We can remove private implementation.\n\t- The counters will be NUMA-aware. (Current one is not...)\n\t- This patch makes sizeof struct mem_cgroup smaller. Then,\n\t  struct mem_cgroup may be fit in page size on small config.\n        - About basic performance aspects, see below.\n\n [Before]\n # size mm/memcontrol.o\n   text    data     bss     dec     hex filename\n  24373    2528    4132   31033    7939 mm/memcontrol.o\n\n [page-fault-throuput test on 8cpu/SMP in root cgroup]\n # /root/bin/perf stat -a -e page-faults,cache-misses --repeat 5 ./multi-fault-fork 8\n\n Performance counter stats for \u0027./multi-fault-fork 8\u0027 (5 runs):\n\n       45878618  page-faults                ( +-   0.110% )\n      602635826  cache-misses               ( +-   0.105% )\n\n   61.005373262  seconds time elapsed   ( +-   0.004% )\n\n Then cache-miss/page fault \u003d 13.14\n\n [After]\n #size mm/memcontrol.o\n   text    data     bss     dec     hex filename\n  23913    2528    4132   30573    776d mm/memcontrol.o\n # /root/bin/perf stat -a -e page-faults,cache-misses --repeat 5 ./multi-fault-fork 8\n\n Performance counter stats for \u0027./multi-fault-fork 8\u0027 (5 runs):\n\n       48179400  page-faults                ( +-   0.271% )\n      588628407  cache-misses               ( +-   0.136% )\n\n   61.004615021  seconds time elapsed   ( +-   0.004% )\n\n  Then cache-miss/page fault \u003d 12.22\n\n Text size is reduced.\n This performance improvement is not big and will be invisible in real world\n applications. But this result shows this patch has some good effect even\n on (small) SMP.\n\nHere is a test program I used.\n\n 1. fork() processes on each cpus.\n 2. do page fault repeatedly on each process.\n 3. after 60secs, kill all childredn and exit.\n\n(3 is necessary for getting stable data, this is improvement from previous one.)\n\n#define _GNU_SOURCE\n#include \u003cstdio.h\u003e\n#include \u003csched.h\u003e\n#include \u003csys/mman.h\u003e\n#include \u003csys/types.h\u003e\n#include \u003csys/stat.h\u003e\n#include \u003cfcntl.h\u003e\n#include \u003csignal.h\u003e\n#include \u003cstdlib.h\u003e\n\n/*\n * For avoiding contention in page table lock, FAULT area is\n * sparse. If FAULT_LENGTH is too large for your cpus, decrease it.\n */\n#define FAULT_LENGTH\t(2 * 1024 * 1024)\n#define PAGE_SIZE\t4096\n#define MAXNUM\t\t(128)\n\nvoid alarm_handler(int sig)\n{\n}\n\nvoid *worker(int cpu, int ppid)\n{\n\tvoid *start, *end;\n\tchar *c;\n\tcpu_set_t set;\n\tint i;\n\n\tCPU_ZERO(\u0026set);\n\tCPU_SET(cpu, \u0026set);\n\tsched_setaffinity(0, sizeof(set), \u0026set);\n\n\tstart \u003d mmap(NULL, FAULT_LENGTH, PROT_READ|PROT_WRITE,\n\t\t\tMAP_PRIVATE | MAP_ANONYMOUS, 0, 0);\n\tif (start \u003d\u003d MAP_FAILED) {\n\t\tperror(\"mmap\");\n\t\texit(1);\n\t}\n\tend \u003d start + FAULT_LENGTH;\n\n\tpause();\n\t//fprintf(stderr, \"run%d\", cpu);\n\twhile (1) {\n\t\tfor (c \u003d (char*)start; (void *)c \u003c end; c +\u003d PAGE_SIZE)\n\t\t\t*c \u003d 0;\n\t\tmadvise(start, FAULT_LENGTH, MADV_DONTNEED);\n\t}\n\treturn NULL;\n}\n\nint main(int argc, char *argv[])\n{\n\tint num, i, ret, pid, status;\n\tint pids[MAXNUM];\n\n\tif (argc \u003c 2)\n\t\treturn 0;\n\n\tsetpgid(0, 0);\n\tsignal(SIGALRM, alarm_handler);\n\tnum \u003d atoi(argv[1]);\n\tpid \u003d getpid();\n\n\tfor (i \u003d 0; i \u003c num; ++i) {\n\t\tret \u003d fork();\n\t\tif (!ret) {\n\t\t\tworker(i, pid);\n\t\t\texit(0);\n\t\t}\n\t\tpids[i] \u003d ret;\n\t}\n\tsleep(1);\n\tkill(-pid, SIGALRM);\n\tsleep(60);\n\tfor (i \u003d 0; i \u003c num; i++)\n\t\tkill(pids[i], SIGKILL);\n\tfor (i \u003d 0; i \u003c num; i++)\n\t\twaitpid(pids[i], \u0026status, 0);\n\treturn 0;\n}\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@in.ibm.com\u003e\nCc: Pavel Emelyanov \u003cxemul@openvz.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "6a6135b64fda39d931a79090f4da37f1c6da4a8c",
      "tree": "b5ade9fdb3a46a86e0cae9ed4e645ea1e153a7ff",
      "parents": [
        "2e72b6347c9459e6cff5634ddc815485bae6985f"
      ],
      "author": {
        "name": "Kirill A. Shutemov",
        "email": "kirill@shutemov.name",
        "time": "Wed Mar 10 15:22:25 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Mar 12 15:52:37 2010 -0800"
      },
      "message": "memcg: typo in comment to mem_cgroup_print_oom_info()\n\ns/mem_cgroup_print_mem_info/mem_cgroup_print_oom_info/\n\nSigned-off-by: Kirill A. Shutemov \u003ckirill@shutemov.name\u003e\nCc: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nCc: Pavel Emelyanov \u003cxemul@openvz.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": "2e72b6347c9459e6cff5634ddc815485bae6985f",
      "tree": "48ceef47f2cd0d33f2a1dd816c1a05ca2cb3e0e2",
      "parents": [
        "378ce724bc2a0ef1243e11c09d58a70bb6be007a"
      ],
      "author": {
        "name": "Kirill A. Shutemov",
        "email": "kirill@shutemov.name",
        "time": "Wed Mar 10 15:22:24 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Mar 12 15:52:37 2010 -0800"
      },
      "message": "memcg: implement memory thresholds\n\nIt allows to register multiple memory and memsw thresholds and gets\nnotifications when it crosses.\n\nTo register a threshold application need:\n- create an eventfd;\n- open memory.usage_in_bytes or memory.memsw.usage_in_bytes;\n- write string like \"\u003cevent_fd\u003e \u003cmemory.usage_in_bytes\u003e \u003cthreshold\u003e\" to\n  cgroup.event_control.\n\nApplication will be notified through eventfd when memory usage crosses\nthreshold in any direction.\n\nIt\u0027s applicable for root and non-root cgroup.\n\nIt uses stats to track memory usage, simmilar to soft limits. It checks\nif we need to send event to userspace on every 100 page in/out. I guess\nit\u0027s good compromise between performance and accuracy of thresholds.\n\n[akpm@linux-foundation.org: coding-style fixes]\n[nishimura@mxp.nes.nec.co.jp: fix documentation merge issue]\nSigned-off-by: Kirill A. Shutemov \u003ckirill@shutemov.name\u003e\nCc: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nCc: Pavel Emelyanov \u003cxemul@openvz.org\u003e\nCc: Dan Malek \u003cdan@embeddedalley.com\u003e\nCc: Vladislav Buzov \u003cvbuzov@embeddedalley.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Alexander Shishkin \u003cvirtuoso@slind.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "378ce724bc2a0ef1243e11c09d58a70bb6be007a",
      "tree": "6a0a239547179842a55f9ffc9501cc9d2b0f5499",
      "parents": [
        "104f39284e830f425085886ef72c49aee6631575"
      ],
      "author": {
        "name": "Kirill A. Shutemov",
        "email": "kirill@shutemov.name",
        "time": "Wed Mar 10 15:22:23 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Mar 12 15:52:37 2010 -0800"
      },
      "message": "memcg: rework usage of stats by soft limit\n\nInstead of incrementing counter on each page in/out and comparing it with\nconstant, we set counter to constant, decrement counter on each page\nin/out and compare it with zero.  We want to make comparing as fast as\npossible.  On many RISC systems (probably not only RISC) comparing with\nzero is more effective than comparing with a constant, since not every\nconstant can be immediate operand for compare instruction.\n\nAlso, I\u0027ve renamed MEM_CGROUP_STAT_EVENTS to MEM_CGROUP_STAT_SOFTLIMIT,\nsince really it\u0027s not a generic counter.\n\nSigned-off-by: Kirill A. Shutemov \u003ckirill@shutemov.name\u003e\nCc: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nCc: Pavel Emelyanov \u003cxemul@openvz.org\u003e\nCc: Dan Malek \u003cdan@embeddedalley.com\u003e\nCc: Vladislav Buzov \u003cvbuzov@embeddedalley.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Alexander Shishkin \u003cvirtuoso@slind.org\u003e\nCc: Davide Libenzi \u003cdavidel@xmailserver.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "104f39284e830f425085886ef72c49aee6631575",
      "tree": "6b5fff422dea5c5513a3af45f055fd939b32b316",
      "parents": [
        "0dea116876eefc9c7ca9c5d74fe665481e499fa3"
      ],
      "author": {
        "name": "Kirill A. Shutemov",
        "email": "kirill@shutemov.name",
        "time": "Wed Mar 10 15:22:21 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Mar 12 15:52:37 2010 -0800"
      },
      "message": "memcg: extract mem_group_usage() from mem_cgroup_read()\n\nHelper to get memory or mem+swap usage of the cgroup.\n\nSigned-off-by: Kirill A. Shutemov \u003ckirill@shutemov.name\u003e\nAcked-by: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nCc: Pavel Emelyanov \u003cxemul@openvz.org\u003e\nCc: Dan Malek \u003cdan@embeddedalley.com\u003e\nCc: Vladislav Buzov \u003cvbuzov@embeddedalley.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Alexander Shishkin \u003cvirtuoso@slind.org\u003e\nCc: Davide Libenzi \u003cdavidel@xmailserver.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "483c30b514bd3037fa3f19fa42327c94c10f51c8",
      "tree": "aaf96db52bf4bdb0c83f209bc9c6a1237867718f",
      "parents": [
        "024914477e15ef8b17f271ec47f1bb8a589f0806"
      ],
      "author": {
        "name": "Daisuke Nishimura",
        "email": "nishimura@mxp.nes.nec.co.jp",
        "time": "Wed Mar 10 15:22:18 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Mar 12 15:52:36 2010 -0800"
      },
      "message": "memcg: improve performance in moving swap charge\n\nTry to reduce overheads in moving swap charge by:\n\n- Adds a new function(__mem_cgroup_put), which takes \"count\" as a arg and\n  decrement mem-\u003erefcnt by \"count\".\n- Removed res_counter_uncharge, css_put, and mem_cgroup_put from the path\n  of moving swap account, and consolidate all of them into mem_cgroup_clear_mc.\n  We cannot do that about mc.to-\u003erefcnt.\n\nThese changes reduces the overhead from 1.35sec to 0.9sec to move charges\nof 1G anonymous memory(including 500MB swap) in my test environment.\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: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nCc: Paul Menage \u003cmenage@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"
    },
    {
      "commit": "024914477e15ef8b17f271ec47f1bb8a589f0806",
      "tree": "9a6a8b4224c94fcdd1b8c3127b301ee3537f8cc2",
      "parents": [
        "8033b97c9b5ef063e3f4bf2efe1cd0a22093aaff"
      ],
      "author": {
        "name": "Daisuke Nishimura",
        "email": "nishimura@mxp.nes.nec.co.jp",
        "time": "Wed Mar 10 15:22:17 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Mar 12 15:52:36 2010 -0800"
      },
      "message": "memcg: move charges of anonymous swap\n\nThis patch is another core part of this move-charge-at-task-migration\nfeature.  It enables moving charges of anonymous swaps.\n\nTo move the charge of swap, we need to exchange swap_cgroup\u0027s record.\n\nIn current implementation, swap_cgroup\u0027s record is protected by:\n\n  - page lock: if the entry is on swap cache.\n  - swap_lock: if the entry is not on swap cache.\n\nThis works well in usual swap-in/out activity.\n\nBut this behavior make the feature of moving swap charge check many\nconditions to exchange swap_cgroup\u0027s record safely.\n\nSo I changed modification of swap_cgroup\u0027s recored(swap_cgroup_record())\nto use xchg, and define a new function to cmpxchg swap_cgroup\u0027s record.\n\nThis patch also enables moving charge of non pte_present but not uncharged\nswap caches, which can be exist on swap-out path, by getting the target\npages via find_get_page() as do_mincore() does.\n\n[kosaki.motohiro@jp.fujitsu.com: fix ia64 build]\n[akpm@linux-foundation.org: fix typos]\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: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nCc: Paul Menage \u003cmenage@google.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "8033b97c9b5ef063e3f4bf2efe1cd0a22093aaff",
      "tree": "0d3dbf74d6c307d425d5d13a5c7c1efbf6c079f2",
      "parents": [
        "854ffa8d104e44111fec96764c0e0cb29223d54c"
      ],
      "author": {
        "name": "Daisuke Nishimura",
        "email": "nishimura@mxp.nes.nec.co.jp",
        "time": "Wed Mar 10 15:22:16 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Mar 12 15:52:36 2010 -0800"
      },
      "message": "memcg: avoid oom during moving charge\n\nThis move-charge-at-task-migration feature has extra charges on\n\"to\"(pre-charges) and \"from\"(left-over charges) during moving charge.\nThis means unnecessary oom can happen.\n\nThis patch tries to avoid such oom.\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: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nCc: Paul Menage \u003cmenage@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"
    },
    {
      "commit": "854ffa8d104e44111fec96764c0e0cb29223d54c",
      "tree": "ca4d19407e35e1888e210fed150d5fb98be36cc8",
      "parents": [
        "4ffef5feff4e4240e767d2f1144b1634a41762e3"
      ],
      "author": {
        "name": "Daisuke Nishimura",
        "email": "nishimura@mxp.nes.nec.co.jp",
        "time": "Wed Mar 10 15:22:15 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Mar 12 15:52:36 2010 -0800"
      },
      "message": "memcg: improve performance in moving charge\n\nTry to reduce overheads in moving charge by:\n\n- Instead of calling res_counter_uncharge() against the old cgroup in\n  __mem_cgroup_move_account() everytime, call res_counter_uncharge() at the end\n  of task migration once.\n- removed css_get(\u0026to-\u003ecss) from __mem_cgroup_move_account() because callers\n  should have already called css_get(). And removed css_put(\u0026to-\u003ecss) too,\n  which was called by callers of move_account on success of move_account.\n- Instead of calling __mem_cgroup_try_charge(), i.e. res_counter_charge(),\n  repeatedly, call res_counter_charge(PAGE_SIZE * count) in can_attach() if\n  possible.\n- Instead of calling css_get()/css_put() repeatedly, make use of coalesce\n  __css_get()/__css_put() if possible.\n\nThese changes reduces the overhead from 1.7sec to 0.6sec to move charges\nof 1G anonymous memory in my test environment.\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: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nCc: Paul Menage \u003cmenage@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"
    },
    {
      "commit": "4ffef5feff4e4240e767d2f1144b1634a41762e3",
      "tree": "14793120e5809008c2587d89162d8d57130d6fc8",
      "parents": [
        "7dc74be032bfcaa2f9d9e4296ff5bbddfa9e2f19"
      ],
      "author": {
        "name": "Daisuke Nishimura",
        "email": "nishimura@mxp.nes.nec.co.jp",
        "time": "Wed Mar 10 15:22:14 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Mar 12 15:52:36 2010 -0800"
      },
      "message": "memcg: move charges of anonymous page\n\nThis patch is the core part of this move-charge-at-task-migration feature.\n It implements functions to move charges of anonymous pages mapped only by\nthe target task.\n\nImplementation:\n- define struct move_charge_struct and a valuable of it(mc) to remember the\n  count of pre-charges and other information.\n- At can_attach(), get anon_rss of the target mm, call __mem_cgroup_try_charge()\n  repeatedly and count up mc.precharge.\n- At attach(), parse the page table, find a target page to be move, and call\n  mem_cgroup_move_account() about the page.\n- Cancel all precharges if mc.precharge \u003e 0 on failure or at the end of\n  task move.\n\n[akpm@linux-foundation.org: a little simplification]\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: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nCc: Paul Menage \u003cmenage@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"
    },
    {
      "commit": "7dc74be032bfcaa2f9d9e4296ff5bbddfa9e2f19",
      "tree": "8bd10dcca3cfb3f4f6a0e6222c7f2048995a7d5f",
      "parents": [
        "b70cc5fdb445a6929a01e9c406593265b136c99d"
      ],
      "author": {
        "name": "Daisuke Nishimura",
        "email": "nishimura@mxp.nes.nec.co.jp",
        "time": "Wed Mar 10 15:22:13 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Mar 12 15:52:36 2010 -0800"
      },
      "message": "memcg: add interface to move charge at task migration\n\nIn current memcg, charges associated with a task aren\u0027t moved to the new\ncgroup at task migration.  Some users feel this behavior to be strange.\nThese patches are for this feature, that is, for charging to the new\ncgroup and, of course, uncharging from the old cgroup at task migration.\n\nThis patch adds \"memory.move_charge_at_immigrate\" file, which is a flag\nfile to determine whether charges should be moved to the new cgroup at\ntask migration or not and what type of charges should be moved.  This\npatch also adds read and write handlers of the file.\n\nThis patch also adds no-op handlers for this feature.  These handlers will\nbe implemented in later patches.  And you cannot write any values other\nthan 0 to move_charge_at_immigrate yet.\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: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nCc: Paul Menage \u003cmenage@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"
    },
    {
      "commit": "a4679373cf4ee0e7792dc56205365732b725c2c1",
      "tree": "6cf8040f608ad46ae7c605284af1ca585fb50eaa",
      "parents": [
        "5d0e52830e9ae09b872567f4aca3dfb5b5918079"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Wed Mar 10 15:21:15 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Mar 12 15:52:32 2010 -0800"
      },
      "message": "Add generic sys_old_mmap()\n\nAdd a generic implementation of the old mmap() syscall, which expects its\nargument in a memory block and switch all architectures over to use it.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nCc: Ralf Baechle \u003cralf@linux-mips.org\u003e\nCc: Benjamin Herrenschmidt \u003cbenh@kernel.crashing.org\u003e\nCc: Paul Mundt \u003clethal@linux-sh.org\u003e\nCc: Jeff Dike \u003cjdike@addtoit.com\u003e\nCc: Hirokazu Takata \u003ctakata@linux-m32r.org\u003e\nCc: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nReviewed-by: H. Peter Anvin \u003chpa@zytor.com\u003e\nCc: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nCc: Arnd Bergmann \u003carnd@arndb.de\u003e\nCc: Heiko Carstens \u003cheiko.carstens@de.ibm.com\u003e\nCc: Martin Schwidefsky \u003cschwidefsky@de.ibm.com\u003e\nCc: \"Luck, Tony\" \u003ctony.luck@intel.com\u003e\nCc: James Morris \u003cjmorris@namei.org\u003e\nCc: Andreas Schwab \u003cschwab@linux-m68k.org\u003e\nAcked-by: Jesper Nilsson \u003cjesper.nilsson@axis.com\u003e\nAcked-by: Russell King \u003crmk+kernel@arm.linux.org.uk\u003e\nAcked-by: Greg Ungerer \u003cgerg@uclinux.org\u003e\nAcked-by: David Howells \u003cdhowells@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": "718a38211bf4375c0a1efad3afbc5dbaef5d33f9",
      "tree": "ade6815c619705f0342f98cc8bb39fa3309c81a6",
      "parents": [
        "9b3a6549b2602ca30f58715a0071e29f9898cae9"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Wed Mar 10 15:20:43 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Mar 12 15:52:28 2010 -0800"
      },
      "message": "mm: introduce dump_page() and print symbolic flag names\n\n- introduce dump_page() to print the page info for debugging some error\n  condition.\n\n- convert three mm users: bad_page(), print_bad_pte() and memory offline\n  failure.\n\n- print an extra field: the symbolic names of page-\u003eflags\n\nExample dump_page() output:\n\n[  157.521694] page:ffffea0000a7cba8 count:2 mapcount:1 mapping:ffff88001c901791 index:0x147\n[  157.525570] page flags: 0x100000000100068(uptodate|lru|active|swapbacked)\n\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Alex Chiang \u003cachiang@hp.com\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nCc: Andi Kleen \u003candi@firstfloor.org\u003e\nCc: Mel Gorman \u003cmel@linux.vnet.ibm.com\u003e\nCc: Christoph Lameter \u003ccl@linux-foundation.org\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": "2d30a1f6315b8940537e8e98882c6038fbac9ba5",
      "tree": "11936ee1bdab8b01503c3e71b2868a8139c9d00a",
      "parents": [
        "53bddb4e9f3f53df02a783751984ddeade71b085"
      ],
      "author": {
        "name": "Thomas Gleixner",
        "email": "tglx@linutronix.de",
        "time": "Wed Mar 10 15:20:40 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Mar 12 15:52:28 2010 -0800"
      },
      "message": "mm: do not iterate over NR_CPUS in __zone_pcp_update()\n\n__zone_pcp_update() iterates over NR_CPUS instead of limiting the access\nto the possible cpus.  This might result in access to uninitialized areas\nas the per cpu allocator only populates the per cpu memory for possible\ncpus.\n\nThis problem was created as a result of the dynamic allocation of pagesets\nfrom percpu memory that went in during the merge window - commit\n99dcc3e5a94ed491fbef402831d8c0bbb267f995 (\"this_cpu: Page allocator\nconversion\").\n\nSigned-off-by: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nAcked-by: Pekka Enberg \u003cpenberg@cs.helsinki.fi\u003e\nAcked-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nAcked-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nReviewed-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "53bddb4e9f3f53df02a783751984ddeade71b085",
      "tree": "74b9dfa0b61d6455a006beb2de20310aee0bc28b",
      "parents": [
        "936ed49a540e2dce645da27e7e4032b24310a8e4"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Wed Mar 10 15:20:38 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Mar 12 15:52:28 2010 -0800"
      },
      "message": "nommu: fix build breakage\n\nCommit 34e55232e59f7b19050267a05ff1226e5cd122a5 (\"mm: avoid false sharing\nof mm_counter\") added sync_mm_rss() for syncing loosely accounted rss\ncounters.  It\u0027s for CONFIG_MMU but sync_mm_rss is called even in NOMMU\nenviroment (kerne/exit.c, fs/exec.c).  Above commit doesn\u0027t handle it\nwell.\n\nThis patch changes\n  SPLIT_RSS_COUNTING depends on SPLIT_PTLOCKS \u0026\u0026 CONFIG_MMU\n\nAnd for avoid unnecessary function calls, sync_mm_rss changed to be inlined\nnoop function in header file.\n\nReported-by: David Howells \u003cdhowells@redhat.com\u003e\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nSigned-off-by: Mike Frysinger \u003cvapier@gentoo.org\u003e\nSigned-off-by: Michal Simek \u003cmonstr@monstr.eu\u003e\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\nCc: Greg Ungerer \u003cgerg@snapgear.com\u003e\nCc: Geert Uytterhoeven \u003cgeert@linux-m68k.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "318ae2edc3b29216abd8a2510f3f80b764f06858",
      "tree": "ce595adde342f57f379d277b25e4dd206988a052",
      "parents": [
        "25cf84cf377c0aae5dbcf937ea89bc7893db5176",
        "3e58974027b04e84f68b964ef368a6cd758e2f84"
      ],
      "author": {
        "name": "Jiri Kosina",
        "email": "jkosina@suse.cz",
        "time": "Mon Mar 08 16:55:37 2010 +0100"
      },
      "committer": {
        "name": "Jiri Kosina",
        "email": "jkosina@suse.cz",
        "time": "Mon Mar 08 16:55:37 2010 +0100"
      },
      "message": "Merge branch \u0027for-next\u0027 into for-linus\n\nConflicts:\n\tDocumentation/filesystems/proc.txt\n\tarch/arm/mach-u300/include/mach/debug-macro.S\n\tdrivers/net/qlge/qlge_ethtool.c\n\tdrivers/net/qlge/qlge_main.c\n\tdrivers/net/typhoon.c\n"
    },
    {
      "commit": "52cf25d0ab7f78eeecc59ac652ed5090f69b619e",
      "tree": "031d1ffb3890bd69c0260c864c512e0be62ac05c",
      "parents": [
        "6c1733aca0b48db4d0e660d54976a1cca25b5eaf"
      ],
      "author": {
        "name": "Emese Revfy",
        "email": "re.emese@gmail.com",
        "time": "Tue Jan 19 02:58:23 2010 +0100"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@suse.de",
        "time": "Sun Mar 07 17:04:49 2010 -0800"
      },
      "message": "Driver core: Constify struct sysfs_ops in struct kobj_type\n\nConstify struct sysfs_ops.\n\nThis is part of the ops structure constification\neffort started by Arjan van de Ven et al.\n\nBenefits of this constification:\n\n * prevents modification of data that is shared\n   (referenced) by many other structure instances\n   at runtime\n\n * detects/prevents accidental (but not intentional)\n   modification attempts on archs that enforce\n   read-only kernel data at runtime\n\n * potentially better optimized code as the compiler\n   can assume that the const data cannot be changed\n\n * the compiler/linker move const data into .rodata\n   and therefore exclude them from false sharing\n\nSigned-off-by: Emese Revfy \u003cre.emese@gmail.com\u003e\nAcked-by: David Teigland \u003cteigland@redhat.com\u003e\nAcked-by: Matt Domsch \u003cMatt_Domsch@dell.com\u003e\nAcked-by: Maciej Sosnowski \u003cmaciej.sosnowski@intel.com\u003e\nAcked-by: Hans J. Koch \u003chjk@linutronix.de\u003e\nAcked-by: Pekka Enberg \u003cpenberg@cs.helsinki.fi\u003e\nAcked-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\nAcked-by: Stephen Hemminger \u003cshemminger@vyatta.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@suse.de\u003e\n\n"
    },
    {
      "commit": "9cd43611ccfb46632bfa7d19f688924ea93f1613",
      "tree": "e11ecee403235ba9d8855892fa7ad55d9b63e221",
      "parents": [
        "985fc176a6c03836454629be2f2a611ccc7c7002"
      ],
      "author": {
        "name": "Emese Revfy",
        "email": "re.emese@gmail.com",
        "time": "Thu Dec 31 14:52:51 2009 +0100"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@suse.de",
        "time": "Sun Mar 07 17:04:49 2010 -0800"
      },
      "message": "kobject: Constify struct kset_uevent_ops\n\nConstify struct kset_uevent_ops.\n\nThis is part of the ops structure constification\neffort started by Arjan van de Ven et al.\n\nBenefits of this constification:\n\n * prevents modification of data that is shared\n   (referenced) by many other structure instances\n   at runtime\n\n * detects/prevents accidental (but not intentional)\n   modification attempts on archs that enforce\n   read-only kernel data at runtime\n\n * potentially better optimized code as the compiler\n   can assume that the const data cannot be changed\n\n * the compiler/linker move const data into .rodata\n   and therefore exclude them from false sharing\n\nSigned-off-by: Emese Revfy \u003cre.emese@gmail.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@suse.de\u003e\n\n"
    },
    {
      "commit": "08259d58e4fa12ceaece82193c5816152f638cca",
      "tree": "8c032914139c5aec362a73b8316cf81f020f9f8f",
      "parents": [
        "c08c6e1f54c85fc299cf9f88cf330d6dd28a9a1d"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hugh.dickins@tiscali.co.uk",
        "time": "Fri Mar 05 13:42:25 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Mar 06 11:26:27 2010 -0800"
      },
      "message": "mm: add comment on swap_duplicate\u0027s error code\n\nswap_duplicate()\u0027s loop appears to miss out on returning the error code\nfrom __swap_duplicate(), except when that\u0027s -ENOMEM.  In fact this is\nintentional: prior to -ENOMEM for swap_count_continuation,\nswap_duplicate() was void (and the case only occurs when copy_one_pte()\nhits a corrupt pte).  But that\u0027s surprising behaviour, which certainly\ndeserves a comment.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nReported-by: Huang Shijie \u003cshijie8@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": "c08c6e1f54c85fc299cf9f88cf330d6dd28a9a1d",
      "tree": "b03659b467641e445b9f4a96423fd20ff806b7fb",
      "parents": [
        "f047f4f3792344901e1ea18a180515d7d5349e02"
      ],
      "author": {
        "name": "Steven J. Magnani",
        "email": "steve@digidescorp.com",
        "time": "Fri Mar 05 13:42:24 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Mar 06 11:26:27 2010 -0800"
      },
      "message": "nommu: get_user_pages(): pin last page on non-page-aligned start\n\nThe noMMU version of get_user_pages() fails to pin the last page when the\nstart address isn\u0027t page-aligned.  The patch fixes this in a way that\nmakes find_extend_vma() congruent to its MMU cousin.\n\nSigned-off-by: Steven J. Magnani \u003csteve@digidescorp.com\u003e\nAcked-by: Paul Mundt \u003clethal@linux-sh.org\u003e\nCc: David Howells \u003cdhowells@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": "645747462435d84c6c6a64269ed49cc3015f753d",
      "tree": "4cbbddcddd429704dd4f205f6371bb329dcb0ff1",
      "parents": [
        "31c0569c3b0b6cc8a867ac6665ca081553f7984c"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Fri Mar 05 13:42:22 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Mar 06 11:26:27 2010 -0800"
      },
      "message": "vmscan: detect mapped file pages used only once\n\nThe VM currently assumes that an inactive, mapped and referenced file page\nis in use and promotes it to the active list.\n\nHowever, every mapped file page starts out like this and thus a problem\narises when workloads create a stream of such pages that are used only for\na short time.  By flooding the active list with those pages, the VM\nquickly gets into trouble finding eligible reclaim canditates.  The result\nis long allocation latencies and eviction of the wrong pages.\n\nThis patch reuses the PG_referenced page flag (used for unmapped file\npages) to implement a usage detection that scales with the speed of LRU\nlist cycling (i.e.  memory pressure).\n\nIf the scanner encounters those pages, the flag is set and the page cycled\nagain on the inactive list.  Only if it returns with another page table\nreference it is activated.  Otherwise it is reclaimed as \u0027not recently\nused cache\u0027.\n\nThis effectively changes the minimum lifetime of a used-once mapped file\npage from a full memory cycle to an inactive list cycle, which allows it\nto occur in linear streams without affecting the stable working set of the\nsystem.\n\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nReviewed-by: Rik van Riel \u003criel@redhat.com\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: OSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "31c0569c3b0b6cc8a867ac6665ca081553f7984c",
      "tree": "c3d3e02f941fed0f91981d55d93540d2acaaecbd",
      "parents": [
        "dfc8d636cdb95f7b792d5ba8c9f3b295809c125d"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Fri Mar 05 13:42:21 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Mar 06 11:26:27 2010 -0800"
      },
      "message": "vmscan: drop page_mapping_inuse()\n\npage_mapping_inuse() is a historic predicate function for pages that are\nabout to be reclaimed or deactivated.\n\nAccording to it, a page is in use when it is mapped into page tables OR\npart of swap cache OR backing an mmapped file.\n\nThis function is used in combination with page_referenced(), which checks\nfor young bits in ptes and the page descriptor itself for the\nPG_referenced bit.  Thus, checking for unmapped swap cache pages is\nmeaningless as PG_referenced is not set for anonymous pages and unmapped\npages do not have young ptes.  The test makes no difference.\n\nProtecting file pages that are not by themselves mapped but are part of a\nmapped file is also a historic leftover for short-lived things like the\nexec() code in libc.  However, the VM now does reference accounting and\nactivation of pages at unmap time and thus the special treatment on\nreclaim is obsolete.\n\nThis patch drops page_mapping_inuse() and switches the two callsites to\nuse page_mapped() directly.\n\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nReviewed-by: Rik van Riel \u003criel@redhat.com\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: OSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "dfc8d636cdb95f7b792d5ba8c9f3b295809c125d",
      "tree": "90070c49adb5a8833d8fc034bc94cc696797e22e",
      "parents": [
        "e7c84ee22b8321fa0130a53d4c9806474d62eff0"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Fri Mar 05 13:42:19 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Mar 06 11:26:27 2010 -0800"
      },
      "message": "vmscan: factor out page reference checks\n\nThe used-once mapped file page detection patchset.\n\nIt is meant to help workloads with large amounts of shortly used file\nmappings, like rtorrent hashing a file or git when dealing with loose\nobjects (git gc on a bigger site?).\n\nRight now, the VM activates referenced mapped file pages on first\nencounter on the inactive list and it takes a full memory cycle to\nreclaim them again.  When those pages dominate memory, the system\nno longer has a meaningful notion of \u0027working set\u0027 and is required\nto give up the active list to make reclaim progress.  Obviously,\nthis results in rather bad scanning latencies and the wrong pages\nbeing reclaimed.\n\nThis patch makes the VM be more careful about activating mapped file\npages in the first place.  The minimum granted lifetime without\nanother memory access becomes an inactive list cycle instead of the\nfull memory cycle, which is more natural given the mentioned loads.\n\nThis test resembles a hashing rtorrent process.  Sequentially, 32MB\nchunks of a file are mapped into memory, hashed (sha1) and unmapped\nagain.  While this happens, every 5 seconds a process is launched and\nits execution time taken:\n\n\tpython2.4 -c \u0027import pydoc\u0027\n\told: max\u003d2.31s mean\u003d1.26s (0.34)\n\tnew: max\u003d1.25s mean\u003d0.32s (0.32)\n\n\tfind /etc -type f\n\told: max\u003d2.52s mean\u003d1.44s (0.43)\n\tnew: max\u003d1.92s mean\u003d0.12s (0.17)\n\n\tvim -c \u0027:quit\u0027\n\told: max\u003d6.14s mean\u003d4.03s (0.49)\n\tnew: max\u003d3.48s mean\u003d2.41s (0.25)\n\n\tmplayer --help\n\told: max\u003d8.08s mean\u003d5.74s (1.02)\n\tnew: max\u003d3.79s mean\u003d1.32s (0.81)\n\n\toverall hash time (stdev):\n\told: time\u003d1192.30 (12.85) thruput\u003d25.78mb/s (0.27)\n\tnew: time\u003d1060.27 (32.58) thruput\u003d29.02mb/s (0.88) (-11%)\n\nI also tested kernbench with regular IO streaming in the background to\nsee whether the delayed activation of frequently used mapped file\npages had a negative impact on performance in the presence of pressure\non the inactive list.  The patch made no significant difference in\ntiming, neither for kernbench nor for the streaming IO throughput.\n\nThe first patch submission raised concerns about the cost of the extra\nfaults for actually activated pages on machines that have no hardware\nsupport for young page table entries.\n\nI created an artificial worst case scenario on an ARM machine with\naround 300MHz and 64MB of memory to figure out the dimensions\ninvolved.  The test would mmap a file of 20MB, then\n\n  1. touch all its pages to fault them in\n  2. force one full scan cycle on the inactive file LRU\n  -- old: mapping pages activated\n  -- new: mapping pages inactive\n  3. touch the mapping pages again\n  -- old and new: fault exceptions to set the young bits\n  4. force another full scan cycle on the inactive file LRU\n  5. touch the mapping pages one last time\n  -- new: fault exceptions to set the young bits\n\nThe test showed an overall increase of 6% in time over 100 iterations\nof the above (old: ~212sec, new: ~225sec).  13 secs total overhead /\n(100 * 5k pages), ignoring the execution time of the test itself,\nmakes for about 25us overhead for every page that gets actually\nactivated.  Note:\n\n  1. File mapping the size of one third of main memory, _completely_\n  in active use across memory pressure - i.e., most pages referenced\n  within one LRU cycle.  This should be rare to non-existant,\n  especially on such embedded setups.\n\n  2. Many huge activation batches.  Those batches only occur when the\n  working set fluctuates.  If it changes completely between every full\n  LRU cycle, you have problematic reclaim overhead anyway.\n\n  3. Access of activated pages at maximum speed: sequential loads from\n  every single page without doing anything in between.  In reality,\n  the extra faults will get distributed between actual operations on\n  the data.\n\nSo even if a workload manages to get the VM into the situation of\nactivating a third of memory in one go on such a setup, it will take\n2.2 seconds instead 2.1 without the patch.\n\nComparing the numbers (and my user-experience over several months),\nI think this change is an overall improvement to the VM.\n\nPatch 1 is only refactoring to break up that ugly compound conditional\nin shrink_page_list() and make it easy to document and add new checks\nin a readable fashion.\n\nPatch 2 gets rid of the obsolete page_mapping_inuse().  It\u0027s not\nstrictly related to #3, but it was in the original submission and is a\nnet simplification, so I kept it.\n\nPatch 3 implements used-once detection of mapped file pages.\n\nThis patch:\n\nMoving the big conditional into its own predicate function makes the code\na bit easier to read and allows for better commenting on the checks\none-by-one.\n\nThis is just cleaning up, no semantics should have been changed.\n\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nReviewed-by: Rik van Riel \u003criel@redhat.com\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: OSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "72f0ba0252e7177965255ed2c663be126b6b5f91",
      "tree": "2da83e883742ef4bf2d32b53805869f0ea7b3ac2",
      "parents": [
        "452aa6999e6703ffbddd7f6ea124d3968915f3e3"
      ],
      "author": {
        "name": "David Rientjes",
        "email": "rientjes@google.com",
        "time": "Fri Mar 05 13:42:14 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Mar 06 11:26:26 2010 -0800"
      },
      "message": "mm: suppress pfn range output for zones without pages\n\nfree_area_init_nodes() emits pfn ranges for all zones on the system.\nThere may be no pages on a higher zone, however, due to memory limitations\nor the use of the mem\u003d kernel parameter.  For example:\n\nZone PFN ranges:\n  DMA      0x00000001 -\u003e 0x00001000\n  DMA32    0x00001000 -\u003e 0x00100000\n  Normal   0x00100000 -\u003e 0x00100000\n\nThe implementation copies the previous zone\u0027s highest pfn, if any, as the\nnext zone\u0027s lowest pfn.  If its highest pfn is then greater than the\namount of addressable memory, the upper memory limit is used instead.\nThus, both the lowest and highest possible pfn for higher zones without\nmemory may be the same.\n\nThe pfn range for zones without memory is now shown as \"empty\" instead.\n\nSigned-off-by: David Rientjes \u003crientjes@google.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nReviewed-by: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "452aa6999e6703ffbddd7f6ea124d3968915f3e3",
      "tree": "48e375fdb60920675f68b444b462903ad8bb6940",
      "parents": [
        "ad2bd7e0e9647cd48593a6b3a2be07dc2c2d28ed"
      ],
      "author": {
        "name": "Rafael J. Wysocki",
        "email": "rjw@sisk.pl",
        "time": "Fri Mar 05 13:42:13 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Mar 06 11:26:26 2010 -0800"
      },
      "message": "mm/pm: force GFP_NOIO during suspend/hibernation and resume\n\nThere are quite a few GFP_KERNEL memory allocations made during\nsuspend/hibernation and resume that may cause the system to hang, because\nthe I/O operations they depend on cannot be completed due to the\nunderlying devices being suspended.\n\nAvoid this problem by clearing the __GFP_IO and __GFP_FS bits in\ngfp_allowed_mask before suspend/hibernation and restoring the original\nvalues of these bits in gfp_allowed_mask durig the subsequent resume.\n\n[akpm@linux-foundation.org: fix CONFIG_PM\u003dn linkage]\nSigned-off-by: Rafael J. Wysocki \u003crjw@sisk.pl\u003e\nReported-by: Maxim Levitsky \u003cmaximlevitsky@gmail.com\u003e\nCc: Sebastian Ott \u003csebott@linux.vnet.ibm.com\u003e\nCc: Benjamin Herrenschmidt \u003cbenh@kernel.crashing.org\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": "ad2bd7e0e9647cd48593a6b3a2be07dc2c2d28ed",
      "tree": "247c1c46e4c6948d482878f1c85c99cf180ff024",
      "parents": [
        "fc148a5f7e0532750c312385c7ee9fa3e9311f34"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hugh.dickins@tiscali.co.uk",
        "time": "Fri Mar 05 13:42:12 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Mar 06 11:26:26 2010 -0800"
      },
      "message": "mm/swapfile.c: fix swapon size off-by-one\n\nThere\u0027s an off-by-one disagreement between mkswap and swapon about the\nmeaning of swap_header last_page: mkswap (in all versions I\u0027ve looked at:\nutil-linux-ng and BusyBox and old util-linux; probably as far back as\n1999) consistently means the offset (in page units) of the last page of\nthe swap area, whereas kernel sys_swapon (as far back as 2.2 and 2.3)\nstrangely takes it to mean the size (in page units) of the swap area.\n\nThis disagreement is the safe way round; but it\u0027s worrying people, and\nloses us one page of swap.\n\nThe fix is not just to add one to nr_good_pages: we need to get maxpages\n(the size of the swap_map array) right before that; and though that is an\nunsigned long, be careful not to overflow the unsigned int p-\u003emax which\nlater holds it (probably why header uses __u32 last_page instead of size).\n\nWhy did we subtract one from the maximum swp_offset to calculate maxpages?\n Though it was probably me who made that change in 2.4.10, I don\u0027t get it:\nand now we should be adding one (without risk of overflow in this case).\n\nFix the handling of swap_header badpages: it could have overrun the\nswap_map when very large swap area used on a more limited architecture.\n\nRemove pre-initializations of swap_header, nr_good_pages and maxpages:\nthose date from when sys_swapon was supporting other versions of header.\n\nReported-by: Nitin Gupta \u003cngupta@vflare.org\u003e\nReported-by: Jarkko Lavinen \u003cjarkko.lavinen@nokia.com\u003e\nSigned-off-by: Hugh Dickins \u003chugh.dickins@tiscali.co.uk\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "fc148a5f7e0532750c312385c7ee9fa3e9311f34",
      "tree": "dfd132ed225a113f73c61f5e2018e5644bb3f677",
      "parents": [
        "c44b674323f4a2480dbeb65d4b487fa5f06f49e0"
      ],
      "author": {
        "name": "Rik van Riel",
        "email": "riel@redhat.com",
        "time": "Fri Mar 05 13:42:10 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Mar 06 11:26:26 2010 -0800"
      },
      "message": "mm: remove VM_LOCK_RMAP code\n\nWhen a VMA is in an inconsistent state during setup or teardown, the worst\nthat can happen is that the rmap code will not be able to find the page.\n\nThe mapping is in the process of being torn down (PTEs just got\ninvalidated by munmap), or set up (no PTEs have been instantiated yet).\n\nIt is also impossible for the rmap code to follow a pointer to an already\nfreed VMA, because the rmap code holds the anon_vma-\u003elock, which the VMA\nteardown code needs to take before the VMA is removed from the anon_vma\nchain.\n\nHence, we should not need the VM_LOCK_RMAP locking at all.\n\nSigned-off-by: Rik van Riel \u003criel@redhat.com\u003e\nCc: Nick Piggin \u003cnpiggin@suse.de\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Larry Woodman \u003clwoodman@redhat.com\u003e\nCc: Lee Schermerhorn \u003cLee.Schermerhorn@hp.com\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": "c44b674323f4a2480dbeb65d4b487fa5f06f49e0",
      "tree": "b753050e6752eb2fc961ad3ea5dfdf88ef88364d",
      "parents": [
        "033a64b56aed798991de18d226085dfb1ccd858d"
      ],
      "author": {
        "name": "Rik van Riel",
        "email": "riel@redhat.com",
        "time": "Fri Mar 05 13:42:09 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Mar 06 11:26:26 2010 -0800"
      },
      "message": "rmap: move exclusively owned pages to own anon_vma in do_wp_page()\n\nWhen the parent process breaks the COW on a page, both the original which\nis mapped at child and the new page which is mapped parent end up in that\nsame anon_vma.  Generally this won\u0027t be a problem, but for some workloads\nit could preserve the O(N) rmap scanning complexity.\n\nA simple fix is to ensure that, when a page which is mapped child gets\nreused in do_wp_page, because we already are the exclusive owner, the page\ngets moved to our own exclusive child\u0027s anon_vma.\n\nSigned-off-by: Rik van Riel \u003criel@redhat.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Larry Woodman \u003clwoodman@redhat.com\u003e\nCc: Lee Schermerhorn \u003cLee.Schermerhorn@hp.com\u003e\nReviewed-by: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: Hugh Dickins \u003chugh.dickins@tiscali.co.uk\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "033a64b56aed798991de18d226085dfb1ccd858d",
      "tree": "edf27f0868d1b16e0d1e1e41876b668d4a2f215d",
      "parents": [
        "5beb49305251e5669852ed541e8e2f2f7696c53e"
      ],
      "author": {
        "name": "Rik van Riel",
        "email": "riel@redhat.com",
        "time": "Fri Mar 05 13:42:08 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Mar 06 11:26:26 2010 -0800"
      },
      "message": "rmap: remove obsolete check from __page_check_anon_rmap()\n\nWhen an anonymous page is inherited from a parent process, the\nvma-\u003eanon_vma can differ from the page anon_vma.  This can trip up\n__page_check_anon_rmap, which is indirectly called from do_swap_page().\n\nRemove that obsolete check to prevent an oops.\n\nSigned-off-by: Rik van Riel \u003criel@redhat.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Larry Woodman \u003clwoodman@redhat.com\u003e\nCc: Lee Schermerhorn \u003cLee.Schermerhorn@hp.com\u003e\nReviewed-by: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: Hugh Dickins \u003chugh.dickins@tiscali.co.uk\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "5beb49305251e5669852ed541e8e2f2f7696c53e",
      "tree": "46457450a22f23938b24904aeba5d4ada2f53b20",
      "parents": [
        "648bcc771145172a14bc35eeb849ed08f6aa4f1e"
      ],
      "author": {
        "name": "Rik van Riel",
        "email": "riel@redhat.com",
        "time": "Fri Mar 05 13:42:07 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Mar 06 11:26:26 2010 -0800"
      },
      "message": "mm: change anon_vma linking to fix multi-process server scalability issue\n\nThe old anon_vma code can lead to scalability issues with heavily forking\nworkloads.  Specifically, each anon_vma will be shared between the parent\nprocess and all its child processes.\n\nIn a workload with 1000 child processes and a VMA with 1000 anonymous\npages per process that get COWed, this leads to a system with a million\nanonymous pages in the same anon_vma, each of which is mapped in just one\nof the 1000 processes.  However, the current rmap code needs to walk them\nall, leading to O(N) scanning complexity for each page.\n\nThis can result in systems where one CPU is walking the page tables of\n1000 processes in page_referenced_one, while all other CPUs are stuck on\nthe anon_vma lock.  This leads to catastrophic failure for a benchmark\nlike AIM7, where the total number of processes can reach in the tens of\nthousands.  Real workloads are still a factor 10 less process intensive\nthan AIM7, but they are catching up.\n\nThis patch changes the way anon_vmas and VMAs are linked, which allows us\nto associate multiple anon_vmas with a VMA.  At fork time, each child\nprocess gets its own anon_vmas, in which its COWed pages will be\ninstantiated.  The parents\u0027 anon_vma is also linked to the VMA, because\nnon-COWed pages could be present in any of the children.\n\nThis reduces rmap scanning complexity to O(1) for the pages of the 1000\nchild processes, with O(N) complexity for at most 1/N pages in the system.\n This reduces the average scanning cost in heavily forking workloads from\nO(N) to 2.\n\nThe only real complexity in this patch stems from the fact that linking a\nVMA to anon_vmas now involves memory allocations.  This means vma_adjust\ncan fail, if it needs to attach a VMA to anon_vma structures.  This in\nturn means error handling needs to be added to the calling functions.\n\nA second source of complexity is that, because there can be multiple\nanon_vmas, the anon_vma linking in vma_adjust can no longer be done under\n\"the\" anon_vma lock.  To prevent the rmap code from walking up an\nincomplete VMA, this patch introduces the VM_LOCK_RMAP VMA flag.  This bit\nflag uses the same slot as the NOMMU VM_MAPPED_COPY, with an ifdef in mm.h\nto make sure it is impossible to compile a kernel that needs both symbolic\nvalues for the same bitflag.\n\nSome test results:\n\nWithout the anon_vma changes, when AIM7 hits around 9.7k users (on a test\nbox with 16GB RAM and not quite enough IO), the system ends up running\n\u003e99% in system time, with every CPU on the same anon_vma lock in the\npageout code.\n\nWith these changes, AIM7 hits the cross-over point around 29.7k users.\nThis happens with ~99% IO wait time, there never seems to be any spike in\nsystem time.  The anon_vma lock contention appears to be resolved.\n\n[akpm@linux-foundation.org: cleanups]\nSigned-off-by: Rik van Riel \u003criel@redhat.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Larry Woodman \u003clwoodman@redhat.com\u003e\nCc: Lee Schermerhorn \u003cLee.Schermerhorn@hp.com\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: Hugh Dickins \u003chugh.dickins@tiscali.co.uk\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "648bcc771145172a14bc35eeb849ed08f6aa4f1e",
      "tree": "3cc7da55d1ca18b46cb0518b3b35c276adc0aad1",
      "parents": [
        "19adf9c5d5793657118f2002237c0ee49c3b6185"
      ],
      "author": {
        "name": "Thiago Farina",
        "email": "tfransosi@gmail.com",
        "time": "Fri Mar 05 13:42:04 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Mar 06 11:26:26 2010 -0800"
      },
      "message": "mm/memcontrol.c: fix \"integer as NULL pointer\" sparse warning\n\nmm/memcontrol.c:2548:32: warning: Using plain integer as NULL pointer\n\nSigned-off-by: Thiago Farina \u003ctfransosi@gmail.com\u003e\nAcked-by: 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": "0141450f66c3c12a3aaa869748caa64241885cdf",
      "tree": "cab5f621dafd1f133d915e5c60aea160438a2e11",
      "parents": [
        "42e49608683ab25fbbbf9c40edb944601e543882"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Fri Mar 05 13:42:03 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Mar 06 11:26:25 2010 -0800"
      },
      "message": "readahead: introduce FMODE_RANDOM for POSIX_FADV_RANDOM\n\nThis fixes inefficient page-by-page reads on POSIX_FADV_RANDOM.\n\nPOSIX_FADV_RANDOM used to set ra_pages\u003d0, which leads to poor performance:\na 16K read will be carried out in 4 _sync_ 1-page reads.\n\nIn other places, ra_pages\u003d\u003d0 means\n- it\u0027s ramfs/tmpfs/hugetlbfs/sysfs/configfs\n- some IO error happened\nwhere multi-page read IO won\u0027t help or should be avoided.\n\nPOSIX_FADV_RANDOM actually want a different semantics: to disable the\n*heuristic* readahead algorithm, and to use a dumb one which faithfully\nsubmit read IO for whatever application requests.\n\nSo introduce a flag FMODE_RANDOM for POSIX_FADV_RANDOM.\n\nNote that the random hint is not likely to help random reads performance\nnoticeably.  And it may be too permissive on huge request size (its IO\nsize is not limited by read_ahead_kb).\n\nIn Quentin\u0027s report (http://lkml.org/lkml/2009/12/24/145), the overall\n(NFS read) performance of the application increased by 313%!\n\nTested-by: Quentin Barnes \u003cqbarnes+nfs@yahoo-inc.com\u003e\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nCc: Nick Piggin \u003cnpiggin@suse.de\u003e\nCc: Andi Kleen \u003candi@firstfloor.org\u003e\nCc: Steven Whitehouse \u003cswhiteho@redhat.com\u003e\nCc: David Howells \u003cdhowells@redhat.com\u003e\nCc: Jonathan Corbet \u003ccorbet@lwn.net\u003e\nCc: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nCc: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\nCc: Chuck Lever \u003cchuck.lever@oracle.com\u003e\nCc: \u003cstable@kernel.org\u003e\t\t\t[2.6.33.x]\nCc: \u003cqbarnes+nfs@yahoo-inc.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    }
  ],
  "next": "85f1fb72fa76eabc4481dc79f42d2b011df54762"
}
