)]}'
{
  "log": [
    {
      "commit": "69e4747ee9727d660b88d7e1efe0f4afcb35db1b",
      "tree": "2dde4642ad0dba19688b664c4397c61cf9ebce25",
      "parents": [
        "a3301b751b19f0efbafddc4034f8e7ce6bf3007b"
      ],
      "author": {
        "name": "Gleb Natapov",
        "email": "gleb@redhat.com",
        "time": "Sun Jan 08 17:07:28 2012 +0200"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jan 13 20:39:44 2012 -0800"
      },
      "message": "Unused iocbs in a batch should not be accounted as active.\n\nSince commit 080d676de095 (\"aio: allocate kiocbs in batches\") iocbs are\nallocated in a batch during processing of first iocbs.  All iocbs in a\nbatch are automatically added to ctx-\u003eactive_reqs list and accounted in\nctx-\u003ereqs_active.\n\nIf one (not the last one) of iocbs submitted by an user fails, further\niocbs are not processed, but they are still present in ctx-\u003eactive_reqs\nand accounted in ctx-\u003ereqs_active.  This causes process to stuck in a D\nstate in wait_for_all_aios() on exit since ctx-\u003ereqs_active will never\ngo down to zero.  Furthermore since kiocb_batch_free() frees iocb\nwithout removing it from active_reqs list the list become corrupted\nwhich may cause oops.\n\nFix this by removing iocb from ctx-\u003eactive_reqs and updating\nctx-\u003ereqs_active in kiocb_batch_free().\n\nSigned-off-by: Gleb Natapov \u003cgleb@redhat.com\u003e\nReviewed-by: Jeff Moyer \u003cjmoyer@redhat.com\u003e\nCc: stable@kernel.org   # 3.2\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "a3301b751b19f0efbafddc4034f8e7ce6bf3007b",
      "tree": "1b94ed9c9ecf887c53bb416d5e7b59694aa353f6",
      "parents": [
        "96e80a7851b44f3decaac0625665cd64e550b71d"
      ],
      "author": {
        "name": "Srivatsa S. Bhat",
        "email": "srivatsa.bhat@linux.vnet.ibm.com",
        "time": "Sat Jan 14 08:11:31 2012 +0530"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jan 13 19:11:35 2012 -0800"
      },
      "message": "x86/mce: Fix CPU hotplug and suspend regression related to MCE\n\nCommit 8a25a2fd126c (\"cpu: convert \u0027cpu\u0027 and \u0027machinecheck\u0027 sysdev_class\nto a regular subsystem\") changed how things are dealt with in the MCE\nsubsystem.  Some of the things that got broken due to this are CPU\nhotplug and suspend/hibernate.\n\nMCE uses per_cpu allocations of struct device.  So, when a CPU goes\noffline and comes back online, in order to ensure that we start from a\nclean slate with respect to the MCE subsystem, zero out the entire\nper_cpu device structure to 0 before using it.\n\nSigned-off-by: Srivatsa S. Bhat \u003csrivatsa.bhat@linux.vnet.ibm.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "96e80a7851b44f3decaac0625665cd64e550b71d",
      "tree": "a24d9f46c43b5fcf824c49b93d37982ab668aade",
      "parents": [
        "57e6a7dde8cfca9ac1d6702cf9104d22bc11ba90",
        "3d4a1c80c4eb97187b3a61b3bfa8c804327f7a45"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jan 13 10:34:57 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jan 13 10:34:57 2012 -0800"
      },
      "message": "Merge git://git.kernel.org/pub/scm/linux/kernel/git/pkl/squashfs-next\n\n* git://git.kernel.org/pub/scm/linux/kernel/git/pkl/squashfs-next:\n  Squashfs: fix i_blocks calculation with extended regular files\n  Squashfs: fix mount time sanity check for corrupted superblock\n  Squashfs: optimise squashfs_cache_get entry search\n  Squashfs: Update documentation to include xattrs\n  Squashfs: add missing block release on error condition\n"
    },
    {
      "commit": "57e6a7dde8cfca9ac1d6702cf9104d22bc11ba90",
      "tree": "e53318e43657531399a8d6c721760015b26aa152",
      "parents": [
        "94b1984ab9ab61cc6047c07e074d766485299a9c",
        "66ad863b410efb7f537719006f9ac52400c1a5c5"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jan 13 10:33:39 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jan 13 10:33:39 2012 -0800"
      },
      "message": "Merge git://git.kernel.org/pub/scm/linux/kernel/git/steve/gfs2-3.0-nmw\n\n* git://git.kernel.org/pub/scm/linux/kernel/git/steve/gfs2-3.0-nmw:\n  GFS2: Fix nlink setting on inode creation\n  GFS2: fail mount if journal recovery fails\n  GFS2: let spectator mount do read only recovery\n  GFS2: Fix a use-after-free that coverity spotted\n  GFS2: dlm based recovery coordination\n"
    },
    {
      "commit": "94b1984ab9ab61cc6047c07e074d766485299a9c",
      "tree": "4b6cba21caf3d99129bea6a5eba0544b2fe8402a",
      "parents": [
        "1a52bb0b686844021597d190e562ab55d1210104",
        "515315a123af641a9533e4ff0f178c470dc08fc7"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jan 13 10:31:33 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jan 13 10:31:33 2012 -0800"
      },
      "message": "Merge branch \u0027linux-next\u0027 of git://git.infradead.org/ubifs-2.6\n\n* \u0027linux-next\u0027 of git://git.infradead.org/ubifs-2.6:\n  UBIFS: fix key printing\n  UBIFS: use snprintf instead of sprintf when printing keys\n  UBIFS: fix debugging messages\n  UBIFS: make debugging messages light again\n  UBI: fix debugging messages\n  UBI: make vid_hdr non-static\n"
    },
    {
      "commit": "1a52bb0b686844021597d190e562ab55d1210104",
      "tree": "7edf13509869a6a7f1f488a679f15ff6c3057c54",
      "parents": [
        "8638094e956a47dbb9a25166705a91e9a0981d52",
        "83eb26af0db71f2dfe551405c55d982288fa6178"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jan 13 10:29:21 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jan 13 10:29:21 2012 -0800"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client:\n  ceph: ensure prealloc_blob is in place when removing xattr\n  rbd: initialize snap_rwsem in rbd_add()\n  ceph: enable/disable dentry complete flags via mount option\n  vfs: export symbol d_find_any_alias()\n  ceph: always initialize the dentry in open_root_dentry()\n  libceph: remove useless return value for osd_client __send_request()\n  ceph: avoid iput() while holding spinlock in ceph_dir_fsync\n  ceph: avoid useless dget/dput in encode_fh\n  ceph: dereference pointer after checking for NULL\n  crush: fix force for non-root TAKE\n  ceph: remove unnecessary d_fsdata conditional checks\n  ceph: Use kmemdup rather than duplicating its implementation\n\nFix up conflicts in fs/ceph/super.c (d_alloc_root() failure handling vs\nalways initialize the dentry in open_root_dentry)\n"
    },
    {
      "commit": "8638094e956a47dbb9a25166705a91e9a0981d52",
      "tree": "c776b8254bb1a070cfafe5be8615c25b1314e31a",
      "parents": [
        "099469502f62fbe0d7e4f0b83a2f22538367f734"
      ],
      "author": {
        "name": "Ian Kent",
        "email": "raven@themaw.net",
        "time": "Fri Jan 13 20:41:46 2012 +0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jan 13 08:30:49 2012 -0800"
      },
      "message": "autofs4 - fix deal with autofs4_write races\n\nI don\u0027t know how I missed this obvious mistake when I\nreviewed Als\u0027 patches, sorry.\n\n[ Quoting Al:\n\n\tGrr...  Note to self: do git status *and* git stash show -p\n\tbefore git push.  Nothing like \"WTF? I\u0027d fixed that braino\"\n\tfeeling ;-/\n\n  Al sent the same patch - it got broken in commit d668dc56631d:\n  \"autofs4: deal with autofs4_write/autofs4_write races\". ]\n\nReported-and-tested-by: Dave Airlie \u003cairlied@redhat.com\u003e\nSigned-off-by: Ian Kent \u003craven@themaw.net\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "515315a123af641a9533e4ff0f178c470dc08fc7",
      "tree": "1a215c3df46286d7ff878cd86517818404758900",
      "parents": [
        "beba006074e7170d3bc91470c8a6c914730d4c63"
      ],
      "author": {
        "name": "Artem Bityutskiy",
        "email": "artem.bityutskiy@linux.intel.com",
        "time": "Fri Jan 13 12:33:53 2012 +0200"
      },
      "committer": {
        "name": "Artem Bityutskiy",
        "email": "artem.bityutskiy@linux.intel.com",
        "time": "Fri Jan 13 12:50:42 2012 +0200"
      },
      "message": "UBIFS: fix key printing\n\nBefore commit 56e46742e846e4de167dde0e1e1071ace1c882a5 we have had locking\naround all printing macros and we could use static buffers for creating\nkey strings and printing them. However, now we do not have that locking and\nwe cannot use static buffers. This commit removes the old DBGKEY() macros\nand introduces few new helper macros for printing debugging messages plus\na key at the end. Thankfully, all the messages are already structures in\na way that the key is printed in the end.\n\nSigned-off-by: Artem Bityutskiy \u003cartem.bityutskiy@linux.intel.com\u003e\n"
    },
    {
      "commit": "beba006074e7170d3bc91470c8a6c914730d4c63",
      "tree": "3d7330a25a1c7c8228774ec9ff9cc7f1f2dcd1ab",
      "parents": [
        "d34315da9146253351146140ea4b277193ee5e5f"
      ],
      "author": {
        "name": "Artem Bityutskiy",
        "email": "artem.bityutskiy@linux.intel.com",
        "time": "Wed Jan 11 15:52:09 2012 +0200"
      },
      "committer": {
        "name": "Artem Bityutskiy",
        "email": "artem.bityutskiy@linux.intel.com",
        "time": "Fri Jan 13 12:46:21 2012 +0200"
      },
      "message": "UBIFS: use snprintf instead of sprintf when printing keys\n\nSwitch to \u0027snprintf()\u0027 which is more secure and reliable. This is also a\npreparation to the subsequent key printing fixes.\n\nSigned-off-by: Artem Bityutskiy \u003cartem.bityutskiy@linux.intel.com\u003e\n"
    },
    {
      "commit": "099469502f62fbe0d7e4f0b83a2f22538367f734",
      "tree": "5229c3818b2e6e09d35026d49314047121130536",
      "parents": [
        "7c17d86a8502c2e30c2eea777ed1b830aa3b447b",
        "35f1526845a9d804206883e19bd257d3dcef758f"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:42:54 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:42:54 2012 -0800"
      },
      "message": "Merge branch \u0027akpm\u0027 (aka \"Andrew\u0027s patch-bomb, take two\")\n\nAndrew explains:\n\n - various misc stuff\n\n - Most of the rest of MM: memcg, threaded hugepages, others.\n\n - cpumask\n\n - kexec\n\n - kdump\n\n - some direct-io performance tweaking\n\n - radix-tree optimisations\n\n - new selftests code\n\n   A note on this: often people will develop a new userspace-visible\n   feature and will develop userspace code to exercise/test that\n   feature.  Then they merge the patch and the selftest code dies.\n   Sometimes we paste it into the changelog.  Sometimes the code gets\n   thrown into Documentation/(!).\n\n   This saddens me.  So this patch creates a bare-bones framework which\n   will henceforth allow me to ask people to include their test apps in\n   the kernel tree so we can keep them alive.  Then when people enhance\n   or fix the feature, I can ask them to update the test app too.\n\n   The infrastruture is terribly trivial at present - let\u0027s see how it\n   evolves.\n\n - checkpoint/restart feature work.\n\n   A note on this: this is a project by various mad Russians to perform\n   c/r mainly from userspace, with various oddball helper code added\n   into the kernel where the need is demonstrated.\n\n   So rather than some large central lump of code, what we have is\n   little bits and pieces popping up in various places which either\n   expose something new or which permit something which is normally\n   kernel-private to be modified.\n\n   The overall project is an ongoing thing.  I\u0027ve judged that the size\n   and scope of the thing means that we\u0027re more likely to be successful\n   with it if we integrate the support into mainline piecemeal rather\n   than allowing it all to develop out-of-tree.\n\n   However I\u0027m less confident than the developers that it will all\n   eventually work! So what I\u0027m asking them to do is to wrap each piece\n   of new code inside CONFIG_CHECKPOINT_RESTORE.  So if it all\n   eventually comes to tears and the project as a whole fails, it should\n   be a simple matter to go through and delete all trace of it.\n\nThis lot pretty much wraps up the -rc1 merge for me.\n\n* akpm: (96 commits)\n  unlzo: fix input buffer free\n  ramoops: update parameters only after successful init\n  ramoops: fix use of rounddown_pow_of_two()\n  c/r: prctl: add PR_SET_MM codes to set up mm_struct entries\n  c/r: procfs: add start_data, end_data, start_brk members to /proc/$pid/stat v4\n  c/r: introduce CHECKPOINT_RESTORE symbol\n  selftests: new x86 breakpoints selftest\n  selftests: new very basic kernel selftests directory\n  radix_tree: take radix_tree_path off stack\n  radix_tree: remove radix_tree_indirect_to_ptr()\n  dio: optimize cache misses in the submission path\n  vfs: cache request_queue in struct block_device\n  fs/direct-io.c: calculate fs_count correctly in get_more_blocks()\n  drivers/parport/parport_pc.c: fix warnings\n  panic: don\u0027t print redundant backtraces on oops\n  sysctl: add the kernel.ns_last_pid control\n  kdump: add udev events for memory online/offline\n  include/linux/crash_dump.h needs elf.h\n  kdump: fix crash_kexec()/smp_send_stop() race in panic()\n  kdump: crashk_res init check for /sys/kernel/kexec_crash_size\n  ...\n"
    },
    {
      "commit": "7c17d86a8502c2e30c2eea777ed1b830aa3b447b",
      "tree": "353f739a33f46f9861b479e64d2a59f9b5c85868",
      "parents": [
        "2485a4b610171f4e1c4ab0d053569747795c1bbe",
        "91dce7ddab99a29b600e3d792b847dc2cdbf0848"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:30:02 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:30:02 2012 -0800"
      },
      "message": "Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net\n\n* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net: (69 commits)\n  pptp: Accept packet with seq zero\n  RDS: Remove some unused iWARP code\n  net: fsl: fec: handle 10Mbps speed in RMII mode\n  drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c: add missing iounmap\n  drivers/net/ethernet/tundra/tsi108_eth.c: add missing iounmap\n  ksz884x: fix mtu for VLAN\n  net_sched: sfq: add optional RED on top of SFQ\n  dp83640: Fix NOHZ local_softirq_pending 08 warning\n  gianfar: Fix invalid TX frames returned on error queue when time stamping\n  gianfar: Fix missing sock reference when processing TX time stamps\n  phylib: introduce mdiobus_alloc_size()\n  net: decrement memcg jump label when limit, not usage, is changed\n  net: reintroduce missing rcu_assign_pointer() calls\n  inet_diag: Rename inet_diag_req_compat into inet_diag_req\n  inet_diag: Rename inet_diag_req into inet_diag_req_v2\n  bond_alb: don\u0027t disable softirq under bond_alb_xmit\n  mac80211: fix rx-\u003ekey NULL pointer dereference in promiscuous mode\n  nl80211: fix old station flags compatibility\n  mdio-octeon: use an unique MDIO bus name.\n  mdio-gpio: use an unique MDIO bus name.\n  ...\n"
    },
    {
      "commit": "35f1526845a9d804206883e19bd257d3dcef758f",
      "tree": "aaefaf3e43abec7522fe08f8632cd7ff5dbffa7f",
      "parents": [
        "c755201eb5c1e09f3477d0e83ae1e3aadac0e8d1"
      ],
      "author": {
        "name": "Sascha Hauer",
        "email": "s.hauer@pengutronix.de",
        "time": "Thu Jan 12 17:21:01 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:13 2012 -0800"
      },
      "message": "unlzo: fix input buffer free\n\nunlzo modifies the pointer to in_buf, so we have to free the original\nbuffer, not the modified pointer.\n\nSigned-off-by: Sascha Hauer \u003cs.hauer@pengutronix.de\u003e\nCc: Lasse Collin \u003classe.collin@tukaani.org\u003e\nCc: Namhyung Kim \u003cnamhyung@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": "c755201eb5c1e09f3477d0e83ae1e3aadac0e8d1",
      "tree": "af48ca5cc4ef2173b64e421d7ad550dc10c437f0",
      "parents": [
        "fdb5950754eb3dedb9fea7c8828d3e51d9dbc3f7"
      ],
      "author": {
        "name": "Kees Cook",
        "email": "kees@outflux.net",
        "time": "Thu Jan 12 17:20:59 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:13 2012 -0800"
      },
      "message": "ramoops: update parameters only after successful init\n\nIf a platform device exists on the system, but ramoops fails to attach to\nit, the module parameters are overridden before ramoops can fall back and\ntry to use passed module parameters.  Move update to end of init routine.\n\nSigned-off-by: Kees Cook \u003ckeescook@chromium.org\u003e\nCc: Marco Stornelli \u003cmarco.stornelli@gmail.com\u003e\nCc: Sergiu Iordache \u003csergiu@chromium.org\u003e\nCc: Seiji Aguchi \u003cseiji.aguchi@hds.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "fdb5950754eb3dedb9fea7c8828d3e51d9dbc3f7",
      "tree": "57d9804de982ab233c2fe2c553466a12387e1866",
      "parents": [
        "028ee4be34a09a6d48bdf30ab991ae933a7bc036"
      ],
      "author": {
        "name": "Marco Stornelli",
        "email": "marco.stornelli@gmail.com",
        "time": "Thu Jan 12 17:20:58 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:13 2012 -0800"
      },
      "message": "ramoops: fix use of rounddown_pow_of_two()\n\nThe return value of rounddown_pow_of_two wasn\u0027t evaluated, so the\noperation was a no-op.\n\nSigned-off-by: Marco Stornelli \u003cmarco.stornelli@gmail.com\u003e\nReported-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nReviewed-by: WANG Cong \u003cxiyou.wangcong@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": "028ee4be34a09a6d48bdf30ab991ae933a7bc036",
      "tree": "455783226ceb65aee100f86afed529d4bbde1c8b",
      "parents": [
        "b3f7f573a20081910e34e99cbc91831f4f02f1ff"
      ],
      "author": {
        "name": "Cyrill Gorcunov",
        "email": "gorcunov@openvz.org",
        "time": "Thu Jan 12 17:20:55 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:13 2012 -0800"
      },
      "message": "c/r: prctl: add PR_SET_MM codes to set up mm_struct entries\n\nWhen we restore a task we need to set up text, data and data heap sizes\nfrom userspace to the values a task had at checkpoint time.  This patch\nadds auxilary prctl codes for that.\n\nWhile most of them have a statistical nature (their values are involved\ninto calculation of /proc/\u003cpid\u003e/statm output) the start_brk and brk values\nare used to compute an allowed size of program data segment expansion.\nWhich means an arbitrary changes of this values might be dangerous\noperation.  So to restrict access the following requirements applied to\nprctl calls:\n\n - The process has to have CAP_SYS_ADMIN capability granted.\n - For all opcodes except start_brk/brk members an appropriate\n   VMA area must exist and should fit certain VMA flags,\n   such as:\n   - code segment must be executable but not writable;\n   - data segment must not be executable.\n\nstart_brk/brk values must not intersect with data segment and must not\nexceed RLIMIT_DATA resource limit.\n\nStill the main guard is CAP_SYS_ADMIN capability check.\n\nNote the kernel should be compiled with CONFIG_CHECKPOINT_RESTORE support\notherwise these prctl calls will return -EINVAL.\n\n[akpm@linux-foundation.org: cache current-\u003emm in a local, saving 200 bytes text]\nSigned-off-by: Cyrill Gorcunov \u003cgorcunov@openvz.org\u003e\nReviewed-by: Kees Cook \u003ckeescook@chromium.org\u003e\nCc: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Andrew Vagin \u003cavagin@openvz.org\u003e\nCc: Serge Hallyn \u003cserge.hallyn@canonical.com\u003e\nCc: Pavel Emelyanov \u003cxemul@parallels.com\u003e\nCc: Vasiliy Kulikov \u003csegoon@openwall.com\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Michael Kerrisk \u003cmtk.manpages@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": "b3f7f573a20081910e34e99cbc91831f4f02f1ff",
      "tree": "2c0aea64b3be4c24f84be6a5275f7202e0dde594",
      "parents": [
        "067bce1a06c1f84146f873a598cd7c3a28eee1d5"
      ],
      "author": {
        "name": "Cyrill Gorcunov",
        "email": "gorcunov@openvz.org",
        "time": "Thu Jan 12 17:20:53 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:13 2012 -0800"
      },
      "message": "c/r: procfs: add start_data, end_data, start_brk members to /proc/$pid/stat v4\n\nThe mm-\u003estart_code/end_code, mm-\u003estart_data/end_data, mm-\u003estart_brk are\ninvolved into calculation of program text/data segment sizes (which might\nbe seen in /proc/\u003cpid\u003e/statm) and into brk() call final address.\n\nFor restore we need to know all these values.  While\nmm-\u003estart_code/end_code already present in /proc/$pid/stat, the rest\nmembers are not, so this patch brings them in.\n\nThe restore procedure of these members is addressed in another patch using\nprctl().\n\nSigned-off-by: Cyrill Gorcunov \u003cgorcunov@openvz.org\u003e\nAcked-by: Serge Hallyn \u003cserge.hallyn@canonical.com\u003e\nReviewed-by: Kees Cook \u003ckeescook@chromium.org\u003e\nReviewed-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Alexey Dobriyan \u003cadobriyan@gmail.com\u003e\nCc: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Andrew Vagin \u003cavagin@openvz.org\u003e\nCc: Vasiliy Kulikov \u003csegoon@openwall.com\u003e\nCc: Alexey Dobriyan \u003cadobriyan@gmail.com\u003e\nCc: \"Eric W. Biederman\" \u003cebiederm@xmission.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "067bce1a06c1f84146f873a598cd7c3a28eee1d5",
      "tree": "91b4a7e52e1ed8136ea80f7c1d0cc437f93e3d30",
      "parents": [
        "85bbddc37b2bf947a577d572b1c4c23bf829217f"
      ],
      "author": {
        "name": "Cyrill Gorcunov",
        "email": "gorcunov@openvz.org",
        "time": "Thu Jan 12 17:20:49 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:12 2012 -0800"
      },
      "message": "c/r: introduce CHECKPOINT_RESTORE symbol\n\nFor checkpoint/restore we need auxilary features being compiled into the\nkernel, such as additional prctl codes, /proc/\u003cpid\u003e/map_files and etc...\nbut same time these features are not mandatory for a regular kernel so\nCHECKPOINT_RESTORE config symbol should bring a way to disable them all at\nonce if one wish to get rid of additional functionality.\n\nSigned-off-by: Cyrill Gorcunov \u003cgorcunov@openvz.org\u003e\nCc: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Andrew Vagin \u003cavagin@openvz.org\u003e\nCc: Serge Hallyn \u003cserge.hallyn@canonical.com\u003e\nCc: Vasiliy Kulikov \u003csegoon@openwall.com\u003e\nReviewed-by: Kees Cook \u003ckeescook@chromium.org\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Alexey Dobriyan \u003cadobriyan@gmail.com\u003e\nCc: \"Eric W. Biederman\" \u003cebiederm@xmission.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "85bbddc37b2bf947a577d572b1c4c23bf829217f",
      "tree": "07e483b13f93d6e5eb08d4423648a0812b41b3fe",
      "parents": [
        "274343ad3e63c4dcee6744a75b5553940de4a0f6"
      ],
      "author": {
        "name": "Frederic Weisbecker",
        "email": "fweisbec@gmail.com",
        "time": "Thu Jan 12 17:20:46 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:12 2012 -0800"
      },
      "message": "selftests: new x86 breakpoints selftest\n\nBring a first selftest in the relevant directory.  This tests several\ncombinations of breakpoints and watchpoints in x86, as well as icebp traps\nand int3 traps.  Given the amount of breakpoint regressions we raised\nafter we merged the generic breakpoint infrastructure, such selftest\nbecame necessary and can still serve today as a basis for new patches that\ntouch the do_debug() path.\n\nSigned-off-by: Frederic Weisbecker \u003cfweisbec@gmail.com\u003e\nCc: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: H. Peter Anvin \u003chpa@zytor.com\u003e\nCc: Jason Wessel \u003cjason.wessel@windriver.com\u003e\nCc: Will Deacon \u003cwill.deacon@arm.com\u003e\nCc: Michal Marek \u003cmmarek@suse.cz\u003e\nCc: Sam Ravnborg \u003csam@ravnborg.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "274343ad3e63c4dcee6744a75b5553940de4a0f6",
      "tree": "0ac8f5470f2ae949876e7dbe60bdbcc5b441c5ea",
      "parents": [
        "e2bdb933ab8b7db71c318a4ddcf78a9fffd61ecb"
      ],
      "author": {
        "name": "Frederic Weisbecker",
        "email": "fweisbec@gmail.com",
        "time": "Thu Jan 12 17:20:44 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:12 2012 -0800"
      },
      "message": "selftests: new very basic kernel selftests directory\n\nBring a new kernel selftests directory in tools/testing/selftests.  To\nadd a new selftest, create a subdirectory with the sources and a\nmakefile that creates a target named \"run_test\" then add the\nsubdirectory name to the TARGET var in tools/testing/selftests/Makefile\nand tools/testing/selftests/run_tests script.\n\nThis can help centralizing and maintaining any useful selftest that\ndevelopers usually tend to let rust in peace on some random server.\n\nSuggested-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Frederic Weisbecker \u003cfweisbec@gmail.com\u003e\nCc: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: \"H. Peter Anvin\" \u003chpa@zytor.com\u003e\nCc: Jason Wessel \u003cjason.wessel@windriver.com\u003e\nCc: Will Deacon \u003cwill.deacon@arm.com\u003e\nCc: Steven Rostedt \u003crostedt@goodmis.org\u003e\nCc: Michal Marek \u003cmmarek@suse.cz\u003e\nCc: Sam Ravnborg \u003csam@ravnborg.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "e2bdb933ab8b7db71c318a4ddcf78a9fffd61ecb",
      "tree": "23f39b8a9996135b893442c41d6da05c7988a0db",
      "parents": [
        "928da837aca77a9d3cb5076bf07b3224b1ba293b"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Thu Jan 12 17:20:41 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:12 2012 -0800"
      },
      "message": "radix_tree: take radix_tree_path off stack\n\nDown, down in the deepest depths of GFP_NOIO page reclaim, we have\nshrink_page_list() calling __remove_mapping() calling __delete_from_\nswap_cache() or __delete_from_page_cache().\n\nYou would not expect those to need much stack, but in fact they call\nradix_tree_delete(): which declares a 192-byte radix_tree_path array on\nits stack (to record the node,offsets it visits when descending, in case\nit needs to ascend to update them).  And if any tag is still set [1],\nthat calls radix_tree_tag_clear(), which declares a further such\n192-byte radix_tree_path array on the stack.  (At least we have\ninterrupts disabled here, so won\u0027t then be pushing registers too.)\n\nThat was probably a good choice when most users were 32-bit (array of\nhalf the size), and adding fields to radix_tree_node would have bloated\nit unnecessarily.  But nowadays many are 64-bit, and each\nradix_tree_node contains a struct rcu_head, which is only used when\nfreeing; whereas the radix_tree_path info is only used for updating the\ntree (deleting, clearing tags or setting tags if tagged) when a lock\nmust be held, of no interest when accessing the tree locklessly.\n\nSo add a parent pointer to the radix_tree_node, in union with the\nrcu_head, and remove all uses of the radix_tree_path.  There would be\nspace in that union to save the offset when descending as before (we can\nargue that a lock must already be held to exclude other users), but\nrecalculating it when ascending is both easy (a constant shift and a\nconstant mask) and uncommon, so it seems better just to do that.\n\nTwo little optimizations: no need to decrement height when descending,\nadjusting shift is enough; and once radix_tree_tag_if_tagged() has set\ntag on a node and its ancestors, it need not ascend from that node\nagain.\n\nperf on the radix tree test harness reports radix_tree_insert() as 2%\nslower (now having to set parent), but radix_tree_delete() 24% faster.\nSurely that\u0027s an exaggeration from rtth\u0027s artificially low map shift 3,\nbut forcing it back to 6 still rates radix_tree_delete() 8% faster.\n\n[1] Can a pagecache tag (dirty, writeback or towrite) actually still be\nset at the time of radix_tree_delete()? Perhaps not if the filesystem is\nwell-behaved.  But although I\u0027ve not tracked any stack overflow down to\nthis cause, I have observed a curious case in which a dirty tag is set\nand left set on tmpfs: page migration\u0027s migrate_page_copy() happens to\nuse __set_page_dirty_nobuffers() to set PageDirty on the newpage, and\nthat sets PAGECACHE_TAG_DIRTY as a side-effect - harmless to a\nfilesystem which doesn\u0027t use tags, except for this stack depth issue.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nCc: Jan Kara \u003cjack@suse.cz\u003e\nCc: Dave Chinner \u003cdavid@fromorbit.com\u003e\nCc: Mel Gorman \u003cmgorman@suse.de\u003e\nCc: Nai Xia \u003cnai.xia@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": "928da837aca77a9d3cb5076bf07b3224b1ba293b",
      "tree": "741c003b608d50101fa91746d36a7c5e847a8fa5",
      "parents": [
        "65dd2aa90aa17a26703c28652408192856aa0396"
      ],
      "author": {
        "name": "Xiao Guangrong",
        "email": "xiaoguangrong@linux.vnet.ibm.com",
        "time": "Thu Jan 12 17:20:39 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:12 2012 -0800"
      },
      "message": "radix_tree: remove radix_tree_indirect_to_ptr()\n\nIt is not used anymore, remove it\n\nSigned-off-by: Xiao Guangrong \u003cxiaoguangrong@linux.vnet.ibm.com\u003e\nAcked-by: Hugh Dickins \u003chughd@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "65dd2aa90aa17a26703c28652408192856aa0396",
      "tree": "4ea4635f786fc295d16a459925da67701253df97",
      "parents": [
        "87192a2a49c475cf322cb143e0fa63b0102d8567"
      ],
      "author": {
        "name": "Andi Kleen",
        "email": "ak@linux.intel.com",
        "time": "Thu Jan 12 17:20:35 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:12 2012 -0800"
      },
      "message": "dio: optimize cache misses in the submission path\n\nSome investigation of a transaction processing workload showed that a\nmajor consumer of cycles in __blockdev_direct_IO is the cache miss while\naccessing the block size.  This is because it has to walk the chain from\nblock_dev to gendisk to queue.\n\nThe block size is needed early on to check alignment and sizes.  It\u0027s only\ndone if the check for the inode block size fails.  But the costly block\ndevice state is unconditionally fetched.\n\n- Reorganize the code to only fetch block dev state when actually\n  needed.\n\nThen do a prefetch on the block dev early on in the direct IO path.  This\nis worth it, because there is substantial code run before we actually\ntouch the block dev now.\n\n- I also added some unlikelies to make it clear the compiler that block\n  device fetch code is not normally executed.\n\nThis gave a small, but measurable improvement on a large database\nbenchmark (about 0.3%)\n\n[akpm@linux-foundation.org: coding-style fixes]\n[sfr@canb.auug.org.au: using prefetch requires including prefetch.h]\nSigned-off-by: Andi Kleen \u003cak@linux.intel.com\u003e\nCc: Jeff Moyer \u003cjmoyer@redhat.com\u003e\nCc: Jens Axboe \u003caxboe@kernel.dk\u003e\nCc: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Stephen Rothwell \u003csfr@canb.auug.org.au\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "87192a2a49c475cf322cb143e0fa63b0102d8567",
      "tree": "70acf2fb1e4a9a3a62559ad9218278d2fb114599",
      "parents": [
        "ae55e1aaa7e2e57e538cb98cf617f511c5dc4f73"
      ],
      "author": {
        "name": "Andi Kleen",
        "email": "ak@linux.intel.com",
        "time": "Thu Jan 12 17:20:34 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:12 2012 -0800"
      },
      "message": "vfs: cache request_queue in struct block_device\n\nThis makes it possible to get from the inode to the request_queue with one\nless cache miss.  Used in followon optimization.\n\nThe livetime of the pointer is the same as the gendisk.\n\nThis assumes that the queue will always stay the same in the gendisk while\nit\u0027s visible to block_devices.  I think that\u0027s safe correct?\n\nSigned-off-by: Andi Kleen \u003cak@linux.intel.com\u003e\nAcked-by: Jeff Moyer \u003cjmoyer@redhat.com\u003e\nCc: Jens Axboe \u003caxboe@kernel.dk\u003e\nCc: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "ae55e1aaa7e2e57e538cb98cf617f511c5dc4f73",
      "tree": "3f3981dd7617c656e7a6ba2f3a83a14637c63221",
      "parents": [
        "45dac90f0ca7d9efeda8f3d416c808c71207bf20"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "boyu.mt@taobao.com",
        "time": "Thu Jan 12 17:20:33 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:12 2012 -0800"
      },
      "message": "fs/direct-io.c: calculate fs_count correctly in get_more_blocks()\n\nIn get_more_blocks(), we use dio_count to calcuate fs_count and do some\ntricky things to increase fs_count if dio_count isn\u0027t aligned.  But\nactually it still has some corner cases that can\u0027t be coverd.  See the\nfollowing example:\n\n\tdio_write foo -s 1024 -w 4096\n\n(direct write 4096 bytes at offset 1024).  The same goes if the offset\nisn\u0027t aligned to fs_blocksize.\n\nIn this case, the old calculation counts fs_count to be 1, but actually we\nwill write into 2 different blocks (if fs_blocksize\u003d4096).  The old code\njust works, since it will call get_block twice (and may have to allocate\nand create extents twice for filesystems like ext4).  So we\u0027d better call\nget_block just once with the proper fs_count.\n\nSigned-off-by: Tao Ma \u003cboyu.mt@taobao.com\u003e\nCc: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\nCc: Christoph Hellwig \u003chch@lst.de\u003e\nCc: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "45dac90f0ca7d9efeda8f3d416c808c71207bf20",
      "tree": "c188c5a6b1661217b4cfb10940a2ccf91e057bc1",
      "parents": [
        "6e6f0a1f0fa6bba1493c296eb30d1e176e1f8530"
      ],
      "author": {
        "name": "Andrew Morton",
        "email": "akpm@linux-foundation.org",
        "time": "Thu Jan 12 17:20:32 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:12 2012 -0800"
      },
      "message": "drivers/parport/parport_pc.c: fix warnings\n\ndrivers/parport/parport_pc.c: In function \u0027__check_irq\u0027:\ndrivers/parport/parport_pc.c:3415: warning: return from incompatible pointer type\ndrivers/parport/parport_pc.c: In function \u0027__check_dma\u0027:\ndrivers/parport/parport_pc.c:3417: warning: return from incompatible pointer type\n\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "6e6f0a1f0fa6bba1493c296eb30d1e176e1f8530",
      "tree": "c1bbacbc93e5b6f7759d509d7cf6207ad5b3ee65",
      "parents": [
        "b8f566b04d3cddd192cfd2418ae6d54ac6353792"
      ],
      "author": {
        "name": "Andi Kleen",
        "email": "ak@linux.intel.com",
        "time": "Thu Jan 12 17:20:30 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:11 2012 -0800"
      },
      "message": "panic: don\u0027t print redundant backtraces on oops\n\nWhen an oops causes a panic and panic prints another backtrace it\u0027s pretty\ncommon to have the original oops data be scrolled away on a 80x50 screen.\n\nThe second backtrace is quite redundant and not needed anyways.\n\nSo don\u0027t print the panic backtrace when oops_in_progress is true.\n\n[akpm@linux-foundation.org: add comment]\nSigned-off-by: Andi Kleen \u003cak@linux.intel.com\u003e\nCc: Michael Holzheu \u003cholzheu@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": "b8f566b04d3cddd192cfd2418ae6d54ac6353792",
      "tree": "32a5bf86548cd43feff4822d800b6a99e157b5d7",
      "parents": [
        "f5138e42211d4e8bfbd6ac5b3816348da1533433"
      ],
      "author": {
        "name": "Pavel Emelyanov",
        "email": "xemul@parallels.com",
        "time": "Thu Jan 12 17:20:27 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:11 2012 -0800"
      },
      "message": "sysctl: add the kernel.ns_last_pid control\n\nThe sysctl works on the current task\u0027s pid namespace, getting and setting\nits last_pid field.\n\nWriting is allowed for CAP_SYS_ADMIN-capable tasks thus making it possible\nto create a task with desired pid value.  This ability is required badly\nfor the checkpoint/restore in userspace.\n\nThis approach suits all the parties for now.\n\nSigned-off-by: Pavel Emelyanov \u003cxemul@parallels.com\u003e\nAcked-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Cyrill Gorcunov \u003cgorcunov@openvz.org\u003e\nCc: \"Eric W. Biederman\" \u003cebiederm@xmission.com\u003e\nCc: Serge Hallyn \u003cserue@us.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": "f5138e42211d4e8bfbd6ac5b3816348da1533433",
      "tree": "c9d246be208547ded5dece81c57353f54d61ffd3",
      "parents": [
        "1f536b9e9f85456df93614b3c2f6a1a2b7d7cb9b"
      ],
      "author": {
        "name": "Michael Holzheu",
        "email": "holzheu@linux.vnet.ibm.com",
        "time": "Thu Jan 12 17:20:23 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:11 2012 -0800"
      },
      "message": "kdump: add udev events for memory online/offline\n\nCurrently no udev events for memory hotplug \"online\" and \"offline\" are\ngenerated:\n\n  # udevadm monitor\n  # echo offline \u003e /sys/devices/system/memory/memory4/state\n  \u003d\u003d\u003e No event\n\nWhen kdump is loaded, kexec detects the current memory configuration and\nstores it in the pre-allocated ELF core header.  Therefore, for kdump it\nis necessary to reload the kdump kernel with kexec when the memory\nconfiguration changes (e.g.  for online/offline hotplug memory).\n\nIn order to do this automatically, udev rules should be used.  This kernel\npatch adds udev events for \"online\" and \"offline\".  Together with this\nkernel patch, the following udev rules for online/offline have to be added\nto \"/etc/udev/rules.d/98-kexec.rules\":\n\n  SUBSYSTEM\u003d\u003d\"memory\", ACTION\u003d\u003d\"online\", PROGRAM\u003d\"/etc/init.d/kdump restart\"\n  SUBSYSTEM\u003d\u003d\"memory\", ACTION\u003d\u003d\"offline\", PROGRAM\u003d\"/etc/init.d/kdump restart\"\n\n[sfr@canb.auug.org.au: fixups for class to subsystem conversion]\nSigned-off-by: Michael Holzheu \u003cholzheu@linux.vnet.ibm.com\u003e\nCc: Heiko Carstens \u003cheiko.carstens@de.ibm.com\u003e\nCc: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nCc: \"Eric W. Biederman\" \u003cebiederm@xmission.com\u003e\nCc: Kay Sievers \u003ckay.sievers@vrfy.org\u003e\nCc: Dave Hansen \u003chaveblue@us.ibm.com\u003e\nCc: Martin Schwidefsky \u003cschwidefsky@de.ibm.com\u003e\nCc: Greg KH \u003cgreg@kroah.com\u003e\nSigned-off-by: Stephen Rothwell \u003csfr@canb.auug.org.au\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "1f536b9e9f85456df93614b3c2f6a1a2b7d7cb9b",
      "tree": "01ad4e6b777c7583a413a2b45cd9b3fd3f2b4d35",
      "parents": [
        "93e13a360ba331915220f82f6e9543df961ffa1f"
      ],
      "author": {
        "name": "Fabio Estevam",
        "email": "festevam@gmail.com",
        "time": "Thu Jan 12 17:20:20 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:11 2012 -0800"
      },
      "message": "include/linux/crash_dump.h needs elf.h\n\nBuilding an ARM target we get the following warnings:\n\n  CC      arch/arm/kernel/setup.o\n  In file included from arch/arm/kernel/setup.c:39:\n  arch/arm/include/asm/elf.h:102:1: warning: \"vmcore_elf64_check_arch\" redefined\n  In file included from arch/arm/kernel/setup.c:24:\n  include/linux/crash_dump.h:30:1: warning: this is the location of the previous definition\n\nQuoting Russell King:\n\n\"linux/crash_dump.h makes no attempt to include asm/elf.h, but it depends\non stuff in asm/elf.h to determine how stuff inside this file is defined\nat parse time.\n\nSo, if asm/elf.h is included after linux/crash_dump.h or not at all, you\nget a different result from the situation where asm/elf.h is included\nbefore.\"\n\nSo add elf.h header to crash_dump.h to avoid this problem.\n\nThe original discussion about this can be found at:\nhttp://www.spinics.net/lists/arm-kernel/msg154113.html\n\nSigned-off-by: Fabio Estevam \u003cfabio.estevam@freescale.com\u003e\nCc: Russell King \u003crmk@arm.linux.org.uk\u003e\nCc: \u003cstable@vger.kernel.org\u003e\t[3.2.1]\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "93e13a360ba331915220f82f6e9543df961ffa1f",
      "tree": "470c120ee5d3de69f46e62ec85452bee14e8d67c",
      "parents": [
        "bec013c40bc89671d8d457944fdf7d2b8e79d651"
      ],
      "author": {
        "name": "Michael Holzheu",
        "email": "holzheu@linux.vnet.ibm.com",
        "time": "Thu Jan 12 17:20:18 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:11 2012 -0800"
      },
      "message": "kdump: fix crash_kexec()/smp_send_stop() race in panic()\n\nWhen two CPUs call panic at the same time there is a possible race\ncondition that can stop kdump.  The first CPU calls crash_kexec() and the\nsecond CPU calls smp_send_stop() in panic() before crash_kexec() finished\non the first CPU.  So the second CPU stops the first CPU and therefore\nkdump fails:\n\n1st CPU:\n  panic()-\u003ecrash_kexec()-\u003emutex_trylock(\u0026kexec_mutex)-\u003e do kdump\n\n2nd CPU:\n  panic()-\u003ecrash_kexec()-\u003ekexec_mutex already held by 1st CPU\n       -\u003esmp_send_stop()-\u003e stop 1st CPU (stop kdump)\n\nThis patch fixes the problem by introducing a spinlock in panic that\nallows only one CPU to process crash_kexec() and the subsequent panic\ncode.\n\nAll other CPUs call the weak function panic_smp_self_stop() that stops the\nCPU itself.  This function can be overloaded by architecture code.  For\nexample \"tile\" can use their lower-power \"nap\" instruction for that.\n\nSigned-off-by: Michael Holzheu \u003cholzheu@linux.vnet.ibm.com\u003e\nAcked-by: Chris Metcalf \u003ccmetcalf@tilera.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "bec013c40bc89671d8d457944fdf7d2b8e79d651",
      "tree": "f48220571120805a319f0df876c1cc465586978e",
      "parents": [
        "6480e5a0923756b500634d9777ec4189492fbbfe"
      ],
      "author": {
        "name": "Michael Holzheu",
        "email": "holzheu@linux.vnet.ibm.com",
        "time": "Thu Jan 12 17:20:15 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:11 2012 -0800"
      },
      "message": "kdump: crashk_res init check for /sys/kernel/kexec_crash_size\n\nCurrently it is possible to set the crash_size via the sysfs\n/sys/kernel/kexec_crash_size even if no crash kernel memory has been\ndefined with the \"crashkernel\" parameter.  In this case \"crashk_res\" is\nnot initialized and crashk_res.start \u003d crashk_res.end \u003d 0.  Unfortunately\nresource_size(\u0026crashk_res) returns 1 in this case.  This breaks the s390\nimplementation of crash_(un)map_reserved_pages().\n\nTo fix the problem the correct \"old_size\" is now calculated in\ncrash_shrink_memory().  \"old_size is set to \"0\" if crashk_res is not\ninitialized.  With this change crash_shrink_memory() will do nothing, when\n\"crashk_res\" is not initialized.  It will return \"0\" for \"echo 0 \u003e\n/sys/kernel/kexec_crash_size\" and -EINVAL for \"echo [not zero] \u003e\n/sys/kernel/kexec_crash_size\".\n\nIn addition to that this patch also simplifies the \"ret \u003d -EINVAL\" vs.\n\"ret \u003d 0\" logic as suggested by Simon Horman.\n\nSigned-off-by: Michael Holzheu \u003cholzheu@linux.vnet.ibm.com\u003e\nReviewed-by: Dave Young \u003cdyoung@redhat.com\u003e\nReviewed-by: WANG Cong \u003cxiyou.wangcong@gmail.com\u003e\nReviewed-by: Simon Horman \u003chorms@verge.net.au\u003e\nCc: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nCc: \"Eric W. Biederman\" \u003cebiederm@xmission.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "6480e5a0923756b500634d9777ec4189492fbbfe",
      "tree": "0b1d26ce39f9b7cd28a9e82627ee837734f7c3ab",
      "parents": [
        "a3dd3323058d281abd584b15ad4c5b65064d7a61"
      ],
      "author": {
        "name": "Michael Holzheu",
        "email": "holzheu@linux.vnet.ibm.com",
        "time": "Thu Jan 12 17:20:14 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:11 2012 -0800"
      },
      "message": "kdump: add missing RAM resource in crash_shrink_memory()\n\nWhen shrinking crashkernel memory using /sys/kernel/kexec_crash_size for\nthe newly added memory no RAM resource is created at the moment.\n\nExample:\n\n  $ cat /proc/iomem\n  00000000-bfffffff : System RAM\n    00000000-005b7ac3 : Kernel code\n    005b7ac4-009743bf : Kernel data\n    009bb000-00a85c33 : Kernel bss\n  c0000000-cfffffff : Crash kernel\n  d0000000-ffffffff : System RAM\n\n  $ echo 0 \u003e /sys/kernel/kexec_crash_size\n  $ cat /proc/iomem\n  00000000-bfffffff : System RAM\n    00000000-005b7ac3 : Kernel code\n    005b7ac4-009743bf : Kernel data\n    009bb000-00a85c33 : Kernel bss\n                                   \u003c\u003c-- here is System RAM missing\n  d0000000-ffffffff : System RAM\n\nOne result of this bug is that the memory chunk can never be set offline\nusing memory hotplug.  With this patch I insert a new \"System RAM\"\nresource for the released memory.  Then the upper example looks like the\nfollowing:\n\n  $ echo 0 \u003e /sys/kernel/kexec_crash_size\n  $ cat /proc/iomem\n  00000000-bfffffff : System RAM\n    00000000-005b7ac3 : Kernel code\n    005b7ac4-009743bf : Kernel data\n    009bb000-00a85c33 : Kernel bss\n  c0000000-cfffffff : System RAM   \u003c\u003c-- new rescoure\n  d0000000-ffffffff : System RAM\n\nAnd now I can set chunk c0000000-cfffffff offline.\n\nSigned-off-by: Michael Holzheu \u003cholzheu@linux.vnet.ibm.com\u003e\nCc: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nCc: \"Eric W. Biederman\" \u003cebiederm@xmission.com\u003e\nCc: Heiko Carstens \u003cheiko.carstens@de.ibm.com\u003e\nCc: Martin Schwidefsky \u003cschwidefsky@de.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": "a3dd3323058d281abd584b15ad4c5b65064d7a61",
      "tree": "98c65337f9960db2d0ca55687314bb821f3e7c1f",
      "parents": [
        "9512938b885304f72c847379611d6018064af840"
      ],
      "author": {
        "name": "WANG Cong",
        "email": "xiyou.wangcong@gmail.com",
        "time": "Thu Jan 12 17:20:11 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:11 2012 -0800"
      },
      "message": "kexec: remove KMSG_DUMP_KEXEC\n\nKMSG_DUMP_KEXEC is useless because we already save kernel messages inside\n/proc/vmcore, and it is unsafe to allow modules to do other stuffs in a\ncrash dump scenario.\n\n[akpm@linux-foundation.org: fix powerpc build]\nSigned-off-by: WANG Cong \u003cxiyou.wangcong@gmail.com\u003e\nReported-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nAcked-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nAcked-by: Jarod Wilson \u003cjarod@redhat.com\u003e\nCc: \"Eric W. Biederman\" \u003cebiederm@xmission.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "9512938b885304f72c847379611d6018064af840",
      "tree": "92d1018ff67959cf465e0ec1df9c9c4617afdf83",
      "parents": [
        "f1db7afd917e54711798c64d78f8f5fb090f950d"
      ],
      "author": {
        "name": "Wanlong Gao",
        "email": "gaowanlong@cn.fujitsu.com",
        "time": "Thu Jan 12 17:20:09 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:11 2012 -0800"
      },
      "message": "cpumask: update setup_node_to_cpumask_map() comments\n\nnode_to_cpumask() has been replaced by cpumask_of_node(), and wholly\nremoved since commit 29c337a0 (\"cpumask: remove obsolete node_to_cpumask\nnow everyone uses cpumask_of_node\").\n\nSo update the comments for setup_node_to_cpumask_map().\n\nSigned-off-by: Wanlong Gao \u003cgaowanlong@cn.fujitsu.com\u003e\nAcked-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "f1db7afd917e54711798c64d78f8f5fb090f950d",
      "tree": "4104640edda22dad55c1db4d828ba21bfd0b4b85",
      "parents": [
        "3f79768f239746d19accd88da96263ef35d6a219"
      ],
      "author": {
        "name": "Kautuk Consul",
        "email": "consul.kautuk@gmail.com",
        "time": "Thu Jan 12 17:20:08 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:10 2012 -0800"
      },
      "message": "mm/vmalloc.c: eliminate extra loop in pcpu_get_vm_areas error path\n\nIf either of the vas or vms arrays are not properly kzalloced, then the\ncode jumps to the err_free label.\n\nThe err_free label runs a loop to check and free each of the array members\nof the vas and vms arrays which is not required for this situation as none\nof the array members have been allocated till this point.\n\nEliminate the extra loop we have to go through by introducing a new label\nerr_free2 and then jumping to it.\n\n[akpm@linux-foundation.org: remove now-unneeded tests]\nSigned-off-by: Kautuk Consul \u003cconsul.kautuk@gmail.com\u003e\nAcked-by: 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": "3f79768f239746d19accd88da96263ef35d6a219",
      "tree": "08c9dd76fb61386de4c26c393263c1cfc1d0b874",
      "parents": [
        "f626012db08b9ea71363327d81fe60c2782eea9f"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Thu Jan 12 17:20:07 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:10 2012 -0800"
      },
      "message": "mm: rearrange putback_inactive_pages\n\nThere is sometimes confusion between the global putback_lru_pages() in\nmigrate.c and the static putback_lru_pages() in vmscan.c: rename the\nlatter putback_inactive_pages(): it helps shrink_inactive_list() rather as\nmove_active_pages_to_lru() helps shrink_active_list().\n\nRemove unused scan_control arg from putback_inactive_pages() and from\nupdate_isolated_counts().  Move clear_active_flags() inside\nupdate_isolated_counts().  Move NR_ISOLATED accounting up into\nshrink_inactive_list() itself, so the balance is clearer.\n\nDo the spin_lock_irq() before calling putback_inactive_pages() and\nspin_unlock_irq() after return from it, so that it better matches\nupdate_isolated_counts() and move_active_pages_to_lru().\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@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": "f626012db08b9ea71363327d81fe60c2782eea9f",
      "tree": "3171843ead87fc7a3a959be802638205a473da56",
      "parents": [
        "1c1c53d43b387d02174911ecb42ce846577b0ea0"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Thu Jan 12 17:20:06 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:10 2012 -0800"
      },
      "message": "mm: remove isolate_pages()\n\nThe isolate_pages() level in vmscan.c offers little but indirection: merge\nit into isolate_lru_pages() as the compiler does, and use the names\nnr_to_scan and nr_scanned in each case.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nReviewed-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "1c1c53d43b387d02174911ecb42ce846577b0ea0",
      "tree": "bb1294b23d23f2403ab95068af6080b375cc3166",
      "parents": [
        "4111304dab198c687bc60f2e235a9f7ee92c47c8"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Thu Jan 12 17:20:04 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:10 2012 -0800"
      },
      "message": "mm: remove del_page_from_lru, add page_off_lru\n\ndel_page_from_lru() repeats del_page_from_lru_list(), also working out\nwhich LRU the page was on, clearing the relevant bits.  Decouple those\nfunctions: remove del_page_from_lru() and add page_off_lru().\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nReviewed-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "4111304dab198c687bc60f2e235a9f7ee92c47c8",
      "tree": "c98fbae214f73f8475bcdc54c8116dea82cd7d14",
      "parents": [
        "4d06f382c733f99ec67df006255e87525ac1efd3"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Thu Jan 12 17:20:01 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:10 2012 -0800"
      },
      "message": "mm: enum lru_list lru\n\nMostly we use \"enum lru_list lru\": change those few \"l\"s to \"lru\"s.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nReviewed-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "4d06f382c733f99ec67df006255e87525ac1efd3",
      "tree": "1a4eebc3bb1d04ce053107a07ff4b472c007e32b",
      "parents": [
        "5095ae83759f035c823fb375c6ed2de99c81d5ec"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Thu Jan 12 17:20:00 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:10 2012 -0800"
      },
      "message": "mm: no blank line after EXPORT_SYMBOL in swap.c\n\ncheckpatch rightly protests\n\n  WARNING: EXPORT_SYMBOL(foo); should immediately follow its function/variable\n\nso fix the five offenders in mm/swap.c.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nReviewed-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "5095ae83759f035c823fb375c6ed2de99c81d5ec",
      "tree": "478eb973da4fe6461cd749136a5f62bd96a0ac21",
      "parents": [
        "2bcf887963812c075f80a14e1fad8ec7e1c67acf"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Thu Jan 12 17:19:58 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:10 2012 -0800"
      },
      "message": "mm: fewer underscores in ____pagevec_lru_add\n\nWhat\u0027s so special about ____pagevec_lru_add() that it needs four leading\nunderscores?  Nothing, it just helped to distinguish from\n__pagevec_lru_add() in 2.6.28 development.  Cut two leading underscores.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nReviewed-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "2bcf887963812c075f80a14e1fad8ec7e1c67acf",
      "tree": "132f11eefe904653307a05b77d16f4c41866e486",
      "parents": [
        "90b3feaec8ffb167abd8903bf111605c2f035aa8"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Thu Jan 12 17:19:56 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:10 2012 -0800"
      },
      "message": "mm: take pagevecs off reclaim stack\n\nReplace pagevecs in putback_lru_pages() and move_active_pages_to_lru()\nby lists of pages_to_free: then apply Konstantin Khlebnikov\u0027s\nfree_hot_cold_page_list() to them instead of pagevec_release().\n\nWhich simplifies the flow (no need to drop and retake lock whenever\npagevec fills up) and reduces stale addresses in stack backtraces\n(which often showed through the pagevecs); but more importantly,\nremoves another 120 bytes from the deepest stacks in page reclaim.\nAlthough I\u0027ve not recently seen an actual stack overflow here with\na vanilla kernel, move_active_pages_to_lru() has often featured in\ndeep backtraces.\n\nHowever, free_hot_cold_page_list() does not handle compound pages\n(nor need it: a Transparent HugePage would have been split by the\ntime it reaches the call in shrink_page_list()), but it is possible\nfor putback_lru_pages() or move_active_pages_to_lru() to be left\nholding the last reference on a THP, so must exclude the unlikely\ncompound case before putting on pages_to_free.\n\nRemove pagevec_strip(), its work now done in move_active_pages_to_lru().\nThe pagevec in scan_mapping_unevictable_pages() remains in mm/vmscan.c,\nbut that is never on the reclaim path, and cannot be replaced by a list.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nReviewed-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nReviewed-by: Konstantin Khlebnikov \u003ckhlebnikov@openvz.org\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.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": "90b3feaec8ffb167abd8903bf111605c2f035aa8",
      "tree": "503c27c343397e1c94dce61e922fae18c7cd7172",
      "parents": [
        "12d27107867fc7216e8faaff0b894b0f162dcf75"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Thu Jan 12 17:19:54 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:10 2012 -0800"
      },
      "message": "memcg: fix mem_cgroup_print_bad_page\n\nIf DEBUG_VM, mem_cgroup_print_bad_page() is called whenever bad_page()\nshows a \"Bad page state\" message, removes page from circulation, adds a\ntaint and continues.  This is at a very low level, often when a spinlock\nis held (sometimes when page table lock is held, for example).\n\nWe want to recover from this badness, not make it worse: we must not\nkmalloc memory here, we must not do a cgroup path lookup via dubious\npointers.  No doubt that code was useful to debug a particular case at one\ntime, and may be again, but take it out of the mainline kernel.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Michal Hocko \u003cmhocko@suse.cz\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "12d27107867fc7216e8faaff0b894b0f162dcf75",
      "tree": "8f35d39f7e5d0b0f0ba10a3475e9fa4a2581e509",
      "parents": [
        "0cee34fd72c582b4f8ad8ce00645b75fb4168199"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Thu Jan 12 17:19:52 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:09 2012 -0800"
      },
      "message": "memcg: fix split_huge_page_refcounts()\n\nThis patch started off as a cleanup: __split_huge_page_refcounts() has to\ncope with two scenarios, when the hugepage being split is already on LRU,\nand when it is not; but why does it have to split that accounting across\nthree different sites?  Consolidate it in lru_add_page_tail(), handling\nevictable and unevictable alike, and use standard add_page_to_lru_list()\nwhen accounting is needed (when the head is not yet on LRU).\n\nBut a recent regression in -next, I guess the removal of PageCgroupAcctLRU\ntest from mem_cgroup_split_huge_fixup(), makes this now a necessary fix:\nunder load, the MEM_CGROUP_ZSTAT count was wrapping to a huge number,\nmessing up reclaim calculations and causing a freeze at rmdir of cgroup.\n\nAdd a VM_BUG_ON to mem_cgroup_lru_del_list() when we\u0027re about to wrap that\ncount - this has not been the only such incident.  Document that\nlru_add_page_tail() is for Transparent HugePages by #ifdef around it.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Michal Hocko \u003cmhocko@suse.cz\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "0cee34fd72c582b4f8ad8ce00645b75fb4168199",
      "tree": "3b3bd79df0a2ebc869dba091d922c252784ffd23",
      "parents": [
        "fe4b1b244bdb96136855f2c694071cb09d140766"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mgorman@suse.de",
        "time": "Thu Jan 12 17:19:49 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:09 2012 -0800"
      },
      "message": "mm: vmscan: check if reclaim should really abort even if compaction_ready() is true for one zone\n\nIf compaction can proceed for a given zone, shrink_zones() does not\nreclaim any more pages from it.  After commit [e0c2327: vmscan: abort\nreclaim/compaction if compaction can proceed], do_try_to_free_pages()\ntries to finish as soon as possible once one zone can compact.\n\nThis was intended to prevent slabs being shrunk unnecessarily but there\nare side-effects.  One is that a small zone that is ready for compaction\nwill abort reclaim even if the chances of successfully allocating a THP\nfrom that zone is small.  It also means that reclaim can return too early\neven though sc-\u003enr_to_reclaim pages were not reclaimed.\n\nThis partially reverts the commit until it is proven that slabs are really\nbeing shrunk unnecessarily but preserves the check to return 1 to avoid\nOOM if reclaim was aborted prematurely.\n\n[aarcange@redhat.com: This patch replaces a revert from Andrea]\nSigned-off-by: Mel Gorman \u003cmgorman@suse.de\u003e\nReviewed-by: Rik van Riel \u003criel@redhat.com\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: Dave Jones \u003cdavej@redhat.com\u003e\nCc: Jan Kara \u003cjack@suse.cz\u003e\nCc: Andy Isaacson \u003cadi@hexapodia.org\u003e\nCc: Nai Xia \u003cnai.xia@gmail.com\u003e\nCc: Johannes Weiner \u003cjweiner@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "fe4b1b244bdb96136855f2c694071cb09d140766",
      "tree": "c1fafe7ef5b5bd7c77ae981b47fa82916e0436eb",
      "parents": [
        "a6bc32b899223a877f595ef9ddc1e89ead5072b8"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mgorman@suse.de",
        "time": "Thu Jan 12 17:19:45 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:09 2012 -0800"
      },
      "message": "mm: vmscan: when reclaiming for compaction, ensure there are sufficient free pages available\n\nIn commit e0887c19 (\"vmscan: limit direct reclaim for higher order\nallocations\"), Rik noted that reclaim was too aggressive when THP was\nenabled.  In his initial patch he used the number of free pages to decide\nif reclaim should abort for compaction.  My feedback was that reclaim and\ncompaction should be using the same logic when deciding if reclaim should\nbe aborted.\n\nUnfortunately, this had the effect of reducing THP success rates when the\nworkload included something like streaming reads that continually\nallocated pages.  The window during which compaction could run and return\na THP was too small.\n\nThis patch combines Rik\u0027s two patches together.  compaction_suitable() is\nstill used to decide if reclaim should be aborted to allow compaction is\nused.  However, it will also ensure that there is a reasonable buffer of\nfree pages available.  This improves upon the THP allocation success rates\nbut bounds the number of pages that are freed for compaction.\n\nSigned-off-by: Mel Gorman \u003cmgorman@suse.de\u003e\nReviewed-by: Rik van Riel\u003criel@redhat.com\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: Dave Jones \u003cdavej@redhat.com\u003e\nCc: Jan Kara \u003cjack@suse.cz\u003e\nCc: Andy Isaacson \u003cadi@hexapodia.org\u003e\nCc: Nai Xia \u003cnai.xia@gmail.com\u003e\nCc: Johannes Weiner \u003cjweiner@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "a6bc32b899223a877f595ef9ddc1e89ead5072b8",
      "tree": "a9529f7af2cf8e77bb6670acea32169c891a2b76",
      "parents": [
        "66199712e9eef5aede09dbcd9dfff87798a66917"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mgorman@suse.de",
        "time": "Thu Jan 12 17:19:43 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:09 2012 -0800"
      },
      "message": "mm: compaction: introduce sync-light migration for use by compaction\n\nThis patch adds a lightweight sync migrate operation MIGRATE_SYNC_LIGHT\nmode that avoids writing back pages to backing storage.  Async compaction\nmaps to MIGRATE_ASYNC while sync compaction maps to MIGRATE_SYNC_LIGHT.\nFor other migrate_pages users such as memory hotplug, MIGRATE_SYNC is\nused.\n\nThis avoids sync compaction stalling for an excessive length of time,\nparticularly when copying files to a USB stick where there might be a\nlarge number of dirty pages backed by a filesystem that does not support\n-\u003ewritepages.\n\n[aarcange@redhat.com: This patch is heavily based on Andrea\u0027s work]\n[akpm@linux-foundation.org: fix fs/nfs/write.c build]\n[akpm@linux-foundation.org: fix fs/btrfs/disk-io.c build]\nSigned-off-by: Mel Gorman \u003cmgorman@suse.de\u003e\nReviewed-by: Rik van Riel \u003criel@redhat.com\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: Dave Jones \u003cdavej@redhat.com\u003e\nCc: Jan Kara \u003cjack@suse.cz\u003e\nCc: Andy Isaacson \u003cadi@hexapodia.org\u003e\nCc: Nai Xia \u003cnai.xia@gmail.com\u003e\nCc: Johannes Weiner \u003cjweiner@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "66199712e9eef5aede09dbcd9dfff87798a66917",
      "tree": "9994be003d97d9596fadb5e4c38c271ed3e79333",
      "parents": [
        "c82449352854ff09e43062246af86bdeb628f0c3"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mgorman@suse.de",
        "time": "Thu Jan 12 17:19:41 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:09 2012 -0800"
      },
      "message": "mm: page allocator: do not call direct reclaim for THP allocations while compaction is deferred\n\nIf compaction is deferred, direct reclaim is used to try to free enough\npages for the allocation to succeed.  For small high-orders, this has a\nreasonable chance of success.  However, if the caller has specified\n__GFP_NO_KSWAPD to limit the disruption to the system, it makes more sense\nto fail the allocation rather than stall the caller in direct reclaim.\nThis patch skips direct reclaim if compaction is deferred and the caller\nspecifies __GFP_NO_KSWAPD.\n\nAsync compaction only considers a subset of pages so it is possible for\ncompaction to be deferred prematurely and not enter direct reclaim even in\ncases where it should.  To compensate for this, this patch also defers\ncompaction only if sync compaction failed.\n\nSigned-off-by: Mel Gorman \u003cmgorman@suse.de\u003e\nAcked-by: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nReviewed-by: Rik van Riel\u003criel@redhat.com\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: Dave Jones \u003cdavej@redhat.com\u003e\nCc: Jan Kara \u003cjack@suse.cz\u003e\nCc: Andy Isaacson \u003cadi@hexapodia.org\u003e\nCc: Nai Xia \u003cnai.xia@gmail.com\u003e\nCc: Johannes Weiner \u003cjweiner@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "c82449352854ff09e43062246af86bdeb628f0c3",
      "tree": "9cb8052e425c8cdab24ac41e83bbb672832ce54e",
      "parents": [
        "b969c4ab9f182a6e1b2a0848be349f99714947b0"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mgorman@suse.de",
        "time": "Thu Jan 12 17:19:38 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:09 2012 -0800"
      },
      "message": "mm: compaction: make isolate_lru_page() filter-aware again\n\nCommit 39deaf85 (\"mm: compaction: make isolate_lru_page() filter-aware\")\nnoted that compaction does not migrate dirty or writeback pages and that\nis was meaningless to pick the page and re-add it to the LRU list.  This\nhad to be partially reverted because some dirty pages can be migrated by\ncompaction without blocking.\n\nThis patch updates \"mm: compaction: make isolate_lru_page\" by skipping\nover pages that migration has no possibility of migrating to minimise LRU\ndisruption.\n\nSigned-off-by: Mel Gorman \u003cmgorman@suse.de\u003e\nReviewed-by: Rik van Riel\u003criel@redhat.com\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nReviewed-by: Minchan Kim \u003cminchan@kernel.org\u003e\nCc: Dave Jones \u003cdavej@redhat.com\u003e\nCc: Jan Kara \u003cjack@suse.cz\u003e\nCc: Andy Isaacson \u003cadi@hexapodia.org\u003e\nCc: Nai Xia \u003cnai.xia@gmail.com\u003e\nCc: Johannes Weiner \u003cjweiner@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "b969c4ab9f182a6e1b2a0848be349f99714947b0",
      "tree": "dc1c6e4375cfec7b15f13a37307eba8a9e07f40f",
      "parents": [
        "7335084d446b83cbcb15da80497d03f0c1dc9e21"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mgorman@suse.de",
        "time": "Thu Jan 12 17:19:34 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:09 2012 -0800"
      },
      "message": "mm: compaction: determine if dirty pages can be migrated without blocking within -\u003emigratepage\n\nAsynchronous compaction is used when allocating transparent hugepages to\navoid blocking for long periods of time.  Due to reports of stalling,\nthere was a debate on disabling synchronous compaction but this severely\nimpacted allocation success rates.  Part of the reason was that many dirty\npages are skipped in asynchronous compaction by the following check;\n\n\tif (PageDirty(page) \u0026\u0026 !sync \u0026\u0026\n\t\tmapping-\u003ea_ops-\u003emigratepage !\u003d migrate_page)\n\t\t\trc \u003d -EBUSY;\n\nThis skips over all mapping aops using buffer_migrate_page() even though\nit is possible to migrate some of these pages without blocking.  This\npatch updates the -\u003emigratepage callback with a \"sync\" parameter.  It is\nthe responsibility of the callback to fail gracefully if migration would\nblock.\n\nSigned-off-by: Mel Gorman \u003cmgorman@suse.de\u003e\nReviewed-by: Rik van Riel \u003criel@redhat.com\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: Dave Jones \u003cdavej@redhat.com\u003e\nCc: Jan Kara \u003cjack@suse.cz\u003e\nCc: Andy Isaacson \u003cadi@hexapodia.org\u003e\nCc: Nai Xia \u003cnai.xia@gmail.com\u003e\nCc: Johannes Weiner \u003cjweiner@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "7335084d446b83cbcb15da80497d03f0c1dc9e21",
      "tree": "1bc34f3cc12a4f6fce19b8eeaed52dc3e4202b5b",
      "parents": [
        "5013473152d1ac9d44d787fb02edda845fdf2cb3"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mgorman@suse.de",
        "time": "Thu Jan 12 17:19:33 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:09 2012 -0800"
      },
      "message": "mm: vmscan: do not OOM if aborting reclaim to start compaction\n\nDuring direct reclaim it is possible that reclaim will be aborted so that\ncompaction can be attempted to satisfy a high-order allocation.  If this\ndecision is made before any pages are reclaimed, it is possible that 0 is\nreturned to the page allocator potentially triggering an OOM.  This has\nnot been observed but it is a possibility so this patch addresses it.\n\nSigned-off-by: Mel Gorman \u003cmgorman@suse.de\u003e\nReviewed-by: Rik van Riel \u003criel@redhat.com\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: Dave Jones \u003cdavej@redhat.com\u003e\nCc: Jan Kara \u003cjack@suse.cz\u003e\nCc: Andy Isaacson \u003cadi@hexapodia.org\u003e\nCc: Nai Xia \u003cnai.xia@gmail.com\u003e\nCc: Johannes Weiner \u003cjweiner@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "5013473152d1ac9d44d787fb02edda845fdf2cb3",
      "tree": "639d241cdc804f09d56caf8ff844e09291b99170",
      "parents": [
        "b16d3d5a5219d01e9be5e586e5d50fbf1ca955ea"
      ],
      "author": {
        "name": "Andrea Arcangeli",
        "email": "aarcange@redhat.com",
        "time": "Thu Jan 12 17:19:29 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:08 2012 -0800"
      },
      "message": "mm: vmscan: check if we isolated a compound page during lumpy scan\n\nProperly take into account if we isolated a compound page during the lumpy\nscan in reclaim and skip over the tail pages when encountered.  This\ncorrects the values given to the tracepoint for number of lumpy pages\nisolated and will avoid breaking the loop early if compound pages smaller\nthan the requested allocation size are requested.\n\n[mgorman@suse.de: Updated changelog]\nSigned-off-by: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nSigned-off-by: Mel Gorman \u003cmgorman@suse.de\u003e\nReviewed-by: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nReviewed-by: Rik van Riel \u003criel@redhat.com\u003e\nCc: Dave Jones \u003cdavej@redhat.com\u003e\nCc: Jan Kara \u003cjack@suse.cz\u003e\nCc: Andy Isaacson \u003cadi@hexapodia.org\u003e\nCc: Nai Xia \u003cnai.xia@gmail.com\u003e\nCc: Johannes Weiner \u003cjweiner@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "b16d3d5a5219d01e9be5e586e5d50fbf1ca955ea",
      "tree": "790422876526d780e1b66dd47ae522bfa3b73484",
      "parents": [
        "a77ebd333cd810d7b680d544be88c875131c2bd3"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mgorman@suse.de",
        "time": "Thu Jan 12 17:19:26 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:08 2012 -0800"
      },
      "message": "mm: compaction: use synchronous compaction for /proc/sys/vm/compact_memory\n\nWhen asynchronous compaction was introduced, the\n/proc/sys/vm/compact_memory handler should have been updated to always use\nsynchronous compaction.  This did not happen so this patch addresses it.\n\nThe assumption is if a user writes to /proc/sys/vm/compact_memory, they\nare willing for that process to stall.\n\nSigned-off-by: Mel Gorman \u003cmgorman@suse.de\u003e\nReviewed-by: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nReviewed-by: Rik van Riel \u003criel@redhat.com\u003e\nReviewed-by: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: Dave Jones \u003cdavej@redhat.com\u003e\nCc: Jan Kara \u003cjack@suse.cz\u003e\nCc: Andy Isaacson \u003cadi@hexapodia.org\u003e\nCc: Nai Xia \u003cnai.xia@gmail.com\u003e\nCc: Johannes Weiner \u003cjweiner@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "a77ebd333cd810d7b680d544be88c875131c2bd3",
      "tree": "f7e3baabdb4d81e089924e402442b21c4eaa3aab",
      "parents": [
        "ea4d349ffa8028c655236497c2ba17c17aaa0d65"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mgorman@suse.de",
        "time": "Thu Jan 12 17:19:22 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:08 2012 -0800"
      },
      "message": "mm: compaction: allow compaction to isolate dirty pages\n\nShort summary: There are severe stalls when a USB stick using VFAT is\nused with THP enabled that are reduced by this series.  If you are\nexperiencing this problem, please test and report back and considering I\nhave seen complaints from openSUSE and Fedora users on this as well as a\nfew private mails, I\u0027m guessing it\u0027s a widespread issue.  This is a new\ntype of USB-related stall because it is due to synchronous compaction\nwriting where as in the past the big problem was dirty pages reaching\nthe end of the LRU and being written by reclaim.\n\nAm cc\u0027ing Andrew this time and this series would replace\nmm-do-not-stall-in-synchronous-compaction-for-thp-allocations.patch.\nI\u0027m also cc\u0027ing Dave Jones as he might have merged that patch to Fedora\nfor wider testing and ideally it would be reverted and replaced by this\nseries.\n\nThat said, the later patches could really do with some review.  If this\nseries is not the answer then a new direction needs to be discussed\nbecause as it is, the stalls are unacceptable as the results in this\nleader show.\n\nFor testers that try backporting this to 3.1, it won\u0027t work because\nthere is a non-obvious dependency on not writing back pages in direct\nreclaim so you need those patches too.\n\nChangelog since V5\no Rebase to 3.2-rc5\no Tidy up the changelogs a bit\n\nChangelog since V4\no Added reviewed-bys, credited Andrea properly for sync-light\no Allow dirty pages without mappings to be considered for migration\no Bound the number of pages freed for compaction\no Isolate PageReclaim pages on their own LRU list\n\nThis is against 3.2-rc5 and follows on from discussions on \"mm: Do\nnot stall in synchronous compaction for THP allocations\" and \"[RFC\nPATCH 0/5] Reduce compaction-related stalls\". Initially, the proposed\npatch eliminated stalls due to compaction which sometimes resulted in\nuser-visible interactivity problems on browsers by simply never using\nsync compaction. The downside was that THP success allocation rates\nwere lower because dirty pages were not being migrated as reported by\nAndrea. His approach at fixing this was nacked on the grounds that\nit reverted fixes from Rik merged that reduced the amount of pages\nreclaimed as it severely impacted his workloads performance.\n\nThis series attempts to reconcile the requirements of maximising THP\nusage, without stalling in a user-visible fashion due to compaction\nor cheating by reclaiming an excessive number of pages.\n\nPatch 1 partially reverts commit 39deaf85 to allow migration to isolate\n\tdirty pages. This is because migration can move some dirty\n\tpages without blocking.\n\nPatch 2 notes that the /proc/sys/vm/compact_memory handler is not using\n\tsynchronous compaction when it should be. This is unrelated\n\tto the reported stalls but is worth fixing.\n\nPatch 3 checks if we isolated a compound page during lumpy scan and\n\taccount for it properly. For the most part, this affects\n\ttracing so it\u0027s unrelated to the stalls but worth fixing.\n\nPatch 4 notes that it is possible to abort reclaim early for compaction\n\tand return 0 to the page allocator potentially entering the\n\t\"may oom\" path. This has not been observed in practice but\n\tthe rest of the series potentially makes it easier to happen.\n\nPatch 5 adds a sync parameter to the migratepage callback and gives\n\tthe callback responsibility for migrating the page without\n\tblocking if sync\u003d\u003dfalse. For example, fallback_migrate_page\n\twill not call writepage if sync\u003d\u003dfalse. This increases the\n\tnumber of pages that can be handled by asynchronous compaction\n\tthereby reducing stalls.\n\nPatch 6 restores filter-awareness to isolate_lru_page for migration.\n\tIn practice, it means that pages under writeback and pages\n\twithout a -\u003emigratepage callback will not be isolated\n\tfor migration.\n\nPatch 7 avoids calling direct reclaim if compaction is deferred but\n\tmakes sure that compaction is only deferred if sync\n\tcompaction was used.\n\nPatch 8 introduces a sync-light migration mechanism that sync compaction\n\tuses. The objective is to allow some stalls but to not call\n\t-\u003ewritepage which can lead to significant user-visible stalls.\n\nPatch 9 notes that while we want to abort reclaim ASAP to allow\n\tcompation to go ahead that we leave a very small window of\n\topportunity for compaction to run. This patch allows more pages\n\tto be freed by reclaim but bounds the number to a reasonable\n\tlevel based on the high watermark on each zone.\n\nPatch 10 allows slabs to be shrunk even after compaction_ready() is\n\ttrue for one zone. This is to avoid a problem whereby a single\n\tsmall zone can abort reclaim even though no pages have been\n\treclaimed and no suitably large zone is in a usable state.\n\nPatch 11 fixes a problem with the rate of page scanning. As reclaim is\n\trarely stalling on pages under writeback it means that scan\n\trates are very high. This is particularly true for direct\n\treclaim which is not calling writepage. The vmstat figures\n\timplied that much of this was busy work with PageReclaim pages\n\tmarked for immediate reclaim. This patch is a prototype that\n\tmoves these pages to their own LRU list.\n\nThis has been tested and other than 2 USB keys getting trashed,\nnothing horrible fell out. That said, I am a bit unhappy with the\nrescue logic in patch 11 but did not find a better way around it. It\ndoes significantly reduce scan rates and System CPU time indicating\nit is the right direction to take.\n\nWhat is of critical importance is that stalls due to compaction\nare massively reduced even though sync compaction was still\nallowed. Testing from people complaining about stalls copying to USBs\nwith THP enabled are particularly welcome.\n\nThe following tests all involve THP usage and USB keys in some\nway. Each test follows this type of pattern\n\n1. Read from some fast fast storage, be it raw device or file. Each time\n   the copy finishes, start again until the test ends\n2. Write a large file to a filesystem on a USB stick. Each time the copy\n   finishes, start again until the test ends\n3. When memory is low, start an alloc process that creates a mapping\n   the size of physical memory to stress THP allocation. This is the\n   \"real\" part of the test and the part that is meant to trigger\n   stalls when THP is enabled. Copying continues in the background.\n4. Record the CPU usage and time to execute of the alloc process\n5. Record the number of THP allocs and fallbacks as well as the number of THP\n   pages in use a the end of the test just before alloc exited\n6. Run the test 5 times to get an idea of variability\n7. Between each run, sync is run and caches dropped and the test\n   waits until nr_dirty is a small number to avoid interference\n   or caching between iterations that would skew the figures.\n\nThe individual tests were then\n\nwritebackCPDeviceBasevfat\n\tDisable THP, read from a raw device (sda), vfat on USB stick\nwritebackCPDeviceBaseext4\n\tDisable THP, read from a raw device (sda), ext4 on USB stick\nwritebackCPDevicevfat\n\tTHP enabled, read from a raw device (sda), vfat on USB stick\nwritebackCPDeviceext4\n\tTHP enabled, read from a raw device (sda), ext4 on USB stick\nwritebackCPFilevfat\n\tTHP enabled, read from a file on fast storage and USB, both vfat\nwritebackCPFileext4\n\tTHP enabled, read from a file on fast storage and USB, both ext4\n\nThe kernels tested were\n\n3.1\t\t3.1\nvanilla\t\t3.2-rc5\nfreemore\tPatches 1-10\nimmediate\tPatches 1-11\nandrea\t\tThe 8 patches Andrea posted as a basis of comparison\n\nThe results are very long unfortunately. I\u0027ll start with the case\nwhere we are not using THP at all\n\nwritebackCPDeviceBasevfat\n                   3.1.0-vanilla         rc5-vanilla       freemore-v6r1        isolate-v6r1         andrea-v2r1\nSystem Time         1.28 (    0.00%)   54.49 (-4143.46%)   48.63 (-3687.69%)    4.69 ( -265.11%)   51.88 (-3940.81%)\n+/-                 0.06 (    0.00%)    2.45 (-4305.55%)    4.75 (-8430.57%)    7.46 (-13282.76%)    4.76 (-8440.70%)\nUser Time           0.09 (    0.00%)    0.05 (   40.91%)    0.06 (   29.55%)    0.07 (   15.91%)    0.06 (   27.27%)\n+/-                 0.02 (    0.00%)    0.01 (   45.39%)    0.02 (   25.07%)    0.00 (   77.06%)    0.01 (   52.24%)\nElapsed Time      110.27 (    0.00%)   56.38 (   48.87%)   49.95 (   54.70%)   11.77 (   89.33%)   53.43 (   51.54%)\n+/-                 7.33 (    0.00%)    3.77 (   48.61%)    4.94 (   32.63%)    6.71 (    8.50%)    4.76 (   35.03%)\nTHP Active          0.00 (    0.00%)    0.00 (    0.00%)    0.00 (    0.00%)    0.00 (    0.00%)    0.00 (    0.00%)\n+/-                 0.00 (    0.00%)    0.00 (    0.00%)    0.00 (    0.00%)    0.00 (    0.00%)    0.00 (    0.00%)\nFault Alloc         0.00 (    0.00%)    0.00 (    0.00%)    0.00 (    0.00%)    0.00 (    0.00%)    0.00 (    0.00%)\n+/-                 0.00 (    0.00%)    0.00 (    0.00%)    0.00 (    0.00%)    0.00 (    0.00%)    0.00 (    0.00%)\nFault Fallback      0.00 (    0.00%)    0.00 (    0.00%)    0.00 (    0.00%)    0.00 (    0.00%)    0.00 (    0.00%)\n+/-                 0.00 (    0.00%)    0.00 (    0.00%)    0.00 (    0.00%)    0.00 (    0.00%)    0.00 (    0.00%)\n\nThe THP figures are obviously all 0 because THP was enabled. The\nmain thing to watch is the elapsed times and how they compare to\ntimes when THP is enabled later. It\u0027s also important to note that\nelapsed time is improved by this series as System CPu time is much\nreduced.\n\nwritebackCPDevicevfat\n\n                   3.1.0-vanilla         rc5-vanilla       freemore-v6r1        isolate-v6r1         andrea-v2r1\nSystem Time         1.22 (    0.00%)   13.89 (-1040.72%)   46.40 (-3709.20%)    4.44 ( -264.37%)   47.37 (-3789.33%)\n+/-                 0.06 (    0.00%)   22.82 (-37635.56%)    3.84 (-6249.44%)    6.48 (-10618.92%)    6.60\n(-10818.53%)\nUser Time           0.06 (    0.00%)    0.06 (   -6.90%)    0.05 (   17.24%)    0.05 (   13.79%)    0.04 (   31.03%)\n+/-                 0.01 (    0.00%)    0.01 (   33.33%)    0.01 (   33.33%)    0.01 (   39.14%)    0.01 (   25.46%)\nElapsed Time     10445.54 (    0.00%) 2249.92 (   78.46%)   70.06 (   99.33%)   16.59 (   99.84%)  472.43 (\n95.48%)\n+/-               643.98 (    0.00%)  811.62 (  -26.03%)   10.02 (   98.44%)    7.03 (   98.91%)   59.99 (   90.68%)\nTHP Active         15.60 (    0.00%)   35.20 (  225.64%)   65.00 (  416.67%)   70.80 (  453.85%)   62.20 (  398.72%)\n+/-                18.48 (    0.00%)   51.29 (  277.59%)   15.99 (   86.52%)   37.91 (  205.18%)   22.02 (  119.18%)\nFault Alloc       121.80 (    0.00%)   76.60 (   62.89%)  155.40 (  127.59%)  181.20 (  148.77%)  286.60 (  235.30%)\n+/-                73.51 (    0.00%)   61.11 (   83.12%)   34.89 (   47.46%)   31.88 (   43.36%)   68.13 (   92.68%)\nFault Fallback    881.20 (    0.00%)  926.60 (   -5.15%)  847.60 (    3.81%)  822.00 (    6.72%)  716.60 (   18.68%)\n+/-                73.51 (    0.00%)   61.26 (   16.67%)   34.89 (   52.54%)   31.65 (   56.94%)   67.75 (    7.84%)\nMMTests Statistics: duration\nUser/Sys Time Running Test (seconds)       3540.88   1945.37    716.04     64.97   1937.03\nTotal Elapsed Time (seconds)              52417.33  11425.90    501.02    230.95   2520.28\n\nThe first thing to note is the \"Elapsed Time\" for the vanilla kernels\nof 2249 seconds versus 56 with THP disabled which might explain the\nreports of USB stalls with THP enabled. Applying the patches brings\nperformance in line with THP-disabled performance while isolating\npages for immediate reclaim from the LRU cuts down System CPU time.\n\nThe \"Fault Alloc\" success rate figures are also improved. The vanilla\nkernel only managed to allocate 76.6 pages on average over the course\nof 5 iterations where as applying the series allocated 181.20 on\naverage albeit it is well within variance. It\u0027s worth noting that\napplies the series at least descreases the amount of variance which\nimplies an improvement.\n\nAndrea\u0027s series had a higher success rate for THP allocations but\nat a severe cost to elapsed time which is still better than vanilla\nbut still much worse than disabling THP altogether. One can bring my\nseries close to Andrea\u0027s by removing this check\n\n        /*\n         * If compaction is deferred for high-order allocations, it is because\n         * sync compaction recently failed. In this is the case and the caller\n         * has requested the system not be heavily disrupted, fail the\n         * allocation now instead of entering direct reclaim\n         */\n        if (deferred_compaction \u0026\u0026 (gfp_mask \u0026 __GFP_NO_KSWAPD))\n                goto nopage;\n\nI didn\u0027t include a patch that removed the above check because hurting\noverall performance to improve the THP figure is not what the average\nuser wants. It\u0027s something to consider though if someone really wants\nto maximise THP usage no matter what it does to the workload initially.\n\nThis is summary of vmstat figures from the same test.\n\n                                       3.1.0-vanilla rc5-vanilla freemore-v6r1 isolate-v6r1 andrea-v2r1\nPage Ins                                  3257266139  1111844061    17263623    10901575   161423219\nPage Outs                                   81054922    30364312     3626530     3657687     8753730\nSwap Ins                                        3294        2851        6560        4964        4592\nSwap Outs                                     390073      528094      620197      790912      698285\nDirect pages scanned                      1077581700  3024951463  1764930052   115140570  5901188831\nKswapd pages scanned                        34826043     7112868     2131265     1686942     1893966\nKswapd pages reclaimed                      28950067     4911036     1246044      966475     1497726\nDirect pages reclaimed                     805148398   280167837     3623473     2215044    40809360\nKswapd efficiency                                83%         69%         58%         57%         79%\nKswapd velocity                              664.399     622.521    4253.852    7304.360     751.490\nDirect efficiency                                74%          9%          0%          1%          0%\nDirect velocity                            20557.737  264745.137 3522673.849  498551.938 2341481.435\nPercentage direct scans                          96%         99%         99%         98%         99%\nPage writes by reclaim                        722646      529174      620319      791018      699198\nPage writes file                              332573        1080         122         106         913\nPage writes anon                              390073      528094      620197      790912      698285\nPage reclaim immediate                             0  2552514720  1635858848   111281140  5478375032\nPage rescued immediate                             0           0           0       87848           0\nSlabs scanned                                  23552       23552        9216        8192        9216\nDirect inode steals                              231           0           0           0           0\nKswapd inode steals                                0           0           0           0           0\nKswapd skipped wait                            28076         786           0          61           6\nTHP fault alloc                                  609         383         753         906        1433\nTHP collapse alloc                                12           6           0           0           6\nTHP splits                                       536         211         456         593        1136\nTHP fault fallback                              4406        4633        4263        4110        3583\nTHP collapse fail                                120         127           0           0           4\nCompaction stalls                               1810         728         623         779        3200\nCompaction success                               196          53          60          80         123\nCompaction failures                             1614         675         563         699        3077\nCompaction pages moved                        193158       53545      243185      333457      226688\nCompaction move failure                         9952        9396       16424       23676       45070\n\nThe main things to look at are\n\n1. Page In/out figures are much reduced by the series.\n\n2. Direct page scanning is incredibly high (264745.137 pages scanned\n   per second on the vanilla kernel) but isolating PageReclaim pages\n   on their own list reduces the number of pages scanned significantly.\n\n3. The fact that \"Page rescued immediate\" is a positive number implies\n   that we sometimes race removing pages from the LRU_IMMEDIATE list\n   that need to be put back on a normal LRU but it happens only for\n   0.07% of the pages marked for immediate reclaim.\n\nwritebackCPDeviceext4\n                   3.1.0-vanilla         rc5-vanilla       freemore-v6r1        isolate-v6r1         andrea-v2r1\nSystem Time         1.51 (    0.00%)    1.77 (  -17.66%)    1.46 (    2.92%)    1.15 (   23.77%)    1.89 (  -25.63%)\n+/-                 0.27 (    0.00%)    0.67 ( -148.52%)    0.33 (  -22.76%)    0.30 (  -11.15%)    0.19 (   30.16%)\nUser Time           0.03 (    0.00%)    0.04 (  -37.50%)    0.05 (  -62.50%)    0.07 ( -112.50%)    0.04 (  -18.75%)\n+/-                 0.01 (    0.00%)    0.02 ( -146.64%)    0.02 (  -97.91%)    0.02 (  -75.59%)    0.02 (  -63.30%)\nElapsed Time      124.93 (    0.00%)  114.49 (    8.36%)   96.77 (   22.55%)   27.48 (   78.00%)  205.70 (  -64.65%)\n+/-                20.20 (    0.00%)   74.39 ( -268.34%)   59.88 ( -196.48%)    7.72 (   61.79%)   25.03 (  -23.95%)\nTHP Active        161.80 (    0.00%)   83.60 (   51.67%)  141.20 (   87.27%)   84.60 (   52.29%)   82.60 (   51.05%)\n+/-                71.95 (    0.00%)   43.80 (   60.88%)   26.91 (   37.40%)   59.02 (   82.03%)   52.13 (   72.45%)\nFault Alloc       471.40 (    0.00%)  228.60 (   48.49%)  282.20 (   59.86%)  225.20 (   47.77%)  388.40 (   82.39%)\n+/-                88.07 (    0.00%)   87.42 (   99.26%)   73.79 (   83.78%)  109.62 (  124.47%)   82.62 (   93.81%)\nFault Fallback    531.60 (    0.00%)  774.60 (  -45.71%)  720.80 (  -35.59%)  777.80 (  -46.31%)  614.80 (  -15.65%)\n+/-                88.07 (    0.00%)   87.26 (    0.92%)   73.79 (   16.22%)  109.62 (  -24.47%)   82.29 (    6.56%)\nMMTests Statistics: duration\nUser/Sys Time Running Test (seconds)         50.22     33.76     30.65     24.14    128.45\nTotal Elapsed Time (seconds)               1113.73   1132.19   1029.45    759.49   1707.26\n\nSimilar test but the USB stick is using ext4 instead of vfat. As\next4 does not use writepage for migration, the large stalls due to\ncompaction when THP is enabled are not observed. Still, isolating\nPageReclaim pages on their own list helped completion time largely\nby reducing the number of pages scanned by direct reclaim although\ntime spend in congestion_wait could also be a factor.\n\nAgain, Andrea\u0027s series had far higher success rates for THP allocation\nat the cost of elapsed time. I didn\u0027t look too closely but a quick\nlook at the vmstat figures tells me kswapd reclaimed 8 times more pages\nthan the patch series and direct reclaim reclaimed roughly three times\nas many pages. It follows that if memory is aggressively reclaimed,\nthere will be more available for THP.\n\nwritebackCPFilevfat\n                   3.1.0-vanilla         rc5-vanilla       freemore-v6r1        isolate-v6r1         andrea-v2r1\nSystem Time         1.76 (    0.00%)   29.10 (-1555.52%)   46.01 (-2517.18%)    4.79 ( -172.35%)   54.89 (-3022.53%)\n+/-                 0.14 (    0.00%)   25.61 (-18185.17%)    2.15 (-1434.83%)    6.60 (-4610.03%)    9.75\n(-6863.76%)\nUser Time           0.05 (    0.00%)    0.07 (  -45.83%)    0.05 (   -4.17%)    0.06 (  -29.17%)    0.06 (  -16.67%)\n+/-                 0.02 (    0.00%)    0.02 (   20.11%)    0.02 (   -3.14%)    0.01 (   31.58%)    0.01 (   47.41%)\nElapsed Time     22520.79 (    0.00%) 1082.85 (   95.19%)   73.30 (   99.67%)   32.43 (   99.86%)  291.84 (  98.70%)\n+/-              7277.23 (    0.00%)  706.29 (   90.29%)   19.05 (   99.74%)   17.05 (   99.77%)  125.55 (   98.27%)\nTHP Active         83.80 (    0.00%)   12.80 (   15.27%)   15.60 (   18.62%)   13.00 (   15.51%)    0.80 (    0.95%)\n+/-                66.81 (    0.00%)   20.19 (   30.22%)    5.92 (    8.86%)   15.06 (   22.54%)    1.17 (    1.75%)\nFault Alloc       171.00 (    0.00%)   67.80 (   39.65%)   97.40 (   56.96%)  125.60 (   73.45%)  133.00 (   77.78%)\n+/-                82.91 (    0.00%)   30.69 (   37.02%)   53.91 (   65.02%)   55.05 (   66.40%)   21.19 (   25.56%)\nFault Fallback    832.00 (    0.00%)  935.20 (  -12.40%)  906.00 (   -8.89%)  877.40 (   -5.46%)  870.20 (   -4.59%)\n+/-                82.91 (    0.00%)   30.69 (   62.98%)   54.01 (   34.86%)   55.05 (   33.60%)   20.91 (   74.78%)\nMMTests Statistics: duration\nUser/Sys Time Running Test (seconds)       7229.81    928.42    704.52     80.68   1330.76\nTotal Elapsed Time (seconds)             112849.04   5618.69    571.11    360.54   1664.28\n\nIn this case, the test is reading/writing only from filesystems but as\nit\u0027s vfat, it\u0027s slow due to calling writepage during compaction. Little\nto observe really - the time to complete the test goes way down\nwith the series applied and THP allocation success rates go up in\ncomparison to 3.2-rc5.  The success rates are lower than 3.1.0 but\nthe elapsed time for that kernel is abysmal so it is not really a\nsensible comparison.\n\nAs before, Andrea\u0027s series allocates more THPs at the cost of overall\nperformance.\n\nwritebackCPFileext4\n                   3.1.0-vanilla         rc5-vanilla       freemore-v6r1        isolate-v6r1         andrea-v2r1\nSystem Time         1.51 (    0.00%)    1.77 (  -17.66%)    1.46 (    2.92%)    1.15 (   23.77%)    1.89 (  -25.63%)\n+/-                 0.27 (    0.00%)    0.67 ( -148.52%)    0.33 (  -22.76%)    0.30 (  -11.15%)    0.19 (   30.16%)\nUser Time           0.03 (    0.00%)    0.04 (  -37.50%)    0.05 (  -62.50%)    0.07 ( -112.50%)    0.04 (  -18.75%)\n+/-                 0.01 (    0.00%)    0.02 ( -146.64%)    0.02 (  -97.91%)    0.02 (  -75.59%)    0.02 (  -63.30%)\nElapsed Time      124.93 (    0.00%)  114.49 (    8.36%)   96.77 (   22.55%)   27.48 (   78.00%)  205.70 (  -64.65%)\n+/-                20.20 (    0.00%)   74.39 ( -268.34%)   59.88 ( -196.48%)    7.72 (   61.79%)   25.03 (  -23.95%)\nTHP Active        161.80 (    0.00%)   83.60 (   51.67%)  141.20 (   87.27%)   84.60 (   52.29%)   82.60 (   51.05%)\n+/-                71.95 (    0.00%)   43.80 (   60.88%)   26.91 (   37.40%)   59.02 (   82.03%)   52.13 (   72.45%)\nFault Alloc       471.40 (    0.00%)  228.60 (   48.49%)  282.20 (   59.86%)  225.20 (   47.77%)  388.40 (   82.39%)\n+/-                88.07 (    0.00%)   87.42 (   99.26%)   73.79 (   83.78%)  109.62 (  124.47%)   82.62 (   93.81%)\nFault Fallback    531.60 (    0.00%)  774.60 (  -45.71%)  720.80 (  -35.59%)  777.80 (  -46.31%)  614.80 (  -15.65%)\n+/-                88.07 (    0.00%)   87.26 (    0.92%)   73.79 (   16.22%)  109.62 (  -24.47%)   82.29 (    6.56%)\nMMTests Statistics: duration\nUser/Sys Time Running Test (seconds)         50.22     33.76     30.65     24.14    128.45\nTotal Elapsed Time (seconds)               1113.73   1132.19   1029.45    759.49   1707.26\n\nSame type of story - elapsed times go down. In this case, allocation\nsuccess rates are roughtly the same. As before, Andrea\u0027s has higher\nsuccess rates but takes a lot longer.\n\nOverall the series does reduce latencies and while the tests are\ninherency racy as alloc competes with the cp processes, the variability\nwas included. The THP allocation rates are not as high as they could\nbe but that is because we would have to be more aggressive about\nreclaim and compaction impacting overall performance.\n\nThis patch:\n\nCommit 39deaf85 (\"mm: compaction: make isolate_lru_page() filter-aware\")\nnoted that compaction does not migrate dirty or writeback pages and that\nis was meaningless to pick the page and re-add it to the LRU list.\n\nWhat was missed during review is that asynchronous migration moves dirty\npages if their -\u003emigratepage callback is migrate_page() because these can\nbe moved without blocking.  This potentially impacted hugepage allocation\nsuccess rates by a factor depending on how many dirty pages are in the\nsystem.\n\nThis patch partially reverts 39deaf85 to allow migration to isolate dirty\npages again.  This increases how much compaction disrupts the LRU but that\nis addressed later in the series.\n\nSigned-off-by: Mel Gorman \u003cmgorman@suse.de\u003e\nReviewed-by: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nReviewed-by: Rik van Riel \u003criel@redhat.com\u003e\nReviewed-by: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: Dave Jones \u003cdavej@redhat.com\u003e\nCc: Jan Kara \u003cjack@suse.cz\u003e\nCc: Andy Isaacson \u003cadi@hexapodia.org\u003e\nCc: Nai Xia \u003cnai.xia@gmail.com\u003e\nCc: Johannes Weiner \u003cjweiner@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "ea4d349ffa8028c655236497c2ba17c17aaa0d65",
      "tree": "b983961282dea73db03a1257fa4aaec109aee5cc",
      "parents": [
        "45676885b76237a4c236d26fe20a9b0cfdb2eb22"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "boyu.mt@taobao.com",
        "time": "Thu Jan 12 17:19:20 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:08 2012 -0800"
      },
      "message": "vmscan/trace: Add \u0027file\u0027 info to trace_mm_vmscan_lru_isolate()\n\nIn trace_mm_vmscan_lru_isolate(), we don\u0027t output \u0027file\u0027 information to\nthe trace event and it is a bit inconvenient for the user to get the\nreal information(like pasted below).  mm_vmscan_lru_isolate:\nisolate_mode\u003d2 order\u003d0 nr_requested\u003d32 nr_scanned\u003d32 nr_taken\u003d32\ncontig_taken\u003d0 contig_dirty\u003d0 contig_failed\u003d0\n\n\u0027active\u0027 can be obtained by analyzing mode(Thanks go to Minchan and\nMel), So this patch adds \u0027file\u0027 to the trace event and it now looks\nlike: mm_vmscan_lru_isolate: isolate_mode\u003d2 order\u003d0 nr_requested\u003d32\nnr_scanned\u003d32 nr_taken\u003d32 contig_taken\u003d0 contig_dirty\u003d0 contig_failed\u003d0\nfile\u003d0\n\nSigned-off-by: Tao Ma \u003cboyu.mt@taobao.com\u003e\nAcked-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nReviewed-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nReviewed-by: Minchan Kim \u003cminchan@kernel.org\u003e\nCc: Rik van Riel \u003criel@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": "45676885b76237a4c236d26fe20a9b0cfdb2eb22",
      "tree": "e1a5222c4c7b439cb6a27ace0e36e0280f8b7870",
      "parents": [
        "f21760b15dcd091e5afd38d0b97197b45f7ef2ea"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shaohua.li@intel.com",
        "time": "Thu Jan 12 17:19:18 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:08 2012 -0800"
      },
      "message": "thp: improve order in lru list for split huge page\n\nPut the tail subpages of an isolated hugepage under splitting in the lru\nreclaim head as they supposedly should be isolated too next.\n\nQueues the subpages in physical order in the lru for non isolated\nhugepages under splitting.  That might provide some theoretical cache\nbenefit to the buddy allocator later.\n\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nSigned-off-by: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: Johannes Weiner \u003cjweiner@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": "f21760b15dcd091e5afd38d0b97197b45f7ef2ea",
      "tree": "84dd0f9016b46630d6b67e48ff0382b78a1bc519",
      "parents": [
        "e5591307f0c1eb733d280a0b72473e01d7f88530"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shaohua.li@intel.com",
        "time": "Thu Jan 12 17:19:16 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:08 2012 -0800"
      },
      "message": "thp: add tlb_remove_pmd_tlb_entry\n\nWe have tlb_remove_tlb_entry to indicate a pte tlb flush entry should be\nflushed, but not a corresponding API for pmd entry.  This isn\u0027t a\nproblem so far because THP is only for x86 currently and tlb_flush()\nunder x86 will flush entire TLB.  But this is confusion and could be\nmissed if thp is ported to other arch.\n\nAlso convert tlb-\u003eneed_flush \u003d 1 to a VM_BUG_ON(!tlb-\u003eneed_flush) in\n__tlb_remove_page() as suggested by Andrea Arcangeli.  The\n__tlb_remove_page() function is supposed to be called after\ntlb_remove_xxx_tlb_entry() and we can catch any misuse.\n\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nReviewed-by: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: Johannes Weiner \u003cjweiner@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": "e5591307f0c1eb733d280a0b72473e01d7f88530",
      "tree": "3021a7e07c92e63260d1d03f14f34f771399aa92",
      "parents": [
        "569e55900a5c3c30de6e25c3f259ae7c7dbadb96"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shaohua.li@intel.com",
        "time": "Thu Jan 12 17:19:13 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:08 2012 -0800"
      },
      "message": "thp: remove unnecessary tlb flush for mprotect\n\nchange_protection() will do TLB flush later, don\u0027t need duplicate tlb\nflush.\n\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nReviewed-by: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: Johannes Weiner \u003cjweiner@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": "569e55900a5c3c30de6e25c3f259ae7c7dbadb96",
      "tree": "66bfd4d2ea26f1b9d77580d5397a07552a62e4fd",
      "parents": [
        "0efc8eb9c6a177836dac88b2cbb8815f9e4f8d5a"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shaohua.li@intel.com",
        "time": "Thu Jan 12 17:19:11 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:08 2012 -0800"
      },
      "message": "thp: improve the error code path\n\nImprove the error code path.  Delete unnecessary sysfs file for example.\nAlso remove the #ifdef xxx to make code better.\n\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nReviewed-by: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: Johannes Weiner \u003cjweiner@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": "0efc8eb9c6a177836dac88b2cbb8815f9e4f8d5a",
      "tree": "e0da1e44675f2c8be76f75b39efefc5f96c64a3f",
      "parents": [
        "d0048b0e59c1218d62bb4d014f34bbd7e7c0a214"
      ],
      "author": {
        "name": "Bob Liu",
        "email": "lliubbo@gmail.com",
        "time": "Thu Jan 12 17:19:08 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:08 2012 -0800"
      },
      "message": "page_cgroup: drop multi CONFIG_MEMORY_HOTPLUG\n\nNo need for two CONFIG_MEMORY_HOTPLUG blocks.\n\nSigned-off-by: Bob Liu \u003clliubbo@gmail.com\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "d0048b0e59c1218d62bb4d014f34bbd7e7c0a214",
      "tree": "f6a69889bcb60b253ab37029616ebe6fa2bd24f9",
      "parents": [
        "3ed28fa1080c73747ce17f2025b28b062fb5aa7f"
      ],
      "author": {
        "name": "Bob Liu",
        "email": "lliubbo@gmail.com",
        "time": "Thu Jan 12 17:19:07 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:07 2012 -0800"
      },
      "message": "page_alloc: break early in check_for_regular_memory()\n\nIf there is a zone below ZONE_NORMAL has present_pages, we can set node\nstate to N_NORMAL_MEMORY, no need to loop to end.\n\nSigned-off-by: Bob Liu \u003clliubbo@gmail.com\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "3ed28fa1080c73747ce17f2025b28b062fb5aa7f",
      "tree": "f4eab7da502fb728fac728220bc1f296ee04dca1",
      "parents": [
        "38c5d72f3ebe5ddd57d2f08dc035070fc6c9a287"
      ],
      "author": {
        "name": "Bob Liu",
        "email": "lliubbo@gmail.com",
        "time": "Thu Jan 12 17:19:04 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:07 2012 -0800"
      },
      "message": "memcg: cleanup for_each_node_state()\n\nWe already have for_each_node(node) define in nodemask.h, better to use it.\n\nSigned-off-by: Bob Liu \u003clliubbo@gmail.com\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "38c5d72f3ebe5ddd57d2f08dc035070fc6c9a287",
      "tree": "6461c0dfec95dccc92191f059fbe99b5660a8860",
      "parents": [
        "4e5f01c2b9b94321992acb09c35d34f5ee5bb274"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Thu Jan 12 17:19:01 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:07 2012 -0800"
      },
      "message": "memcg: simplify LRU handling by new rule\n\nNow, at LRU handling, memory cgroup needs to do complicated works to see\nvalid pc-\u003emem_cgroup, which may be overwritten.\n\nThis patch is for relaxing the protocol. This patch guarantees\n   - when pc-\u003emem_cgroup is overwritten, page must not be on LRU.\n\nBy this, LRU routine can believe pc-\u003emem_cgroup and don\u0027t need to check\nbits on pc-\u003eflags.  This new rule may adds small overheads to swapin.  But\nin most case, lru handling gets faster.\n\nAfter this patch, PCG_ACCT_LRU bit is obsolete and removed.\n\n[akpm@linux-foundation.org: remove unneeded VM_BUG_ON(), restore hannes\u0027s christmas tree]\n[akpm@linux-foundation.org: clean up code comment]\n[hughd@google.com: fix NULL mem_cgroup_try_charge]\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nAcked-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "4e5f01c2b9b94321992acb09c35d34f5ee5bb274",
      "tree": "4e6ac9d29539dc26468fe2630d0e64cd022b1155",
      "parents": [
        "36b62ad539498d00c2d280a151abad5f7630fa73"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Thu Jan 12 17:18:58 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:07 2012 -0800"
      },
      "message": "memcg: clear pc-\u003emem_cgroup if necessary.\n\nThis is a preparation before removing a flag PCG_ACCT_LRU in page_cgroup\nand reducing atomic ops/complexity in memcg LRU handling.\n\nIn some cases, pages are added to lru before charge to memcg and pages\nare not classfied to memory cgroup at lru addtion.  Now, the lru where\nthe page should be added is determined a bit in page_cgroup-\u003eflags and\npc-\u003emem_cgroup.  I\u0027d like to remove the check of flag.\n\nTo handle the case pc-\u003emem_cgroup may contain stale pointers if pages\nare added to LRU before classification.  This patch resets\npc-\u003emem_cgroup to root_mem_cgroup before lru additions.\n\n[akpm@linux-foundation.org: fix CONFIG_CGROUP_MEM_CONT\u003dn build]\n[hughd@google.com: fix CONFIG_CGROUP_MEM_RES_CTLR\u003dy CONFIG_CGROUP_MEM_RES_CTLR_SWAP\u003dn build]\n[akpm@linux-foundation.org: ksm.c needs memcontrol.h, per Michal]\n[hughd@google.com: stop oops in mem_cgroup_reset_owner()]\n[hughd@google.com: fix page migration to reset_owner]\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "36b62ad539498d00c2d280a151abad5f7630fa73",
      "tree": "553409901df6210e4a698c1991f9d455199e098b",
      "parents": [
        "dc67d50465f249bb357bf85b3ed1f642eb00130a"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Thu Jan 12 17:18:57 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:07 2012 -0800"
      },
      "message": "memcg: simplify corner case handling of LRU.\n\nThis patch simplifies LRU handling of racy case (memcg+SwapCache).  At\ncharging, SwapCache tend to be on LRU already.  So, before overwriting\npc-\u003emem_cgroup, the page must be removed from LRU and added to LRU\nlater.\n\nThis patch does\n        spin_lock(zone-\u003elru_lock);\n        if (PageLRU(page))\n                remove from LRU\n        overwrite pc-\u003emem_cgroup\n        if (PageLRU(page))\n                add to new LRU.\n        spin_unlock(zone-\u003elru_lock);\n\nAnd guarantee all pages are not on LRU at modifying pc-\u003emem_cgroup.\nThis patch also unfies lru handling of replace_page_cache() and\nswapin.\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nAcked-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "dc67d50465f249bb357bf85b3ed1f642eb00130a",
      "tree": "f3808a1bebe5dfbf1691603007966b7222376d55",
      "parents": [
        "de077d222d5ca6108cab119a09593344c12100ab"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Thu Jan 12 17:18:55 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:07 2012 -0800"
      },
      "message": "memcg: simplify page cache charging\n\nThis patch is a clean up. No functional/logical changes.\n\nBecause of commit ef6a3c6311 (\"mm: add replace_page_cache_page()\nfunction\") , FUSE uses replace_page_cache() instead of\nadd_to_page_cache().  Then, mem_cgroup_cache_charge() is not called\nagainst FUSE\u0027s pages from splice.\n\nSo now, mem_cgroup_cache_charge() gets pages that are not on the LRU\nwith the exception of PageSwapCache pages.  For checking,\nWARN_ON_ONCE(PageLRU(page)) is added.\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nAcked-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "de077d222d5ca6108cab119a09593344c12100ab",
      "tree": "c59efc8b4fff063d2c318480881050b1913ed21b",
      "parents": [
        "c3cecc683446ad54ca587d7123bd3ce94bd7b8e1"
      ],
      "author": {
        "name": "David Rientjes",
        "email": "rientjes@google.com",
        "time": "Thu Jan 12 17:18:52 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:07 2012 -0800"
      },
      "message": "oom, memcg: fix exclusion of memcg threads after they have detached their mm\n\nThe oom killer relies on logic that identifies threads that have already\nbeen oom killed when scanning the tasklist and, if found, deferring\nuntil such threads have exited.  This is done by checking for any\ncandidate threads that have the TIF_MEMDIE bit set.\n\nFor memcg ooms, candidate threads are first found by calling\ntask_in_mem_cgroup() since the oom killer should not defer if there\u0027s an\noom killed thread in another memcg.\n\nUnfortunately, task_in_mem_cgroup() excludes threads if they have\ndetached their mm in the process of exiting so TIF_MEMDIE is never\ndetected for such conditions.  This is different for global, mempolicy,\nand cpuset oom conditions where a detached mm is only excluded after\nchecking for TIF_MEMDIE and deferring, if necessary, in\nselect_bad_process().\n\nThe fix is to return true if a task has a detached mm but is still in\nthe memcg or its hierarchy that is currently oom.  This will allow the\noom killer to appropriately defer rather than kill unnecessarily or, in\nthe worst case, panic the machine if nothing else is available to kill.\n\nSigned-off-by: David Rientjes \u003crientjes@google.com\u003e\nAcked-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Balbir Singh \u003cbsingharora@gmail.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "c3cecc683446ad54ca587d7123bd3ce94bd7b8e1",
      "tree": "27dfb859c1c45a6369d62eac4b5b9ad62871b7ce",
      "parents": [
        "9fb4b7cc0724f178d4b24a2a566ea1e7cb120b82"
      ],
      "author": {
        "name": "Michal Hocko",
        "email": "mhocko@suse.cz",
        "time": "Thu Jan 12 17:18:50 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:07 2012 -0800"
      },
      "message": "memcg: free entries in soft_limit_tree if allocation fails\n\nIf we are not able to allocate tree nodes for all NUMA nodes then we\nshould release those that were allocated.\n\nSigned-off-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nAcked-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nCc: Balbir Singh \u003cbsingharora@gmail.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "9fb4b7cc0724f178d4b24a2a566ea1e7cb120b82",
      "tree": "0f2db9102d46f5e5c8492864fb1bd21f2e7cd768",
      "parents": [
        "40f23a21a8501c1b2c65c50c19b516488ac31313"
      ],
      "author": {
        "name": "Bob Liu",
        "email": "lliubbo@gmail.com",
        "time": "Thu Jan 12 17:18:48 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:07 2012 -0800"
      },
      "message": "page_cgroup: add helper function to get swap_cgroup\n\nThere are multiple places which need to get the swap_cgroup address, so\nadd a helper function:\n\n  static struct swap_cgroup *swap_cgroup_getsc(swp_entry_t ent,\n                                struct swap_cgroup_ctrl **ctrl);\n\nto simplify the code.\n\nSigned-off-by: Bob Liu \u003clliubbo@gmail.com\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Johannes Weiner \u003cjweiner@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "40f23a21a8501c1b2c65c50c19b516488ac31313",
      "tree": "4e70dbd9e7cc1dda350156bf05786ede7dbf8256",
      "parents": [
        "7a0524cfc8f9f585471a31b1282a9ce4a1a7d444"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "jweiner@redhat.com",
        "time": "Thu Jan 12 17:18:45 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:06 2012 -0800"
      },
      "message": "mm: memcg: remove unneeded checks from uncharge_page()\n\nmem_cgroup_uncharge_page() is only called on either freshly allocated\npages without page-\u003emapping or on rmapped PageAnon() pages.  There is no\nneed to check for a page-\u003emapping that is not an anon_vma.\n\nSigned-off-by: Johannes Weiner \u003cjweiner@redhat.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Balbir Singh \u003cbsingharora@gmail.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "7a0524cfc8f9f585471a31b1282a9ce4a1a7d444",
      "tree": "4e31e1ec7e892d67e48d1199b9e8590ad5718e7a",
      "parents": [
        "00c54c0bac24bb02d2460c516da76651a7451286"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "jweiner@redhat.com",
        "time": "Thu Jan 12 17:18:43 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:06 2012 -0800"
      },
      "message": "mm: memcg: remove unneeded checks from newpage_charge()\n\nAll callsites pass in freshly allocated pages and a valid mm.  As a\nresult, all checks pertaining to the page\u0027s mapcount, page-\u003emapping or the\nfallback to init_mm are unneeded.\n\nSigned-off-by: Johannes Weiner \u003cjweiner@redhat.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: Balbir Singh \u003cbsingharora@gmail.com\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "00c54c0bac24bb02d2460c516da76651a7451286",
      "tree": "d88356ab217fa4c119a6c11dd7f614413adc020a",
      "parents": [
        "cfa449461e67b60df986170eecb089831fa9e49a"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Thu Jan 12 17:18:40 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:06 2012 -0800"
      },
      "message": "mm: page_cgroup: check page_cgroup arrays in lookup_page_cgroup() only when necessary\n\nlookup_page_cgroup() is usually used only against pages that are used in\nuserspace.\n\nThe exception is the CONFIG_DEBUG_VM-only memcg check from the page\nallocator: it can run on pages without page_cgroup descriptors allocated\nwhen the pages are fed into the page allocator for the first time during\nboot or memory hotplug.\n\nInclude the array check only when CONFIG_DEBUG_VM is set and save the\nunnecessary check in production kernels.\n\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Balbir Singh \u003cbsingharora@gmail.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "cfa449461e67b60df986170eecb089831fa9e49a",
      "tree": "ff40cff591e27250b91b2f1fb4409875f397b048",
      "parents": [
        "0e574a932d2cab8eb3b02d21feb59f2c09154738"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "jweiner@redhat.com",
        "time": "Thu Jan 12 17:18:38 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:06 2012 -0800"
      },
      "message": "mm: memcg: lookup_page_cgroup (almost) never returns NULL\n\nPages have their corresponding page_cgroup descriptors set up before\nthey are used in userspace, and thus managed by a memory cgroup.\n\nThe only time where lookup_page_cgroup() can return NULL is in the\nCONFIG_DEBUG_VM-only page sanity checking code that executes while\nfeeding pages into the page allocator for the first time.\n\nRemove the NULL checks against lookup_page_cgroup() results from all\ncallsites where we know that corresponding page_cgroup descriptors must\nbe allocated, and add a comment to the callsite that actually does have\nto check the return value.\n\n[hughd@google.com: stop oops in mem_cgroup_update_page_stat()]\nSigned-off-by: Johannes Weiner \u003cjweiner@redhat.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Balbir Singh \u003cbsingharora@gmail.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "0e574a932d2cab8eb3b02d21feb59f2c09154738",
      "tree": "5bfae84ec49d6e92efcf6ba1cb92235f546c8e38",
      "parents": [
        "72835c86ca15d0126354b73d5f29ce9194931c9b"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "jweiner@redhat.com",
        "time": "Thu Jan 12 17:18:35 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:06 2012 -0800"
      },
      "message": "mm: memcg: clean up fault accounting\n\nThe fault accounting functions have a single, memcg-internal user, so they\ndon\u0027t need to be global.  In fact, their one-line bodies can be directly\nfolded into the caller.  And since faults happen one at a time, use\nthis_cpu_inc() directly instead of this_cpu_add(foo, 1).\n\nSigned-off-by: Johannes Weiner \u003cjweiner@redhat.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nAcked-by: Balbir Singh \u003cbsingharora@gmail.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "72835c86ca15d0126354b73d5f29ce9194931c9b",
      "tree": "369f31168b405e4d597b3cd067a1fd0ac2025dbc",
      "parents": [
        "ec0fffd84b162e0563a28a81aa049f946b31a8e2"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "jweiner@redhat.com",
        "time": "Thu Jan 12 17:18:32 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:06 2012 -0800"
      },
      "message": "mm: unify remaining mem_cont, mem, etc. variable names to memcg\n\nSigned-off-by: Johannes Weiner \u003cjweiner@redhat.com\u003e\nAcked-by: David Rientjes \u003crientjes@google.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Balbir Singh \u003cbsingharora@gmail.com\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "ec0fffd84b162e0563a28a81aa049f946b31a8e2",
      "tree": "48e4c79076a917207c869b960ecd26da8fcb8505",
      "parents": [
        "0527b6903b2838e214c895d527806aefd61b3c8f"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "jweiner@redhat.com",
        "time": "Thu Jan 12 17:18:29 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:06 2012 -0800"
      },
      "message": "mm: oom_kill: remove memcg argument from oom_kill_task()\n\nThe memcg argument of oom_kill_task() hasn\u0027t been used since 341aea2\n\u0027oom-kill: remove boost_dying_task_prio()\u0027.  Kill it.\n\nSigned-off-by: Johannes Weiner \u003cjweiner@redhat.com\u003e\nAcked-by: David Rientjes \u003crientjes@google.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Balbir Singh \u003cbsingharora@gmail.com\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "0527b6903b2838e214c895d527806aefd61b3c8f",
      "tree": "d9f3eebcf0e43d927ad3a12da1f4dfe56a27c014",
      "parents": [
        "d66c1ce7df6ceb94d1902ac865ad50df4ffdb95f"
      ],
      "author": {
        "name": "Ying Han",
        "email": "yinghan@google.com",
        "time": "Thu Jan 12 17:18:27 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:06 2012 -0800"
      },
      "message": "memcg: fix pgpgin/pgpgout documentation\n\nThe two memcg stats pgpgin/pgpgout have different meaning than the ones\nin vmstat, which indicates that we picked a bad naming for them.\n\nIt might be late to change the stat name, but better documentation is\nalways helpful.\n\nSigned-off-by: Ying Han \u003cyinghan@google.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "d66c1ce7df6ceb94d1902ac865ad50df4ffdb95f",
      "tree": "84a00a55104d607dbb405a0b80f638dae053db66",
      "parents": [
        "f53d7ce32e13dbd09573b176e6521a04c2c77803"
      ],
      "author": {
        "name": "Zhu Yanhai",
        "email": "zhu.yanhai@gmail.com",
        "time": "Thu Jan 12 17:18:24 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:06 2012 -0800"
      },
      "message": "Documentation/cgroups/memory.txt: fix typo\n\nIt should be memsw.max_usage_in_bytes. This typo has been there for\na really long time.\n\nSigned-off-by: Zhu Yanhai \u003cgaoyang.zyh@taobao.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": "f53d7ce32e13dbd09573b176e6521a04c2c77803",
      "tree": "af88d1c256d06e3d37c5df013de9ff41f86ed4a2",
      "parents": [
        "e94c8a9cbce1aee4af9e1285802785481b7f93c5"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "jweiner@redhat.com",
        "time": "Thu Jan 12 17:18:23 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:05 2012 -0800"
      },
      "message": "mm: memcg: shorten preempt-disabled section around event checks\n\nOnly the ratelimit checks themselves have to run with preemption\ndisabled, the resulting actions - checking for usage thresholds,\nupdating the soft limit tree - can and should run with preemption\nenabled.\n\nSigned-off-by: Johannes Weiner \u003cjweiner@redhat.com\u003e\nReported-by: Yong Zhang \u003cyong.zhang0@gmail.com\u003e\nTested-by: Yong Zhang \u003cyong.zhang0@gmail.com\u003e\nReported-by: Luis Henriques \u003chenrix@camandro.org\u003e\nTested-by: Luis Henriques \u003chenrix@camandro.org\u003e\nCc: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nCc: Steven Rostedt \u003crostedt@goodmis.org\u003e\nCc: Peter Zijlstra \u003cpeterz@infradead.org\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": "e94c8a9cbce1aee4af9e1285802785481b7f93c5",
      "tree": "14d496e62c2e8d59a8954ff10368d59d8dfaea03",
      "parents": [
        "6b208e3f6e35aa76d254c395bdcd984b17c6b626"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Thu Jan 12 17:18:20 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:05 2012 -0800"
      },
      "message": "memcg: make mem_cgroup_split_huge_fixup() more efficient\n\nIn split_huge_page(), mem_cgroup_split_huge_fixup() is called to handle\npage_cgroup modifcations.  It takes move_lock_page_cgroup() and modifies\npage_cgroup and LRU accounting jobs and called HPAGE_PMD_SIZE - 1 times.\n\nBut thinking again,\n  - compound_lock() is held at move_accout...then, it\u0027s not necessary\n    to take move_lock_page_cgroup().\n  - LRU is locked and all tail pages will go into the same LRU as\n    head is now on.\n  - page_cgroup is contiguous in huge page range.\n\nThis patch fixes mem_cgroup_split_huge_fixup() as to be called once per\nhugepage and reduce costs for spliting.\n\n[akpm@linux-foundation.org: fix typo, per Michal]\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nReviewed-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Balbir Singh \u003cbsingharora@gmail.com\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": "6b208e3f6e35aa76d254c395bdcd984b17c6b626",
      "tree": "f7e65f9e1fa41907bf48f05007a10c83be668b3f",
      "parents": [
        "925b7673cce39116ce61e7a06683a4a0dad1e72a"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "jweiner@redhat.com",
        "time": "Thu Jan 12 17:18:18 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:05 2012 -0800"
      },
      "message": "mm: memcg: remove unused node/section info from pc-\u003eflags\n\nTo find the page corresponding to a certain page_cgroup, the pc-\u003eflags\nencoded the node or section ID with the base array to compare the pc\npointer to.\n\nNow that the per-memory cgroup LRU lists link page descriptors directly,\nthere is no longer any code that knows the struct page_cgroup of a PFN\nbut not the struct page.\n\n[hughd@google.com: remove unused node/section info from pc-\u003eflags fix]\nSigned-off-by: Johannes Weiner \u003cjweiner@redhat.com\u003e\nReviewed-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nReviewed-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nReviewed-by: Kirill A. Shutemov \u003ckirill@shutemov.name\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: \"Kirill A. Shutemov\" \u003ckirill@shutemov.name\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbsingharora@gmail.com\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nCc: Greg Thelen \u003cgthelen@google.com\u003e\nCc: Michel Lespinasse \u003cwalken@google.com\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "925b7673cce39116ce61e7a06683a4a0dad1e72a",
      "tree": "66c134db836e531e196ee3dfc23c124ff74ac827",
      "parents": [
        "6290df545814990ca2663baf6e894669132d5f73"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "jweiner@redhat.com",
        "time": "Thu Jan 12 17:18:15 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:05 2012 -0800"
      },
      "message": "mm: make per-memcg LRU lists exclusive\n\nNow that all code that operated on global per-zone LRU lists is\nconverted to operate on per-memory cgroup LRU lists instead, there is no\nreason to keep the double-LRU scheme around any longer.\n\nThe pc-\u003elru member is removed and page-\u003elru is linked directly to the\nper-memory cgroup LRU lists, which removes two pointers from a\ndescriptor that exists for every page frame in the system.\n\nSigned-off-by: Johannes Weiner \u003cjweiner@redhat.com\u003e\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nSigned-off-by: Ying Han \u003cyinghan@google.com\u003e\nReviewed-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nReviewed-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nReviewed-by: Kirill A. Shutemov \u003ckirill@shutemov.name\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbsingharora@gmail.com\u003e\nCc: Greg Thelen \u003cgthelen@google.com\u003e\nCc: Michel Lespinasse \u003cwalken@google.com\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "6290df545814990ca2663baf6e894669132d5f73",
      "tree": "c62472270ba81a7146bed0854be74e2e2338c629",
      "parents": [
        "b95a2f2d486d0d768a92879c023a03757b9c7e58"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "jweiner@redhat.com",
        "time": "Thu Jan 12 17:18:10 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:05 2012 -0800"
      },
      "message": "mm: collect LRU list heads into struct lruvec\n\nHaving a unified structure with a LRU list set for both global zones and\nper-memcg zones allows to keep that code simple which deals with LRU\nlists and does not care about the container itself.\n\nOnce the per-memcg LRU lists directly link struct pages, the isolation\nfunction and all other list manipulations are shared between the memcg\ncase and the global LRU case.\n\nSigned-off-by: Johannes Weiner \u003cjweiner@redhat.com\u003e\nReviewed-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nReviewed-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nReviewed-by: Kirill A. Shutemov \u003ckirill@shutemov.name\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbsingharora@gmail.com\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nCc: Greg Thelen \u003cgthelen@google.com\u003e\nCc: Michel Lespinasse \u003cwalken@google.com\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "b95a2f2d486d0d768a92879c023a03757b9c7e58",
      "tree": "4f07a63d7587131bd82c49e0d9ac124d057539fd",
      "parents": [
        "ad2b8e601099a23dffffb53f91c18d874fe98854"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "jweiner@redhat.com",
        "time": "Thu Jan 12 17:18:06 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:05 2012 -0800"
      },
      "message": "mm: vmscan: convert global reclaim to per-memcg LRU lists\n\nThe global per-zone LRU lists are about to go away on memcg-enabled\nkernels, global reclaim must be able to find its pages on the per-memcg\nLRU lists.\n\nSince the LRU pages of a zone are distributed over all existing memory\ncgroups, a scan target for a zone is complete when all memory cgroups\nare scanned for their proportional share of a zone\u0027s memory.\n\nThe forced scanning of small scan targets from kswapd is limited to\nzones marked unreclaimable, otherwise kswapd can quickly overreclaim by\nforce-scanning the LRU lists of multiple memory cgroups.\n\nSigned-off-by: Johannes Weiner \u003cjweiner@redhat.com\u003e\nReviewed-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nReviewed-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nReviewed-by: Kirill A. Shutemov \u003ckirill@shutemov.name\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbsingharora@gmail.com\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nCc: Greg Thelen \u003cgthelen@google.com\u003e\nCc: Michel Lespinasse \u003cwalken@google.com\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "ad2b8e601099a23dffffb53f91c18d874fe98854",
      "tree": "6b7706f3005fd799f23d0ddc21fe5b33fd1e79ac",
      "parents": [
        "5660048ccac8735d9bc0a46325a02e6a6518b5b2"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "jweiner@redhat.com",
        "time": "Thu Jan 12 17:18:02 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:05 2012 -0800"
      },
      "message": "mm: memcg: remove optimization of keeping the root_mem_cgroup LRU lists empty\n\nroot_mem_cgroup, lacking a configurable limit, was never subject to\nlimit reclaim, so the pages charged to it could be kept off its LRU\nlists.  They would be found on the global per-zone LRU lists upon\nphysical memory pressure and it made sense to avoid uselessly linking\nthem to both lists.\n\nThe global per-zone LRU lists are about to go away on memcg-enabled\nkernels, with all pages being exclusively linked to their respective\nper-memcg LRU lists.  As a result, pages of the root_mem_cgroup must\nalso be linked to its LRU lists again.  This is purely about the LRU\nlist, root_mem_cgroup is still not charged.\n\nThe overhead is temporary until the double-LRU scheme is going away\ncompletely.\n\nSigned-off-by: Johannes Weiner \u003cjweiner@redhat.com\u003e\nReviewed-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nReviewed-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nReviewed-by: Kirill A. Shutemov \u003ckirill@shutemov.name\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbsingharora@gmail.com\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nCc: Greg Thelen \u003cgthelen@google.com\u003e\nCc: Michel Lespinasse \u003cwalken@google.com\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "5660048ccac8735d9bc0a46325a02e6a6518b5b2",
      "tree": "4b2269ddd6ca001843187a89fb91278192028d87",
      "parents": [
        "527a5ec9a53471d855291ba9f1fdf1dd4e12a184"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "jweiner@redhat.com",
        "time": "Thu Jan 12 17:17:59 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:05 2012 -0800"
      },
      "message": "mm: move memcg hierarchy reclaim to generic reclaim code\n\nMemory cgroup limit reclaim and traditional global pressure reclaim will\nsoon share the same code to reclaim from a hierarchical tree of memory\ncgroups.\n\nIn preparation of this, move the two right next to each other in\nshrink_zone().\n\nThe mem_cgroup_hierarchical_reclaim() polymath is split into a soft\nlimit reclaim function, which still does hierarchy walking on its own,\nand a limit (shrinking) reclaim function, which relies on generic\nreclaim code to walk the hierarchy.\n\nSigned-off-by: Johannes Weiner \u003cjweiner@redhat.com\u003e\nReviewed-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nReviewed-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nReviewed-by: Kirill A. Shutemov \u003ckirill@shutemov.name\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbsingharora@gmail.com\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nCc: Greg Thelen \u003cgthelen@google.com\u003e\nCc: Michel Lespinasse \u003cwalken@google.com\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "527a5ec9a53471d855291ba9f1fdf1dd4e12a184",
      "tree": "156a8be57e66e1c6f54e498beda0f2d8412cee12",
      "parents": [
        "f16015fbf2f6ac45505d6ad21455ff9f6c14473d"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "jweiner@redhat.com",
        "time": "Thu Jan 12 17:17:55 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:04 2012 -0800"
      },
      "message": "mm: memcg: per-priority per-zone hierarchy scan generations\n\nMemory cgroup limit reclaim currently picks one memory cgroup out of the\ntarget hierarchy, remembers it as the last scanned child, and reclaims\nall zones in it with decreasing priority levels.\n\nThe new hierarchy reclaim code will pick memory cgroups from the same\nhierarchy concurrently from different zones and priority levels, it\nbecomes necessary that hierarchy roots not only remember the last\nscanned child, but do so for each zone and priority level.\n\nUntil now, we reclaimed memcgs like this:\n\n    mem \u003d mem_cgroup_iter(root)\n    for each priority level:\n      for each zone in zonelist:\n        reclaim(mem, zone)\n\nBut subsequent patches will move the memcg iteration inside the loop\nover the zones:\n\n    for each priority level:\n      for each zone in zonelist:\n        mem \u003d mem_cgroup_iter(root)\n        reclaim(mem, zone)\n\nAnd to keep with the original scan order - memcg -\u003e priority -\u003e zone -\nthe last scanned memcg has to be remembered per zone and per priority\nlevel.\n\nFurthermore, global reclaim will be switched to the hierarchy walk as\nwell.  Different from limit reclaim, which can just recheck the limit\nafter some reclaim progress, its target is to scan all memcgs for the\ndesired zone pages, proportional to the memcg size, and so reliably\ndetecting a full hierarchy round-trip will become crucial.\n\nCurrently, the code relies on one reclaimer encountering the same memcg\ntwice, but that is error-prone with concurrent reclaimers.  Instead, use\na generation counter that is increased every time the child with the\nhighest ID has been visited, so that reclaimers can stop when the\ngeneration changes.\n\nSigned-off-by: Johannes Weiner \u003cjweiner@redhat.com\u003e\nReviewed-by: Kirill A. Shutemov \u003ckirill@shutemov.name\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbsingharora@gmail.com\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nCc: Greg Thelen \u003cgthelen@google.com\u003e\nCc: Michel Lespinasse \u003cwalken@google.com\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "f16015fbf2f6ac45505d6ad21455ff9f6c14473d",
      "tree": "ad9c7574566ed492f2b2d9ff655bb90773442c05",
      "parents": [
        "89b5fae5368f6aec62fb09c8e19b6c61f1154603"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "jweiner@redhat.com",
        "time": "Thu Jan 12 17:17:52 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:04 2012 -0800"
      },
      "message": "mm: vmscan: distinguish between memcg triggering reclaim and memcg being scanned\n\nMemory cgroup hierarchies are currently handled completely outside of\nthe traditional reclaim code, which is invoked with a single memory\ncgroup as an argument for the whole call stack.\n\nSubsequent patches will switch this code to do hierarchical reclaim, so\nthere needs to be a distinction between a) the memory cgroup that is\ntriggering reclaim due to hitting its limit and b) the memory cgroup\nthat is being scanned as a child of a).\n\nThis patch introduces a struct mem_cgroup_zone that contains the\ncombination of the memory cgroup and the zone being scanned, which is\nthen passed down the stack instead of the zone argument.\n\n[akpm@linux-foundation.org: coding-style fixes]\nSigned-off-by: Johannes Weiner \u003cjweiner@redhat.com\u003e\nReviewed-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nReviewed-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nReviewed-by: Kirill A. Shutemov \u003ckirill@shutemov.name\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbsingharora@gmail.com\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nCc: Greg Thelen \u003cgthelen@google.com\u003e\nCc: Michel Lespinasse \u003cwalken@google.com\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "89b5fae5368f6aec62fb09c8e19b6c61f1154603",
      "tree": "48ba5619b31b54941ad127acc1c11edfd9701fe9",
      "parents": [
        "9f3a0d0933de079665ec1b498947ffbf805b0018"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "jweiner@redhat.com",
        "time": "Thu Jan 12 17:17:50 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:04 2012 -0800"
      },
      "message": "mm: vmscan: distinguish global reclaim from global LRU scanning\n\nThe traditional zone reclaim code is scanning the per-zone LRU lists\nduring direct reclaim and kswapd, and the per-zone per-memory cgroup LRU\nlists when reclaiming on behalf of a memory cgroup limit.\n\nSubsequent patches will convert the traditional reclaim code to reclaim\nexclusively from the per-memory cgroup LRU lists.  As a result, using\nthe predicate for which LRU list is scanned will no longer be\nappropriate to tell global reclaim from limit reclaim.\n\nThis patch adds a global_reclaim() predicate to tell direct/kswapd\nreclaim from memory cgroup limit reclaim and substitutes it in all\nplaces where currently scanning_global_lru() is used for that.\n\nSigned-off-by: Johannes Weiner \u003cjweiner@redhat.com\u003e\nReviewed-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nReviewed-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nReviewed-by: Kirill A. Shutemov \u003ckirill@shutemov.name\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbsingharora@gmail.com\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nCc: Greg Thelen \u003cgthelen@google.com\u003e\nCc: Michel Lespinasse \u003cwalken@google.com\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "9f3a0d0933de079665ec1b498947ffbf805b0018",
      "tree": "495b27908e328eff16a2269734109b8d6e5be95d",
      "parents": [
        "ab936cbcd02072a34b60d268f94440fd5cf1970b"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "jweiner@redhat.com",
        "time": "Thu Jan 12 17:17:48 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:04 2012 -0800"
      },
      "message": "mm: memcg: consolidate hierarchy iteration primitives\n\nThe memcg naturalization series:\n\nMemory control groups are currently bolted onto the side of\ntraditional memory management in places where better integration would\nbe preferrable.  To reclaim memory, for example, memory control groups\nmaintain their own LRU list and reclaim strategy aside from the global\nper-zone LRU list reclaim.  But an extra list head for each existing\npage frame is expensive and maintaining it requires additional code.\n\nThis patchset disables the global per-zone LRU lists on memory cgroup\nconfigurations and converts all its users to operate on the per-memory\ncgroup lists instead.  As LRU pages are then exclusively on one list,\nthis saves two list pointers for each page frame in the system:\n\npage_cgroup array size with 4G physical memory\n\n  vanilla: allocated 31457280 bytes of page_cgroup\n  patched: allocated 15728640 bytes of page_cgroup\n\nAt the same time, system performance for various workloads is\nunaffected:\n\n100G sparse file cat, 4G physical memory, 10 runs, to test for code\nbloat in the traditional LRU handling and kswapd \u0026 direct reclaim\npaths, without/with the memory controller configured in\n\n  vanilla: 71.603(0.207) seconds\n  patched: 71.640(0.156) seconds\n\n  vanilla: 79.558(0.288) seconds\n  patched: 77.233(0.147) seconds\n\n100G sparse file cat in 1G memory cgroup, 10 runs, to test for code\nbloat in the traditional memory cgroup LRU handling and reclaim path\n\n  vanilla: 96.844(0.281) seconds\n  patched: 94.454(0.311) seconds\n\n4 unlimited memcgs running kbuild -j32 each, 4G physical memory, 500M\nswap on SSD, 10 runs, to test for regressions in kswapd \u0026 direct\nreclaim using per-memcg LRU lists with multiple memcgs and multiple\nallocators within each memcg\n\n  vanilla: 717.722(1.440) seconds [ 69720.100(11600.835) majfaults ]\n  patched: 714.106(2.313) seconds [ 71109.300(14886.186) majfaults ]\n\n16 unlimited memcgs running kbuild, 1900M hierarchical limit, 500M\nswap on SSD, 10 runs, to test for regressions in hierarchical memcg\nsetups\n\n  vanilla: 2742.058(1.992) seconds [ 26479.600(1736.737) majfaults ]\n  patched: 2743.267(1.214) seconds [ 27240.700(1076.063) majfaults ]\n\nThis patch:\n\nThere are currently two different implementations of iterating over a\nmemory cgroup hierarchy tree.\n\nConsolidate them into one worker function and base the convenience\nlooping-macros on top of it.\n\nSigned-off-by: Johannes Weiner \u003cjweiner@redhat.com\u003e\nReviewed-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nReviewed-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nReviewed-by: Kirill A. Shutemov \u003ckirill@shutemov.name\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbsingharora@gmail.com\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nCc: Greg Thelen \u003cgthelen@google.com\u003e\nCc: Michel Lespinasse \u003cwalken@google.com\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "ab936cbcd02072a34b60d268f94440fd5cf1970b",
      "tree": "d37e3e3c54cc4cc691a428b6ceb71b4b40e4f42b",
      "parents": [
        "28d82dc1c4edbc352129f97f4ca22624d1fe61de"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Thu Jan 12 17:17:44 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:04 2012 -0800"
      },
      "message": "memcg: add mem_cgroup_replace_page_cache() to fix LRU issue\n\nCommit ef6a3c6311 (\"mm: add replace_page_cache_page() function\") added a\nfunction replace_page_cache_page().  This function replaces a page in the\nradix-tree with a new page.  WHen doing this, memory cgroup needs to fix\nup the accounting information.  memcg need to check PCG_USED bit etc.\n\nIn some(many?) cases, \u0027newpage\u0027 is on LRU before calling\nreplace_page_cache().  So, memcg\u0027s LRU accounting information should be\nfixed, too.\n\nThis patch adds mem_cgroup_replace_page_cache() and removes the old hooks.\n In that function, old pages will be unaccounted without touching\nres_counter and new page will be accounted to the memcg (of old page).\nWHen overwriting pc-\u003emem_cgroup of newpage, take zone-\u003elru_lock and avoid\nraces with LRU handling.\n\nBackground:\n  replace_page_cache_page() is called by FUSE code in its splice() handling.\n  Here, \u0027newpage\u0027 is replacing oldpage but this newpage is not a newly allocated\n  page and may be on LRU. LRU mis-accounting will be critical for memory cgroup\n  because rmdir() checks the whole LRU is empty and there is no account leak.\n  If a page is on the other LRU than it should be, rmdir() will fail.\n\nThis bug was added in March 2011, but no bug report yet.  I guess there\nare not many people who use memcg and FUSE at the same time with upstream\nkernels.\n\nThe result of this bug is that admin cannot destroy a memcg because of\naccount leak.  So, no panic, no deadlock.  And, even if an active cgroup\nexist, umount can succseed.  So no problem at shutdown.\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nCc: \u003cstable@vger.kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "28d82dc1c4edbc352129f97f4ca22624d1fe61de",
      "tree": "a6fbd269d17134ff42597b4e02eba4345bf6d901",
      "parents": [
        "2ccd4f4d4737b37e21dd92c8c584c23cd87740a2"
      ],
      "author": {
        "name": "Jason Baron",
        "email": "jbaron@redhat.com",
        "time": "Thu Jan 12 17:17:43 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:04 2012 -0800"
      },
      "message": "epoll: limit paths\n\nThe current epoll code can be tickled to run basically indefinitely in\nboth loop detection path check (on ep_insert()), and in the wakeup paths.\nThe programs that tickle this behavior set up deeply linked networks of\nepoll file descriptors that cause the epoll algorithms to traverse them\nindefinitely.  A couple of these sample programs have been previously\nposted in this thread: https://lkml.org/lkml/2011/2/25/297.\n\nTo fix the loop detection path check algorithms, I simply keep track of\nthe epoll nodes that have been already visited.  Thus, the loop detection\nbecomes proportional to the number of epoll file descriptor and links.\nThis dramatically decreases the run-time of the loop check algorithm.  In\none diabolical case I tried it reduced the run-time from 15 mintues (all\nin kernel time) to .3 seconds.\n\nFixing the wakeup paths could be done at wakeup time in a similar manner\nby keeping track of nodes that have already been visited, but the\ncomplexity is harder, since there can be multiple wakeups on different\ncpus...Thus, I\u0027ve opted to limit the number of possible wakeup paths when\nthe paths are created.\n\nThis is accomplished, by noting that the end file descriptor points that\nare found during the loop detection pass (from the newly added link), are\nactually the sources for wakeup events.  I keep a list of these file\ndescriptors and limit the number and length of these paths that emanate\nfrom these \u0027source file descriptors\u0027.  In the current implemetation I\nallow 1000 paths of length 1, 500 of length 2, 100 of length 3, 50 of\nlength 4 and 10 of length 5.  Note that it is sufficient to check the\n\u0027source file descriptors\u0027 reachable from the newly added link, since no\nother \u0027source file descriptors\u0027 will have newly added links.  This allows\nus to check only the wakeup paths that may have gotten too long, and not\nre-check all possible wakeup paths on the system.\n\nIn terms of the path limit selection, I think its first worth noting that\nthe most common case for epoll, is probably the model where you have 1\nepoll file descriptor that is monitoring n number of \u0027source file\ndescriptors\u0027.  In this case, each \u0027source file descriptor\u0027 has a 1 path of\nlength 1.  Thus, I believe that the limits I\u0027m proposing are quite\nreasonable and in fact may be too generous.  Thus, I\u0027m hoping that the\nproposed limits will not prevent any workloads that currently work to\nfail.\n\nIn terms of locking, I have extended the use of the \u0027epmutex\u0027 to all\nepoll_ctl add and remove operations.  Currently its only used in a subset\nof the add paths.  I need to hold the epmutex, so that we can correctly\ntraverse a coherent graph, to check the number of paths.  I believe that\nthis additional locking is probably ok, since its in the setup/teardown\npaths, and doesn\u0027t affect the running paths, but it certainly is going to\nadd some extra overhead.  Also, worth noting is that the epmuex was\nrecently added to the ep_ctl add operations in the initial path loop\ndetection code using the argument that it was not on a critical path.\n\nAnother thing to note here, is the length of epoll chains that is allowed.\nCurrently, eventpoll.c defines:\n\n/* Maximum number of nesting allowed inside epoll sets */\n#define EP_MAX_NESTS 4\n\nThis basically means that I am limited to a graph depth of 5 (EP_MAX_NESTS\n+ 1).  However, this limit is currently only enforced during the loop\ncheck detection code, and only when the epoll file descriptors are added\nin a certain order.  Thus, this limit is currently easily bypassed.  The\nnewly added check for wakeup paths, stricly limits the wakeup paths to a\nlength of 5, regardless of the order in which ep\u0027s are linked together.\nThus, a side-effect of the new code is a more consistent enforcement of\nthe graph depth.\n\nThus far, I\u0027ve tested this, using the sample programs previously\nmentioned, which now either return quickly or return -EINVAL.  I\u0027ve also\ntesting using the piptest.c epoll tester, which showed no difference in\nperformance.  I\u0027ve also created a number of different epoll networks and\ntested that they behave as expectded.\n\nI believe this solves the original diabolical test cases, while still\npreserving the sane epoll nesting.\n\nSigned-off-by: Jason Baron \u003cjbaron@redhat.com\u003e\nCc: Nelson Elhage \u003cnelhage@ksplice.com\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": "2ccd4f4d4737b37e21dd92c8c584c23cd87740a2",
      "tree": "7c4048fc709612fa057e39350352445f2f26d211",
      "parents": [
        "888a214dc4c65e1486ef7d3ac6b0cf93ae3cc2c7"
      ],
      "author": {
        "name": "Sasha Levin",
        "email": "levinsasha928@gmail.com",
        "time": "Thu Jan 12 17:17:40 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:04 2012 -0800"
      },
      "message": "pipe: fail cleanly when root tries F_SETPIPE_SZ with big size\n\nWhen a user with the CAP_SYS_RESOURCE cap tries to F_SETPIPE_SZ a pipe\nwith size bigger than kmalloc() can alloc it spits out an ugly warning:\n\n  ------------[ cut here ]------------\n  WARNING: at mm/page_alloc.c:2095 __alloc_pages_nodemask+0x5d3/0x7a0()\n  Pid: 733, comm: a.out Not tainted 3.2.0-rc1+ #4\n  Call Trace:\n     warn_slowpath_common+0x75/0xb0\n     warn_slowpath_null+0x15/0x20\n     __alloc_pages_nodemask+0x5d3/0x7a0\n     __get_free_pages+0x12/0x50\n     __kmalloc+0x12b/0x150\n     pipe_set_size+0x75/0x120\n     pipe_fcntl+0xf8/0x140\n     do_fcntl+0x2d4/0x410\n     sys_fcntl+0x66/0xa0\n     system_call_fastpath+0x16/0x1b\n  ---[ end trace 432f702e6db7b5ee ]---\n\nInstead, make kcalloc() handle the overflow case and fail quietly.\n\n[akpm@linux-foundation.org: switch to sizeof(*bufs) for 80-column niceness]\nSigned-off-by: Sasha Levin \u003clevinsasha928@gmail.com\u003e\nCc: Alexander Viro \u003cviro@zeniv.linux.org.uk\u003e\nAcked-by: Pekka Enberg \u003cpenberg@kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "888a214dc4c65e1486ef7d3ac6b0cf93ae3cc2c7",
      "tree": "d371fad11fae907025eb9766d9b2c66978b0e41f",
      "parents": [
        "15ee2d000dd5813fcf1204b078fa276e57046b64"
      ],
      "author": {
        "name": "Stanislaw Gruszka",
        "email": "sgruszka@redhat.com",
        "time": "Thu Jan 12 17:17:39 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:04 2012 -0800"
      },
      "message": "slub: document setting min order with debug_guardpage_minorder \u003e 0\n\nAcked-by: David Rientjes \u003crientjes@google.com\u003e\nCc: Pekka Enberg \u003cpenberg@cs.helsinki.fi\u003e\nCc: \"Rafael J. Wysocki\" \u003crjw@sisk.pl\u003e\nSigned-off-by: Stanislaw Gruszka \u003csgruszka@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": "15ee2d000dd5813fcf1204b078fa276e57046b64",
      "tree": "e62a49c43ee959c8a36f21a6548810fee516cd9d",
      "parents": [
        "01fa310cd9158ebdd1ee95383540ecaa3f4ef3f6"
      ],
      "author": {
        "name": "Mathias Krause",
        "email": "minipli@googlemail.com",
        "time": "Thu Jan 12 17:17:38 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:04 2012 -0800"
      },
      "message": "parisc, exec: remove redundant set_fs(USER_DS)\n\nThe address limit is already set in flush_old_exec() so those calls to\nset_fs(USER_DS) are redundant.\n\nSigned-off-by: Mathias Krause \u003cminipli@googlemail.com\u003e\nCc: Kyle McMartin \u003ckyle@mcmartin.ca\u003e\nCc: Helge Deller \u003cdeller@gmx.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "01fa310cd9158ebdd1ee95383540ecaa3f4ef3f6",
      "tree": "9eaeacec6e545b6c526072de6a3dddc9a8e187b5",
      "parents": [
        "08346bf8051c62f92f132eff267e524a7165ee0c"
      ],
      "author": {
        "name": "Mathias Krause",
        "email": "minipli@googlemail.com",
        "time": "Thu Jan 12 17:17:36 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:03 2012 -0800"
      },
      "message": "ia64, exec: remove redundant set_fs(USER_DS)\n\nThe address limit is already set in flush_old_exec() so this\nset_fs(USER_DS) is redundant.\n\nSigned-off-by: Mathias Krause \u003cminipli@googlemail.com\u003e\nCc: Fenghua Yu \u003cfenghua.yu@intel.com\u003e\nCc: \"Luck, Tony\" \u003ctony.luck@intel.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "08346bf8051c62f92f132eff267e524a7165ee0c",
      "tree": "9f620f41d9e43e53c9965af7c41fc893fb4c1495",
      "parents": [
        "2565409fc0303f3ab8d66b8326702a687962a29b"
      ],
      "author": {
        "name": "Andrew Morton",
        "email": "akpm@linux-foundation.org",
        "time": "Thu Jan 12 17:17:34 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:03 2012 -0800"
      },
      "message": "drivers/video/nvidia/nvidia.c: fix warning\n\nFix the int/bool confusion in there.\n\n  drivers/video/nvidia/nvidia.c:1602: warning: return from incompatible pointer type\n\nCc: Florian Tobias Schandinat \u003cFlorianSchandinat@gmx.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "2565409fc0303f3ab8d66b8326702a687962a29b",
      "tree": "b57f238d77ee87a991371a7021462b8c71351659",
      "parents": [
        "4156153c4daddf12dd386016f96a947a01e93bf4"
      ],
      "author": {
        "name": "Heiko Carstens",
        "email": "heiko.carstens@de.ibm.com",
        "time": "Thu Jan 12 17:17:33 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:03 2012 -0800"
      },
      "message": "mm,x86,um: move CMPXCHG_DOUBLE config option\n\nMove CMPXCHG_DOUBLE and rename it to HAVE_CMPXCHG_DOUBLE so architectures\ncan simply select the option if it is supported.\n\nSigned-off-by: Heiko Carstens \u003cheiko.carstens@de.ibm.com\u003e\nAcked-by: Christoph Lameter \u003ccl@linux.com\u003e\nCc: Pekka Enberg \u003cpenberg@kernel.org\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nCc: \"H. Peter Anvin\" \u003chpa@zytor.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "4156153c4daddf12dd386016f96a947a01e93bf4",
      "tree": "6a8653a47bcda09b97870e5c79919790638afe0c",
      "parents": [
        "43570fd2f47ba518145e9289f54cde3dba4c8b25"
      ],
      "author": {
        "name": "Heiko Carstens",
        "email": "heiko.carstens@de.ibm.com",
        "time": "Thu Jan 12 17:17:30 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:03 2012 -0800"
      },
      "message": "mm,x86,um: move CMPXCHG_LOCAL config option\n\nMove CMPXCHG_LOCAL and rename it to HAVE_CMPXCHG_LOCAL so architectures\ncan simply select the option if it is supported.\n\nSigned-off-by: Heiko Carstens \u003cheiko.carstens@de.ibm.com\u003e\nAcked-by: Christoph Lameter \u003ccl@linux.com\u003e\nCc: Pekka Enberg \u003cpenberg@kernel.org\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nCc: \"H. Peter Anvin\" \u003chpa@zytor.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "43570fd2f47ba518145e9289f54cde3dba4c8b25",
      "tree": "67aa61c8b972f4b3af66cd89082222e77e06a4cb",
      "parents": [
        "0d259cf8190b9c446eefd5225ffcc3941e76a432"
      ],
      "author": {
        "name": "Heiko Carstens",
        "email": "heiko.carstens@de.ibm.com",
        "time": "Thu Jan 12 17:17:27 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:03 2012 -0800"
      },
      "message": "mm,slub,x86: decouple size of struct page from CONFIG_CMPXCHG_LOCAL\n\nWhile implementing cmpxchg_double() on s390 I realized that we don\u0027t set\nCONFIG_CMPXCHG_LOCAL despite the fact that we have support for it.\n\nHowever setting that option will increase the size of struct page by\neight bytes on 64 bit, which we certainly do not want.  Also, it doesn\u0027t\nmake sense that a present cpu feature should increase the size of struct\npage.\n\nBesides that it looks like the dependency to CMPXCHG_LOCAL is wrong and\nthat it should depend on CMPXCHG_DOUBLE instead.\n\nThis patch:\n\nIf an architecture supports CMPXCHG_LOCAL this shouldn\u0027t result\nautomatically in larger struct pages if the SLUB allocator is used.\nInstead introduce a new config option \"HAVE_ALIGNED_STRUCT_PAGE\" which\ncan be selected if a double word aligned struct page is required.  Also\nupdate x86 Kconfig so that it should work as before.\n\nSigned-off-by: Heiko Carstens \u003cheiko.carstens@de.ibm.com\u003e\nAcked-by: Christoph Lameter \u003ccl@linux.com\u003e\nCc: Pekka Enberg \u003cpenberg@kernel.org\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nCc: \"H. Peter Anvin\" \u003chpa@zytor.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    }
  ],
  "next": "0d259cf8190b9c446eefd5225ffcc3941e76a432"
}
