)]}'
{
  "log": [
    {
      "commit": "6733e54b669c600eb8e451939ad55130db664fed",
      "tree": "2a8c24c856fa3f5d7d58a3eb39da943ca1c57e65",
      "parents": [
        "bcf8a3dfcb274cf6654a19e12e244f3af8c0d355",
        "451d0f599934fd97faf54a5d7954b518e66192cb"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 12:39:21 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 12:39:21 2012 -0800"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/mszeredi/fuse\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/mszeredi/fuse:\n  FUSE: Notifying the kernel of deletion.\n  fuse: support ioctl on directories\n  fuse: Use kcalloc instead of kzalloc to allocate array\n  fuse: llseek optimize SEEK_CUR and SEEK_SET\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": "541af6a07474352e2143a0527c2b62b732439815",
      "tree": "fd52fd528264926d42804676278b43baac97e300",
      "parents": [
        "632861f05a8e5878a267d173000880ceb608b56e"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jul 26 03:17:33 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:55:07 2012 -0500"
      },
      "message": "fuse: propagate umode_t\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": "30aaca4582eac20a52ac7b2ec35bdb908133e5b1",
      "tree": "ddc71661851922ba75dbeb0e6f272e9c2a0895fb",
      "parents": [
        "ddb360778a86bcf55d856bc15df3ebd2e77afff1",
        "73104b6e37f75f822e3dcf016147c322d1f6dad9"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Dec 14 18:23:35 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Dec 14 18:23:35 2011 -0800"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/mszeredi/fuse\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/mszeredi/fuse:\n  fuse: llseek fix race\n  fuse: fix llseek bug\n  fuse: fix fuse_retrieve\n"
    },
    {
      "commit": "988f032567eaba3c5896c5de05270b9ff71b2a9d",
      "tree": "a16354eaba93f15682efb6b02a8a4f770edb1e1f",
      "parents": [
        "5cc361e3b8241989d8240014dbbe6214c9292541"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Dec 13 12:25:27 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Dec 13 12:35:14 2011 -0500"
      },
      "message": "fuse: register_filesystem() called too early\n\nsame story as with ubifs\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "451d0f599934fd97faf54a5d7954b518e66192cb",
      "tree": "6dd7a6fcdc8ff3bc50dec37b114c447b3b1d7ba1",
      "parents": [
        "b18da0c56e9ff43a007b6c8e302c62e720964151"
      ],
      "author": {
        "name": "John Muir",
        "email": "john@jmuir.com",
        "time": "Tue Dec 06 21:50:06 2011 +0100"
      },
      "committer": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Tue Dec 13 11:58:49 2011 +0100"
      },
      "message": "FUSE: Notifying the kernel of deletion.\n\nAllows a FUSE file-system to tell the kernel when a file or directory is\ndeleted. If the specified dentry has the specified inode number, the kernel will\nunhash it.\n\nThe current \u0027fuse_notify_inval_entry\u0027 does not cause the kernel to clean up\ndirectories that are in use properly, and as a result the users of those\ndirectories see incorrect semantics from the file-system. The error condition\nseen when \u0027fuse_notify_inval_entry\u0027 is used to notify of a deleted directory is\navoided when \u0027fuse_notify_delete\u0027 is used instead.\n\nThe following scenario demonstrates the difference:\n1. User A chdirs into \u0027testdir\u0027 and starts reading \u0027testfile\u0027.\n2. User B rm -rf \u0027testdir\u0027.\n3. User B creates \u0027testdir\u0027.\n4. User C chdirs into \u0027testdir\u0027.\n\nIf you run the above within the same machine on any file-system (including fuse\nfile-systems), there is no problem: user C is able to chdir into the new\ntestdir. The old testdir is removed from the dentry tree, but still open by user\nA.\n\nIf operations 2 and 3 are performed via the network such that the fuse\nfile-system uses one of the notify functions to tell the kernel that the nodes\nare gone, then the following error occurs for user C while user A holds the\noriginal directory open:\n\nmuirj@empacher:~\u003e ls /test/testdir\nls: cannot access /test/testdir: No such file or directory\n\nThe issue here is that the kernel still has a dentry for testdir, and so it is\nrequesting the attributes for the old directory, while the file-system is\nresponding that the directory no longer exists.\n\nIf on the other hand, if the file-system can notify the kernel that the\ndirectory is deleted using the new \u0027fuse_notify_delete\u0027 function, then the above\nls will find the new directory as expected.\n\nSigned-off-by: John Muir \u003cjohn@jmuir.com\u003e\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\n"
    },
    {
      "commit": "b18da0c56e9ff43a007b6c8e302c62e720964151",
      "tree": "dca57bc1042c576474529768533d6efb88716f35",
      "parents": [
        "c411cc88d873b3f68635a04691f7f115c46bc39e"
      ],
      "author": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Tue Dec 13 11:58:49 2011 +0100"
      },
      "committer": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Tue Dec 13 11:58:49 2011 +0100"
      },
      "message": "fuse: support ioctl on directories\n\nMultiplexing filesystems may want to support ioctls on the underlying\nfiles and directores (e.g. FS_IOC_{GET,SET}FLAGS).\n\nIoctl support on directories was missing so add it now.\n\nReported-by: Antonio SJ Musumeci \u003cbile@landofbile.com\u003e\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\n"
    },
    {
      "commit": "c411cc88d873b3f68635a04691f7f115c46bc39e",
      "tree": "388469bbd475b0411bbf4868c2fe8f3c803737fe",
      "parents": [
        "c07c3d193412bbf4e9f405e75dc84e35e77fac28"
      ],
      "author": {
        "name": "Thomas Meyer",
        "email": "thomas@m3y3r.de",
        "time": "Tue Nov 29 22:08:00 2011 +0100"
      },
      "committer": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Tue Dec 13 11:58:49 2011 +0100"
      },
      "message": "fuse: Use kcalloc instead of kzalloc to allocate array\n\nThe advantage of kcalloc is, that will prevent integer overflows which could\nresult from the multiplication of number of elements and size and it is also\na bit nicer to read.\n\nThe semantic patch that makes this change is available\nin https://lkml.org/lkml/2011/11/25/107\n\nSigned-off-by: Thomas Meyer \u003cthomas@m3y3r.de\u003e\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\n"
    },
    {
      "commit": "c07c3d193412bbf4e9f405e75dc84e35e77fac28",
      "tree": "79991f1fed4184e7bea8fa98f7de4faf9853bb02",
      "parents": [
        "73104b6e37f75f822e3dcf016147c322d1f6dad9"
      ],
      "author": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Tue Dec 13 11:58:48 2011 +0100"
      },
      "committer": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Tue Dec 13 11:58:48 2011 +0100"
      },
      "message": "fuse: llseek optimize SEEK_CUR and SEEK_SET\n\nUse generic_file_llseek() instead of open coding the seek function.\n\ni_mutex protection is only necessary for SEEK_END (and SEEK_HOLE, SEEK_DATA), so\nmove SEEK_CUR and SEEK_SET out from under i_mutex.\n\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\n"
    },
    {
      "commit": "73104b6e37f75f822e3dcf016147c322d1f6dad9",
      "tree": "07e8021e78af4237f645fef86ffe887aee5b4ea1",
      "parents": [
        "b48c6af2086ab2ba8a9c9b6ce9ecb34592ce500c"
      ],
      "author": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Tue Dec 13 11:40:59 2011 +0100"
      },
      "committer": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Tue Dec 13 11:40:59 2011 +0100"
      },
      "message": "fuse: llseek fix race\n\nFix race between lseek(fd, 0, SEEK_CUR) and read/write.  This was fixed in\ngeneric code by commit 5b6f1eb97d (vfs: lseek(fd, 0, SEEK_CUR) race condition).\n\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\n"
    },
    {
      "commit": "b48c6af2086ab2ba8a9c9b6ce9ecb34592ce500c",
      "tree": "674ca20427f0a77a8f3e332302983e97c30a9f2a",
      "parents": [
        "48706d0a91583d08c56e7ef2a7602d99c8d4133f"
      ],
      "author": {
        "name": "Roel Kluin",
        "email": "roel.kluin@gmail.com",
        "time": "Tue Dec 13 10:37:00 2011 +0100"
      },
      "committer": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Tue Dec 13 10:37:00 2011 +0100"
      },
      "message": "fuse: fix llseek bug\n\nThe test in fuse_file_llseek() \"not SEEK_CUR or not SEEK_SET\" always evaluates\nto true.\n\nThis was introduced in 3.1 by commit 06222e49 (fs: handle SEEK_HOLE/SEEK_DATA\nproperly in all fs\u0027s that define their own llseek) and changed the behavior of\nSEEK_CUR and SEEK_SET to always retrieve the file attributes.  This is a\nperformance regression.\n\nFix the test so that it makes sense.\n\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nCC: stable@vger.kernel.org\nCC: Josef Bacik \u003cjosef@redhat.com\u003e\nCC: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "48706d0a91583d08c56e7ef2a7602d99c8d4133f",
      "tree": "6eaee92bf61ef49c43d43b811289f6989375e3f6",
      "parents": [
        "dc47ce90c3a822cd7c9e9339fe4d5f61dcb26b50"
      ],
      "author": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Tue Dec 13 10:36:59 2011 +0100"
      },
      "committer": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Tue Dec 13 10:36:59 2011 +0100"
      },
      "message": "fuse: fix fuse_retrieve\n\nFix two bugs in fuse_retrieve():\n\n - retrieving more than one page would yield repeated instances of the\n   first page\n\n - if more than FUSE_MAX_PAGES_PER_REQ pages were requested than the\n   request page array would overflow\n\nfuse_retrieve() was added in 2.6.36 and these bugs had been there since the\nbeginning.\n\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nCC: stable@vger.kernel.org\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": "bfe8684869601dacfcb2cd69ef8cfd9045f62170",
      "tree": "4e213aaa766b26f43f0f9ec7998a7745239d9377",
      "parents": [
        "6d6b77f163c7eabedbba00ed2abb7d4a570bff76"
      ],
      "author": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Fri Oct 28 14:13:29 2011 +0200"
      },
      "committer": {
        "name": "Christoph Hellwig",
        "email": "hch@serles.lst.de",
        "time": "Wed Nov 02 12:53:43 2011 +0100"
      },
      "message": "filesystems: add set_nlink()\n\nReplace remaining direct i_nlink updates with a new set_nlink()\nupdater function.\n\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nTested-by: Toshiyuki Okajima \u003ctoshi.okajima@jp.fujitsu.com\u003e\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "143cb494cb6662e37c4020b7fe9839837f718e56",
      "tree": "249abcf5afe251a9244a414f9d66c73b9458274e",
      "parents": [
        "afeacc8c1f38b7bb93d4bc7b4ba04c2605061ef0"
      ],
      "author": {
        "name": "Paul Gortmaker",
        "email": "paul.gortmaker@windriver.com",
        "time": "Fri Jul 01 14:23:34 2011 -0400"
      },
      "committer": {
        "name": "Paul Gortmaker",
        "email": "paul.gortmaker@windriver.com",
        "time": "Mon Oct 31 19:30:31 2011 -0400"
      },
      "message": "fs: add module.h to files that were implicitly using it\n\nSome files were using the complete module.h infrastructure without\nactually including the header at all.  Fix them up in advance so\nonce the implicit presence is removed, we won\u0027t get failures like this:\n\n  CC [M]  fs/nfsd/nfssvc.o\nfs/nfsd/nfssvc.c: In function \u0027nfsd_create_serv\u0027:\nfs/nfsd/nfssvc.c:335: error: \u0027THIS_MODULE\u0027 undeclared (first use in this function)\nfs/nfsd/nfssvc.c:335: error: (Each undeclared identifier is reported only once\nfs/nfsd/nfssvc.c:335: error: for each function it appears in.)\nfs/nfsd/nfssvc.c: In function \u0027nfsd\u0027:\nfs/nfsd/nfssvc.c:555: error: implicit declaration of function \u0027module_put_and_exit\u0027\nmake[3]: *** [fs/nfsd/nfssvc.o] Error 1\n\nSigned-off-by: Paul Gortmaker \u003cpaul.gortmaker@windriver.com\u003e\n"
    },
    {
      "commit": "5dfcc87fd79dfb96ed155b524337dbd0da4f5993",
      "tree": "619808e5a371e3055ff6388c98eacddea88fb089",
      "parents": [
        "24114504c4d585ec4aae7a2b2acb81bf741f8c8a"
      ],
      "author": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Mon Sep 12 09:38:03 2011 +0200"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Sep 12 11:47:10 2011 -0700"
      },
      "message": "fuse: fix memory leak\n\nkmemleak is reporting that 32 bytes are being leaked by FUSE:\n\n  unreferenced object 0xe373b270 (size 32):\n  comm \"fusermount\", pid 1207, jiffies 4294707026 (age 2675.187s)\n  hex dump (first 32 bytes):\n    01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00  ................\n    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................\n  backtrace:\n    [\u003cb05517d7\u003e] kmemleak_alloc+0x27/0x50\n    [\u003cb0196435\u003e] kmem_cache_alloc+0xc5/0x180\n    [\u003cb02455be\u003e] fuse_alloc_forget+0x1e/0x20\n    [\u003cb0245670\u003e] fuse_alloc_inode+0xb0/0xd0\n    [\u003cb01b1a8c\u003e] alloc_inode+0x1c/0x80\n    [\u003cb01b290f\u003e] iget5_locked+0x8f/0x1a0\n    [\u003cb0246022\u003e] fuse_iget+0x72/0x1a0\n    [\u003cb02461da\u003e] fuse_get_root_inode+0x8a/0x90\n    [\u003cb02465cf\u003e] fuse_fill_super+0x3ef/0x590\n    [\u003cb019e56f\u003e] mount_nodev+0x3f/0x90\n    [\u003cb0244e95\u003e] fuse_mount+0x15/0x20\n    [\u003cb019d1bc\u003e] mount_fs+0x1c/0xc0\n    [\u003cb01b5811\u003e] vfs_kern_mount+0x41/0x90\n    [\u003cb01b5af9\u003e] do_kern_mount+0x39/0xd0\n    [\u003cb01b7585\u003e] do_mount+0x2e5/0x660\n    [\u003cb01b7966\u003e] sys_mount+0x66/0xa0\n\nThis leak report is consistent and happens once per boot on\n3.1.0-rc5-dirty.\n\nThis happens if a FORGET request is queued after the fuse device was\nreleased.\n\nReported-by: Sitsofe Wheeler \u003csitsofe@yahoo.com\u003e\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nTested-by: Sitsofe Wheeler \u003csitsofe@yahoo.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "24114504c4d585ec4aae7a2b2acb81bf741f8c8a",
      "tree": "52b9668b53f7d12342984be55b96e5784383a4ae",
      "parents": [
        "87adf1c66cacbc4acd0e696c896755a5091a9d3d"
      ],
      "author": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Mon Sep 12 09:31:49 2011 +0200"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Sep 12 11:47:10 2011 -0700"
      },
      "message": "fuse: fix flock breakage\n\nCommit 37fb3a30b4 (\"fuse: fix flock\") added in 3.1-rc4 caused flock() to\nfail with ENOSYS with the kernel ABI version 7.16 or earlier.\n\nFix by falling back to testing FUSE_POSIX_LOCKS for ABI versions 7.16\nand earlier.\n\nReported-by: Martin Ziegler \u003cziegler@email.mathematik.uni-freiburg.de\u003e\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nTested-by: Martin Ziegler \u003cziegler@email.mathematik.uni-freiburg.de\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "051732bcbe3cff3fea04dc9042266562fe8b0859",
      "tree": "1c709cd8a65747fde8363ce593b77e040c14e3e4",
      "parents": [
        "2983573e491d1e201e802eafa3553ba33d1fd50b",
        "c2183d1e9b3f313dd8ba2b1b0197c8d9fb86a7ae"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Aug 24 09:14:42 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Aug 24 09:14:42 2011 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/mszeredi/fuse\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/mszeredi/fuse:\n  fuse: check size of FUSE_NOTIFY_INVAL_ENTRY message\n  fuse: mark pages accessed when written to\n  fuse: delete dead .write_begin and .write_end aops\n  fuse: fix flock\n  fuse: fix non-ANSI void function notation\n"
    },
    {
      "commit": "c2183d1e9b3f313dd8ba2b1b0197c8d9fb86a7ae",
      "tree": "fd9e12ce069012b60e5bdcd15627ccf4912d9ef1",
      "parents": [
        "478e0841b3dce3edc2c67bf0fc51af30f582e9e2"
      ],
      "author": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Wed Aug 24 10:20:17 2011 +0200"
      },
      "committer": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Wed Aug 24 10:20:17 2011 +0200"
      },
      "message": "fuse: check size of FUSE_NOTIFY_INVAL_ENTRY message\n\nFUSE_NOTIFY_INVAL_ENTRY didn\u0027t check the length of the write so the\nmessage processing could overrun and result in a \"kernel BUG at\nfs/fuse/dev.c:629!\"\n\nReported-by: Han-Wen Nienhuys \u003chanwenn@gmail.com\u003e\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nCC: stable@kernel.org\n"
    },
    {
      "commit": "478e0841b3dce3edc2c67bf0fc51af30f582e9e2",
      "tree": "496f32d81640425d83cae9c4c764f1246a591ca1",
      "parents": [
        "b40cdd56dfa065c0832905e266b39f79419e6914"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "jweiner@redhat.com",
        "time": "Mon Jul 25 22:35:35 2011 +0200"
      },
      "committer": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Mon Aug 08 16:08:08 2011 +0200"
      },
      "message": "fuse: mark pages accessed when written to\n\nAs fuse does not use the page cache library functions when userspace\nwrites to a file, it did not benefit from \u0027c8236db mm: mark page\naccessed before we write_end()\u0027 that made sure pages are properly\nmarked accessed when written to.\n\nSigned-off-by: Johannes Weiner \u003cjweiner@redhat.com\u003e\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\n"
    },
    {
      "commit": "b40cdd56dfa065c0832905e266b39f79419e6914",
      "tree": "38ea1fa5cd6c49a9baedfc92309e8478d5cc32ae",
      "parents": [
        "37fb3a30b46237f23cfdf7ee09d49f9888dd13bf"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "jweiner@redhat.com",
        "time": "Mon Jul 25 22:35:34 2011 +0200"
      },
      "committer": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Mon Aug 08 16:08:08 2011 +0200"
      },
      "message": "fuse: delete dead .write_begin and .write_end aops\n\nEver since \u0027ea9b990 fuse: implement perform_write\u0027, the .write_begin\nand .write_end aops have been dead code.\n\nTheir task - acquiring a page from the page cache, sending out a write\nrequest and releasing the page again - is now done batch-wise to\nmaximize the number of pages send per userspace request.\n\nSigned-off-by: Johannes Weiner \u003cjweiner@redhat.com\u003e\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\n"
    },
    {
      "commit": "37fb3a30b46237f23cfdf7ee09d49f9888dd13bf",
      "tree": "c36910e300ade812159d12218fdf122b3d2ef3de",
      "parents": [
        "a2daff6803a384ce065e3681a2affea1da59c5f5"
      ],
      "author": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Mon Aug 08 16:08:08 2011 +0200"
      },
      "committer": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Mon Aug 08 16:08:08 2011 +0200"
      },
      "message": "fuse: fix flock\n\nCommit a9ff4f87 \"fuse: support BSD locking semantics\" overlooked a\nnumber of issues with supporing flock locks over existing POSIX\nlocking infrastructure:\n\n  - it\u0027s not backward compatible, passing flock(2) calls to userspace\n    unconditionally (if userspace sets FUSE_POSIX_LOCKS)\n\n  - it doesn\u0027t cater for the fact that flock locks are automatically\n    unlocked on file release\n\n  - it doesn\u0027t take into account the fact that flock exclusive locks\n    (write locks) don\u0027t need an fd opened for write.\n\nThe last one invalidates the original premise of the patch that flock\nlocks can be emulated with POSIX locks.\n\nThis patch fixes the first two issues.  The last one needs to be fixed\nin userspace if the filesystem assumed that a write lock will happen\nonly on a file operned for write (as in the case of the current fuse\nlibrary).\n\nReported-by: Sebastian Pipping \u003cwebmaster@hartwork.org\u003e\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\n"
    },
    {
      "commit": "2dad3206db5c3832cde1f58650027fea3ff7adf3",
      "tree": "96314a554afdab5904a939793156d4ae23ec11c1",
      "parents": [
        "84635d68be4b846ba984a89f386524153330c597",
        "0c12eaffdf09466f36a9ffe970dda8f4aeb6efc0"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jul 25 22:49:19 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jul 25 22:49:19 2011 -0700"
      },
      "message": "Merge branch \u0027for-3.1\u0027 of git://linux-nfs.org/~bfields/linux\n\n* \u0027for-3.1\u0027 of git://linux-nfs.org/~bfields/linux:\n  nfsd: don\u0027t break lease on CLAIM_DELEGATE_CUR\n  locks: rename lock-manager ops\n  nfsd4: update nfsv4.1 implementation notes\n  nfsd: turn on reply cache for NFSv4\n  nfsd4: call nfsd4_release_compoundargs from pc_release\n  nfsd41: Deny new lock before RECLAIM_COMPLETE done\n  fs: locks: remove init_once\n  nfsd41: check the size of request\n  nfsd41: error out when client sets maxreq_sz or maxresp_sz too small\n  nfsd4: fix file leak on open_downgrade\n  nfsd4: remember to put RW access on stateid destruction\n  NFSD: Added TEST_STATEID operation\n  NFSD: added FREE_STATEID operation\n  svcrpc: fix list-corrupting race on nfsd shutdown\n  rpc: allow autoloading of gss mechanisms\n  svcauth_unix.c: quiet sparse noise\n  svcsock.c: include sunrpc.h to quiet sparse noise\n  nfsd: Remove deprecated nfsctl system call and related code.\n  NFSD: allow OP_DESTROY_CLIENTID to be only op in COMPOUND\n\nFix up trivial conflicts in Documentation/feature-removal-schedule.txt\n"
    },
    {
      "commit": "02c24a82187d5a628c68edfe71ae60dc135cd178",
      "tree": "c8dbaba4d82e2b20ed4335910a564a1f7d90fcf6",
      "parents": [
        "22735068d53c7115e384bc88dea95b17e76a6839"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Sat Jul 16 20:44:56 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Jul 20 20:47:59 2011 -0400"
      },
      "message": "fs: push i_mutex and filemap_write_and_wait down into -\u003efsync() handlers\n\nBtrfs needs to be able to control how filemap_write_and_wait_range() is called\nin fsync to make it less of a painful operation, so push down taking i_mutex and\nthe calling of filemap_write_and_wait() down into the -\u003efsync() handlers.  Some\nfile systems can drop taking the i_mutex altogether it seems, like ext3 and\nocfs2.  For correctness sake I just pushed everything down in all cases to make\nsure that we keep the current behavior the same for everybody, and then each\nindividual fs maintainer can make up their mind about what to do from there.\nThanks,\n\nAcked-by: Jan Kara \u003cjack@suse.cz\u003e\nSigned-off-by: Josef Bacik \u003cjosef@redhat.com\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "06222e491e663dac939f04b125c9dc52126a75c4",
      "tree": "99636fd666c8148a5bf58ea4844263d4b3a36310",
      "parents": [
        "c334b1138bd44bea578eab7971c59bd9212a1093"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Mon Jul 18 13:21:38 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Jul 20 20:47:58 2011 -0400"
      },
      "message": "fs: handle SEEK_HOLE/SEEK_DATA properly in all fs\u0027s that define their own llseek\n\nThis converts everybody to handle SEEK_HOLE/SEEK_DATA properly.  In some cases\nwe just return -EINVAL, in others we do the normal generic thing, and in others\nwe\u0027re simply making sure that the properly due-dilligence is done.  For example\nin NFS/CIFS we need to make sure the file size is update properly for the\nSEEK_HOLE and SEEK_DATA case, but since it calls the generic llseek stuff itself\nthat is all we have to do.  Thanks,\n\nSigned-off-by: Josef Bacik \u003cjosef@redhat.com\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "8fb47a4fbf858a164e973b8ea8ef5e83e61f2e50",
      "tree": "d3b55fbce0e7ba5708a55b91b1ab4079ad192db6",
      "parents": [
        "c46556c6be057da79f51b1a8325ec4c27938bd49"
      ],
      "author": {
        "name": "J. Bruce Fields",
        "email": "bfields@redhat.com",
        "time": "Wed Jul 20 20:21:59 2011 -0400"
      },
      "committer": {
        "name": "J. Bruce Fields",
        "email": "bfields@redhat.com",
        "time": "Wed Jul 20 20:23:19 2011 -0400"
      },
      "message": "locks: rename lock-manager ops\n\nBoth the filesystem and the lock manager can associate operations with a\nlock.  Confusingly, one of them (fl_release_private) actually has the\nsame name in both operation structures.\n\nIt would save some confusion to give the lock-manager ops different\nnames.\n\nSigned-off-by: J. Bruce Fields \u003cbfields@redhat.com\u003e\n"
    },
    {
      "commit": "dd7dd556e45133ef13f2c4bddc0e0b1ac23bc0e4",
      "tree": "4884b6af570a2a0cb01d11f39a38a3a9c73e49ba",
      "parents": [
        "bf6c7f6c7bd0ea779757d35b5fdc9f9157f056b3"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sat Jun 25 21:17:17 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Jul 20 01:43:56 2011 -0400"
      },
      "message": "no need to check for LOOKUP_OPEN in -\u003ecreate() instances\n\n... it will be set in nd-\u003eflag for all cases with non-NULL nd\n(i.e. when called from do_last()).\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "8a5e929dd2e05ab4d3d89f58c5e8fca596af8f3a",
      "tree": "8cbed05fcd99d24e881e5ea12d8a954865e31085",
      "parents": [
        "554a8b9f54cd7ca2b89f5dc227df08be082fae0d"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sat Jun 25 19:15:54 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Jul 20 01:43:52 2011 -0400"
      },
      "message": "don\u0027t transliterate lower bits of -\u003eintent.open.flags to FMODE_...\n\n-\u003ecreate() instances are much happier that way...\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "10556cb21a0d0b24d95f00ea6df16f599a3345b2",
      "tree": "3d7d8dfba807805a55c154f1850717bf3b49f343",
      "parents": [
        "2830ba7f34ebb27c4e5b8b6ef408cd6d74860890"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Jun 20 19:28:19 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Jul 20 01:43:24 2011 -0400"
      },
      "message": "-\u003epermission() sanitizing: don\u0027t pass flags to -\u003epermission()\n\nnot used by the instances anymore.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "2830ba7f34ebb27c4e5b8b6ef408cd6d74860890",
      "tree": "bbcebc14bffd000f1dfcbf37e64f56d2f49581ac",
      "parents": [
        "7e40145eb111a5192e6d819f764db9d6828d1abb"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Jun 20 19:16:29 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Jul 20 01:43:22 2011 -0400"
      },
      "message": "-\u003epermission() sanitizing: don\u0027t pass flags to generic_permission()\n\nredundant; all callers get it duplicated in mask \u0026 MAY_NOT_BLOCK and none of\nthem removes that bit.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "178ea73521d64ba41d7aa5488fb9f549c6d4507d",
      "tree": "7fb6bfb6483577752e307a5bb2e3905658d44294",
      "parents": [
        "07b8ce1ee87d291ff564c02cf878fae973317a52"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Jun 20 11:31:30 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Jul 20 01:43:16 2011 -0400"
      },
      "message": "kill check_acl callback of generic_permission()\n\nits value depends only on inode and does not change; we might as\nwell store it in -\u003ei_op-\u003echeck_acl and be done with that.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "9e1f1de02c2275d7172e18dc4e7c2065777611bf",
      "tree": "15e9d202e64275cdbff6ed1d54804da5966d7d8d",
      "parents": [
        "1fa7b6a29c61358cc2ca6f64cef4aa0e1a7ca74c"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Jun 03 18:24:58 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Jun 03 18:24:58 2011 -0400"
      },
      "message": "more conservative S_NOSEC handling\n\nCaching \"we have already removed suid/caps\" was overenthusiastic as merged.\nOn network filesystems we might have had suid/caps set on another client,\nsilently picked by this client on revalidate, all of that *without* clearing\nthe S_NOSEC flag.\n\nAFAICS, the only reasonably sane way to deal with that is\n\t* new superblock flag; unless set, S_NOSEC is not going to be set.\n\t* local block filesystems set it in their -\u003emount() (more accurately,\nmount_bdev() does, so does btrfs -\u003emount(), users of mount_bdev() other than\nlocal block ones clear it)\n\t* if any network filesystem (or a cluster one) wants to use S_NOSEC,\nit\u0027ll need to set MS_NOSEC in sb-\u003es_flags *AND* take care to clear S_NOSEC when\ninode attribute changes are picked from other clients.\n\nIt\u0027s not an earth-shattering hole (anybody that can set suid on another client\nwill almost certainly be able to write to the file before doing that anyway),\nbut it\u0027s a bug that needs fixing.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "a2daff6803a384ce065e3681a2affea1da59c5f5",
      "tree": "bd21bf2592cd95b1e3e83a927a25eed6ca3ea2ad",
      "parents": [
        "55922c9d1b84b89cb946c777fddccb3247e7df2c"
      ],
      "author": {
        "name": "Randy Dunlap",
        "email": "randy.dunlap@oracle.com",
        "time": "Tue May 31 14:09:00 2011 -0700"
      },
      "committer": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Wed Jun 01 16:09:32 2011 +0200"
      },
      "message": "fuse: fix non-ANSI void function notation\n\nFix void function parameter list sparse warning:\n\nfs/fuse/inode.c:74:44: warning: non-ANSI function declaration of function \u0027fuse_alloc_forget\u0027\n\nSigned-off-by: Randy Dunlap \u003crandy.dunlap@oracle.com\u003e\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\n"
    },
    {
      "commit": "526e7ce5528c8addcf154acec41b615f71dce7e1",
      "tree": "d3cadaaa5dec5b7c9d851d59b6ed595c1ca5eb7e",
      "parents": [
        "42b850b2806f8f55f5c3a0e3c78af738d5054fdc"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Fri May 27 13:42:15 2011 -0700"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sat May 28 01:02:53 2011 -0400"
      },
      "message": "fuse: remove unnecessary dentry_unhash on rmdir, dir rename\n\nFuse has no problems with references to unlinked directories.\n\nCC: Miklos Szeredi \u003cmiklos@szeredi.hu\u003e\nCC: fuse-devel@lists.sourceforge.net\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "32e51f141fd8d880f57b6a2eb53ce72856254d4a",
      "tree": "d8d7a0d503533a03fb07b2ebd5eccd9043f2d228",
      "parents": [
        "ca16d140af91febe25daeb9e032bf8bd46b8c31f",
        "b6ff24a333267a6810e28ee5b9fc539d149c52f0"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu May 26 09:52:14 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu May 26 09:52:14 2011 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6: (25 commits)\n  cifs: remove unnecessary dentry_unhash on rmdir/rename_dir\n  ocfs2: remove unnecessary dentry_unhash on rmdir/rename_dir\n  exofs: remove unnecessary dentry_unhash on rmdir/rename_dir\n  nfs: remove unnecessary dentry_unhash on rmdir/rename_dir\n  ext2: remove unnecessary dentry_unhash on rmdir/rename_dir\n  ext3: remove unnecessary dentry_unhash on rmdir/rename_dir\n  ext4: remove unnecessary dentry_unhash on rmdir/rename_dir\n  btrfs: remove unnecessary dentry_unhash in rmdir/rename_dir\n  ceph: remove unnecessary dentry_unhash calls\n  vfs: clean up vfs_rename_other\n  vfs: clean up vfs_rename_dir\n  vfs: clean up vfs_rmdir\n  vfs: fix vfs_rename_dir for FS_RENAME_DOES_D_MOVE filesystems\n  libfs: drop unneeded dentry_unhash\n  vfs: update dentry_unhash() comment\n  vfs: push dentry_unhash on rename_dir into file systems\n  vfs: push dentry_unhash on rmdir into file systems\n  vfs: remove dget() from dentry_unhash()\n  vfs: dentry_unhash immediately prior to rmdir\n  vfs: Block mmapped writes while the fs is frozen\n  ...\n"
    },
    {
      "commit": "e4eaac06bcccb2a70bca6a2de9871882dce2aa14",
      "tree": "ca6736d96294cd6e65a1c3055718bfd5adc7336e",
      "parents": [
        "79bf7c732b5ff75b96022ed9d29181afd3d2509c"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue May 24 13:06:07 2011 -0700"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu May 26 07:26:48 2011 -0400"
      },
      "message": "vfs: push dentry_unhash on rename_dir into file systems\n\nOnly a few file systems need this.  Start by pushing it down into each\nrename method (except gfs2 and xfs) so that it can be dealt with on a\nper-fs basis.\n\nAcked-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "79bf7c732b5ff75b96022ed9d29181afd3d2509c",
      "tree": "74b8cc690f9a37fff02d0685464e1c695a25ef94",
      "parents": [
        "64252c75a2196a0cf1e0d3777143ecfe0e3ae650"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue May 24 13:06:06 2011 -0700"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu May 26 07:26:47 2011 -0400"
      },
      "message": "vfs: push dentry_unhash on rmdir into file systems\n\nOnly a few file systems need this.  Start by pushing it down into each\nfs rmdir method (except gfs2 and xfs) so it can be dealt with on a per-fs\nbasis.\n\nThis does not change behavior for any in-tree file systems.\n\nAcked-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "d24339059d640f108c08ba99ef30e3bafa10f8e4",
      "tree": "934d3c4f2abcddbfdbb52904d0b96c5a1915acd1",
      "parents": [
        "693d92a1bbc9e42681c42ed190bd42b636ca876f"
      ],
      "author": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Tue May 10 17:35:58 2011 +0200"
      },
      "committer": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Tue May 10 17:35:58 2011 +0200"
      },
      "message": "fuse: fix oops in revalidate when called with NULL nameidata\n\nSome cases (e.g. ecryptfs) can call -\u003edentry_revalidate with NULL\nnameidata.\n\nhttps://bugzilla.kernel.org/show_bug.cgi?id\u003d34732\n\nTyler Hicks pointed out that this bug was introduced by commit\ne7c0a16786 \"fuse: make fuse_dentry_revalidate() RCU aware\"\n\nReported-by: Witold Baryluk \u003cbaryluk@smp.if.uj.edu.pl\u003e\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\n"
    },
    {
      "commit": "25985edcedea6396277003854657b5f3cb31a628",
      "tree": "f026e810210a2ee7290caeb737c23cb6472b7c38",
      "parents": [
        "6aba74f2791287ec407e0f92487a725a25908067"
      ],
      "author": {
        "name": "Lucas De Marchi",
        "email": "lucas.demarchi@profusion.mobi",
        "time": "Wed Mar 30 22:57:33 2011 -0300"
      },
      "committer": {
        "name": "Lucas De Marchi",
        "email": "lucas.demarchi@profusion.mobi",
        "time": "Thu Mar 31 11:26:23 2011 -0300"
      },
      "message": "Fix common misspellings\n\nFixes generated by \u0027codespell\u0027 and manually reviewed.\n\nSigned-off-by: Lucas De Marchi \u003clucas.demarchi@profusion.mobi\u003e\n"
    },
    {
      "commit": "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": "ef6a3c63112e865d632ff7c478ba7c7160cad0d1",
      "tree": "d0bd3ee2b79674e22b8dd3f318814cd4789697b8",
      "parents": [
        "318b275fbca1ab9ec0862de71420e0e92c3d1aa7"
      ],
      "author": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Tue Mar 22 16:30:52 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Mar 22 17:44:02 2011 -0700"
      },
      "message": "mm: add replace_page_cache_page() function\n\nThis function basically does:\n\n     remove_from_page_cache(old);\n     page_cache_release(old);\n     add_to_page_cache_locked(new);\n\nExcept it does this atomically, so there\u0027s no possibility for the \"add\" to\nfail because of a race.\n\nIf memory cgroups are enabled, then the memory cgroup charge is also moved\nfrom the old page to the new.\n\nThis function is currently used by fuse to move pages into the page cache\non read, instead of copying the page contents.\n\n[minchan.kim@gmail.com: add freepage() hook to replace_page_cache_page()]\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nAcked-by: Rik van Riel \u003criel@redhat.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nSigned-off-by: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "f741a79e982cf56d7584435bad663553ffe6715f",
      "tree": "491f0a8a05d9add4c0338ee8af4a18f3508503cd",
      "parents": [
        "73d5a8675f32b8e22e11773b314324316f920192",
        "e7c0a167860620bd2938366896964f729ddaeaaa"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Mar 22 10:42:43 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Mar 22 10:42:43 2011 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/mszeredi/fuse\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/mszeredi/fuse:\n  fuse: make fuse_dentry_revalidate() RCU aware\n  fuse: make fuse_permission() RCU aware\n  fuse: wakeup pollers on connection release/abort\n  fuse: reduce size of struct fuse_request\n"
    },
    {
      "commit": "e7c0a167860620bd2938366896964f729ddaeaaa",
      "tree": "478680f3a309283e5e401cd0867cb7543d7318ff",
      "parents": [
        "19690ddb65dbfc7be1b411fce12d3332acefbfb5"
      ],
      "author": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Mon Mar 21 13:58:06 2011 +0100"
      },
      "committer": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Mon Mar 21 13:58:06 2011 +0100"
      },
      "message": "fuse: make fuse_dentry_revalidate() RCU aware\n\nOnly bail out of fuse_dentry_revalidate() on LOOKUP_RCU when blocking\nis actually necessary.\n\nCC: Nick Piggin \u003cnpiggin@gmail.com\u003e\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\n"
    },
    {
      "commit": "19690ddb65dbfc7be1b411fce12d3332acefbfb5",
      "tree": "a906399000efeb5221e9a496fc85668243238d49",
      "parents": [
        "357ccf2b69bcefa650a54db83702381d1c9d6959"
      ],
      "author": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Mon Mar 21 13:58:06 2011 +0100"
      },
      "committer": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Mon Mar 21 13:58:06 2011 +0100"
      },
      "message": "fuse: make fuse_permission() RCU aware\n\nOnly bail out of fuse_permission() on IPERM_FLAG_RCU when blocking is\nactually necessary.\n\nCC: Nick Piggin \u003cnpiggin@gmail.com\u003e\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\n"
    },
    {
      "commit": "357ccf2b69bcefa650a54db83702381d1c9d6959",
      "tree": "0bbcbb308b0a28a489d38177a4ad7b84b1ae36d5",
      "parents": [
        "07d5f69b457019eda4ca568923b1d62b7ada89e1"
      ],
      "author": {
        "name": "Bryan Green",
        "email": "bryan@grid-net.com",
        "time": "Tue Mar 01 16:43:52 2011 -0800"
      },
      "committer": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Mon Mar 21 13:58:05 2011 +0100"
      },
      "message": "fuse: wakeup pollers on connection release/abort\n\nIf a fuse dev connection is broken, wake up any\nprocesses that are blocking, in a poll system call,\non one of the files in the now defunct filesystem.\n\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\n"
    },
    {
      "commit": "07d5f69b457019eda4ca568923b1d62b7ada89e1",
      "tree": "b0509b12d9edc0586cc6778d7d4102c62bf6d5ab",
      "parents": [
        "521cb40b0c44418a4fd36dc633f575813d59a43d"
      ],
      "author": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Mon Mar 21 13:58:05 2011 +0100"
      },
      "committer": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Mon Mar 21 13:58:05 2011 +0100"
      },
      "message": "fuse: reduce size of struct fuse_request\n\nReduce the size of struct fuse_request by removing cuse_init_out from\nthe request structure and allocating it dinamically instead.\n\nCC: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\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": "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": "529c5f958f9e60abaa7407986034b17d17536bf2",
      "tree": "3e946687f07c6738b9695224fd6492ceb8236e1e",
      "parents": [
        "0eb980e31770cfeff6e27760b4692d595b8dbf28"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Mar 10 03:44:31 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Mar 10 03:44:31 2011 -0500"
      },
      "message": "fuse: fix d_revalidate oopsen on NFS exports\n\ncan\u0027t blindly check nd-\u003eflags in -\u003ed_revalidate()\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "4c63f5646e405b5010cc9499419060bf2e838f5b",
      "tree": "df91ba315032c8ec4aafeb3ab96fdfa7c6c656e1",
      "parents": [
        "cafb0bfca1a73efd6d8a4a6a6a716e6134b96c24",
        "69d60eb96ae8a73cf9b79cf28051caf973006011"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu Mar 10 08:58:35 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu Mar 10 08:58:35 2011 +0100"
      },
      "message": "Merge branch \u0027for-2.6.39/stack-plug\u0027 into for-2.6.39/core\n\nConflicts:\n\tblock/blk-core.c\n\tblock/blk-flush.c\n\tdrivers/md/raid1.c\n\tdrivers/md/raid10.c\n\tdrivers/md/raid5.c\n\tfs/nilfs2/btnode.c\n\tfs/nilfs2/mdt.c\n\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\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": "8d56addd70c7c0626502569e22cc8fce49ae39f5",
      "tree": "43e5e51dfa7a1b7e566cb235d44d5991e0c806d0",
      "parents": [
        "5a18ec176c934ca1bc9dc61580a5e0e90a9b5733"
      ],
      "author": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Fri Feb 25 14:44:58 2011 +0100"
      },
      "committer": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Fri Feb 25 14:44:58 2011 +0100"
      },
      "message": "fuse: fix truncate after open\n\nCommit e1181ee6 \"vfs: pass struct file to do_truncate on O_TRUNC\nopens\" broke the behavior of open(O_TRUNC|O_RDONLY) in fuse.  Fuse\nassumed that when called from open, a truncate() will be done, not an\nftruncate().\n\nFix by restoring the old behavior, based on the ATTR_OPEN flag.\n\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\n"
    },
    {
      "commit": "5a18ec176c934ca1bc9dc61580a5e0e90a9b5733",
      "tree": "6995509f59166fff90ce240ce72e3858f61ac101",
      "parents": [
        "4662db446190ddef8fbab024f72dee77dd04b8f2"
      ],
      "author": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Fri Feb 25 14:44:58 2011 +0100"
      },
      "committer": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Fri Feb 25 14:44:58 2011 +0100"
      },
      "message": "fuse: fix hang of single threaded fuseblk filesystem\n\nSingle threaded NTFS-3G could get stuck if a delayed RELEASE reply\ntriggered a DESTROY request via path_put().\n\nFix this by\n\n a) making RELEASE requests synchronous, whenever possible, on fuseblk\n filesystems\n\n b) if not possible (triggered by an asynchronous read/write) then do\n the path_put() in a separate thread with schedule_work().\n\nReported-by: Oliver Neukum \u003coneukum@suse.de\u003e\nCc: stable@kernel.org\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\n"
    },
    {
      "commit": "8272f4c9c5a46049a66dad5924850de5d1ef2269",
      "tree": "d3420c88ba1a2c04a55cc051664be366b052fba4",
      "parents": [
        "1752a373c4c567445057f1f51d8558ec8cf5d641"
      ],
      "author": {
        "name": "Paul Bolle",
        "email": "pebolle@tiscali.nl",
        "time": "Tue Feb 15 00:05:34 2011 +0100"
      },
      "committer": {
        "name": "Jiri Kosina",
        "email": "jkosina@suse.cz",
        "time": "Tue Feb 15 10:26:38 2011 +0100"
      },
      "message": "fuse/cuse: fix comment typo initilaization\n\nSigned-off-by: Paul Bolle \u003cpebolle@tiscali.nl\u003e\nReviewed-by: Jesper Juhl \u003cjj@chaosbits.net\u003e\nSigned-off-by: Jiri Kosina \u003cjkosina@suse.cz\u003e\n"
    },
    {
      "commit": "c35eebe9939f55b9d51631d03301a7af19090dcc",
      "tree": "aad58e63dea9f62baa295db12078de1e00754409",
      "parents": [
        "d93e34faf924bd98f158712d63085662e648e389"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sat Dec 18 11:15:22 2010 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Jan 12 20:02:44 2011 -0500"
      },
      "message": "switch fuse\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "7d44b0440147d83a65270205b22e7d365de28948",
      "tree": "0adc818f569f45912a19482773dabbf71b191b9d",
      "parents": [
        "0dc1488527a3c01383a50e5df7187219567586a3",
        "1baa26b2be92fe9917e2f7ef46d423b5dfa4da71"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jan 10 07:43:54 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jan 10 07:43:54 2011 -0800"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/mszeredi/fuse\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/mszeredi/fuse:\n  fuse: fix ioctl ABI\n  fuse: allow batching of FORGET requests\n  fuse: separate queue for FORGET requests\n  fuse: ioctl cleanup\n\nFix up trivial conflict in fs/fuse/inode.c due to RCU lookup having done\nthe RCU-freeing of the inode in fuse_destroy_inode().\n"
    },
    {
      "commit": "b74c79e99389cd79b31fcc08f82c24e492e63c7e",
      "tree": "763c6b412517306670bc625e90035f2d16bb739f",
      "parents": [
        "34286d6662308d82aed891852d04c7c3a2649b16"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:49:58 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:29 2011 +1100"
      },
      "message": "fs: provide rcu-walk aware permission i_ops\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "34286d6662308d82aed891852d04c7c3a2649b16",
      "tree": "c4b7311404d302e7cb94df7a4690298e1059910a",
      "parents": [
        "44a7d7a878c9cbb74f236ea755b25b6b2e26a9a9"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:49:57 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:29 2011 +1100"
      },
      "message": "fs: rcu-walk aware d_revalidate method\n\nRequire filesystems be aware of .d_revalidate being called in rcu-walk\nmode (nd-\u003eflags \u0026 LOOKUP_RCU). For now do a simple push down, returning\n-ECHILD from all implementations.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "fb045adb99d9b7c562dc7fef834857f78249daa1",
      "tree": "1fd6a4024fffeec568abe100d730589bfdb81c38",
      "parents": [
        "5f57cbcc02cf18f6b22ef4066bb10afeb8f930ff"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:49:55 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:28 2011 +1100"
      },
      "message": "fs: dcache reduce branches in lookup path\n\nReduce some branches and memory accesses in dcache lookup by adding dentry\nflags to indicate common d_ops are set, rather than having to check them.\nThis saves a pointer memory access (dentry-\u003ed_op) in common path lookup\nsituations, and saves another pointer load and branch in cases where we\nhave d_op but not the particular operation.\n\nPatched with:\n\ngit grep -E \u0027[.\u003e]([[:space:]])*d_op([[:space:]])*\u003d\u0027 | xargs sed -e \u0027s/\\([^\\t ]*\\)-\u003ed_op \u003d \\(.*\\);/d_set_d_op(\\1, \\2);/\u0027 -e \u0027s/\\([^\\t ]*\\)\\.d_op \u003d \\(.*\\);/d_set_d_op(\\\u0026\\1, \\2);/\u0027 -i\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\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": "1baa26b2be92fe9917e2f7ef46d423b5dfa4da71",
      "tree": "1b4f24c149a01e74c17cb0c290952dd09778ca1d",
      "parents": [
        "02c048b919455aaa38628563cdcc2e691c8a9f53"
      ],
      "author": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Tue Dec 07 20:16:56 2010 +0100"
      },
      "committer": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Tue Dec 07 20:16:56 2010 +0100"
      },
      "message": "fuse: fix ioctl ABI\n\nIn kernel ABI version 7.16 and later FUSE_IOCTL_RETRY reply from a\nunrestricted IOCTL request shall return with an array of \u0027struct\nfuse_ioctl_iovec\u0027 instead of \u0027struct iovec\u0027.  This fixes the ABI\nambiguity of 32bit vs. 64bit.\n\nReported-by: \"ccmail111\" \u003cccmail111@yahoo.com\u003e\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nCC: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "02c048b919455aaa38628563cdcc2e691c8a9f53",
      "tree": "1f98cd9fab564b6df8869a60f36e82d5d20f14f3",
      "parents": [
        "07e77dca8a1f17a724a9b7449f0ca02e70e9d057"
      ],
      "author": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Tue Dec 07 20:16:56 2010 +0100"
      },
      "committer": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Tue Dec 07 20:16:56 2010 +0100"
      },
      "message": "fuse: allow batching of FORGET requests\n\nTerje Malmedal reports that a fuse filesystem with 32 million inodes\non a machine with lots of memory can take up to 30 minutes to process\nFORGET requests when all those inodes are evicted from the icache.\n\nTo solve this, create a BATCH_FORGET request that allows up to about\n8000 FORGET requests to be sent in a single message.\n\nThis request is only sent if userspace supports interface version 7.16\nor later, otherwise fall back to sending individual FORGET messages.\n\nReported-by: Terje Malmedal \u003cterje.malmedal@usit.uio.no\u003e\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\n"
    },
    {
      "commit": "07e77dca8a1f17a724a9b7449f0ca02e70e9d057",
      "tree": "69186be641145fd997ce15e17a22598d9a264119",
      "parents": [
        "8ac835056ca39b242d98332f46e4d65428a8b7db"
      ],
      "author": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Tue Dec 07 20:16:56 2010 +0100"
      },
      "committer": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Tue Dec 07 20:16:56 2010 +0100"
      },
      "message": "fuse: separate queue for FORGET requests\n\nTerje Malmedal reports that a fuse filesystem with 32 million inodes\non a machine with lots of memory can go unresponsive for up to 30\nminutes when all those inodes are evicted from the icache.\n\nThe reason is that FORGET messages, sent when the inode is evicted,\nare queued up together with regular filesystem requests, and while the\nhuge queue of FORGET messages are processed no other filesystem\noperation can proceed.\n\nSince a full fuse request structure is allocated for each inode, these\ntake up quite a bit of memory as well.\n\nTo solve these issues, create a slim \u0027fuse_forget_link\u0027 structure\ncontaining just the minimum of information required to send the FORGET\nrequest and chain these on a separate queue.\n\nWhen userspace is asking for a request make sure that FORGET and\nnon-FORGET requests are selected fairly: for each 8 non-FORGET allow\n16 FORGET requests.  This will make sure FORGETs do not pile up, yet\nother requests are also allowed to proceed while the queued FORGETs\nare processed.\n\nReported-by: Terje Malmedal \u003cterje.malmedal@usit.uio.no\u003e\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\n"
    },
    {
      "commit": "8ac835056ca39b242d98332f46e4d65428a8b7db",
      "tree": "c35c2644c9bfce1dcf1b5298b00c03bd1c8d2f9a",
      "parents": [
        "7572777eef78ebdee1ecb7c258c0ef94d35bad16"
      ],
      "author": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Tue Dec 07 20:16:56 2010 +0100"
      },
      "committer": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Tue Dec 07 20:16:56 2010 +0100"
      },
      "message": "fuse: ioctl cleanup\n\nGet rid of unnecessary page_address()-es.\n\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nCC: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "7572777eef78ebdee1ecb7c258c0ef94d35bad16",
      "tree": "04bb06d75688912ac14855146dc013703529403d",
      "parents": [
        "d9d318d39dd5cb686660504a3565aac453709ccc"
      ],
      "author": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Tue Nov 30 16:39:27 2010 +0100"
      },
      "committer": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Tue Nov 30 16:39:27 2010 +0100"
      },
      "message": "fuse: verify ioctl retries\n\nVerify that the total length of the iovec returned in FUSE_IOCTL_RETRY\ndoesn\u0027t overflow iov_length().\n\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nCC: Tejun Heo \u003ctj@kernel.org\u003e\nCC: \u003cstable@kernel.org\u003e         [2.6.31+]\n"
    },
    {
      "commit": "d9d318d39dd5cb686660504a3565aac453709ccc",
      "tree": "ff818170ca69976ad2cfaa77ed788e645c4d80c9",
      "parents": [
        "e8a7e48bb248a1196484d3f8afa53bded2b24e71"
      ],
      "author": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Tue Nov 30 16:39:27 2010 +0100"
      },
      "committer": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Tue Nov 30 16:39:27 2010 +0100"
      },
      "message": "fuse: fix ioctl when server is 32bit\n\nIf a 32bit CUSE server is run on 64bit this results in EIO being\nreturned to the caller.\n\nThe reason is that FUSE_IOCTL_RETRY reply was defined to use \u0027struct\niovec\u0027, which is different on 32bit and 64bit archs.\n\nWork around this by looking at the size of the reply to determine\nwhich struct was used.  This is only needed if CONFIG_COMPAT is\ndefined.\n\nA more permanent fix for the interface will be to use the same struct\non both 32bit and 64bit.\n\nReported-by: \"ccmail111\" \u003cccmail111@yahoo.com\u003e\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nCC: Tejun Heo \u003ctj@kernel.org\u003e\nCC: \u003cstable@kernel.org\u003e         [2.6.31+]\n"
    },
    {
      "commit": "a0822c55779d9319939eac69f00bb729ea9d23da",
      "tree": "a12ff25e7718bb04ac2f85c672c9f9c370a8b167",
      "parents": [
        "c22c7aeff69796f46ae0fcec141538e28f50b24e"
      ],
      "author": {
        "name": "Ken Sumrall",
        "email": "ksumrall@android.com",
        "time": "Wed Nov 24 12:57:00 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Nov 25 06:50:41 2010 +0900"
      },
      "message": "fuse: fix attributes after open(O_TRUNC)\n\nThe attribute cache for a file was not being cleared when a file is opened\nwith O_TRUNC.\n\nIf the filesystem\u0027s open operation truncates the file (\"atomic_o_trunc\"\nfeature flag is set) then the kernel should invalidate the cached st_mtime\nand st_ctime attributes.\n\nAlso i_size should be explicitly be set to zero as it is used sometimes\nwithout refreshing the cache.\n\nSigned-off-by: Ken Sumrall \u003cksumrall@android.com\u003e\nCc: Anfei \u003canfei.zhou@gmail.com\u003e\nCc: \"Anand V. Avati\" \u003cavati@gluster.com\u003e\nSigned-off-by: Miklos Szeredi \u003cmiklos@szeredi.hu\u003e\nCc: \u003cstable@kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "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": "fc14f2fef682df677d64a145256dbd263df2aa7b",
      "tree": "74f6b939fbad959a43c04ec646cd0adc8af5f53a",
      "parents": [
        "848b83a59b772b8f102bc5e3f1187c2fa5676959"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sun Jul 25 01:48:30 2010 +0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Oct 29 04:16:28 2010 -0400"
      },
      "message": "convert get_sb_single() users\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "152a08366671080f27b32e0c411ad620c5f88b57",
      "tree": "d13d16028f74839c678bce355ba8aac75d939fa8",
      "parents": [
        "c96e41e92b4aaf11e1f9775ecf0d1c8cbff829ed"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sun Jul 25 00:46:55 2010 +0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Oct 29 04:16:13 2010 -0400"
      },
      "message": "new helper: mount_bdev()\n\n... and switch of the obvious get_sb_bdev() users to -\u003emount()\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "0be8557bcd34887d5a42c01c5659cab5ecf99f13",
      "tree": "80d211221be1583303818cf201d6e40cc0674608",
      "parents": [
        "d57af9b2142f31a39dcfdeb30776baadfc802827"
      ],
      "author": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Wed Oct 27 15:34:46 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Oct 27 18:03:17 2010 -0700"
      },
      "message": "fuse: use release_pages()\n\nReplace iterated page_cache_release() with release_pages(), which is\nfaster and shorter.\n\nNeeds release_pages() to be exported to modules.\n\nSuggested-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "426e1f5cec4821945642230218876b0e89aafab1",
      "tree": "2728ace018d0698886989da586210ef1543a7098",
      "parents": [
        "9e5fca251f44832cb996961048ea977f80faf6ea",
        "63997e98a3be68d7cec806d22bf9b02b2e1daabb"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Oct 26 17:58:44 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Oct 26 17:58:44 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: (52 commits)\n  split invalidate_inodes()\n  fs: skip I_FREEING inodes in writeback_sb_inodes\n  fs: fold invalidate_list into invalidate_inodes\n  fs: do not drop inode_lock in dispose_list\n  fs: inode split IO and LRU lists\n  fs: switch bdev inode bdi\u0027s correctly\n  fs: fix buffer invalidation in invalidate_list\n  fsnotify: use dget_parent\n  smbfs: use dget_parent\n  exportfs: use dget_parent\n  fs: use RCU read side protection in d_validate\n  fs: clean up dentry lru modification\n  fs: split __shrink_dcache_sb\n  fs: improve DCACHE_REFERENCED usage\n  fs: use percpu counter for nr_dentry and nr_dentry_unused\n  fs: simplify __d_free\n  fs: take dcache_lock inside __d_path\n  fs: do not assign default i_ino in new_inode\n  fs: introduce a per-cpu last_ino allocator\n  new helper: ihold()\n  ...\n"
    },
    {
      "commit": "b6777c40c79168d938c30b5b7471fbd64bca109c",
      "tree": "866d965ba77a47fd81b69883194ec9c7238a48d5",
      "parents": [
        "3ecb01df3261d3b1f02ccfcf8384e2a255d2a1d0"
      ],
      "author": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Tue Oct 26 14:22:27 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Oct 26 16:52:13 2010 -0700"
      },
      "message": "fuse: use clear_highpage() and KM_USER0 instead of KM_USER1\n\nCommit 7909b1c640 (\"fuse: don\u0027t use atomic kmap\") removed KM_USER0 usage\nfrom fuse/dev.c.  Switch KM_USER1 uses to KM_USER0 for clarity.  Also\nreplace open coded clear_highpage().\n\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nCc: Jan Beulich \u003cjbeulich@novell.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "3ecb01df3261d3b1f02ccfcf8384e2a255d2a1d0",
      "tree": "1fe91114d8829a511db48d757c787cfede3b929c",
      "parents": [
        "b6472776816af1ed52848c93d26e3edb3b17adab"
      ],
      "author": {
        "name": "Jan Beulich",
        "email": "JBeulich@novell.com",
        "time": "Tue Oct 26 14:22:27 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Oct 26 16:52:13 2010 -0700"
      },
      "message": "use clear_page()/copy_page() in favor of memset()/memcpy() on whole pages\n\nAfter all that\u0027s what they are intended for.\n\nSigned-off-by: Jan Beulich \u003cjbeulich@novell.com\u003e\nCc: Miklos Szeredi \u003cmiklos@szeredi.hu\u003e\nCc: \"Eric W. Biederman\" \u003cebiederm@xmission.com\u003e\nCc: \"Rafael J. Wysocki\" \u003crjw@sisk.pl\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\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": "092e0e7e520a1fca03e13c9f2d157432a8657ff2",
      "tree": "451897252c4c08c4b5a8ef535da156f1e817e80b",
      "parents": [
        "79f14b7c56d3b3ba58f8b43d1f70b9b71477a800",
        "776c163b1b93c8dfa5edba885bc2bfbc2d228a5f"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Oct 22 10:52:56 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Oct 22 10:52:56 2010 -0700"
      },
      "message": "Merge branch \u0027llseek\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/arnd/bkl\n\n* \u0027llseek\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/arnd/bkl:\n  vfs: make no_llseek the default\n  vfs: don\u0027t use BKL in default_llseek\n  llseek: automatically add .llseek fop\n  libfs: use generic_file_llseek for simple_attr\n  mac80211: disallow seeks in minstrel debug code\n  lirc: make chardev nonseekable\n  viotape: use noop_llseek\n  raw: use explicit llseek file operations\n  ibmasmfs: use generic_file_llseek\n  spufs: use llseek in all file operations\n  arm/omap: use generic_file_llseek in iommu_debug\n  lkdtm: use generic_file_llseek in debugfs\n  net/wireless: use generic_file_llseek in debugfs\n  drm: use noop_llseek\n"
    },
    {
      "commit": "6038f373a3dc1f1c26496e60b6c40b164716f07e",
      "tree": "a0d3bbd026eea41b9fc36b8c722cbaf56cd9f825",
      "parents": [
        "1ec5584e3edf9c4bf2c88c846534d19cf986ba11"
      ],
      "author": {
        "name": "Arnd Bergmann",
        "email": "arnd@arndb.de",
        "time": "Sun Aug 15 18:52:59 2010 +0200"
      },
      "committer": {
        "name": "Arnd Bergmann",
        "email": "arnd@arndb.de",
        "time": "Fri Oct 15 15:53:27 2010 +0200"
      },
      "message": "llseek: automatically add .llseek fop\n\nAll file_operations should get a .llseek operation so we can make\nnonseekable_open the default for future file operations without a\n.llseek pointer.\n\nThe three cases that we can automatically detect are no_llseek, seq_lseek\nand default_llseek. For cases where we can we can automatically prove that\nthe file offset is always ignored, we use noop_llseek, which maintains\nthe current behavior of not returning an error from a seek.\n\nNew drivers should normally not use noop_llseek but instead use no_llseek\nand call nonseekable_open at open time.  Existing drivers can be converted\nto do the same when the maintainer knows for certain that no user code\nrelies on calling seek on the device file.\n\nThe generated code is often incorrectly indented and right now contains\ncomments that clarify for each added line why a specific variant was\nchosen. In the version that gets submitted upstream, the comments will\nbe gone and I will manually fix the indentation, because there does not\nseem to be a way to do that using coccinelle.\n\nSome amount of new code is currently sitting in linux-next that should get\nthe same modifications, which I will do at the end of the merge window.\n\nMany thanks to Julia Lawall for helping me learn to write a semantic\npatch that does all this.\n\n\u003d\u003d\u003d\u003d\u003d begin semantic patch \u003d\u003d\u003d\u003d\u003d\n// This adds an llseek\u003d method to all file operations,\n// as a preparation for making no_llseek the default.\n//\n// The rules are\n// - use no_llseek explicitly if we do nonseekable_open\n// - use seq_lseek for sequential files\n// - use default_llseek if we know we access f_pos\n// - use noop_llseek if we know we don\u0027t access f_pos,\n//   but we still want to allow users to call lseek\n//\n@ open1 exists @\nidentifier nested_open;\n@@\nnested_open(...)\n{\n\u003c+...\nnonseekable_open(...)\n...+\u003e\n}\n\n@ open exists@\nidentifier open_f;\nidentifier i, f;\nidentifier open1.nested_open;\n@@\nint open_f(struct inode *i, struct file *f)\n{\n\u003c+...\n(\nnonseekable_open(...)\n|\nnested_open(...)\n)\n...+\u003e\n}\n\n@ read disable optional_qualifier exists @\nidentifier read_f;\nidentifier f, p, s, off;\ntype ssize_t, size_t, loff_t;\nexpression E;\nidentifier func;\n@@\nssize_t read_f(struct file *f, char *p, size_t s, loff_t *off)\n{\n\u003c+...\n(\n   *off \u003d E\n|\n   *off +\u003d E\n|\n   func(..., off, ...)\n|\n   E \u003d *off\n)\n...+\u003e\n}\n\n@ read_no_fpos disable optional_qualifier exists @\nidentifier read_f;\nidentifier f, p, s, off;\ntype ssize_t, size_t, loff_t;\n@@\nssize_t read_f(struct file *f, char *p, size_t s, loff_t *off)\n{\n... when !\u003d off\n}\n\n@ write @\nidentifier write_f;\nidentifier f, p, s, off;\ntype ssize_t, size_t, loff_t;\nexpression E;\nidentifier func;\n@@\nssize_t write_f(struct file *f, const char *p, size_t s, loff_t *off)\n{\n\u003c+...\n(\n  *off \u003d E\n|\n  *off +\u003d E\n|\n  func(..., off, ...)\n|\n  E \u003d *off\n)\n...+\u003e\n}\n\n@ write_no_fpos @\nidentifier write_f;\nidentifier f, p, s, off;\ntype ssize_t, size_t, loff_t;\n@@\nssize_t write_f(struct file *f, const char *p, size_t s, loff_t *off)\n{\n... when !\u003d off\n}\n\n@ fops0 @\nidentifier fops;\n@@\nstruct file_operations fops \u003d {\n ...\n};\n\n@ has_llseek depends on fops0 @\nidentifier fops0.fops;\nidentifier llseek_f;\n@@\nstruct file_operations fops \u003d {\n...\n .llseek \u003d llseek_f,\n...\n};\n\n@ has_read depends on fops0 @\nidentifier fops0.fops;\nidentifier read_f;\n@@\nstruct file_operations fops \u003d {\n...\n .read \u003d read_f,\n...\n};\n\n@ has_write depends on fops0 @\nidentifier fops0.fops;\nidentifier write_f;\n@@\nstruct file_operations fops \u003d {\n...\n .write \u003d write_f,\n...\n};\n\n@ has_open depends on fops0 @\nidentifier fops0.fops;\nidentifier open_f;\n@@\nstruct file_operations fops \u003d {\n...\n .open \u003d open_f,\n...\n};\n\n// use no_llseek if we call nonseekable_open\n////////////////////////////////////////////\n@ nonseekable1 depends on !has_llseek \u0026\u0026 has_open @\nidentifier fops0.fops;\nidentifier nso ~\u003d \"nonseekable_open\";\n@@\nstruct file_operations fops \u003d {\n...  .open \u003d nso, ...\n+.llseek \u003d no_llseek, /* nonseekable */\n};\n\n@ nonseekable2 depends on !has_llseek @\nidentifier fops0.fops;\nidentifier open.open_f;\n@@\nstruct file_operations fops \u003d {\n...  .open \u003d open_f, ...\n+.llseek \u003d no_llseek, /* open uses nonseekable */\n};\n\n// use seq_lseek for sequential files\n/////////////////////////////////////\n@ seq depends on !has_llseek @\nidentifier fops0.fops;\nidentifier sr ~\u003d \"seq_read\";\n@@\nstruct file_operations fops \u003d {\n...  .read \u003d sr, ...\n+.llseek \u003d seq_lseek, /* we have seq_read */\n};\n\n// use default_llseek if there is a readdir\n///////////////////////////////////////////\n@ fops1 depends on !has_llseek \u0026\u0026 !nonseekable1 \u0026\u0026 !nonseekable2 \u0026\u0026 !seq @\nidentifier fops0.fops;\nidentifier readdir_e;\n@@\n// any other fop is used that changes pos\nstruct file_operations fops \u003d {\n... .readdir \u003d readdir_e, ...\n+.llseek \u003d default_llseek, /* readdir is present */\n};\n\n// use default_llseek if at least one of read/write touches f_pos\n/////////////////////////////////////////////////////////////////\n@ fops2 depends on !fops1 \u0026\u0026 !has_llseek \u0026\u0026 !nonseekable1 \u0026\u0026 !nonseekable2 \u0026\u0026 !seq @\nidentifier fops0.fops;\nidentifier read.read_f;\n@@\n// read fops use offset\nstruct file_operations fops \u003d {\n... .read \u003d read_f, ...\n+.llseek \u003d default_llseek, /* read accesses f_pos */\n};\n\n@ fops3 depends on !fops1 \u0026\u0026 !fops2 \u0026\u0026 !has_llseek \u0026\u0026 !nonseekable1 \u0026\u0026 !nonseekable2 \u0026\u0026 !seq @\nidentifier fops0.fops;\nidentifier write.write_f;\n@@\n// write fops use offset\nstruct file_operations fops \u003d {\n... .write \u003d write_f, ...\n+\t.llseek \u003d default_llseek, /* write accesses f_pos */\n};\n\n// Use noop_llseek if neither read nor write accesses f_pos\n///////////////////////////////////////////////////////////\n\n@ fops4 depends on !fops1 \u0026\u0026 !fops2 \u0026\u0026 !fops3 \u0026\u0026 !has_llseek \u0026\u0026 !nonseekable1 \u0026\u0026 !nonseekable2 \u0026\u0026 !seq @\nidentifier fops0.fops;\nidentifier read_no_fpos.read_f;\nidentifier write_no_fpos.write_f;\n@@\n// write fops use offset\nstruct file_operations fops \u003d {\n...\n .write \u003d write_f,\n .read \u003d read_f,\n...\n+.llseek \u003d noop_llseek, /* read and write both use no f_pos */\n};\n\n@ depends on has_write \u0026\u0026 !has_read \u0026\u0026 !fops1 \u0026\u0026 !fops2 \u0026\u0026 !has_llseek \u0026\u0026 !nonseekable1 \u0026\u0026 !nonseekable2 \u0026\u0026 !seq @\nidentifier fops0.fops;\nidentifier write_no_fpos.write_f;\n@@\nstruct file_operations fops \u003d {\n... .write \u003d write_f, ...\n+.llseek \u003d noop_llseek, /* write uses no f_pos */\n};\n\n@ depends on has_read \u0026\u0026 !has_write \u0026\u0026 !fops1 \u0026\u0026 !fops2 \u0026\u0026 !has_llseek \u0026\u0026 !nonseekable1 \u0026\u0026 !nonseekable2 \u0026\u0026 !seq @\nidentifier fops0.fops;\nidentifier read_no_fpos.read_f;\n@@\nstruct file_operations fops \u003d {\n... .read \u003d read_f, ...\n+.llseek \u003d noop_llseek, /* read uses no f_pos */\n};\n\n@ depends on !has_read \u0026\u0026 !has_write \u0026\u0026 !fops1 \u0026\u0026 !fops2 \u0026\u0026 !has_llseek \u0026\u0026 !nonseekable1 \u0026\u0026 !nonseekable2 \u0026\u0026 !seq @\nidentifier fops0.fops;\n@@\nstruct file_operations fops \u003d {\n...\n+.llseek \u003d noop_llseek, /* no read or write fn */\n};\n\u003d\u003d\u003d\u003d\u003d End semantic patch \u003d\u003d\u003d\u003d\u003d\n\nSigned-off-by: Arnd Bergmann \u003carnd@arndb.de\u003e\nCc: Julia Lawall \u003cjulia@diku.dk\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\n"
    },
    {
      "commit": "0157443c56bcc50be4933ebdff3ece723dfd535c",
      "tree": "248063d1c23491548e078b242600f7f9cb6c369b",
      "parents": [
        "899611ee7d373e5eeda08e9a8632684e1ebbbf00"
      ],
      "author": {
        "name": "Geert Uytterhoeven",
        "email": "geert@linux-m68k.org",
        "time": "Thu Sep 30 22:06:21 2010 +0200"
      },
      "committer": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Mon Oct 04 10:45:32 2010 +0200"
      },
      "message": "fuse: Initialize total_len in fuse_retrieve()\n\nfs/fuse/dev.c:1357: warning: ‘total_len’ may be used uninitialized in this\nfunction\n\nInitialize total_len to zero, else its value will be undefined.\n\nSigned-off-by: Geert Uytterhoeven \u003cgeert@linux-m68k.org\u003e\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\n"
    },
    {
      "commit": "b9ca67b2ddf021491a3741d9555e8ff59b2175ba",
      "tree": "170010fef4f0b36ff01f1f9375d9beb9677178c7",
      "parents": [
        "595afaf9e6ee1b48e13ec4b8bcc8c7dee888161a"
      ],
      "author": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Tue Sep 07 13:42:41 2010 +0200"
      },
      "committer": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Tue Sep 07 13:42:41 2010 +0200"
      },
      "message": "fuse: fix lock annotations\n\nSparse doesn\u0027t understand lock annotations of the form\n__releases(\u0026foo-\u003elock).  Change them to __releases(foo-\u003elock).  Same\nfor __acquires().\n\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\n"
    },
    {
      "commit": "595afaf9e6ee1b48e13ec4b8bcc8c7dee888161a",
      "tree": "18ec100cfce992b61aaca2e0a8d0897e67c72300",
      "parents": [
        "2bfc96a127bc1cc94d26bfaa40159966064f9c8c"
      ],
      "author": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Tue Sep 07 13:42:41 2010 +0200"
      },
      "committer": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Tue Sep 07 13:42:41 2010 +0200"
      },
      "message": "fuse: flush background queue on connection close\n\nDavid Bartly reported that fuse can hang in fuse_get_req_nofail() when\nthe connection to the filesystem server is no longer active.\n\nIf bg_queue is not empty then flush_bg_queue() called from\nrequest_end() can put more requests on to the pending queue.  If this\nhappens while ending requests on the processing queue then those\nbackground requests will be queued to the pending list and never\nended.\n\nAnother problem is that fuse_dev_release() didn\u0027t wake up processes\nsleeping on blocked_waitq.\n\nSolve this by:\n\n a) flushing the background queue before calling end_requests() on the\n    pending and processing queues\n\n b) setting blocked \u003d 0 and waking up processes waiting on\n    blocked_waitq()\n\nThanks to David for an excellent bug report.\n\nReported-by: David Bartley \u003candareed@gmail.com\u003e\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nCC: stable@kernel.org\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": "b57922d97fd6f79b6dbe6db0c4fd30d219fa08c1",
      "tree": "1d39e9cd8e1c1f502fb7e985a08286859c69aa36",
      "parents": [
        "45321ac54316eaeeebde0b5f728a1791e500974c"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Jun 07 14:34:48 2010 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Aug 09 16:48:37 2010 -0400"
      },
      "message": "convert remaining -\u003eclear_inode() to -\u003eevict_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": "fe21ea18c742ab0eb8f6f8ebc543374839a02a87",
      "tree": "ce34b75b8b522331425b9c151cdd1e71226e8d9a",
      "parents": [
        "a57f9a3e811cf1246b394f0cc667c6bc5a52e099",
        "2d45ba381a74a743eeaa2b06c7c5c0d2bf73ba1a"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Aug 07 13:18:36 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Aug 07 13:18:36 2010 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/mszeredi/fuse\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/mszeredi/fuse:\n  fuse: add retrieve request\n  fuse: add store request\n  fuse: don\u0027t use atomic kmap\n"
    },
    {
      "commit": "9cfcac810e8993fa7a5bfd24b1a21f1dbbb03a7b",
      "tree": "86fae80c744e46b15b8eb9aa23fead7e63a64159",
      "parents": [
        "692a8a231b212dfc68f612956d63f34abf098e0f"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Fri Jul 23 11:43:51 2010 -0400"
      },
      "committer": {
        "name": "James Morris",
        "email": "jmorris@namei.org",
        "time": "Mon Aug 02 15:35:06 2010 +1000"
      },
      "message": "vfs: re-introduce MAY_CHDIR\n\nCurrently MAY_ACCESS means that filesystems must check the permissions\nright then and not rely on cached results or the results of future\noperations on the object.  This can be because of a call to sys_access() or\nbecause of a call to chdir() which needs to check search without relying on\nany future operations inside that dir.  I plan to use MAY_ACCESS for other\npurposes in the security system, so I split the MAY_ACCESS and the\nMAY_CHDIR cases.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\nAcked-by:  Stephen D. Smalley \u003csds@tycho.nsa.gov\u003e\nSigned-off-by: James Morris \u003cjmorris@namei.org\u003e\n"
    },
    {
      "commit": "2d45ba381a74a743eeaa2b06c7c5c0d2bf73ba1a",
      "tree": "8a195d072cab99c088004b74ac5889252f348542",
      "parents": [
        "a1d75f258230b75d46aecdf28b2e732413028863"
      ],
      "author": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Mon Jul 12 14:41:40 2010 +0200"
      },
      "committer": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Mon Jul 12 14:41:40 2010 +0200"
      },
      "message": "fuse: add retrieve request\n\nUserspace filesystem can request data to be retrieved from the inode\u0027s\nmapping.  This request is synchronous and the retrieved data is queued\nas a new request.  If the write to the fuse device returns an error\nthen the retrieve request was not completed and a reply will not be\nsent.\n\nOnly present pages are returned in the retrieve reply.  Retrieving\nstops when it finds a non-present page and only data prior to that is\nreturned.\n\nThis request doesn\u0027t change the dirty state of pages.\n\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\n"
    },
    {
      "commit": "a1d75f258230b75d46aecdf28b2e732413028863",
      "tree": "2ab11fc692c8426551045b7ab9a290dfa770821c",
      "parents": [
        "7909b1c64078087ac153fb47a2f50793fe3ee7d0"
      ],
      "author": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Mon Jul 12 14:41:40 2010 +0200"
      },
      "committer": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Mon Jul 12 14:41:40 2010 +0200"
      },
      "message": "fuse: add store request\n\nUserspace filesystem can request data to be stored in the inode\u0027s\nmapping.  This request is synchronous and has no reply.  If the write\nto the fuse device returns an error then the store request was not\nfully completed (but may have updated some pages).\n\nIf the stored data overflows the current file size, then the size is\nextended, similarly to a write(2) on the filesystem.\n\nPages which have been completely stored are marked uptodate.\n\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\n"
    },
    {
      "commit": "7909b1c64078087ac153fb47a2f50793fe3ee7d0",
      "tree": "83367ca6286f3ebfee8b94533152848e7529e9fb",
      "parents": [
        "815c4163b6c8ebf8152f42b0a5fd015cfdcedc78"
      ],
      "author": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Mon Jul 12 14:41:40 2010 +0200"
      },
      "committer": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Mon Jul 12 14:41:40 2010 +0200"
      },
      "message": "fuse: don\u0027t use atomic kmap\n\nDon\u0027t use atomic kmap for mapping userspace buffers in device\nread/write/splice.\n\nThis is necessary because the next patch (adding store notify)\nrequires that caller of fuse_copy_page() may sleep between\ninvocations.  The simplest way to ensure this is to change the atomic\nkmaps to non-atomic ones.\n\nThankfully architectures where kmap() is not a no-op are going out of\nfashion, so we can ignore the (probably negligible) performance impact\nof this change.\n\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\n"
    },
    {
      "commit": "003386fff3e02e51cea882e60f7d28290113964c",
      "tree": "253001a9a0fc609b757362708edc2dcaab9e2a14",
      "parents": [
        "092405cdb66f060918160ae730640b449ed7b827",
        "51921cb746f56983db5a373ca68deb2b0d3ddf01"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sun May 30 09:16:14 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sun May 30 09:16:14 2010 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/mszeredi/fuse\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/mszeredi/fuse:\n  mm: export generic_pipe_buf_*() to modules\n  fuse: support splice() reading from fuse device\n  fuse: allow splice to move pages\n  mm: export remove_from_page_cache() to modules\n  mm: export lru_cache_add_*() to modules\n  fuse: support splice() writing to fuse device\n  fuse: get page reference for readpages\n  fuse: use get_user_pages_fast()\n  fuse: remove unneeded variable\n"
    },
    {
      "commit": "7ea8085910ef3dd4f3cad6845aaa2b580d39b115",
      "tree": "d9c1edb5906f943f7d70bfb4b65106e29772d379",
      "parents": [
        "cc967be54710d97c05229b2e5ba2d00df84ddd64"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Wed May 26 17:53:25 2010 +0200"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu May 27 22:05:02 2010 -0400"
      },
      "message": "drop unused dentry argument to -\u003efsync\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "578454ff7eab61d13a26b568f99a89a2c9edc881",
      "tree": "6abdaf9acdd797767c92cb53e04574d3c755779e",
      "parents": [
        "ec96e2fe954c23a54bfdf2673437a39e193a1822"
      ],
      "author": {
        "name": "Kay Sievers",
        "email": "kay.sievers@vrfy.org",
        "time": "Thu May 20 18:07:20 2010 +0200"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@suse.de",
        "time": "Tue May 25 15:08:26 2010 -0700"
      },
      "message": "driver core: add devname module aliases to allow module on-demand auto-loading\n\nThis adds:\n  alias: devname:\u003cname\u003e\nto some common kernel modules, which will allow the on-demand loading\nof the kernel module when the device node is accessed.\n\nIdeally all these modules would be compiled-in, but distros seems too\nmuch in love with their modularization that we need to cover the common\ncases with this new facility. It will allow us to remove a bunch of pretty\nuseless init scripts and modprobes from init scripts.\n\nThe static device node aliases will be carried in the module itself. The\nprogram depmod will extract this information to a file in the module directory:\n  $ cat /lib/modules/2.6.34-00650-g537b60d-dirty/modules.devname\n  # Device nodes to trigger on-demand module loading.\n  microcode cpu/microcode c10:184\n  fuse fuse c10:229\n  ppp_generic ppp c108:0\n  tun net/tun c10:200\n  dm_mod mapper/control c10:235\n\nUdev will pick up the depmod created file on startup and create all the\nstatic device nodes which the kernel modules specify, so that these modules\nget automatically loaded when the device node is accessed:\n  $ /sbin/udevd --debug\n  ...\n  static_dev_create_from_modules: mknod \u0027/dev/cpu/microcode\u0027 c10:184\n  static_dev_create_from_modules: mknod \u0027/dev/fuse\u0027 c10:229\n  static_dev_create_from_modules: mknod \u0027/dev/ppp\u0027 c108:0\n  static_dev_create_from_modules: mknod \u0027/dev/net/tun\u0027 c10:200\n  static_dev_create_from_modules: mknod \u0027/dev/mapper/control\u0027 c10:235\n  udev_rules_apply_static_dev_perms: chmod \u0027/dev/net/tun\u0027 0666\n  udev_rules_apply_static_dev_perms: chmod \u0027/dev/fuse\u0027 0666\n\nA few device nodes are switched to statically allocated numbers, to allow\nthe static nodes to work. This might also useful for systems which still run\na plain static /dev, which is completely unsafe to use with any dynamic minor\nnumbers.\n\nNote:\nThe devname aliases must be limited to the *common* and *single*instance*\ndevice nodes, like the misc devices, and never be used for conceptually limited\nsystems like the loop devices, which should rather get fixed properly and get a\ncontrol node for losetup to talk to, instead of creating a random number of\ndevice nodes in advance, regardless if they are ever used.\n\nThis facility is to hide the mess distros are creating with too modualized\nkernels, and just to hide that these modules are not compiled-in, and not to\npaper-over broken concepts. Thanks! :)\n\nCc: Greg Kroah-Hartman \u003cgregkh@suse.de\u003e\nCc: David S. Miller \u003cdavem@davemloft.net\u003e\nCc: Miklos Szeredi \u003cmiklos@szeredi.hu\u003e\nCc: Chris Mason \u003cchris.mason@oracle.com\u003e\nCc: Alasdair G Kergon \u003cagk@redhat.com\u003e\nCc: Tigran Aivazian \u003ctigran@aivazian.fsnet.co.uk\u003e\nCc: Ian Kent \u003craven@themaw.net\u003e\nSigned-Off-By: Kay Sievers \u003ckay.sievers@vrfy.org\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@suse.de\u003e\n"
    },
    {
      "commit": "c3021629a0d820247ee12b6c5192a1d5380e21c6",
      "tree": "eceb75197a9871e99b0b696af8047357686e4223",
      "parents": [
        "ce534fb052928ce556639d7ecf01cbf4e01321e1"
      ],
      "author": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Tue May 25 15:06:07 2010 +0200"
      },
      "committer": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Tue May 25 15:06:07 2010 +0200"
      },
      "message": "fuse: support splice() reading from fuse device\n\nAllow userspace filesystem implementation to use splice() to read from\nthe fuse device.\n\nThe userspace filesystem can now transfer data coming from a WRITE\nrequest to an arbitrary file descriptor (regular file, block device or\nsocket) without having to go through a userspace buffer.\n\nThe semantics of using splice() to read messages are:\n\n 1)  with a single splice() call move the whole message from the fuse\n     device to a temporary pipe\n 2)  read the header from the pipe and determine the message type\n 3a) if message is a WRITE then splice data from pipe to destination\n 3b) else read rest of message to userspace buffer\n\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\n"
    },
    {
      "commit": "ce534fb052928ce556639d7ecf01cbf4e01321e1",
      "tree": "c09f7c592a41d635d7f2f54fc7fe10594f332b69",
      "parents": [
        "a52116aba5b3eed0ee41f70b794cc1937acd5cb8"
      ],
      "author": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Tue May 25 15:06:07 2010 +0200"
      },
      "committer": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Tue May 25 15:06:07 2010 +0200"
      },
      "message": "fuse: allow splice to move pages\n\nWhen splicing buffers to the fuse device with SPLICE_F_MOVE, try to\nmove pages from the pipe buffer into the page cache.  This allows\npopulating the fuse filesystem\u0027s cache without ever touching the page\ncontents, i.e. zero copy read capability.\n\nThe following steps are performed when trying to move a page into the\npage cache:\n\n - buf-\u003eops-\u003econfirm() to make sure the new page is uptodate\n - buf-\u003eops-\u003esteal() to try to remove the new page from it\u0027s previous place\n - remove_from_page_cache() on the old page\n - add_to_page_cache_locked() on the new page\n\nIf any of the above steps fail (non fatally) then the code falls back\nto copying the page.  In particular -\u003esteal() will fail if there are\nexternal references (other than the page cache and the pipe buffer) to\nthe page.\n\nAlso since the remove_from_page_cache() + add_to_page_cache_locked()\nare non-atomic it is possible that the page cache is repopulated in\nbetween the two and add_to_page_cache_locked() will fail.  This could\nbe fixed by creating a new atomic replace_page_cache_page() function.\n\nfuse_readpages_end() needed to be reworked so it works even if\npage-\u003emapping is NULL for some or all pages which can happen if the\nadd_to_page_cache_locked() failed.\n\nA number of sanity checks were added to make sure the stolen pages\ndon\u0027t have weird flags set, etc...  These could be moved into generic\nsplice/steal code.\n\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\n"
    },
    {
      "commit": "dd3bb14f44a6382de2508ec387c7e5569ad2d4f1",
      "tree": "4c84a75f9f40a55f7f7d6da0e3c83b2f073bf4e8",
      "parents": [
        "b5dd328537edeb4c1d2e71e344b6c443e0874d90"
      ],
      "author": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Tue May 25 15:06:06 2010 +0200"
      },
      "committer": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Tue May 25 15:06:06 2010 +0200"
      },
      "message": "fuse: support splice() writing to fuse device\n\nAllow userspace filesystem implementation to use splice() to write to\nthe fuse device.  The semantics of using splice() are:\n\n 1) buffer the message header and data in a temporary pipe\n 2) with a *single* splice() call move the message from the temporary pipe\n    to the fuse device\n\nThe READ reply message has the most interesting use for this, since\nnow the data from an arbitrary file descriptor (which could be a\nregular file, a block device or a socket) can be tranferred into the\nfuse device without having to go through a userspace buffer.  It will\nalso allow zero copy moving of pages.\n\nOne caveat is that the protocol on the fuse device requires the length\nof the whole message to be written into the header.  But the length of\nthe data transferred into the temporary pipe may not be known in\nadvance.  The current library implementation works around this by\nusing vmplice to write the header and modifying the header after\nsplicing the data into the pipe (error handling omitted):\n\n\tstruct fuse_out_header out;\n\n\tiov.iov_base \u003d \u0026out;\n\tiov.iov_len \u003d sizeof(struct fuse_out_header);\n\tvmsplice(pip[1], \u0026iov, 1, 0);\n\tlen \u003d splice(input_fd, input_offset, pip[1], NULL, len, 0);\n\t/* retrospectively modify the header: */\n\tout.len \u003d len + sizeof(struct fuse_out_header);\n\tsplice(pip[0], NULL, fuse_chan_fd(req-\u003ech), NULL, out.len, flags);\n\nThis works since vmsplice only saves a pointer to the data, it does\nnot copy the data itself.\n\nSince pipes are currently limited to 16 pages and messages need to be\nspliced atomically, the length of the data is limited to 15 pages (or\n60kB for 4k pages).\n\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\n"
    },
    {
      "commit": "b5dd328537edeb4c1d2e71e344b6c443e0874d90",
      "tree": "d4f4ec21ce2cd4bdeb596776dc28552789b65845",
      "parents": [
        "1bf94ca73ea524228b864275efa44373ebb939a0"
      ],
      "author": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Tue May 25 15:06:06 2010 +0200"
      },
      "committer": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Tue May 25 15:06:06 2010 +0200"
      },
      "message": "fuse: get page reference for readpages\n\nAcquire a page ref on pages in -\u003ereadpages() and release them when the\nread has finished.  Not acquiring a reference didn\u0027t seem to cause any\ntrouble since the page is locked and will not be kicked out of the\npage cache during the read.\n\nHowever the following patches will want to remove the page from the\ncache so a separate ref is needed.  Making the reference in req-\u003epages\nexplicit also makes the code easier to understand.\n\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\n"
    }
  ],
  "next": "1bf94ca73ea524228b864275efa44373ebb939a0"
}
