)]}'
{
  "log": [
    {
      "commit": "0142ef6cdca5f9784eb0762ac50fe378d98d71d4",
      "tree": "d8c3912d206c2d286d305df06440f0f1098437a6",
      "parents": [
        "71fae7e714749a52cb8be777ec014f82e8a747f4"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Thu Jun 07 14:21:09 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jun 07 14:43:54 2012 -0700"
      },
      "message": "shmem: replace_page must flush_dcache and others\n\nCommit bde05d1ccd51 (\"shmem: replace page if mapping excludes its zone\")\nis not at all likely to break for anyone, but it was an earlier version\nfrom before review feedback was incorporated.  Fix that up now.\n\n* shmem_replace_page must flush_dcache_page after copy_highpage [akpm]\n* Expand comment on why shmem_unuse_inode needs page_swapcount [akpm]\n* Remove excess of VM_BUG_ONs from shmem_replace_page [wangcong]\n* Check page_private matches swap before calling shmem_replace_page [hughd]\n* shmem_replace_page allow for unexpected race in radix_tree lookup [hughd]\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nCc: Cong Wang \u003cxiyou.wangcong@gmail.com\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Alan Cox \u003calan@lxorguk.ukuu.org.uk\u003e\nCc: Stephane Marchesin \u003cmarcheu@chromium.org\u003e\nCc: Andi Kleen \u003candi@firstfloor.org\u003e\nCc: Dave Airlie \u003cairlied@gmail.com\u003e\nCc: Daniel Vetter \u003cdaniel@ffwll.ch\u003e\nCc: Rob Clark \u003crob.clark@linaro.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "1193755ac6328ad240ba987e6ec41d5e8baf0680",
      "tree": "40bf847d7e3ebaa57b107151d14e6cd1d280cc6d",
      "parents": [
        "4edebed86690eb8db9af3ab85baf4a34e73266cc",
        "0ef97dcfce4179a2eba046b855ee2f91d6f1b414"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jun 01 10:34:35 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jun 01 10:34:35 2012 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs\n\nPull vfs changes from Al Viro.\n \"A lot of misc stuff.  The obvious groups:\n   * Miklos\u0027 atomic_open series; kills the damn abuse of\n     -\u003ed_revalidate() by NFS, which was the major stumbling block for\n     all work in that area.\n   * ripping security_file_mmap() and dealing with deadlocks in the\n     area; sanitizing the neighborhood of vm_mmap()/vm_munmap() in\n     general.\n   * -\u003eencode_fh() switched to saner API; insane fake dentry in\n     mm/cleancache.c gone.\n   * assorted annotations in fs (endianness, __user)\n   * parts of Artem\u0027s -\u003es_dirty work (jff2 and reiserfs parts)\n   * -\u003eupdate_time() work from Josef.\n   * other bits and pieces all over the place.\n\n  Normally it would\u0027ve been in two or three pull requests, but\n  signal.git stuff had eaten a lot of time during this cycle ;-/\"\n\nFix up trivial conflicts in Documentation/filesystems/vfs.txt (the\n\u0027truncate_range\u0027 inode method was removed by the VM changes, the VFS\nupdate adds an \u0027update_time()\u0027 method), and in fs/btrfs/ulist.[ch] (due\nto sparse fix added twice, with other changes nearby).\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs: (95 commits)\n  nfs: don\u0027t open in -\u003ed_revalidate\n  vfs: retry last component if opening stale dentry\n  vfs: nameidata_to_filp(): don\u0027t throw away file on error\n  vfs: nameidata_to_filp(): inline __dentry_open()\n  vfs: do_dentry_open(): don\u0027t put filp\n  vfs: split __dentry_open()\n  vfs: do_last() common post lookup\n  vfs: do_last(): add audit_inode before open\n  vfs: do_last(): only return EISDIR for O_CREAT\n  vfs: do_last(): check LOOKUP_DIRECTORY\n  vfs: do_last(): make ENOENT exit RCU safe\n  vfs: make follow_link check RCU safe\n  vfs: do_last(): use inode variable\n  vfs: do_last(): inline walk_component()\n  vfs: do_last(): make exit RCU safe\n  vfs: split do_lookup()\n  Btrfs: move over to use -\u003eupdate_time\n  fs: introduce inode operation -\u003eupdate_time\n  reiserfs: get rid of resierfs_sync_super\n  reiserfs: mark the superblock as dirty a bit later\n  ...\n"
    },
    {
      "commit": "b0b0382bb4904965a9e9fca77ad87514dfda0d1c",
      "tree": "dc46873fa74e0d194e4a2571b16f0767e1919ae8",
      "parents": [
        "6d42e7e9f6d86ed4dfacde75a6cf515068f9749c"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Apr 02 14:34:06 2012 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue May 29 23:28:33 2012 -0400"
      },
      "message": "-\u003eencode_fh() API change\n\npass inode + parent\u0027s inode or NULL instead of dentry + bool saying\nwhether we want the parent or not.\n\nNOTE: that needs ceph fix folded in.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "4fb5ef089b288942c6fc3f85c4ecb4016c1aa4c3",
      "tree": "aff66acd4b8a0e8cc060f5bf20ad3d6d75bdb7ab",
      "parents": [
        "1aac1400319d30786f32b9290e9cc923937b3d57"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Tue May 29 15:06:43 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue May 29 16:22:23 2012 -0700"
      },
      "message": "tmpfs: support SEEK_DATA and SEEK_HOLE\n\nIt\u0027s quite easy for tmpfs to scan the radix_tree to support llseek\u0027s new\nSEEK_DATA and SEEK_HOLE options: so add them while the minutiae are still\non my mind (in particular, the !PageUptodate-ness of pages fallocated but\nstill unwritten).\n\nBut I don\u0027t know who actually uses SEEK_DATA or SEEK_HOLE, and whether it\nwould be of any use to them on tmpfs.  This code adds 92 lines and 752\nbytes on x86_64 - is that bloat or worthwhile?\n\n[akpm@linux-foundation.org: fix warning with CONFIG_TMPFS\u003dn]\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nCc: Josef Bacik \u003cjosef@redhat.com\u003e\nCc: Andi Kleen \u003candi@firstfloor.org\u003e\nCc: Andreas Dilger \u003cadilger@dilger.ca\u003e\nCc: Dave Chinner \u003cdavid@fromorbit.com\u003e\nCc: Marco Stornelli \u003cmarco.stornelli@gmail.com\u003e\nCc: Jeff liu \u003cjeff.liu@oracle.com\u003e\nCc: Chris Mason \u003cchris.mason@oracle.com\u003e\nCc: Sunil Mushran \u003csunil.mushran@oracle.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "1aac1400319d30786f32b9290e9cc923937b3d57",
      "tree": "14b44023c7645a5d264f0d537838fea77244eecc",
      "parents": [
        "1635f6a74152f1dcd1b888231609d64875f0a81a"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Tue May 29 15:06:42 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue May 29 16:22:23 2012 -0700"
      },
      "message": "tmpfs: quit when fallocate fills memory\n\nAs it stands, a large fallocate() on tmpfs is liable to fill memory with\npages, freed on failure except when they run into swap, at which point\nthey become fixed into the file despite the failure.  That feels quite\nwrong, to be consuming resources precisely when they\u0027re in short supply.\n\nGo the other way instead: shmem_fallocate() indicate the range it has\nfallocated to shmem_writepage(), keeping count of pages it\u0027s allocating;\nshmem_writepage() reactivate instead of swapping out pages fallocated by\nthis syscall (but happily swap out those from earlier occasions), keeping\ncount; shmem_fallocate() compare counts and give up once the reactivated\npages have started to coming back to writepage (approximately: some zones\nwould in fact recycle faster than others).\n\nThis is a little unusual, but works well: although we could consider the\nfailure to swap as a bug, and fix it later with SWAP_MAP_FALLOC handling\nadded in swapfile.c and memcontrol.c, I doubt that we shall ever want to.\n\n(If there\u0027s no swap, an over-large fallocate() on tmpfs is limited in the\nsame way as writing: stopped by rlimit, or by tmpfs mount size if that was\nset sensibly, or by __vm_enough_memory() heuristics if OVERCOMMIT_GUESS or\nOVERCOMMIT_NEVER.  If OVERCOMMIT_ALWAYS, then it is liable to OOM-kill\nothers as writing would, but stops and frees if interrupted.)\n\nNow that everything is freed on failure, we can then skip updating ctime.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nCc: Cong Wang \u003camwang@redhat.com\u003e\nCc: Kay Sievers \u003ckay@vrfy.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "1635f6a74152f1dcd1b888231609d64875f0a81a",
      "tree": "a2919520e0a8fead3930d23136ca30829f0fc64a",
      "parents": [
        "e2d12e22c59ce714008aa5266d769f8568d74eac"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Tue May 29 15:06:42 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue May 29 16:22:23 2012 -0700"
      },
      "message": "tmpfs: undo fallocation on failure\n\nIn the previous episode, we left the already-fallocated pages attached to\nthe file when shmem_fallocate() fails part way through.\n\nNow try to do better, by extending the earlier optimization of !Uptodate\npages (then always under page lock) to !Uptodate pages (outside of page\nlock), representing fallocated pages.  And don\u0027t waste time clearing them\nat the time of fallocate(), leave that until later if necessary.\n\nAdapt shmem_truncate_range() to shmem_undo_range(), so that a failing\nfallocate can recognize and remove precisely those !Uptodate allocations\nwhich it added (and were not independently allocated by racing tasks).\n\nBut unless we start playing with swapfile.c and memcontrol.c too, once one\nof our fallocated pages reaches shmem_writepage(), we do then have to\ninstantiate it as an ordinarily allocated page, before swapping out.  This\nis unsatisfactory, but improved in the next episode.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nCc: Cong Wang \u003camwang@redhat.com\u003e\nCc: Kay Sievers \u003ckay@vrfy.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "e2d12e22c59ce714008aa5266d769f8568d74eac",
      "tree": "c4c52d14887c54304af947c2a6c75cb8d1bb7826",
      "parents": [
        "17cf28afea2a1112f240a3a2da8af883be024811"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Tue May 29 15:06:41 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue May 29 16:22:23 2012 -0700"
      },
      "message": "tmpfs: support fallocate preallocation\n\nThe systemd plumbers expressed a wish that tmpfs support preallocation.\nCong Wang wrote a patch, but several kernel guys expressed scepticism:\nhttps://lkml.org/lkml/2011/11/18/137\n\nChristoph Hellwig: What for exactly? Please explain why preallocating on\ntmpfs would make any sense.\n\nKay Sievers: To be able to safely use mmap(), regarding SIGBUS, on files\non the /dev/shm filesystem.  The glibc fallback loop for -ENOSYS [or\n-EOPNOTSUPP] on fallocate is just ugly.\n\nHugh Dickins: If tmpfs is going to support\nfallocate(FALLOC_FL_PUNCH_HOLE), it would seem perverse to permit the\ndeallocation but fail the allocation.  Christoph Hellwig: Agreed.\n\nNow that we do have shmem_fallocate() for hole-punching, plumb in basic\nsupport for preallocation mode too.  It\u0027s fairly straightforward (though\nquite a few details needed attention), except for when it fails part way\nthrough.  What a pity that fallocate(2) was not specified to return the\nlength allocated, permitting short fallocations!\n\nAs it is, when it fails part way through, we ought to free what has just\nbeen allocated by this system call; but must be very sure not to free any\nallocated earlier, or any allocated by racing accesses (not all excluded\nby i_mutex).\n\nBut we cannot distinguish them: so in this patch simply leak allocations\non partial failure (they will be freed later if the file is removed).\n\nAn attractive alternative approach would have been for fallocate() not to\nallocate pages at all, but note reservations by entries in the radix-tree.\n But that would give less assurance, and, critically, would be hard to fit\nwith mem cgroups (who owns the reservations?): allocating pages lets\nfallocate() behave in just the same way as write().\n\nBased-on-patch-by: Cong Wang \u003camwang@redhat.com\u003e\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nCc: Cong Wang \u003camwang@redhat.com\u003e\nCc: Kay Sievers \u003ckay@vrfy.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "17cf28afea2a1112f240a3a2da8af883be024811",
      "tree": "ed9e3eb9b1d44118a12e4ecdf369e3b9b3208be1",
      "parents": [
        "3f31d07571eeea18a7d34db9af21d2285b807a17"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Tue May 29 15:06:41 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue May 29 16:22:23 2012 -0700"
      },
      "message": "mm/fs: remove truncate_range\n\nRemove vmtruncate_range(), and remove the truncate_range method from\nstruct inode_operations: only tmpfs ever supported it, and tmpfs has now\nconverted over to using the fallocate method of file_operations.\n\nUpdate Documentation accordingly, adding (setlease and) fallocate lines.\nAnd while we\u0027re in mm.h, remove duplicate declarations of shmem_lock() and\nshmem_file_setup(): everyone is now using the ones in shmem_fs.h.\n\nBased-on-patch-by: Cong Wang \u003camwang@redhat.com\u003e\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nCc: Cong Wang \u003camwang@redhat.com\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": "83e4fa9c16e4af7122e31be3eca5d57881d236fe",
      "tree": "594bc4152a58314a3f5068aefaa28783d1f2021a",
      "parents": [
        "ec9516fbc5fa814014991e1ae7f8860127122105"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Tue May 29 15:06:40 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue May 29 16:22:22 2012 -0700"
      },
      "message": "tmpfs: support fallocate FALLOC_FL_PUNCH_HOLE\n\ntmpfs has supported hole-punching since 2.6.16, via\nmadvise(,,MADV_REMOVE).\n\nBut nowadays fallocate(,FALLOC_FL_PUNCH_HOLE|FALLOC_FL_KEEP_SIZE,,) is\nthe agreed way to punch holes.\n\nSo add shmem_fallocate() to support that, and tweak shmem_truncate_range()\nto support partial pages at both the beginning and end of range (never\nneeded for madvise, which demands rounded addr and rounds up length).\n\nBased-on-patch-by: Cong Wang \u003camwang@redhat.com\u003e\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nCc: Cong Wang \u003camwang@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": "ec9516fbc5fa814014991e1ae7f8860127122105",
      "tree": "e719b64b939e791499e115a63f4e7d1dd0448b16",
      "parents": [
        "2f6e38f3cd17a7858112f538c1700c747170db1f"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Tue May 29 15:06:39 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue May 29 16:22:22 2012 -0700"
      },
      "message": "tmpfs: optimize clearing when writing\n\nNick proposed years ago that tmpfs should avoid clearing its pages where\nwrite will overwrite them with new data, as ramfs has long done.  But I\nmessed it up and just got bad data.  Tried again recently, it works\nfine.\n\nHere\u0027s time output for writing 4GiB 16 times on this Core i5 laptop:\n\nbefore: real\t0m21.169s user\t0m0.028s sys\t0m21.057s\n        real\t0m21.382s user\t0m0.016s sys\t0m21.289s\n        real\t0m21.311s user\t0m0.020s sys\t0m21.217s\n\nafter:  real\t0m18.273s user\t0m0.032s sys\t0m18.165s\n        real\t0m18.354s user\t0m0.020s sys\t0m18.265s\n        real\t0m18.440s user\t0m0.032s sys\t0m18.337s\n\nramfs:  real\t0m16.860s user\t0m0.028s sys\t0m16.765s\n        real\t0m17.382s user\t0m0.040s sys\t0m17.273s\n        real\t0m17.133s user\t0m0.044s sys\t0m17.021s\n\nYes, I have done perf reports, but they need more explanation than they\ndeserve: in summary, clear_page vanishes, its cache loading shifts into\ncopy_user_generic_unrolled; shmem_getpage_gfp goes down, and\nsurprisingly mark_page_accessed goes way up - I think because they are\nrespectively where the cache gets to be reloaded after being purged by\nclear or copy.\n\nSuggested-by: Nick Piggin \u003cnpiggin@gmail.com\u003e\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "2f6e38f3cd17a7858112f538c1700c747170db1f",
      "tree": "894181551acd46caea34ff2b3fba13ffd049fcbd",
      "parents": [
        "bde05d1ccd512696b09db9dd2e5f33ad19152605"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Tue May 29 15:06:38 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue May 29 16:22:22 2012 -0700"
      },
      "message": "tmpfs: enable NOSEC optimization\n\nLet tmpfs into the NOSEC optimization (avoiding file_remove_suid()\noverhead on most common writes): set MS_NOSEC on its superblocks.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nCc: Andi Kleen \u003candi@firstfloor.org\u003e\nCc: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nCc: Cong Wang \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": "bde05d1ccd512696b09db9dd2e5f33ad19152605",
      "tree": "affa2c836136cac6ec0e503ce8996670d385ebbb",
      "parents": [
        "5ceb9ce6fe9462a298bb2cd5c9f1ca6cb80a0199"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Tue May 29 15:06:38 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue May 29 16:22:22 2012 -0700"
      },
      "message": "shmem: replace page if mapping excludes its zone\n\nThe GMA500 GPU driver uses GEM shmem objects, but with a new twist: the\nbacking RAM has to be below 4GB.  Not a problem while the boards\nsupported only 4GB: but now Intel\u0027s D2700MUD boards support 8GB, and\ntheir GMA3600 is managed by the GMA500 driver.\n\nshmem/tmpfs has never pretended to support hardware restrictions on the\nbacking memory, but it might have appeared to do so before v3.1, and\neven now it works fine until a page is swapped out then back in.  When\nread_cache_page_gfp() supplied a freshly allocated page for copy, that\ncompensated for whatever choice might have been made by earlier swapin\nreadahead; but swapoff was likely to destroy the illusion.\n\nWe\u0027d like to continue to support GMA500, so now add a new\nshmem_should_replace_page() check on the zone when about to move a page\nfrom swapcache to filecache (in swapin and swapoff cases), with\nshmem_replace_page() to allocate and substitute a suitable page (given\ngma500/gem.c\u0027s mapping_set_gfp_mask GFP_KERNEL | __GFP_DMA32).\n\nThis does involve a minor extension to mem_cgroup_replace_page_cache()\n(the page may or may not have already been charged); and I\u0027ve removed a\ncomment and call to mem_cgroup_uncharge_cache_page(), which in fact is\nalways a no-op while PageSwapCache.\n\nAlso removed optimization of an unlikely path in shmem_getpage_gfp(),\nnow that we need to check PageSwapCache more carefully (a racing caller\nmight already have made the copy).  And at one point shmem_unuse_inode()\nneeds to use the hitherto private page_swapcount(), to guard against\nracing with inode eviction.\n\nIt would make sense to extend shmem_should_replace_page(), to cover\ncpuset and NUMA mempolicy restrictions too, but set that aside for now:\nneeds a cleanup of shmem mempolicy handling, and more testing, and ought\nto handle swap faults in do_swap_page() as well as shmem.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Alan Cox \u003calan@lxorguk.ukuu.org.uk\u003e\nCc: Stephane Marchesin \u003cmarcheu@chromium.org\u003e\nCc: Andi Kleen \u003candi@firstfloor.org\u003e\nCc: Dave Airlie \u003cairlied@gmail.com\u003e\nCc: Daniel Vetter \u003cdaniel@ffwll.ch\u003e\nCc: Rob Clark \u003crob.clark@linaro.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "90324cc1b11a211e37eabd8cb863e1a1561d6b1d",
      "tree": "c8b79c6850420a114ca6660c1b44fc486b1ba86d",
      "parents": [
        "fb8b00675eb6462aacab56bca31ed6107bda5314",
        "169ebd90131b2ffca74bb2dbe7eeacd39fb83714"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon May 28 09:54:45 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon May 28 09:54:45 2012 -0700"
      },
      "message": "Merge tag \u0027writeback\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/wfg/linux\n\nPull writeback tree from Wu Fengguang:\n \"Mainly from Jan Kara to avoid iput() in the flusher threads.\"\n\n* tag \u0027writeback\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/wfg/linux:\n  writeback: Avoid iput() from flusher thread\n  vfs: Rename end_writeback() to clear_inode()\n  vfs: Move waiting for inode writeback from end_writeback() to evict_inode()\n  writeback: Refactor writeback_single_inode()\n  writeback: Remove wb-\u003elist_lock from writeback_single_inode()\n  writeback: Separate inode requeueing after writeback\n  writeback: Move I_DIRTY_PAGES handling\n  writeback: Move requeueing when I_SYNC set to writeback_sb_inodes()\n  writeback: Move clearing of I_SYNC into inode_sync_complete()\n  writeback: initialize global_dirty_limit\n  fs: remove 8 bytes of padding from struct writeback_control on 64 bit builds\n  mm: page-writeback.c: local functions should not be exposed globally\n"
    },
    {
      "commit": "8751e03958f2adbfba6a0f186f4c5797c950c22a",
      "tree": "6939a4769b4d96a81179f7fc8e1b04bb9d113695",
      "parents": [
        "ab27b91b9f1937ddb9e0eb0d0892728f852b48cf"
      ],
      "author": {
        "name": "Eric W. Biederman",
        "email": "ebiederm@xmission.com",
        "time": "Tue Feb 07 16:46:12 2012 -0800"
      },
      "committer": {
        "name": "Eric W. Biederman",
        "email": "ebiederm@xmission.com",
        "time": "Tue May 15 14:59:29 2012 -0700"
      },
      "message": "userns: Convert tmpfs to use kuid and kgid where appropriate\n\nAcked-by: Serge Hallyn \u003cserge.hallyn@canonical.com\u003e\nSigned-off-by: Eric W. Biederman \u003cebiederm@xmission.com\u003e\n"
    },
    {
      "commit": "dbd5768f87ff6fb0a4fe09c4d7b6c4a24de99430",
      "tree": "42ea94ea733538f797aa745945fc43c4d1b89217",
      "parents": [
        "7994e6f7254354e03028a11f98a27bd67dace9f1"
      ],
      "author": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Thu May 03 14:48:02 2012 +0200"
      },
      "committer": {
        "name": "Fengguang Wu",
        "email": "fengguang.wu@intel.com",
        "time": "Sun May 06 13:43:41 2012 +0800"
      },
      "message": "vfs: Rename end_writeback() to clear_inode()\n\nAfter we moved inode_sync_wait() from end_writeback() it doesn\u0027t make sense\nto call the function end_writeback() anymore. Rename it to clear_inode()\nwhich well says what the function really does - set I_CLEAR flag.\n\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\nSigned-off-by: Fengguang Wu \u003cfengguang.wu@intel.com\u003e\n"
    },
    {
      "commit": "95211279c5ad00a317c98221d7e4365e02f20836",
      "tree": "2ddc8625378d2915b8c96392f3cf6663b705ed55",
      "parents": [
        "5375871d432ae9fc581014ac117b96aaee3cd0c7",
        "12724850e8064f64b6223d26d78c0597c742c65a"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Mar 22 09:04:48 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Mar 22 09:04:48 2012 -0700"
      },
      "message": "Merge branch \u0027akpm\u0027 (Andrew\u0027s patch-bomb)\n\nMerge first batch of patches from Andrew Morton:\n \"A few misc things and all the MM queue\"\n\n* emailed from Andrew Morton \u003cakpm@linux-foundation.org\u003e: (92 commits)\n  memcg: avoid THP split in task migration\n  thp: add HPAGE_PMD_* definitions for !CONFIG_TRANSPARENT_HUGEPAGE\n  memcg: clean up existing move charge code\n  mm/memcontrol.c: remove unnecessary \u0027break\u0027 in mem_cgroup_read()\n  mm/memcontrol.c: remove redundant BUG_ON() in mem_cgroup_usage_unregister_event()\n  mm/memcontrol.c: s/stealed/stolen/\n  memcg: fix performance of mem_cgroup_begin_update_page_stat()\n  memcg: remove PCG_FILE_MAPPED\n  memcg: use new logic for page stat accounting\n  memcg: remove PCG_MOVE_LOCK flag from page_cgroup\n  memcg: simplify move_account() check\n  memcg: remove EXPORT_SYMBOL(mem_cgroup_update_page_stat)\n  memcg: kill dead prev_priority stubs\n  memcg: remove PCG_CACHE page_cgroup flag\n  memcg: let css_get_next() rely upon rcu_read_lock()\n  cgroup: revert ss_id_lock to spinlock\n  idr: make idr_get_next() good for rcu_read_lock()\n  memcg: remove unnecessary thp check in page stat accounting\n  memcg: remove redundant returns\n  memcg: enum lru_list lru\n  ...\n"
    },
    {
      "commit": "6d9d88d07e132259c35f9493b15429e19198489c",
      "tree": "96f880fd4f2a07de312f0db576c2484ab5d09457",
      "parents": [
        "08ab9b10d43aca091fdff58b69fc1ec89c5b8a83"
      ],
      "author": {
        "name": "Jarkko Sakkinen",
        "email": "jarkko.sakkinen@intel.com",
        "time": "Wed Mar 21 16:34:05 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 17:54:58 2012 -0700"
      },
      "message": "tmpfs: security xattr setting on inode creation\n\nAdds to generic xattr support introduced in Linux 3.0 by implementing\ninitxattrs callback.  This enables consulting of security attributes from\nLSM and EVM when inode is created.\n\n[hughd@google.com: moved under CONFIG_TMPFS_XATTR, with memcpy in shmem_xattr_alloc]\nSigned-off-by: Jarkko Sakkinen \u003cjarkko.sakkinen@intel.com\u003e\nReviewed-by: James Morris \u003cjames.l.morris@oracle.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": "e2a0883e4071237d09b604a342c28b96b44a04b3",
      "tree": "aa56f4d376b5eb1c32358c19c2669c2a94e0e1fd",
      "parents": [
        "3a990a52f9f25f45469e272017a31e7a3fda60ed",
        "07c0c5d8b8c122b2f2df9ee574ac3083daefc981"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 13:36:41 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 13:36:41 2012 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs\n\nPull vfs pile 1 from Al Viro:\n \"This is _not_ all; in particular, Miklos\u0027 and Jan\u0027s stuff is not there\n  yet.\"\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs: (64 commits)\n  ext4: initialization of ext4_li_mtx needs to be done earlier\n  debugfs-related mode_t whack-a-mole\n  hfsplus: add an ioctl to bless files\n  hfsplus: change finder_info to u32\n  hfsplus: initialise userflags\n  qnx4: new helper - try_extent()\n  qnx4: get rid of qnx4_bread/qnx4_getblk\n  take removal of PF_FORKNOEXEC to flush_old_exec()\n  trim includes in inode.c\n  um: uml_dup_mmap() relies on -\u003emmap_sem being held, but activate_mm() doesn\u0027t hold it\n  um: embed -\u003estub_pages[] into mmu_context\n  gadgetfs: list_for_each_safe() misuse\n  ocfs2: fix leaks on failure exits in module_init\n  ecryptfs: make register_filesystem() the last potential failure exit\n  ntfs: forgets to unregister sysctls on register_filesystem() failure\n  logfs: missing cleanup on register_filesystem() failure\n  jfs: mising cleanup on register_filesystem() failure\n  make configfs_pin_fs() return root dentry on success\n  configfs: configfs_create_dir() has parent dentry in dentry-\u003ed_parent\n  configfs: sanitize configfs_create()\n  ...\n"
    },
    {
      "commit": "3556485f1595e3964ba539e39ea682acbb835cee",
      "tree": "7f5ee254f425b1427ac0059b5f347a307f8538a1",
      "parents": [
        "b8716614a7cc2fc15ea2a518edd04755fb08d922",
        "09f61cdbb32a9d812c618d3922db533542736bb0"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 13:25:04 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 13:25:04 2012 -0700"
      },
      "message": "Merge branch \u0027next\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/linux-security\n\nPull security subsystem updates for 3.4 from James Morris:\n \"The main addition here is the new Yama security module from Kees Cook,\n  which was discussed at the Linux Security Summit last year.  Its\n  purpose is to collect miscellaneous DAC security enhancements in one\n  place.  This also marks a departure in policy for LSM modules, which\n  were previously limited to being standalone access control systems.\n  Chromium OS is using Yama, and I believe there are plans for Ubuntu,\n  at least.\n\n  This patchset also includes maintenance updates for AppArmor, TOMOYO\n  and others.\"\n\nFix trivial conflict in \u003cnet/sock.h\u003e due to the jumo_label-\u003estatic_key\nrename.\n\n* \u0027next\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/linux-security: (38 commits)\n  AppArmor: Fix location of const qualifier on generated string tables\n  TOMOYO: Return error if fails to delete a domain\n  AppArmor: add const qualifiers to string arrays\n  AppArmor: Add ability to load extended policy\n  TOMOYO: Return appropriate value to poll().\n  AppArmor: Move path failure information into aa_get_name and rename\n  AppArmor: Update dfa matching routines.\n  AppArmor: Minor cleanup of d_namespace_path to consolidate error handling\n  AppArmor: Retrieve the dentry_path for error reporting when path lookup fails\n  AppArmor: Add const qualifiers to generated string tables\n  AppArmor: Fix oops in policy unpack auditing\n  AppArmor: Fix error returned when a path lookup is disconnected\n  KEYS: testing wrong bit for KEY_FLAG_REVOKED\n  TOMOYO: Fix mount flags checking order.\n  security: fix ima kconfig warning\n  AppArmor: Fix the error case for chroot relative path name lookup\n  AppArmor: fix mapping of META_READ to audit and quiet flags\n  AppArmor: Fix underflow in xindex calculation\n  AppArmor: Fix dropping of allowed operations that are force audited\n  AppArmor: Add mising end of structure test to caps unpacking\n  ...\n"
    },
    {
      "commit": "318ceed088497d1ca839b1172518ac4cc7096b82",
      "tree": "7dfd07bfb5e8c5d5dbb0ba4ea523f334c98c66bb",
      "parents": [
        "ca85c07809ca19de3391cb79ee1198f3dd91fa8d"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sun Feb 12 22:08:01 2012 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Mar 20 21:29:37 2012 -0400"
      },
      "message": "tidy up after d_make_root() conversion\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "48fde701aff662559b38d9a609574068f22d00fe",
      "tree": "aa6b203dc671b51d58575b65eb08310ff8309b60",
      "parents": [
        "6b4231e2f92adbcf96fb2a3fa751d7ca0a61b21f"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sun Jan 08 22:15:13 2012 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Mar 20 21:29:35 2012 -0400"
      },
      "message": "switch open-coded instances of d_make_root() to new helper\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "9b04c5fec43c0da610a2c37f70c5b013101a6ad7",
      "tree": "f04767281b7067fba91cf0d37440bf454c492e38",
      "parents": [
        "c3eede8e0a1292d95c051cf947738687b9c42322"
      ],
      "author": {
        "name": "Cong Wang",
        "email": "amwang@redhat.com",
        "time": "Fri Nov 25 23:14:39 2011 +0800"
      },
      "committer": {
        "name": "Cong Wang",
        "email": "xiyou.wangcong@gmail.com",
        "time": "Tue Mar 20 21:48:27 2012 +0800"
      },
      "message": "mm: remove the second argument of k[un]map_atomic()\n\nSigned-off-by: Cong Wang \u003camwang@redhat.com\u003e\n"
    },
    {
      "commit": "191c542442fdf53cc3c496c00be13367fd9cd42d",
      "tree": "4aef9e33a1d99e6530b704243efbe373bb314d61",
      "parents": [
        "bbd36568594d091e682a1975ef4ee41d808de0bc"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@ftp.linux.org.uk",
        "time": "Mon Feb 13 03:58:52 2012 +0000"
      },
      "committer": {
        "name": "James Morris",
        "email": "jmorris@namei.org",
        "time": "Tue Feb 14 10:45:39 2012 +1100"
      },
      "message": "mm: collapse security_vm_enough_memory() variants into a single function\n\nCollapse security_vm_enough_memory() variants into a single function.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nSigned-off-by: James Morris \u003cjmorris@namei.org\u003e\n"
    },
    {
      "commit": "245132643e1cfcd145bbc86a716c1818371fcb93",
      "tree": "e5bf3cb56efedb059b1a68fd8efd37482131783b",
      "parents": [
        "85046579bde15e532983438f86b36856e358f417"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Fri Jan 20 14:34:21 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jan 23 08:38:48 2012 -0800"
      },
      "message": "SHM_UNLOCK: fix Unevictable pages stranded after swap\n\nCommit cc39c6a9bbde (\"mm: account skipped entries to avoid looping in\nfind_get_pages\") correctly fixed an infinite loop; but left a problem\nthat find_get_pages() on shmem would return 0 (appearing to callers to\nmean end of tree) when it meets a run of nr_pages swap entries.\n\nThe only uses of find_get_pages() on shmem are via pagevec_lookup(),\ncalled from invalidate_mapping_pages(), and from shmctl SHM_UNLOCK\u0027s\nscan_mapping_unevictable_pages().  The first is already commented, and\nnot worth worrying about; but the second can leave pages on the\nUnevictable list after an unusual sequence of swapping and locking.\n\nFix that by using shmem_find_get_pages_and_swap() (then ignoring the\nswap) instead of pagevec_lookup().\n\nBut I don\u0027t want to contaminate vmscan.c with shmem internals, nor\nshmem.c with LRU locking.  So move scan_mapping_unevictable_pages() into\nshmem.c, renaming it shmem_unlock_mapping(); and rename\ncheck_move_unevictable_page() to check_move_unevictable_pages(), looping\ndown an array of pages, oftentimes under the same lock.\n\nLeave out the \"rotate unevictable list\" block: that\u0027s a leftover from\nwhen this was used for /proc/sys/vm/scan_unevictable_pages, whose flawed\nhandling involved looking at pages at tail of LRU.\n\nWas there significance to the sequence first ClearPageUnevictable, then\ntest page_evictable, then SetPageUnevictable here? I think not, we\u0027re\nunder LRU lock, and have no barriers between those.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nReviewed-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nCc: Shaohua Li \u003cshaohua.li@intel.com\u003e\nCc: Eric Dumazet \u003ceric.dumazet@gmail.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Michel Lespinasse \u003cwalken@google.com\u003e\nCc: \u003cstable@vger.kernel.org\u003e [back to 3.1 but will need respins]\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "85046579bde15e532983438f86b36856e358f417",
      "tree": "9b80b31791e63520277617a5abe85692dc480cd0",
      "parents": [
        "cb78edfdcef5259ac9e9088bd63810d21299928d"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Fri Jan 20 14:34:19 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jan 23 08:38:48 2012 -0800"
      },
      "message": "SHM_UNLOCK: fix long unpreemptible section\n\nscan_mapping_unevictable_pages() is used to make SysV SHM_LOCKed pages\nevictable again once the shared memory is unlocked.  It does this with\npagevec_lookup()s across the whole object (which might occupy most of\nmemory), and takes 300ms to unlock 7GB here.  A cond_resched() every\nPAGEVEC_SIZE pages would be good.\n\nHowever, KOSAKI-san points out that this is called under shmem.c\u0027s\ninfo-\u003elock, and it\u0027s also under shm.c\u0027s shm_lock(), both spinlocks.\nThere is no strong reason for that: we need to take these pages off the\nunevictable list soonish, but those locks are not required for it.\n\nSo move the call to scan_mapping_unevictable_pages() from shmem.c\u0027s\nunlock handling up to shm.c\u0027s unlock handling.  Remove the recently\nadded barrier, not needed now we have spin_unlock() before the scan.\n\nUse get_file(), with subsequent fput(), to make sure we have a reference\nto mapping throughout scan_mapping_unevictable_pages(): that\u0027s something\nthat was previously guaranteed by the shm_lock().\n\nRemove shmctl\u0027s lru_add_drain_all(): we don\u0027t fault in pages at SHM_LOCK\ntime, and we lazily discover them to be Unevictable later, so it serves\nno purpose for SHM_LOCK; and serves no purpose for SHM_UNLOCK, since\npages still on pagevec are not marked Unevictable.\n\nThe original code avoided redundant rescans by checking VM_LOCKED flag\nat its level: now avoid them by checking shp\u0027s SHM_LOCKED.\n\nThe original code called scan_mapping_unevictable_pages() on a locked\narea at shm_destroy() time: perhaps we once had accounting cross-checks\nwhich required that, but not now, so skip the overhead and just let\ninode eviction deal with them.\n\nPut check_move_unevictable_page() and scan_mapping_unevictable_pages()\nunder CONFIG_SHMEM (with stub for the TINY case when ramfs is used),\nmore as comment than to save space; comment them used for SHM_UNLOCK.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nReviewed-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nCc: Shaohua Li \u003cshaohua.li@intel.com\u003e\nCc: Eric Dumazet \u003ceric.dumazet@gmail.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Michel Lespinasse \u003cwalken@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "34c80b1d93e6e20ca9dea0baf583a5b5510d92d4",
      "tree": "7dcbf0a4e09464247e6992c8f44fcc872867bd3a",
      "parents": [
        "a6322de67b58a00e3a783ad9c87c2a11b2d67b47"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Dec 08 21:32:45 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Jan 06 23:19:54 2012 -0500"
      },
      "message": "vfs: switch -\u003eshow_options() to struct dentry *\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "09208d150b5cda009b666238a7102cb45ecec2ee",
      "tree": "44118a53adfc8038baa27a29f2c6de481865f666",
      "parents": [
        "881764461165d69814194b6fe97d4352bbd0ae82"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jul 26 03:15:03 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:55:07 2012 -0500"
      },
      "message": "shmem, ramfs: propagate umode_t, open-coded S_ISREG\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "1a67aafb5f72a436ca044293309fa7e6351d6a35",
      "tree": "d9e58600148de9d41b478cf815773b746647d15b",
      "parents": [
        "4acdaf27ebe2034c342f3be57ef49aed1ad885ef"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jul 26 01:52:52 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:54:54 2012 -0500"
      },
      "message": "switch -\u003emknod() to umode_t\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "4acdaf27ebe2034c342f3be57ef49aed1ad885ef",
      "tree": "d89a876ee19cd88609a587f8aa6c464a52ee6d98",
      "parents": [
        "18bb1db3e7607e4a997d50991a6f9fa5b0f8722c"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jul 26 01:42:34 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:54:53 2012 -0500"
      },
      "message": "switch -\u003ecreate() to umode_t\n\nvfs_create() ignores everything outside of 16bit subset of its\nmode argument; switching it to umode_t is obviously equivalent\nand it\u0027s the only caller of the method\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "18bb1db3e7607e4a997d50991a6f9fa5b0f8722c",
      "tree": "4ee4e584bc9a67f3ec14ce159d2d7d4a27e68d4a",
      "parents": [
        "8208a22bb8bd3c52ef634b4ff194f14892ab1713"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jul 26 01:41:39 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:54:53 2012 -0500"
      },
      "message": "switch vfs_mkdir() and -\u003emkdir() to umode_t\n\nvfs_mkdir() gets int, but immediately drops everything that might not\nfit into umode_t and that\u0027s the only caller of -\u003emkdir()...\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "6b520e0565422966cdf1c3759bd73df77b0f248c",
      "tree": "f63a26afa7342eb59b125271b16e30a219b59094",
      "parents": [
        "2a79f17e4a641a2f463cb512cb0ec349844a147b"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Dec 12 15:51:45 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:52:40 2012 -0500"
      },
      "message": "vfs: fix the stupidity with i_dentry in inode destructors\n\nSeeing that just about every destructor got that INIT_LIST_HEAD() copied into\nit, there is no point whatsoever keeping this INIT_LIST_HEAD in inode_init_once();\nthe cost of taking it into inode_init_always() will be negligible for pipes\nand sockets and negative for everything else.  Not to mention the removal of\nboilerplate code from -\u003edestroy_inode() instances...\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "32aaeffbd4a7457bf2f7448b33b5946ff2a960eb",
      "tree": "faf7ad871d87176423ff9ed1d1ba4d9c688fc23f",
      "parents": [
        "208bca0860406d16398145ddd950036a737c3c9d",
        "67b84999b1a8b1af5625b1eabe92146c5eb42932"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sun Nov 06 19:44:47 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sun Nov 06 19:44:47 2011 -0800"
      },
      "message": "Merge branch \u0027modsplit-Oct31_2011\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/paulg/linux\n\n* \u0027modsplit-Oct31_2011\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/paulg/linux: (230 commits)\n  Revert \"tracing: Include module.h in define_trace.h\"\n  irq: don\u0027t put module.h into irq.h for tracking irqgen modules.\n  bluetooth: macroize two small inlines to avoid module.h\n  ip_vs.h: fix implicit use of module_get/module_put from module.h\n  nf_conntrack.h: fix up fallout from implicit moduleparam.h presence\n  include: replace linux/module.h with \"struct module\" wherever possible\n  include: convert various register fcns to macros to avoid include chaining\n  crypto.h: remove unused crypto_tfm_alg_modname() inline\n  uwb.h: fix implicit use of asm/page.h for PAGE_SIZE\n  pm_runtime.h: explicitly requires notifier.h\n  linux/dmaengine.h: fix implicit use of bitmap.h and asm/page.h\n  miscdevice.h: fix up implicit use of lists and types\n  stop_machine.h: fix implicit use of smp.h for smp_processor_id\n  of: fix implicit use of errno.h in include/linux/of.h\n  of_platform.h: delete needless include \u003clinux/module.h\u003e\n  acpi: remove module.h include from platform/aclinux.h\n  miscdevice.h: delete unnecessary inclusion of module.h\n  device_cgroup.h: delete needless include \u003clinux/module.h\u003e\n  net: sch_generic remove redundant use of \u003clinux/module.h\u003e\n  net: inet_timewait_sock doesnt need \u003clinux/module.h\u003e\n  ...\n\nFix up trivial conflicts (other header files, and  removal of the ab3550 mfd driver) in\n - drivers/media/dvb/frontends/dibx000_common.c\n - drivers/media/video/{mt9m111.c,ov6650.c}\n - drivers/mfd/ab3550-core.c\n - include/linux/dmaengine.h\n"
    },
    {
      "commit": "6d6b77f163c7eabedbba00ed2abb7d4a570bff76",
      "tree": "6ce074a7dd5a25fae28ef9de6f59ddee08ea4e61",
      "parents": [
        "dd2a981f46a0903a8770a784f213d4d40bbb6f19"
      ],
      "author": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Fri Oct 28 14:13:28 2011 +0200"
      },
      "committer": {
        "name": "Christoph Hellwig",
        "email": "hch@serles.lst.de",
        "time": "Wed Nov 02 12:53:43 2011 +0100"
      },
      "message": "filesystems: add missing nlink wrappers\n\nReplace direct i_nlink updates with the respective updater function\n(inc_nlink, drop_nlink, clear_nlink, inode_dec_link_count).\n\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\n"
    },
    {
      "commit": "21ee9f398be209ccbb62929d35961ca1ed48eec3",
      "tree": "4127e14f4a07a2cb7bc6eb902e9c7b0baab8e84f",
      "parents": [
        "2f1da6421570d064a94e17190a4955c2df99794d"
      ],
      "author": {
        "name": "Minchan Kim",
        "email": "minchan.kim@gmail.com",
        "time": "Mon Oct 31 17:09:28 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Oct 31 17:30:50 2011 -0700"
      },
      "message": "vmscan: add barrier to prevent evictable page in unevictable list\n\nWhen a race between putback_lru_page() and shmem_lock with lock\u003d0 happens,\nprogrom execution order is as follows, but clear_bit in processor #1 could\nbe reordered right before spin_unlock of processor #1.  Then, the page\nwould be stranded on the unevictable list.\n\nspin_lock\nSetPageLRU\nspin_unlock\n                                clear_bit(AS_UNEVICTABLE)\n                                spin_lock\n                                if PageLRU()\n                                        if !test_bit(AS_UNEVICTABLE)\n                                        \tmove evictable list\nsmp_mb\nif !test_bit(AS_UNEVICTABLE)\n        move evictable list\n                                spin_unlock\n\nBut, pagevec_lookup() in scan_mapping_unevictable_pages() has\nrcu_read_[un]lock() so it could protect reordering before reaching\ntest_bit(AS_UNEVICTABLE) on processor #1 so this problem never happens.\nBut it\u0027s a unexpected side effect and we should solve this problem\nproperly.\n\nThis patch adds a barrier after mapping_clear_unevictable.\n\nI didn\u0027t meet this problem but just found during review.\n\nSigned-off-by: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nAcked-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nCc: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nAcked-by: Johannes Weiner \u003cjweiner@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "b95f1b31b75588306e32b2afd32166cad48f670b",
      "tree": "b5496144e41b117cfe5ae70b145b5351709ec4d0",
      "parents": [
        "b9e15bafdf1aa20791cdefdcbf1ccf7d7aa03aaa"
      ],
      "author": {
        "name": "Paul Gortmaker",
        "email": "paul.gortmaker@windriver.com",
        "time": "Sun Oct 16 02:01:52 2011 -0400"
      },
      "committer": {
        "name": "Paul Gortmaker",
        "email": "paul.gortmaker@windriver.com",
        "time": "Mon Oct 31 09:20:12 2011 -0400"
      },
      "message": "mm: Map most files to use export.h instead of module.h\n\nThe files changed within are only using the EXPORT_SYMBOL\nmacro variants.  They are not using core modular infrastructure\nand hence don\u0027t need module.h but only the export.h header.\n\nSigned-off-by: Paul Gortmaker \u003cpaul.gortmaker@windriver.com\u003e\n"
    },
    {
      "commit": "5a2f3a02aea164f4f59c0c3497772090a411b462",
      "tree": "d3ebe03d4f97575290087843960baa01de3acd0a",
      "parents": [
        "1d568ab068c021672d6cd7f50f92a3695a921ffb",
        "817b54aa45db03437c6d09a7693fc6926eb8e822"
      ],
      "author": {
        "name": "James Morris",
        "email": "jmorris@namei.org",
        "time": "Tue Aug 09 10:31:03 2011 +1000"
      },
      "committer": {
        "name": "James Morris",
        "email": "jmorris@namei.org",
        "time": "Tue Aug 09 10:31:03 2011 +1000"
      },
      "message": "Merge branch \u0027next-evm\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/zohar/ima-2.6 into next\n\nConflicts:\n\tfs/attr.c\n\nResolve conflict manually.\n\nSigned-off-by: James Morris \u003cjmorris@namei.org\u003e\n"
    },
    {
      "commit": "8079b1c859c44f27d63da4951f5038a16589a563",
      "tree": "677e77a4c9d3b9c33427196cb5f860ebcf530b15",
      "parents": [
        "e504f3fdd63d486d45b18009e5a65f2e329acb0a"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Wed Aug 03 16:21:28 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Aug 03 14:25:24 2011 -1000"
      },
      "message": "mm: clarify the radix_tree exceptional cases\n\nMake the radix_tree exceptional cases, mostly in filemap.c, clearer.\n\nIt\u0027s hard to devise a suitable snappy name that illuminates the use by\nshmem/tmpfs for swap, while keeping filemap/pagecache/radix_tree\ngenerality.  And akpm points out that /* radix_tree_deref_retry(page) */\ncomments look like calls that have been commented out for unknown\nreason.\n\nSkirt the naming difficulty by rearranging these blocks to handle the\ntransient radix_tree_deref_retry(page) case first; then just explain the\nremaining shmem/tmpfs swap case in a comment.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "e504f3fdd63d486d45b18009e5a65f2e329acb0a",
      "tree": "2d02a5c29a922fae626a69cd0fc92cae37d7918e",
      "parents": [
        "31475dd611209413bace21651a400afb91d0bd9d"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Wed Aug 03 16:21:27 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Aug 03 14:25:24 2011 -1000"
      },
      "message": "tmpfs radix_tree: locate_item to speed up swapoff\n\nWe have already acknowledged that swapoff of a tmpfs file is slower than\nit was before conversion to the generic radix_tree: a little slower\nthere will be acceptable, if the hotter paths are faster.\n\nBut it was a shock to find swapoff of a 500MB file 20 times slower on my\nlaptop, taking 10 minutes; and at that rate it significantly slows down\nmy testing.\n\nNow, most of that turned out to be overhead from PROVE_LOCKING and\nPROVE_RCU: without those it was only 4 times slower than before; and\nmore realistic tests on other machines don\u0027t fare as badly.\n\nI\u0027ve tried a number of things to improve it, including tagging the swap\nentries, then doing lookup by tag: I\u0027d expected that to halve the time,\nbut in practice it\u0027s erratic, and often counter-productive.\n\nThe only change I\u0027ve so far found to make a consistent improvement, is\nto short-circuit the way we go back and forth, gang lookup packing\nentries into the array supplied, then shmem scanning that array for the\ntarget entry.  Scanning in place doubles the speed, so it\u0027s now only\ntwice as slow as before (or three times slower when the PROVEs are on).\n\nSo, add radix_tree_locate_item() as an expedient, once-off,\nsingle-caller hack to do the lookup directly in place.  #ifdef it on\nCONFIG_SHMEM and CONFIG_SWAP, as much to document its limited\napplicability as save space in other configurations.  And, sadly,\n#include sched.h for cond_resched().\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "69f07ec938712b58755add82dd3d0b35f01317cc",
      "tree": "7a0a704ed4bc79dbba50454093469d0ce31ef1a4",
      "parents": [
        "6922c0c7abd387374255801f7739624867e8acad"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Wed Aug 03 16:21:26 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Aug 03 14:25:24 2011 -1000"
      },
      "message": "tmpfs: use kmemdup for short symlinks\n\nBut we\u0027ve not yet removed the old swp_entry_t i_direct[16] from\nshmem_inode_info.  That\u0027s because it was still being shared with the\ninline symlink.  Remove it now (saving 64 or 128 bytes from shmem inode\nsize), and use kmemdup() for short symlinks, say, those up to 128 bytes.\n\nI wonder why mpol_free_shared_policy() is done in shmem_destroy_inode()\nrather than shmem_evict_inode(), where we usually do such freeing? I\nguess it doesn\u0027t matter, and I\u0027m not into NUMA mpol testing right now.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nAcked-by: Rik van Riel \u003criel@redhat.com\u003e\nReviewed-by: Pekka Enberg \u003cpenberg@kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "6922c0c7abd387374255801f7739624867e8acad",
      "tree": "851ec456dbca49ee78c302fd62839e9889a75290",
      "parents": [
        "aa3b189551ad8e5cc1d9c663735c131650238278"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Wed Aug 03 16:21:25 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Aug 03 14:25:24 2011 -1000"
      },
      "message": "tmpfs: convert shmem_writepage and enable swap\n\nConvert shmem_writepage() to use shmem_delete_from_page_cache() to use\nshmem_radix_tree_replace() to substitute swap entry for page pointer\natomically in the radix tree.\n\nAs with shmem_add_to_page_cache(), it\u0027s not entirely satisfactory to be\ncopying such code from delete_from_swap_cache, but again judged easier\nto sell than making its other callers go through the extras.\n\nRemove the toy implementation\u0027s shmem_put_swap() and shmem_get_swap(),\nnow unreferenced, and the hack to disable swap: it\u0027s now good to go.\n\nThe way things have worked out, info-\u003elock no longer helps to guard the\nshmem_swaplist: we increment swapped under shmem_swaplist_mutex only.\nThat global mutex exclusion between shmem_writepage() and shmem_unuse()\nis not pretty, and we ought to find another way; but it\u0027s been forced on\nus by recent race discoveries, not a consequence of this patchset.\n\nAnd what has become of the WARN_ON_ONCE(1) free_swap_and_cache() if a\nswap entry was found already present? That\u0027s no longer possible, the\n(unknown) one inserting this page into filecache would hit the swap\nentry occupying that slot.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nAcked-by: Rik van Riel \u003criel@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "aa3b189551ad8e5cc1d9c663735c131650238278",
      "tree": "c789ab5c7f890a6065811d8bba15a784caf9e859",
      "parents": [
        "54af60421822bb9cb664dd5cd7aac46c01ccfcf8"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Wed Aug 03 16:21:24 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Aug 03 14:25:24 2011 -1000"
      },
      "message": "tmpfs: convert mem_cgroup shmem to radix-swap\n\nRemove mem_cgroup_shmem_charge_fallback(): it was only required when we\nhad to move swappage to filecache with GFP_NOWAIT.\n\nRemove the GFP_NOWAIT special case from mem_cgroup_cache_charge(), by\nmoving its call out from shmem_add_to_page_cache() to two of thats three\ncallers.  But leave it doing mem_cgroup_uncharge_cache_page() on error:\nalthough asymmetrical, it\u0027s easier for all 3 callers to handle.\n\nThese two changes would also be appropriate if anyone were to start\nusing shmem_read_mapping_page_gfp() with GFP_NOWAIT.\n\nRemove mem_cgroup_get_shmem_target(): mc_handle_file_pte() can test\nradix_tree_exceptional_entry() to get what it needs for itself.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nAcked-by: Rik van Riel \u003criel@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "54af60421822bb9cb664dd5cd7aac46c01ccfcf8",
      "tree": "b62d2b9ccc2b467ee5406bb0d3494db6a5f96582",
      "parents": [
        "46f65ec15c6878a2b4a49f6e01b20b201b46a9e4"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Wed Aug 03 16:21:24 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Aug 03 14:25:23 2011 -1000"
      },
      "message": "tmpfs: convert shmem_getpage_gfp to radix-swap\n\nConvert shmem_getpage_gfp(), the engine-room of shmem, to expect page or\nswap entry returned from radix tree by find_lock_page().\n\nWhereas the repetitive old method proceeded mainly under info-\u003elock,\ndropping and repeating whenever one of the conditions needed was not\nmet, now we can proceed without it, leaving shmem_add_to_page_cache() to\ncheck for a race.\n\nThis way there is no need to preallocate a page, no need for an early\nradix_tree_preload(), no need for mem_cgroup_shmem_charge_fallback().\n\nMove the error unwinding down to the bottom instead of repeating it\nthroughout.  ENOSPC handling is a little different from before: there is\nno longer any race between find_lock_page() and finding swap, but we can\narrive at ENOSPC before calling shmem_recalc_inode(), which might\noccasionally discover freed space.\n\nBe stricter to check i_size before returning.  info-\u003elock is used for\nlittle but alloced, swapped, i_blocks updates.  Move i_blocks updates\nout from under the max_blocks check, so even an unlimited size\u003d0 mount\ncan show accurate du.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nAcked-by: Rik van Riel \u003criel@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "46f65ec15c6878a2b4a49f6e01b20b201b46a9e4",
      "tree": "3b72804ee87b4a5c7ec86b5059e20ddea82d3c2c",
      "parents": [
        "7a5d0fbb29936fad7f17b1cb001b0c33a5f13328"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Wed Aug 03 16:21:23 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Aug 03 14:25:23 2011 -1000"
      },
      "message": "tmpfs: convert shmem_unuse_inode to radix-swap\n\nConvert shmem_unuse_inode() to use a lockless gang lookup of the radix\ntree, searching for matching swap.\n\nThis is somewhat slower than the old method: because of repeated radix\ntree descents, because of copying entries up, but probably most because\nthe old method noted and skipped once a vector page was cleared of swap.\nPerhaps we can devise a use of radix tree tagging to achieve that later.\n\nshmem_add_to_page_cache() uses shmem_radix_tree_replace() to compensate\nfor the lockless lookup by checking that the expected entry is in place,\nunder lock.  It is not very satisfactory to be copying this much from\nadd_to_page_cache_locked(), but I think easier to sell than insisting\nthat every caller of add_to_page_cache*() go through the extras.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nAcked-by: Rik van Riel \u003criel@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "7a5d0fbb29936fad7f17b1cb001b0c33a5f13328",
      "tree": "903c66ee195451f45c782155a8eb6dd6e7217522",
      "parents": [
        "bda97eab0cc9c6385b9f26abdda6459f630f4513"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Wed Aug 03 16:21:22 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Aug 03 14:25:23 2011 -1000"
      },
      "message": "tmpfs: convert shmem_truncate_range to radix-swap\n\nDisable the toy swapping implementation in shmem_writepage() - it\u0027s hard\nto support two schemes at once - and convert shmem_truncate_range() to a\nlockless gang lookup of swap entries along with pages, freeing both.\n\nSince the second loop tightens its noose until all entries of either\nkind have been squeezed out (and we shall make sure that there\u0027s not an\ninstant when neither is visible), there is no longer a need for yet\nanother pass below.\n\nshmem_radix_tree_replace() compensates for the lockless lookup by\nchecking that the expected entry is in place, under lock, before\nreplacing it.  Here it just deletes, but will be used in later patches\nto substitute swap entry for page or page for swap entry.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nAcked-by: Rik van Riel \u003criel@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "bda97eab0cc9c6385b9f26abdda6459f630f4513",
      "tree": "bfa418b90c5889a1cd33836fd8f0a2f0232e3dac",
      "parents": [
        "41ffe5d5ceef7f7ff2ff18e320d88ca6d629efaf"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Wed Aug 03 16:21:21 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Aug 03 14:25:23 2011 -1000"
      },
      "message": "tmpfs: copy truncate_inode_pages_range\n\nBring truncate.c\u0027s code for truncate_inode_pages_range() inline into\nshmem_truncate_range(), replacing its first call (there\u0027s a followup\ncall below, but leave that one, it will disappear next).\n\nDon\u0027t play with it yet, apart from leaving out the cleancache flush, and\n(importantly) the nrpages \u003d\u003d 0 skip, and moving shmem_setattr()\u0027s\npartial page preparation into its partial page handling.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nAcked-by: Rik van Riel \u003criel@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "41ffe5d5ceef7f7ff2ff18e320d88ca6d629efaf",
      "tree": "66ce800fb7911ed037aa574f46729646ce485d0b",
      "parents": [
        "285b2c4fdd69ea73b4762785d8c6be83b6c074a6"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Wed Aug 03 16:21:21 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Aug 03 14:25:23 2011 -1000"
      },
      "message": "tmpfs: miscellaneous trivial cleanups\n\nWhile it\u0027s at its least, make a number of boring nitpicky cleanups to\nshmem.c, mostly for consistency of variable naming.  Things like \"swap\"\ninstead of \"entry\", \"pgoff_t index\" instead of \"unsigned long idx\".\n\nAnd since everything else here is prefixed \"shmem_\", better change\ninit_tmpfs() to shmem_init().\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nAcked-by: Rik van Riel \u003criel@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "285b2c4fdd69ea73b4762785d8c6be83b6c074a6",
      "tree": "b350a54d8bca3e87ca47d2ad14bb71a53c9bb593",
      "parents": [
        "a2c16d6cb0e478812829ca84aeabd02e36af35eb"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Wed Aug 03 16:21:20 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Aug 03 14:25:23 2011 -1000"
      },
      "message": "tmpfs: demolish old swap vector support\n\nThe maximum size of a shmem/tmpfs file has been limited by the maximum\nsize of its triple-indirect swap vector.  With 4kB page size, maximum\nfilesize was just over 2TB on a 32-bit kernel, but sadly one eighth of\nthat on a 64-bit kernel.  (With 8kB page size, maximum filesize was just\nover 4TB on a 64-bit kernel, but 16TB on a 32-bit kernel,\nMAX_LFS_FILESIZE being then more restrictive than swap vector layout.)\n\nIt\u0027s a shame that tmpfs should be more restrictive than ramfs, and this\nlimitation has now been noticed.  Add another level to the swap vector?\nNo, it became obscure and hard to maintain, once I complicated it to\nmake use of highmem pages nine years ago: better choose another way.\n\nSurely, if 2.4 had had the radix tree pagecache introduced in 2.5, then\ntmpfs would never have invented its own peculiar radix tree: we would\nhave fitted swap entries into the common radix tree instead, in much the\nsame way as we fit swap entries into page tables.\n\nAnd why should each file have a separate radix tree for its pages and\nfor its swap entries? The swap entries are required precisely where and\nwhen the pages are not.  We want to put them together in a single radix\ntree: which can then avoid much of the locking which was needed to\nprevent them from being exchanged underneath us.\n\nThis also avoids the waste of memory devoted to swap vectors, first in\nthe shmem_inode itself, then at least two more pages once a file grew\nbeyond 16 data pages (pages accounted by df and du, but not by memcg).\nAllocated upfront, to avoid allocation when under swapping pressure, but\npure waste when CONFIG_SWAP is not set - I have never spattered around\nthe ifdefs to prevent that, preferring this move to sharing the common\nradix tree instead.\n\nThere are three downsides to sharing the radix tree.  One, that it binds\ntmpfs more tightly to the rest of mm, either requiring knowledge of swap\nentries in radix tree there, or duplication of its code here in shmem.c.\nI believe that the simplications and memory savings (and probable higher\nperformance, not yet measured) justify that.\n\nTwo, that on HIGHMEM systems with SWAP enabled, it\u0027s the lowmem radix\nnodes that cannot be freed under memory pressure - whereas before it was\nthe less precious highmem swap vector pages that could not be freed.\nI\u0027m hoping that 64-bit has now been accessible for long enough, that the\nhighmem argument has grown much less persuasive.\n\nThree, that swapoff is slower than it used to be on tmpfs files, since\nit\u0027s using a simple generic mechanism not tailored to it: I find this\nnoticeable, and shall want to improve, but maybe nobody else will\nnotice.\n\nSo...  now remove most of the old swap vector code from shmem.c.  But,\nfor the moment, keep the simple i_direct vector of 16 pages, with simple\naccessors shmem_put_swap() and shmem_get_swap(), as a toy implementation\nto help mark where swap needs to be handled in subsequent patches.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nAcked-by: Rik van Riel \u003criel@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "45b583b10a8b438b970e95a7d1d4db22c9e35004",
      "tree": "14fa481598289df0459580c582b48a9d95db51f6",
      "parents": [
        "154dd78d30b56ffb8b447f629bfcceb14150e5c4",
        "f19da2ce8ef5e49b8b8ea199c3601dd45d71b262"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jul 25 21:00:19 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jul 25 21:00:19 2011 -0700"
      },
      "message": "Merge \u0027akpm\u0027 patch series\n\n* Merge akpm patch series: (122 commits)\n  drivers/connector/cn_proc.c: remove unused local\n  Documentation/SubmitChecklist: add RCU debug config options\n  reiserfs: use hweight_long()\n  reiserfs: use proper little-endian bitops\n  pnpacpi: register disabled resources\n  drivers/rtc/rtc-tegra.c: properly initialize spinlock\n  drivers/rtc/rtc-twl.c: check return value of twl_rtc_write_u8() in twl_rtc_set_time()\n  drivers/rtc: add support for Qualcomm PMIC8xxx RTC\n  drivers/rtc/rtc-s3c.c: support clock gating\n  drivers/rtc/rtc-mpc5121.c: add support for RTC on MPC5200\n  init: skip calibration delay if previously done\n  misc/eeprom: add eeprom access driver for digsy_mtc board\n  misc/eeprom: add driver for microwire 93xx46 EEPROMs\n  checkpatch.pl: update $logFunctions\n  checkpatch: make utf-8 test --strict\n  checkpatch.pl: add ability to ignore various messages\n  checkpatch: add a \"prefer __aligned\" check\n  checkpatch: validate signature styles and To: and Cc: lines\n  checkpatch: add __rcu as a sparse modifier\n  checkpatch: suggest using min_t or max_t\n  ...\n\nDid this as a merge because of (trivial) conflicts in\n - Documentation/feature-removal-schedule.txt\n - arch/xtensa/include/asm/uaccess.h\nthat were just easier to fix up in the merge than in the patch series.\n"
    },
    {
      "commit": "48f170fb7d7db8789ccc23e051af61f62af5f685",
      "tree": "d4dcb91583b7b831a20deed6979be713ad2892b7",
      "parents": [
        "27ab700626f048407e9466d389a43c7d3aa45967"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Mon Jul 25 17:12:37 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jul 25 20:57:11 2011 -0700"
      },
      "message": "tmpfs: simplify unuse and writepage\n\nshmem_unuse_inode() and shmem_writepage() contain a little code to cope\nwith pages inserted independently into the filecache, probably by a\nfilesystem stacked on top of tmpfs, then fed to its -\u003ereadpage() or\n-\u003ewritepage().\n\nUnionfs was indeed experimenting with working in that way three years ago,\nbut I find no current examples: nowadays the stacking filesystems use vfs\ninterfaces to the lower filesystem.\n\nIt\u0027s now illegal: remove most of that code, adding some WARN_ON_ONCEs.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nCc: Erez Zadok \u003cezk@fsl.cs.sunysb.edu\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "27ab700626f048407e9466d389a43c7d3aa45967",
      "tree": "a8d371d8a3727110310cba457840be0f2cfb77c6",
      "parents": [
        "e83c32e8f92724a06a22a3b42f3afc07db93e131"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Mon Jul 25 17:12:36 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jul 25 20:57:11 2011 -0700"
      },
      "message": "tmpfs: simplify filepage/swappage\n\nWe can now simplify shmem_getpage_gfp(): there is no longer a dilemma of\nfilepage passed in via shmem_readpage(), then swappage found, which must\nthen be copied over to it.\n\nAlthough at first it\u0027s tempting to replace the **pagep arg by returning\nstruct page *, that makes a mess of IS_ERR_OR_NULL(page)s in all the\ncallers, so leave as is.\n\nInsert BUG_ON(!PageUptodate) when we find and lock page: some of the\ncomplication came from uninitialized pages inserted into filecache prior\nto readpage; but now we\u0027re in control, and only release pagelock on\nfilecache once it\u0027s uptodate (if an error occurs in reading back from\nswap, the page remains in swapcache, never moved to filecache).\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "e83c32e8f92724a06a22a3b42f3afc07db93e131",
      "tree": "eeefe97f26e7b4faf672eba777a12749bfdad024",
      "parents": [
        "9276aad6c898dbcc31d095f2934dedd5cbb2e93e"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Mon Jul 25 17:12:35 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jul 25 20:57:11 2011 -0700"
      },
      "message": "tmpfs: simplify prealloc_page\n\nThe prealloc_page handling in shmem_getpage_gfp() is unnecessarily\ncomplicated: first simplify that before going on to filepage/swappage.\n\nThat\u0027s right, don\u0027t report ENOMEM when the preallocation fails: we may or\nmay not need the page.  But simply report ENOMEM once we find we do need\nit, instead of dropping lock, repeating allocation, unwinding on failure\netc.  And leave the out label on the fast path, don\u0027t goto.\n\nFix something that looks like a bug but turns out not to be: set\nPageSwapBacked on prealloc_page before its mem_cgroup_cache_charge(), as\nthe removed case was doing.  That\u0027s important before adding to LRU\n(determines which LRU the page goes on), and does affect which path it\ntakes through memcontrol.c, but in the end MEM_CGROUP_CHANGE_TYPE_ SHMEM\nis handled no differently from CACHE.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nAcked-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nCc: \"Zhang, Yanmin\" \u003cyanmin.zhang@intel.com\u003e\nCc: Tim Chen \u003ctim.c.chen@linux.intel.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "9276aad6c898dbcc31d095f2934dedd5cbb2e93e",
      "tree": "7ba68f82aa8b747e11d9cfb79c4fe06188b7b2c7",
      "parents": [
        "68da9f055755ee2609a1686722e6d6a7980019ee"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Mon Jul 25 17:12:34 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jul 25 20:57:11 2011 -0700"
      },
      "message": "tmpfs: remove_shmem_readpage\n\nRemove that pernicious shmem_readpage() at last: the things we needed it\nfor (splice, loop, sendfile, i915 GEM) are now fully taken care of by\nshmem_file_splice_read() and shmem_read_mapping_page_gfp().\n\nThis removal clears the way for a simpler shmem_getpage_gfp(), since page\nis never passed in; but leave most of that cleanup until after.\n\nsys_readahead() and sys_fadvise(POSIX_FADV_WILLNEED) will now EINVAL,\ninstead of unexpectedly trying to read ahead on tmpfs: if that proves to\nbe an issue for someone, then we can either arrange for them to return\nsuccess instead, or try to implement async readahead on tmpfs.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "68da9f055755ee2609a1686722e6d6a7980019ee",
      "tree": "9f2810f28a7852b0ed3390f7fa0d29979a2997c2",
      "parents": [
        "71f0e07a605fad1fb6b288e4dc1dd8dfa78f4872"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Mon Jul 25 17:12:34 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jul 25 20:57:11 2011 -0700"
      },
      "message": "tmpfs: pass gfp to shmem_getpage_gfp\n\nMake shmem_getpage() a wrapper, passing mapping_gfp_mask() down to\nshmem_getpage_gfp(), which in turn passes gfp down to shmem_swp_alloc().\n\nChange shmem_read_mapping_page_gfp() to use shmem_getpage_gfp() in the\nCONFIG_SHMEM case; but leave tiny !SHMEM using read_cache_page_gfp().\n\nAdd a BUG_ON() in case anyone happens to call this on a non-shmem mapping;\nthough we might later want to let that case route to read_cache_page_gfp().\n\nIt annoys me to have these two almost-redundant args, gfp and fault_type:\nI can\u0027t find a better way; but initialize fault_type only in shmem_fault().\n\nNote that before, read_cache_page_gfp() was allocating i915_gem\u0027s pages\nwith __GFP_NORETRY as intended; but the corresponding swap vector pages\ngot allocated without it, leaving a small possibility of OOM.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "71f0e07a605fad1fb6b288e4dc1dd8dfa78f4872",
      "tree": "1eac7c25f32ac88bba52a31179989e62773aa079",
      "parents": [
        "708e3508c2a2204cc276dcdb543009a441bfe91b"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Mon Jul 25 17:12:33 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jul 25 20:57:11 2011 -0700"
      },
      "message": "tmpfs: refine shmem_file_splice_read\n\nTidy up shmem_file_splice_read():\n\nRemove readahead: okay, we could implement shmem readahead on swap,\nbut have never done so before, swap being the slow exceptional path.\n\nUse shmem_getpage() instead of find_or_create_page() plus -\u003ereadpage().\n\nRemove several comments: sorry, I found them more distracting than\nhelpful, and this will not be the reference version of splice_read().\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "708e3508c2a2204cc276dcdb543009a441bfe91b",
      "tree": "9e301ba4ebf3b34a00228c26977feebfba8ad9ef",
      "parents": [
        "2efaca927f5cd7ecd0f1554b8f9b6a9a2c329c03"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Mon Jul 25 17:12:32 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jul 25 20:57:11 2011 -0700"
      },
      "message": "tmpfs: clone shmem_file_splice_read()\n\nCopy __generic_file_splice_read() and generic_file_splice_read() from\nfs/splice.c to shmem_file_splice_read() in mm/shmem.c.  Make\npage_cache_pipe_buf_ops and spd_release_page() accessible to it.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nCc: Jens Axboe \u003cjaxboe@fusionio.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "d515afe88a32e567c550e3db914f3e378f86453a",
      "tree": "0129002decdd5c1f8bcb521aacdba73e0d1699c3",
      "parents": [
        "d0823576bf4b8eafce1b56f98613465a0352a376"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Mon Jul 25 17:12:26 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jul 25 20:57:10 2011 -0700"
      },
      "message": "tmpfs: no need to use i_lock\n\n2.6.36\u0027s 7e496299d4d2 (\"tmpfs: make tmpfs scalable with percpu_counter for\nused blocks\") to make tmpfs scalable with percpu_counter used\ninode-\u003ei_lock in place of sbinfo-\u003estat_lock around i_blocks updates; but\nthat was adverse to scalability, and unnecessary, since info-\u003elock is\nalready held there in the fast paths.\n\nRemove those uses of i_lock, and add info-\u003elock in the three error paths\nwhere it\u0027s then needed across shmem_free_blocks().  It\u0027s not actually\nneeded across shmem_unacct_blocks(), but they\u0027re so often paired that it\nlooks wrong to split them apart.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nAcked-by: Tim Chen \u003ctim.c.chen@linux.intel.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "4e34e719e457f2e031297175410fc0bd4016a085",
      "tree": "ab969a371e0d2efc6bfbf503ca6cdfce3af3bf6c",
      "parents": [
        "edde854e8bb34a7f32fa993d721f1da0faf64165"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Sat Jul 23 17:37:31 2011 +0200"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Jul 25 14:30:23 2011 -0400"
      },
      "message": "fs: take the ACL checks to common code\n\nReplace the -\u003echeck_acl method with a -\u003eget_acl method that simply reads an\nACL from disk after having a cache miss.  This means we can replace the ACL\nchecking boilerplate code with a single implementation in namei.c.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "9d8f13ba3f4833219e50767b022b82cd0da930eb",
      "tree": "3ba2367380d009111ea17696162a62320c88d144",
      "parents": [
        "0f2a55d5bb2372058275b0b343d90dd5d640d045"
      ],
      "author": {
        "name": "Mimi Zohar",
        "email": "zohar@linux.vnet.ibm.com",
        "time": "Mon Jun 06 15:29:25 2011 -0400"
      },
      "committer": {
        "name": "Mimi Zohar",
        "email": "zohar@linux.vnet.ibm.com",
        "time": "Mon Jul 18 12:29:38 2011 -0400"
      },
      "message": "security: new security_inode_init_security API adds function callback\n\nThis patch changes the security_inode_init_security API by adding a\nfilesystem specific callback to write security extended attributes.\nThis change is in preparation for supporting the initialization of\nmultiple LSM xattrs and the EVM xattr.  Initially the callback function\nwalks an array of xattrs, writing each xattr separately, but could be\noptimized to write multiple xattrs at once.\n\nFor existing security_inode_init_security() calls, which have not yet\nbeen converted to use the new callback function, such as those in\nreiserfs and ocfs2, this patch defines security_old_inode_init_security().\n\nSigned-off-by: Mimi Zohar \u003czohar@us.ibm.com\u003e\n"
    },
    {
      "commit": "d9d90e5eb70e09903dadff42099b6c948f814050",
      "tree": "c3ab73df6dee61f9403bfd819a6b0cb9f3ca6085",
      "parents": [
        "94c1e62df4494b79782cb9c7279f827212d1de70"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Mon Jun 27 16:18:04 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jun 27 18:00:12 2011 -0700"
      },
      "message": "tmpfs: add shmem_read_mapping_page_gfp\n\nAlthough it is used (by i915) on nothing but tmpfs, read_cache_page_gfp()\nis unsuited to tmpfs, because it inserts a page into pagecache before\ncalling the filesystem\u0027s -\u003ereadpage: tmpfs may have pages in swapcache\nwhich only it knows how to locate and switch to filecache.\n\nAt present tmpfs provides a -\u003ereadpage method, and copes with this by\ncopying pages; but soon we can simplify it by removing its -\u003ereadpage.\nProvide shmem_read_mapping_page_gfp() now, ready for that transition,\n\nExport shmem_read_mapping_page_gfp() and add it to list in shmem_fs.h,\nwith shmem_read_mapping_page() inline for the common mapping_gfp case.\n\n(shmem_read_mapping_page_gfp or shmem_read_cache_page_gfp? Generally the\nread_mapping_page functions use the mapping\u0027s -\u003ereadpage, and the\nread_cache_page functions use the supplied filler, so I think\nread_cache_page_gfp was slightly misnamed.)\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "94c1e62df4494b79782cb9c7279f827212d1de70",
      "tree": "43013fb403e592c535e6a7770be105b635ac9b63",
      "parents": [
        "072441e21ddcd1140606b7d4ef6eab579a86b0b3"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Mon Jun 27 16:18:03 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jun 27 18:00:12 2011 -0700"
      },
      "message": "tmpfs: take control of its truncate_range\n\n2.6.35\u0027s new truncate convention gave tmpfs the opportunity to control\nits file truncation, no longer enforced from outside by vmtruncate().\nWe shall want to build upon that, to handle pagecache and swap together.\n\nSlightly redefine the -\u003etruncate_range interface: let it now be called\nbetween the unmap_mapping_range()s, with the filesystem responsible for\ndoing the truncate_inode_pages_range() from it - just as the filesystem\nis nowadays responsible for doing that from its -\u003esetattr.\n\nLet\u0027s rename shmem_notify_change() to shmem_setattr().  Instead of\ncalling the generic truncate_setsize(), bring that code in so we can\ncall shmem_truncate_range() - which will later be updated to perform its\nown variant of truncate_inode_pages_range().\n\nRemove the punch_hole unmap_mapping_range() from shmem_truncate_range():\nnow that the COW\u0027s unmap_mapping_range() comes after -\u003etruncate_range,\nthere is no need to call it a third time.\n\nExport shmem_truncate_range() and add it to the list in shmem_fs.h, so\nthat i915_gem_object_truncate() can call it explicitly in future; get\nthis patch in first, then update drm/i915 once this is available (until\nthen, i915 will just be doing the truncate_inode_pages() twice).\n\nThough introduced five years ago, no other filesystem is implementing\n-\u003etruncate_range, and its only other user is madvise(,,MADV_REMOVE): we\nexpect to convert it to fallocate(,FALLOC_FL_PUNCH_HOLE,,) shortly,\nwhereupon -\u003etruncate_range can be removed from inode_operations -\nshmem_truncate_range() will help i915 across that transition too.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "826267cf1e6c6899eda1325a19f1b1d15c558b20",
      "tree": "f022fabd26f035888c4fec972ff54163378b8962",
      "parents": [
        "36947a76826111e661a26cb0f668a5be6cc3ddb4"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Sat May 28 13:14:09 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat May 28 16:09:26 2011 -0700"
      },
      "message": "tmpfs: fix race between truncate and writepage\n\nWhile running fsx on tmpfs with a memhog then swapoff, swapoff was hanging\n(interruptibly), repeatedly failing to locate the owner of a 0xff entry in\nthe swap_map.\n\nAlthough shmem_writepage() does abandon when it sees incoming page index\nis beyond eof, there was still a window in which shmem_truncate_range()\ncould come in between writepage\u0027s dropping lock and updating swap_map,\nfind the half-completed swap_map entry, and in trying to free it,\nleave it in a state that swap_shmem_alloc() could not correct.\n\nArguably a bug in __swap_duplicate()\u0027s and swap_entry_free()\u0027s handling\nof the different cases, but easiest to fix by moving swap_shmem_alloc()\nunder cover of the lock.\n\nMore interesting than the bug: it\u0027s been there since 2.6.33, why could\nI not see it with earlier kernels?  The mmotm of two weeks ago seems to\nhave some magic for generating races, this is just one of three I found.\n\nWith yesterday\u0027s git I first saw this in mainline, bisected in search of\nthat magic, but the easy reproducibility evaporated.  Oh well, fix the bug.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nCc: stable@kernel.org\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "456f998ec817ebfa254464be4f089542fa390645",
      "tree": "5976aa500638f0bbade1a672233cad71765b89b8",
      "parents": [
        "406eb0c9ba765eb066406fd5ce9d5e2b169a4d5a"
      ],
      "author": {
        "name": "Ying Han",
        "email": "yinghan@google.com",
        "time": "Thu May 26 16:25:38 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu May 26 17:12:36 2011 -0700"
      },
      "message": "memcg: add the pagefault count into memcg stats\n\nTwo new stats in per-memcg memory.stat which tracks the number of page\nfaults and number of major page faults.\n\n  \"pgfault\"\n  \"pgmajfault\"\n\nThey are different from \"pgpgin\"/\"pgpgout\" stat which count number of\npages charged/discharged to the cgroup and have no meaning of reading/\nwriting page to disk.\n\nIt is valuable to track the two stats for both measuring application\u0027s\nperformance as well as the efficiency of the kernel page reclaim path.\nCounting pagefaults per process is useful, but we also need the aggregated\nvalue since processes are monitored and controlled in cgroup basis in\nmemcg.\n\nFunctional test: check the total number of pgfault/pgmajfault of all\nmemcgs and compare with global vmstat value:\n\n  $ cat /proc/vmstat | grep fault\n  pgfault 1070751\n  pgmajfault 553\n\n  $ cat /dev/cgroup/memory.stat | grep fault\n  pgfault 1071138\n  pgmajfault 553\n  total_pgfault 1071142\n  total_pgmajfault 553\n\n  $ cat /dev/cgroup/A/memory.stat | grep fault\n  pgfault 199\n  pgmajfault 0\n  total_pgfault 199\n  total_pgmajfault 0\n\nPerformance test: run page fault test(pft) wit 16 thread on faulting in\n15G anon pages in 16G container.  There is no regression noticed on the\n\"flt/cpu/s\"\n\nSample output from pft:\n\n  TAG pft:anon-sys-default:\n    Gb  Thr CLine   User     System     Wall    flt/cpu/s fault/wsec\n    15   16   1     0.67s   233.41s    14.76s   16798.546 266356.260\n\n  +-------------------------------------------------------------------------+\n      N           Min           Max        Median           Avg        Stddev\n  x  10     16682.962     17344.027     16913.524     16928.812      166.5362\n  +  10     16695.568     16923.896     16820.604     16824.652     84.816568\n  No difference proven at 95.0% confidence\n\n[akpm@linux-foundation.org: fix build]\n[hughd@google.com: shmem fix]\nSigned-off-by: Ying Han \u003cyinghan@google.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nReviewed-by: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nAcked-by: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "b09e0fa4b4ea66266058eead43350bd7d55fec67",
      "tree": "35eed2e1bc39bbbca1c041b69e1e12e826241ccf",
      "parents": [
        "4eb317072be81bd93906f768679f745bc574e6b7"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Tue May 24 17:12:39 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed May 25 08:39:31 2011 -0700"
      },
      "message": "tmpfs: implement generic xattr support\n\nImplement generic xattrs for tmpfs filesystems.  The Feodra project, while\ntrying to replace suid apps with file capabilities, realized that tmpfs,\nwhich is used on the build systems, does not support file capabilities and\nthus cannot be used to build packages which use file capabilities.  Xattrs\nare also needed for overlayfs.\n\nThe xattr interface is a bit odd.  If a filesystem does not implement any\n{get,set,list}xattr functions the VFS will call into some random LSM hooks\nand the running LSM can then implement some method for handling xattrs.\nSELinux for example provides a method to support security.selinux but no\nother security.* xattrs.\n\nAs it stands today when one enables CONFIG_TMPFS_POSIX_ACL tmpfs will have\nxattr handler routines specifically to handle acls.  Because of this tmpfs\nwould loose the VFS/LSM helpers to support the running LSM.  To make up\nfor that tmpfs had stub functions that did nothing but call into the LSM\nhooks which implement the helpers.\n\nThis new patch does not use the LSM fallback functions and instead just\nimplements a native get/set/list xattr feature for the full security.* and\ntrusted.* namespace like a normal filesystem.  This means that tmpfs can\nnow support both security.selinux and security.capability, which was not\npreviously possible.\n\nThe basic implementation is that I attach a:\n\nstruct shmem_xattr {\n\tstruct list_head list; /* anchored by shmem_inode_info-\u003exattr_list */\n\tchar *name;\n\tsize_t size;\n\tchar value[0];\n};\n\nInto the struct shmem_inode_info for each xattr that is set.  This\nimplementation could easily support the user.* namespace as well, except\nsome care needs to be taken to prevent large amounts of unswappable memory\nbeing allocated for unprivileged users.\n\n[mszeredi@suse.cz: new config option, suport trusted.*, support symlinks]\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nAcked-by: Serge Hallyn \u003cserge.hallyn@ubuntu.com\u003e\nTested-by: Serge Hallyn \u003cserge.hallyn@ubuntu.com\u003e\nCc: Kyle McMartin \u003ckyle@mcmartin.ca\u003e\nAcked-by: Hugh Dickins \u003chughd@google.com\u003e\nTested-by: Jordi Pujol \u003cjordipujolp@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": "e6c9366b2adb52cba64b359b3050200743c7568c",
      "tree": "8e092d9b865734f31116583a2db20971e1c352ee",
      "parents": [
        "6de06f313a65d0ecabf055e708d082002b568866"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Fri May 20 15:47:33 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri May 20 16:23:19 2011 -0700"
      },
      "message": "tmpfs: fix highmem swapoff crash regression\n\nCommit 778dd893ae78 (\"tmpfs: fix race between umount and swapoff\")\nforgot the new rules for strict atomic kmap nesting, causing\n\n  WARNING: at arch/x86/mm/highmem_32.c:81\n\nfrom __kunmap_atomic(), then\n\n  BUG: unable to handle kernel paging request at fffb9000\n\nfrom shmem_swp_set() when shmem_unuse_inode() is handling swapoff with\nhighmem in use.  My disgrace again.\n\nSee\n  https://bugzilla.kernel.org/show_bug.cgi?id\u003d35352\n\nReported-by: Witold Baryluk \u003cbaryluk@smp.if.uj.edu.pl\u003e\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nCc: stable@kernel.org\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "05bf86b4ccfd0f197da61c67bd372111d15a6620",
      "tree": "23db61517fad9b68b19fdbe044fa3dbe8fc2bd19",
      "parents": [
        "afa49791caae70cc3fd665a182eea61250795265"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Sat May 14 12:06:42 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat May 14 12:18:55 2011 -0700"
      },
      "message": "tmpfs: fix race between swapoff and writepage\n\nShame on me!  Commit b1dea800ac39 \"tmpfs: fix race between umount and\nwritepage\" fixed the advertized race, but introduced another: as even\nits comment makes clear, we cannot safely rely on a peek at list_empty()\nwhile holding no lock - until info-\u003eswapped is set, shmem_unuse_inode()\nmay delete any formerly-swapped inode from the shmem_swaplist, which\nin this case would leave a swap area impossible to swapoff.\n\nAlthough I don\u0027t relish taking the mutex every time, I don\u0027t care much\nfor the alternatives either; and at least the peek at list_empty() in\nshmem_evict_inode() (a hotter path since most inodes would never have\nbeen swapped) remains safe, because we already truncated the whole file.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nCc: stable@kernel.org\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "59a16ead572330deb38e5848151d30ed1af754bc",
      "tree": "792b1f35e11e0f49170b0d306d45706de54afeae",
      "parents": [
        "778dd893ae785c5fd505dac30b5fc40aae188bf1"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Wed May 11 15:13:38 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed May 11 18:50:45 2011 -0700"
      },
      "message": "tmpfs: fix spurious ENOSPC when racing with unswap\n\nTesting the shmem_swaplist replacements for igrab() revealed another bug:\nwrites to /dev/loop0 on a tmpfs file which fills its filesystem were\nsometimes failing with \"Buffer I/O error\"s.\n\nThese came from ENOSPC failures of shmem_getpage(), when racing with\nswapoff: the same could happen when racing with another shmem_getpage(),\npulling the page in from swap in between our find_lock_page() and our\ntaking the info-\u003elock (though not in the single-threaded loop case).\n\nThis is unacceptable, and surprising that I\u0027ve not noticed it before:\nit dates back many years, but (presumably) was made a lot easier to\nreproduce in 2.6.36, which sited a page preallocation in the race window.\n\nFix it by rechecking the page cache before settling on an ENOSPC error.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nCc: Konstantin Khlebnikov \u003ckhlebnikov@openvz.org\u003e\nCc: \u003cstable@kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "778dd893ae785c5fd505dac30b5fc40aae188bf1",
      "tree": "e9ff9c1efa2105740b5be0c368bfbc89ee85a01b",
      "parents": [
        "b1dea800ac39599301d4bb8dcf2b1d29c2558211"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Wed May 11 15:13:37 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed May 11 18:50:45 2011 -0700"
      },
      "message": "tmpfs: fix race between umount and swapoff\n\nThe use of igrab() in swapoff\u0027s shmem_unuse_inode() is just as vulnerable\nto umount as that in shmem_writepage().\n\nFix this instance by extending the protection of shmem_swaplist_mutex\nright across shmem_unuse_inode(): while it\u0027s on the list, the inode cannot\nbe evicted (and the filesystem cannot be unmounted) without\nshmem_evict_inode() taking that mutex to remove it from the list.\n\nBut since shmem_writepage() might take that mutex, we should avoid making\nmemory allocations or memcg charges while holding it: prepare them at the\nouter level in shmem_unuse().  When mem_cgroup_cache_charge() was\noriginally placed, we didn\u0027t know until that point that the page from swap\nwas actually a shmem page; but nowadays it\u0027s noted in the swap_map, so\nwe\u0027re safe to charge upfront.  For the radix_tree, do as is done in\nshmem_getpage(): preload upfront, but don\u0027t pin to the cpu; so we make a\nhabit of refreshing the node pool, but might dip into GFP_NOWAIT reserves\non occasion if subsequently preempted.\n\nWith the allocation and charge moved out from shmem_unuse_inode(),\nwe can also hold index map and info-\u003elock over from finding the entry.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nCc: Konstantin Khlebnikov \u003ckhlebnikov@openvz.org\u003e\nCc: \u003cstable@kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "b1dea800ac39599301d4bb8dcf2b1d29c2558211",
      "tree": "c5a650a0d41936dac47aa42e554e1ebc3029e926",
      "parents": [
        "21a3c9646873ae0919415d635b671d6a58758ede"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Wed May 11 15:13:36 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed May 11 18:50:45 2011 -0700"
      },
      "message": "tmpfs: fix race between umount and writepage\n\nKonstanin Khlebnikov reports that a dangerous race between umount and\nshmem_writepage can be reproduced by this script:\n\n  for i in {1..300} ; do\n\tmkdir $i\n\twhile true ; do\n\t\tmount -t tmpfs none $i\n\t\tdd if\u003d/dev/zero of\u003d$i/test bs\u003d1M count\u003d$(($RANDOM % 100))\n\t\tumount $i\n\tdone \u0026\n  done\n\non a 6xCPU node with 8Gb RAM: kernel very unstable after this accident. \u003d)\n\nKernel log:\n\n  VFS: Busy inodes after unmount of tmpfs.\n                 Self-destruct in 5 seconds.  Have a nice day...\n\n  WARNING: at lib/list_debug.c:53 __list_del_entry+0x8d/0x98()\n  list_del corruption. prev-\u003enext should be ffff880222fdaac8, but was (null)\n  Pid: 11222, comm: mount.tmpfs Not tainted 2.6.39-rc2+ #4\n  Call Trace:\n   warn_slowpath_common+0x80/0x98\n   warn_slowpath_fmt+0x41/0x43\n   __list_del_entry+0x8d/0x98\n   evict+0x50/0x113\n   iput+0x138/0x141\n  ...\n  BUG: unable to handle kernel paging request at ffffffffffffffff\n  IP: shmem_free_blocks+0x18/0x4c\n  Pid: 10422, comm: dd Tainted: G        W   2.6.39-rc2+ #4\n  Call Trace:\n   shmem_recalc_inode+0x61/0x66\n   shmem_writepage+0xba/0x1dc\n   pageout+0x13c/0x24c\n   shrink_page_list+0x28e/0x4be\n   shrink_inactive_list+0x21f/0x382\n  ...\n\nshmem_writepage() calls igrab() on the inode for the page which came from\npage reclaim, to add it later into shmem_swaplist for swapoff operation.\n\nThis igrab() can race with super-block deactivating process:\n\n  shrink_inactive_list()          deactivate_super()\n  pageout()                       tmpfs_fs_type-\u003ekill_sb()\n  shmem_writepage()               kill_litter_super()\n                                  generic_shutdown_super()\n                                   evict_inodes()\n   igrab()\n                                    atomic_read(\u0026inode-\u003ei_count)\n                                     skip-inode\n   iput()\n                                   if (!list_empty(\u0026sb-\u003es_inodes))\n                                          printk(\"VFS: Busy inodes after...\n\nThis igrap-iput pair was added in commit 1b1b32f2c6f6 \"tmpfs: fix\nshmem_swaplist races\" based on incorrect assumptions: igrab() protects the\ninode from concurrent eviction by deletion, but it does nothing to protect\nit from concurrent unmounting, which goes ahead despite the raised\ni_count.\n\nSo this use of igrab() was wrong all along, but the race made much worse\nin 2.6.37 when commit 63997e98a3be \"split invalidate_inodes()\" replaced\ntwo attempts at invalidate_inodes() by a single evict_inodes().\n\nKonstantin posted a plausible patch, raising sb-\u003es_active too: I\u0027m unsure\nwhether it was correct or not; but burnt once by igrab(), I am sure that\nwe don\u0027t want to rely more deeply upon externals here.\n\nFix it by adding the inode to shmem_swaplist earlier, while the page lock\non page in page cache still secures the inode against eviction, without\nartifically raising i_count.  It was originally added later because\nshmem_unuse_inode() is liable to remove an inode from the list while it\u0027s\nunswapped; but we can guard against that by taking spinlock before\ndropping mutex.\n\nReported-by: Konstantin Khlebnikov \u003ckhlebnikov@openvz.org\u003e\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nTested-by: Konstantin Khlebnikov \u003ckhlebnikov@openvz.org\u003e\nCc: \u003cstable@kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "fc5da22ae35d4720be59af8787a8a6d5e4da9517",
      "tree": "a072d2d1387d19ea5403ab8adaf7c092c1cf6485",
      "parents": [
        "d00ebeac5f24f290636f7a895dafc124b2930a08"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Thu Apr 14 15:22:07 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Apr 14 16:06:55 2011 -0700"
      },
      "message": "tmpfs: fix off-by-one in max_blocks checks\n\nIf you fill up a tmpfs, df was showing\n\n  tmpfs                   460800         -         -   -  /tmp\n\nbecause of an off-by-one in the max_blocks checks.  Fix it so df shows\n\n  tmpfs                   460800    460800         0 100% /tmp\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nCc: Tim Chen \u003ctim.c.chen@linux.intel.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "6c5103890057b1bb781b26b7aae38d33e4c517d8",
      "tree": "e6e57961dcddcb5841acb34956e70b9dc696a880",
      "parents": [
        "3dab04e6978e358ad2307bca563fabd6c5d2c58b",
        "9d2e157d970a73b3f270b631828e03eb452d525e"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Mar 24 10:16:26 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Mar 24 10:16:26 2011 -0700"
      },
      "message": "Merge branch \u0027for-2.6.39/core\u0027 of git://git.kernel.dk/linux-2.6-block\n\n* \u0027for-2.6.39/core\u0027 of git://git.kernel.dk/linux-2.6-block: (65 commits)\n  Documentation/iostats.txt: bit-size reference etc.\n  cfq-iosched: removing unnecessary think time checking\n  cfq-iosched: Don\u0027t clear queue stats when preempt.\n  blk-throttle: Reset group slice when limits are changed\n  blk-cgroup: Only give unaccounted_time under debug\n  cfq-iosched: Don\u0027t set active queue in preempt\n  block: fix non-atomic access to genhd inflight structures\n  block: attempt to merge with existing requests on plug flush\n  block: NULL dereference on error path in __blkdev_get()\n  cfq-iosched: Don\u0027t update group weights when on service tree\n  fs: assign sb-\u003es_bdi to default_backing_dev_info if the bdi is going away\n  block: Require subsystems to explicitly allocate bio_set integrity mempool\n  jbd2: finish conversion from WRITE_SYNC_PLUG to WRITE_SYNC and explicit plugging\n  jbd: finish conversion from WRITE_SYNC_PLUG to WRITE_SYNC and explicit plugging\n  fs: make fsync_buffers_list() plug\n  mm: make generic_writepages() use plugging\n  blk-cgroup: Add unaccounted time to timeslice_used.\n  block: fixup plugging stubs for !CONFIG_BLOCK\n  block: remove obsolete comments for blkdev_issue_zeroout.\n  blktrace: Use rq-\u003ecmd_flags directly in blk_add_trace_rq.\n  ...\n\nFix up conflicts in fs/{aio.c,super.c}\n"
    },
    {
      "commit": "bee4c36a5cf5c9f63ce1d7372aa62045fbd16d47",
      "tree": "d2c95aab9b12874d6675d529c3f8dd5cd2a35e10",
      "parents": [
        "8f7a66051b7523108c5aefb08c6a637e54aedc47"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Tue Mar 22 16:33:43 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Mar 22 17:44:09 2011 -0700"
      },
      "message": "shmem: let shared anonymous be nonlinear again\n\nUp to 2.6.22, you could use remap_file_pages(2) on a tmpfs file or a\nshared mapping of /dev/zero or a shared anonymous mapping.  In 2.6.23 we\ndisabled it by default, but set VM_CAN_NONLINEAR to enable it on safe\nmappings.  We made sure to set it in shmem_mmap() for tmpfs files, but\nmissed it in shmem_zero_setup() for the others.  Fix that at last.\n\nReported-by: Kenny Simpson \u003ctheonetruekenny@yahoo.com\u003e\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nCc: \u003cstable@kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "4c73b1bc6bb14aab7888ebe6bffe957cf7c07fa0",
      "tree": "152bc82ac08f59cdec1d7d3d4312f90e8aea124a",
      "parents": [
        "bd65cb86c98a79bc61afd0d80166005f125e9064"
      ],
      "author": {
        "name": "Minchan Kim",
        "email": "minchan.kim@gmail.com",
        "time": "Tue Mar 22 16:32:40 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Mar 22 17:44:02 2011 -0700"
      },
      "message": "mm: shmem: change remove_from_page_cache\n\nThis patch series changes remove_from_page_cache()\u0027s page ref counting\nrule.  Page cache ref count is decreased in delete_from_page_cache().  So\nwe don\u0027t need to decrease the page reference in callers.\n\nSigned-off-by: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nAcked-by: Hugh Dickins \u003chughd@google.com\u003e\nAcked-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nReviewed-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nReviewed-by: Johannes Weiner \u003channes@cmpxchg.org\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": "e16b396ce314b2bcdfe6c173fe075bf8e3432368",
      "tree": "640f0f56f2ea676647af4eb42d32fa56be2ee549",
      "parents": [
        "7fd23a24717a327a66f3c32d11a20a2f169c824f",
        "e6e8dd5055a974935af1398c8648d4a9359b0ecb"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Mar 18 10:37:40 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Mar 18 10:37:40 2011 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial: (47 commits)\n  doc: CONFIG_UNEVICTABLE_LRU doesn\u0027t exist anymore\n  Update cpuset info \u0026 webiste for cgroups\n  dcdbas: force SMI to happen when expected\n  arch/arm/Kconfig: remove one to many l\u0027s in the word.\n  asm-generic/user.h: Fix spelling in comment\n  drm: fix printk typo \u0027sracth\u0027\n  Remove one to many n\u0027s in a word\n  Documentation/filesystems/romfs.txt: fixing link to genromfs\n  drivers:scsi Change printk typo initate -\u003e initiate\n  serial, pch uart: Remove duplicate inclusion of linux/pci.h header\n  fs/eventpoll.c: fix spelling\n  mm: Fix out-of-date comments which refers non-existent functions\n  drm: Fix printk typo \u0027failled\u0027\n  coh901318.c: Change initate to initiate.\n  mbox-db5500.c Change initate to initiate.\n  edac: correct i82975x error-info reported\n  edac: correct i82975x mci initialisation\n  edac: correct commented info\n  fs: update comments to point correct document\n  target: remove duplicate include of target/target_core_device.h from drivers/target/target_core_hba.c\n  ...\n\nTrivial conflict in fs/eventpoll.c (spelling vs addition)\n"
    },
    {
      "commit": "0f6e0e8448a16d8d22119ce91d8dd24b44865b51",
      "tree": "7c295c02db035fc6a0b867465911a2bc9dc6b1ef",
      "parents": [
        "0d2ecee2bdb2a19d04bc5cefac0f86e790f1aad4",
        "a002951c97ff8da49938c982a4c236bf2fafdc9f"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 16 09:15:43 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 16 09:15:43 2011 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/security-testing-2.6\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/security-testing-2.6: (33 commits)\n  AppArmor: kill unused macros in lsm.c\n  AppArmor: cleanup generated files correctly\n  KEYS: Add an iovec version of KEYCTL_INSTANTIATE\n  KEYS: Add a new keyctl op to reject a key with a specified error code\n  KEYS: Add a key type op to permit the key description to be vetted\n  KEYS: Add an RCU payload dereference macro\n  AppArmor: Cleanup make file to remove cruft and make it easier to read\n  SELinux: implement the new sb_remount LSM hook\n  LSM: Pass -o remount options to the LSM\n  SELinux: Compute SID for the newly created socket\n  SELinux: Socket retains creator role and MLS attribute\n  SELinux: Auto-generate security_is_socket_class\n  TOMOYO: Fix memory leak upon file open.\n  Revert \"selinux: simplify ioctl checking\"\n  selinux: drop unused packet flow permissions\n  selinux: Fix packet forwarding checks on postrouting\n  selinux: Fix wrong checks for selinux_policycap_netpeer\n  selinux: Fix check for xfrm selinux context algorithm\n  ima: remove unnecessary call to ima_must_measure\n  IMA: remove IMA imbalance checking\n  ...\n"
    },
    {
      "commit": "5fe0c2378884e68beb532f5890cc0e3539ac747b",
      "tree": "be25414052184e146049ea6466854366559d5528",
      "parents": [
        "c8b91accfa1059d5565443193d89572eca2f5dd6"
      ],
      "author": {
        "name": "Aneesh Kumar K.V",
        "email": "aneesh.kumar@linux.vnet.ibm.com",
        "time": "Sat Jan 29 18:43:25 2011 +0530"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 14 09:15:28 2011 -0400"
      },
      "message": "exportfs: Return the minimum required handle size\n\nThe exportfs encode handle function should return the minimum required\nhandle size. This helps user to find out the handle size by passing 0\nhandle size in the first step and then redoing to the call again with\nthe returned handle size value.\n\nAcked-by: Serge Hallyn \u003cserue@us.ibm.com\u003e\nSigned-off-by: Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.com\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "7eaceaccab5f40bbfda044629a6298616aeaed50",
      "tree": "33954d12f63e25a47eb6d86ef3d3d0a5e62bf752",
      "parents": [
        "73c101011926c5832e6e141682180c4debe2cf45"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu Mar 10 08:52:07 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu Mar 10 08:52:07 2011 +0100"
      },
      "message": "block: remove per-queue plugging\n\nCode has been converted over to the new explicit on-stack plugging,\nand delay users have been converted to use the new API for that.\nSo lets kill off the old plugging along with aops-\u003esync_page().\n\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "ae0e47f02aaedbfdd5e4bec73f79b714d758223d",
      "tree": "348f99385f42a2f698bddb4ced3e6c472e5d68cc",
      "parents": [
        "ddf12286951aee1e7763112cf26629de3fabe6ae"
      ],
      "author": {
        "name": "Justin P. Mattock",
        "email": "justinmattock@gmail.com",
        "time": "Tue Mar 01 15:06:02 2011 +0100"
      },
      "committer": {
        "name": "Jiri Kosina",
        "email": "jkosina@suse.cz",
        "time": "Tue Mar 01 15:47:58 2011 +0100"
      },
      "message": "Remove one to many n\u0027s in a word\n\nSigned-off-by: Justin P. Mattock \u003cjustinmattock@gmail.com\u003e\nSigned-off-by: Jiri Kosina \u003cjkosina@suse.cz\u003e\n"
    },
    {
      "commit": "2a7dba391e5628ad665ce84ef9a6648da541ebab",
      "tree": "ba0722bd74d2c883dbda7ff721850bab411cac04",
      "parents": [
        "821404434f3324bf23f545050ff64055a149766e"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Tue Feb 01 11:05:39 2011 -0500"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Tue Feb 01 11:12:29 2011 -0500"
      },
      "message": "fs/vfs/security: pass last path component to LSM on inode creation\n\nSELinux would like to implement a new labeling behavior of newly created\ninodes.  We currently label new inodes based on the parent and the creating\nprocess.  This new behavior would also take into account the name of the\nnew object when deciding the new label.  This is not the (supposed) full path,\njust the last component of the path.\n\nThis is very useful because creating /etc/shadow is different than creating\n/etc/passwd but the kernel hooks are unable to differentiate these\noperations.  We currently require that userspace realize it is doing some\ndifficult operation like that and than userspace jumps through SELinux hoops\nto get things set up correctly.  This patch does not implement new\nbehavior, that is obviously contained in a seperate SELinux patch, but it\ndoes pass the needed name down to the correct LSM hook.  If no such name\nexists it is fine to pass NULL.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "fa0d7e3de6d6fc5004ad9dea0dd6b286af8f03e9",
      "tree": "203e0f73883e4c26b5597e36042386a1237dab35",
      "parents": [
        "77812a1ef139d84270d27faacc0630c887411013"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:49:49 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:26 2011 +1100"
      },
      "message": "fs: icache RCU free inodes\n\nRCU free the struct inode. This will allow:\n\n- Subsequent store-free path walking patch. The inode must be consulted for\n  permissions when walking, so an RCU inode reference is a must.\n- sb_inode_list_lock to be moved inside i_lock because sb list walkers who want\n  to take i_lock no longer need to take sb_inode_list_lock to walk the list in\n  the first place. This will simplify and optimize locking.\n- Could remove some nested trylock loops in dcache code\n- Could potentially simplify things a bit in VM land. Do not need to take the\n  page lock to follow page-\u003emapping.\n\nThe downsides of this is the performance cost of using RCU. In a simple\ncreat/unlink microbenchmark, performance drops by about 10% due to inability to\nreuse cache-hot slab objects. As iterations increase and RCU freeing starts\nkicking over, this increases to about 20%.\n\nIn cases where inode lifetimes are longer (ie. many inodes may be allocated\nduring the average life span of a single inode), a lot of this cache reuse is\nnot applicable, so the regression caused by this patch is smaller.\n\nThe cache-hot regression could largely be avoided by using SLAB_DESTROY_BY_RCU,\nhowever this adds some complexity to list walking and store-free path walking,\nso I prefer to implement this at a later date, if it is shown to be a win in\nreal situations. I haven\u0027t found a regression in any non-micro benchmark so I\ndoubt it will be a problem.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "3c26ff6e499ee7e6f9f2bc7da5f2f30d80862ecf",
      "tree": "bd758d7f15f24aed225a64de77cc535785c50f96",
      "parents": [
        "fc14f2fef682df677d64a145256dbd263df2aa7b"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sun Jul 25 11:46:36 2010 +0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Oct 29 04:16:31 2010 -0400"
      },
      "message": "convert get_sb_nodev() users\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "85fe4025c616a7c0ed07bc2fc8c5371b07f3888c",
      "tree": "7a5db7accb6192f2911f2473b4e3191227b914cc",
      "parents": [
        "f991bd2e14210fb93d722cb23e54991de20e8a3d"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Sat Oct 23 11:19:54 2010 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Oct 25 21:26:11 2010 -0400"
      },
      "message": "fs: do not assign default i_ino in new_inode\n\nInstead of always assigning an increasing inode number in new_inode\nmove the call to assign it into those callers that actually need it.\nFor now callers that need it is estimated conservatively, that is\nthe call is added to all filesystems that do not assign an i_ino\nby themselves.  For a few more filesystems we can avoid assigning\nany inode number given that they aren\u0027t user visible, and for others\nit could be done lazily when an inode number is actually needed,\nbut that\u0027s left for later patches.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "7de9c6ee3ecffd99e1628e81a5ea5468f7581a1f",
      "tree": "88787e77ba8a253d0a26aeda4bd5e58532d592e0",
      "parents": [
        "646ec4615cd05972581c9c5342ed7a1e77df17bb"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sat Oct 23 11:11:40 2010 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Oct 25 21:26:11 2010 -0400"
      },
      "message": "new helper: ihold()\n\nClones an existing reference to inode; caller must already hold one.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "1d3382cbf02986e4833849f528d451367ea0b4cb",
      "tree": "b754f9903c0f77ce40dcff18030b49d0ce213eab",
      "parents": [
        "a8dade34e3df581bc36ca2afe6e27055e178801c"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sat Oct 23 15:19:20 2010 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Oct 25 21:24:15 2010 -0400"
      },
      "message": "new helper: inode_unhashed()\n\nnote: for race-free uses you inode_lock held\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "602586a83b719df0fbd94196a1359ed35aeb2df3",
      "tree": "1ff381d77769e352397edd2f6a7aa8ca5ba929f1",
      "parents": [
        "19147d0eb1472eac690a9a708893d4de096bbfcf"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Tue Aug 17 15:23:56 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Aug 17 18:33:11 2010 -0700"
      },
      "message": "shmem: put_super must percpu_counter_destroy\n\nlist_add() corruption messages reported from shmem_fill_super()\u0027s recently\nintroduced percpu_counter_init(): shmem_put_super() needs to remember to\npercpu_counter_destroy().  And also check error from percpu_counter_init().\n\nReported-bisected-and-tested-by: Tetsuo Handa \u003cpenguin-kernel@i-love.sakura.ne.jp\u003e\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "5f248c9c251c60af3403902b26e08de43964ea0b",
      "tree": "6d3328e72a7e4015a64017eb30be18095c6a3c64",
      "parents": [
        "f6cec0ae58c17522a7bc4e2f39dae19f199ab534",
        "dca332528bc69e05f67161e1ed59929633d5e63d"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Aug 10 11:26:52 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Aug 10 11:26:52 2010 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6: (96 commits)\n  no need for list_for_each_entry_safe()/resetting with superblock list\n  Fix sget() race with failing mount\n  vfs: don\u0027t hold s_umount over close_bdev_exclusive() call\n  sysv: do not mark superblock dirty on remount\n  sysv: do not mark superblock dirty on mount\n  btrfs: remove junk sb_dirt change\n  BFS: clean up the superblock usage\n  AFFS: wait for sb synchronization when needed\n  AFFS: clean up dirty flag usage\n  cifs: truncate fallout\n  mbcache: fix shrinker function return value\n  mbcache: Remove unused features\n  add f_flags to struct statfs(64)\n  pass a struct path to vfs_statfs\n  update VFS documentation for method changes.\n  All filesystems that need invalidate_inode_buffers() are doing that explicitly\n  convert remaining -\u003eclear_inode() to -\u003eevict_inode()\n  Make -\u003edrop_inode() just return whether inode needs to be dropped\n  fs/inode.c:clear_inode() is gone\n  fs/inode.c:evict() doesn\u0027t care about delete vs. non-delete paths now\n  ...\n\nFix up trivial conflicts in fs/nilfs2/super.c\n"
    },
    {
      "commit": "ff36b801624d02a876bb7deded6ab860ea3503f2",
      "tree": "a3f44d01de629234d70ad6211b9fd73fd705a76c",
      "parents": [
        "7e496299d4d2ad8083effed6c5a18313a919edc6"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shaohua.li@intel.com",
        "time": "Mon Aug 09 17:19:06 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Aug 09 20:44:58 2010 -0700"
      },
      "message": "shmem: reduce pagefault lock contention\n\nI\u0027m running a shmem pagefault test case (see attached file) under a 64 CPU\nsystem.  Profile shows shmem_inode_info-\u003elock is heavily contented and\n100% CPUs time are trying to get the lock.  In the pagefault (no swap)\ncase, shmem_getpage gets the lock twice, the last one is avoidable if we\nprealloc a page so we could reduce one time of locking.  This is what\nbelow patch does.\n\nThe result of the test case:\n2.6.35-rc3: ~20s\n2.6.35-rc3 + patch: ~12s\nso this is 40% improvement.\n\nOne might argue if we could have better locking for shmem.  But even shmem\nis lockless, the pagefault will soon have pagecache lock heavily contented\nbecause shmem must add new page to pagecache.  So before we have better\nlocking for pagecache, improving shmem locking doesn\u0027t have too much\nimprovement.  I did a similar pagefault test against a ramfs file, the\ntest result is ~10.5s.\n\n[akpm@linux-foundation.org: fix comment, clean up code layout, elimintate code duplication]\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nCc: \"Zhang, Yanmin\" \u003cyanmin.zhang@intel.com\u003e\nCc: Tim Chen \u003ctim.c.chen@linux.intel.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "7e496299d4d2ad8083effed6c5a18313a919edc6",
      "tree": "8324a3fa378d28f6a63c8b5f5a86311e4eea3562",
      "parents": [
        "27f5e0f694fd0600274a76854636c0749e3bb1f6"
      ],
      "author": {
        "name": "Tim Chen",
        "email": "tim.c.chen@linux.intel.com",
        "time": "Mon Aug 09 17:19:05 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Aug 09 20:44:58 2010 -0700"
      },
      "message": "tmpfs: make tmpfs scalable with percpu_counter for used blocks\n\nThe current implementation of tmpfs is not scalable.  We found that\nstat_lock is contended by multiple threads when we need to get a new page,\nleading to useless spinning inside this spin lock.\n\nThis patch makes use of the percpu_counter library to maintain local count\nof used blocks to speed up getting and returning of pages.  So the\nacquisition of stat_lock is unnecessary for getting and returning blocks,\nimproving the performance of tmpfs on system with large number of cpus.\nOn a 4 socket 32 core NHM-EX system, we saw improvement of 270%.\n\nThe implementation below has a slight chance of race between threads\ncausing a slight overshoot of the maximum configured blocks.  However, any\novershoot is small, and is bounded by the number of cpus.  This happens\nwhen the number of used blocks is slightly below the maximum configured\nblocks when a thread checks the used block count, and another thread\nallocates the last block before the current thread does.  This should not\nbe a problem for tmpfs, as the overshoot is most likely to be a few blocks\nand bounded.  If a strict limit is really desired, then configured the max\nblocks to be the limit less the number of cpus in system.\n\nSigned-off-by: Tim Chen \u003ctim.c.chen@linux.intel.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": "1f895f75dc0881592ef21488aac36cfb2b6ca1e3",
      "tree": "2e9adf43b351cadbff41833289619921b8f1f723",
      "parents": [
        "6d8af64c1c5ad4fd119b371ae70c114ee1f443b1"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sat Jun 05 19:10:41 2010 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Aug 09 16:47:59 2010 -0400"
      },
      "message": "switch shmem.c to -\u003eevice_inode()\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "2c27c65ed0696f0b5df2dad2cf6462d72164d547",
      "tree": "7d9036e3dea98938f7fd7074366ee73929e9b2e5",
      "parents": [
        "db78b877f7744bec4a9d9f9e7d10da3931d7cd39"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Fri Jun 04 11:30:04 2010 +0200"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Aug 09 16:47:39 2010 -0400"
      },
      "message": "check ATTR_SIZE contraints in inode_change_ok\n\nMake sure we check the truncate constraints early on in -\u003esetattr by adding\nthose checks to inode_change_ok.  Also clean up and document inode_change_ok\nto make this obvious.\n\nAs a fallout we don\u0027t have to call inode_newsize_ok from simple_setsize and\nsimplify it down to a truncate_setsize which doesn\u0027t return an error.  This\nsimplifies a lot of setattr implementations and means we use truncate_setsize\nalmost everywhere.  Get rid of fat_setsize now that it\u0027s trivial and mark\next2_setsize static to make the calling convention obvious.\n\nKeep the inode_newsize_ok in vmtruncate for now as all callers need an\naudit for its removal anyway.\n\nNote: setattr code in ecryptfs doesn\u0027t call inode_change_ok at all and\nneeds a deeper audit, but that is left for later.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "db78b877f7744bec4a9d9f9e7d10da3931d7cd39",
      "tree": "fd9ee2fbe0998218b6d90322f85b285887e6fe9d",
      "parents": [
        "1025774ce411f2bd4b059ad7b53f0003569b74fa"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Fri Jun 04 11:30:03 2010 +0200"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Aug 09 16:47:38 2010 -0400"
      },
      "message": "always call inode_change_ok early in -\u003esetattr\n\nMake sure we call inode_change_ok before doing any changes in -\u003esetattr,\nand make sure to call it even if our fs wants to ignore normal UNIX\npermissions, but use the ATTR_FORCE to skip those.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "6a1a90ad1b0edb556a7550a6ef8a8756f0304dd5",
      "tree": "234488533d89e3f8b938823c2071be19e66e1b4b",
      "parents": [
        "d39aae9ec447dda84d9a2850743a78a535a71c90"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Fri Jun 04 11:30:00 2010 +0200"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Aug 09 16:47:35 2010 -0400"
      },
      "message": "rename generic_setattr\n\nDespite its name it\u0027s now a generic implementation of -\u003esetattr, but\nrather a helper to copy attributes from a struct iattr to the inode.\nRename it to setattr_copy to reflect this fact.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "af5a30d8cfcfc561336f982b06345d6b815e0bb3",
      "tree": "eb4e6fb6873355a2a96b698aeb371eb058a88c87",
      "parents": [
        "8718d36cf99f5acf0f37487557ec25aee54b930b"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@suse.de",
        "time": "Thu Jun 03 22:01:46 2010 +1000"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Jun 04 17:16:30 2010 -0400"
      },
      "message": "fix truncate inode time modification breakage\n\nmtime and ctime should be changed only if the file size has actually\nchanged. Patches changing ext2 and tmpfs from vmtruncate to new truncate\nsequence has caused regressions where they always update timestamps.\n\nThere is some strange cases in POSIX where truncate(2) must not update\ntimes unless the size has acutally changed, see 6e656be89.\n\nThis area is all still rather buggy in different ways in a lot of\nfilesystems and needs a cleanup and audit (ideally the vfs will provide\na simple attribute or call to direct all filesystems exactly which\nattributes to change). But coming up with the best solution will take a\nwhile and is not appropriate for rc anyway.\n\nSo fix recent regression for now.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@suse.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "3889e6e76f66b7de208a1709d0fe530b21a2d384",
      "tree": "c5eb8e299df1a32ff1f179f04aa0ced273dee899",
      "parents": [
        "3322e79a3860fd0d50e3c1879b2e98ac582c0ff6"
      ],
      "author": {
        "name": "npiggin@suse.de",
        "email": "npiggin@suse.de",
        "time": "Thu May 27 01:05:36 2010 +1000"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu May 27 22:15:51 2010 -0400"
      },
      "message": "tmpfs: convert to use the new truncate convention\n\nCc: Christoph Hellwig \u003chch@lst.de\u003e\nAcked-by: Hugh Dickins \u003chugh.dickins@tiscali.co.uk\u003e\nSigned-off-by: Nick Piggin \u003cnpiggin@suse.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "1b061d9247f71cd15edc4c4c4600191a903642c0",
      "tree": "30d92ca82d8286e7a45fba108230ecd23e61673b",
      "parents": [
        "7ea8085910ef3dd4f3cad6845aaa2b580d39b115"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Wed May 26 17:53:41 2010 +0200"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu May 27 22:06:06 2010 -0400"
      },
      "message": "rename the generic fsync implementations\n\nWe don\u0027t name our generic fsync implementations very well currently.\nThe no-op implementation for in-memory filesystems currently is called\nsimple_sync_file which doesn\u0027t make too much sense to start with,\nthe the generic one for simple filesystems is called simple_fsync\nwhich can lead to some confusion.\n\nThis patch renames the generic file fsync method to generic_file_fsync\nto match the other generic_file_* routines it is supposed to be used\nwith, and the no-op implementation to noop_fsync to make it obvious\nwhat to expect.  In addition add some documentation for both methods.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "87946a72283be3de936adc754b7007df7d3e6aeb",
      "tree": "0593c87ba36bae13d6a6d5dda65ebb41354954f8",
      "parents": [
        "90254a65833b67502d14736410b3857a15535c67"
      ],
      "author": {
        "name": "Daisuke Nishimura",
        "email": "nishimura@mxp.nes.nec.co.jp",
        "time": "Wed May 26 14:42:39 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu May 27 09:12:43 2010 -0700"
      },
      "message": "memcg: move charge of file pages\n\nThis patch adds support for moving charge of file pages, which include\nnormal file, tmpfs file and swaps of tmpfs file.  It\u0027s enabled by setting\nbit 1 of \u003ctarget cgroup\u003e/memory.move_charge_at_immigrate.\n\nUnlike the case of anonymous pages, file pages(and swaps) in the range\nmmapped by the task will be moved even if the task hasn\u0027t done page fault,\ni.e.  they might not be the task\u0027s \"RSS\", but other task\u0027s \"RSS\" that maps\nthe same file.  And mapcount of the page is ignored(the page can be moved\neven if page_mapcount(page) \u003e 1).  So, conditions that the page/swap\nshould be met to be moved is that it must be in the range mmapped by the\ntarget task and it must be charged to the old cgroup.\n\n[akpm@linux-foundation.org: coding-style fixes]\n[akpm@linux-foundation.org: fix warning]\nSigned-off-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Balbir Singh \u003cbalbir@in.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "4b50dc26a0a25a9d1998d206e1f7d849aa78063f",
      "tree": "892657690d555940ef854bc97aa47a45c2088bdf",
      "parents": [
        "e48e67e08c340def3d0349c2910d23c7985fb6fa"
      ],
      "author": {
        "name": "Huang Shijie",
        "email": "shijie8@gmail.com",
        "time": "Mon May 24 14:31:58 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue May 25 08:06:57 2010 -0700"
      },
      "message": "shmem: remove redundant code\n\nprep_new_page() will call set_page_private(page, 0) to initialise the\npage, so the code is redundant.\n\nSigned-off-by: Huang Shijie \u003cshijie8@gmail.com\u003e\nReviewed-by: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nAcked-by: Hugh Dickins \u003chugh.dickins@tiscali.co.uk\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "454abafe9d8beb3fe7da06131b3d81d6d352a959",
      "tree": "4be9c50d76aecd2c43959550814fb4337d27c6d9",
      "parents": [
        "6a9e652c88fad648ea088ac07dbc671a9813f75e"
      ],
      "author": {
        "name": "Dmitry Monakhov",
        "email": "dmonakhov@openvz.org",
        "time": "Thu Mar 04 17:32:18 2010 +0300"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri May 21 18:31:26 2010 -0400"
      },
      "message": "ramfs: replace inode uid,gid,mode initialization with helper function\n\n- seems what ramfs_get_inode is only locally, make it static.\n[AV: the hell it is; it\u0027s used by shmem, so shmem needed conversion too\nand no, that function can\u0027t be made static]\n\nSigned-off-by: Dmitry Monakhov \u003cdmonakhov@openvz.org\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "bb4354538eb7b92f32cfedbad68c7be266c0b467",
      "tree": "5ecc43dabf5a0ecb511c74411272eba70415cdaf",
      "parents": [
        "18e9e5104fcd9a973ffe3eed3816c87f2a1b6cd2"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Thu May 13 17:53:14 2010 -0700"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri May 21 18:31:18 2010 -0400"
      },
      "message": "fs: xattr_handler table should be const\n\nThe entries in xattr handler table should be immutable (ie const)\nlike other operation tables.\n\nLater patches convert common filesystems. Uncoverted filesystems\nwill still work, but will generate a compiler warning.\n\nSigned-off-by: Stephen Hemminger \u003cshemminger@vyatta.com\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "718deb6b61e34c200c1f2b706176d9aac334cb2d",
      "tree": "fdf37190a8663d507bc740a6fa21437c6c22e611",
      "parents": [
        "bea4c899f2b5fad80099aea979780ef19f9b1987"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Dec 16 19:35:36 2009 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Dec 16 19:48:48 2009 -0500"
      },
      "message": "Fix breakage in shmem.c\n\nReplacing\n\terror \u003d 0;\n\tif (error)\n\t\top\nwith nothing is not quite an equivalent transformation ;-)\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "1c7c474c31aea6d5cb2fb35f31d9e9e91ae466b1",
      "tree": "89a5fd1146be1744ce3ac94789542841512315b8",
      "parents": [
        "431547b3c4533b8c7fd150ab36980b9a3147797b"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Tue Nov 03 16:44:44 2009 +0100"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Dec 16 12:16:49 2009 -0500"
      },
      "message": "make generic_acl slightly more generic\n\nNow that we cache the ACL pointers in the generic inode all the generic_acl\ncruft can go away and generic_acl.c can directly implement xattr handlers\ndealing with the full Posix ACL semantics for in-memory filesystems.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    }
  ],
  "next": "431547b3c4533b8c7fd150ab36980b9a3147797b"
}
