)]}'
{
  "log": [
    {
      "commit": "714f83d5d9f7c785f622259dad1f4fad12d64664",
      "tree": "20563541ae438e11d686b4d629074eb002a481b7",
      "parents": [
        "8901e7ffc2fa78ede7ce9826dbad68a3a25dc2dc",
        "645dae969c3b8651c5bc7c54a1835ec03820f85f"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sun Apr 05 11:04:19 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sun Apr 05 11:04:19 2009 -0700"
      },
      "message": "Merge branch \u0027tracing-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip\n\n* \u0027tracing-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip: (413 commits)\n  tracing, net: fix net tree and tracing tree merge interaction\n  tracing, powerpc: fix powerpc tree and tracing tree interaction\n  ring-buffer: do not remove reader page from list on ring buffer free\n  function-graph: allow unregistering twice\n  trace: make argument \u0027mem\u0027 of trace_seq_putmem() const\n  tracing: add missing \u0027extern\u0027 keywords to trace_output.h\n  tracing: provide trace_seq_reserve()\n  blktrace: print out BLK_TN_MESSAGE properly\n  blktrace: extract duplidate code\n  blktrace: fix memory leak when freeing struct blk_io_trace\n  blktrace: fix blk_probes_ref chaos\n  blktrace: make classic output more classic\n  blktrace: fix off-by-one bug\n  blktrace: fix the original blktrace\n  blktrace: fix a race when creating blk_tree_root in debugfs\n  blktrace: fix timestamp in binary output\n  tracing, Text Edit Lock: cleanup\n  tracing: filter fix for TRACE_EVENT_FORMAT events\n  ftrace: Using FTRACE_WARN_ON() to check \"freed record\" in ftrace_release()\n  x86: kretprobe-booster interrupt emulation code fix\n  ...\n\nFix up trivial conflicts in\n arch/parisc/include/asm/ftrace.h\n include/linux/memory.h\n kernel/extable.c\n kernel/module.c\n"
    },
    {
      "commit": "601cc11d054ae4b5e9b5babec3d8e4667a2cb9b5",
      "tree": "725ec3422b4fe50267915c1d5b80c49712ffff75",
      "parents": [
        "6bb597507f9839b13498781e481f5458aea33620"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Apr 03 08:03:22 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Apr 04 14:20:34 2009 -0700"
      },
      "message": "Make non-compat preadv/pwritev use native register size\n\nInstead of always splitting the file offset into 32-bit \u0027high\u0027 and \u0027low\u0027\nparts, just split them into the largest natural word-size - which in C\nterms is \u0027unsigned long\u0027.\n\nThis allows 64-bit architectures to avoid the unnecessary 32-bit\nshifting and masking for native format (while the compat interfaces will\nobviously always have to do it).\n\nThis also changes the order of \u0027high\u0027 and \u0027low\u0027 to be \"low first\".  Why?\nBecause when we have it like this, the 64-bit system calls now don\u0027t use\nthe \"pos_high\" argument at all, and it makes more sense for the native\nsystem call to simply match the user-mode prototype.\n\nThis results in a much more natural calling convention, and allows the\ncompiler to generate much more straightforward code.  On x86-64, we now\ngenerate\n\n        testq   %rcx, %rcx      # pos_l\n        js      .L122   #,\n        movq    %rcx, -48(%rbp) # pos_l, pos\n\nfrom the C source\n\n        loff_t pos \u003d pos_from_hilo(pos_h, pos_l);\n\t...\n        if (pos \u003c 0)\n                return -EINVAL;\n\nand the \u0027pos_h\u0027 register isn\u0027t even touched.  It used to generate code\nlike\n\n        mov     %r8d, %r8d      # pos_low, pos_low\n        salq    $32, %rcx       #, tmp71\n        movq    %r8, %rax       # pos_low, pos.386\n        orq     %rcx, %rax      # tmp71, pos.386\n        js      .L122   #,\n        movq    %rax, -48(%rbp) # pos.386, pos\n\nwhich isn\u0027t _that_ horrible, but it does show how the natural word size\nis just a more sensible interface (same arguments will hold in the user\nlevel glibc wrapper function, of course, so the kernel side is just half\nof the equation!)\n\nNote: in all cases the user code wrapper can again be the same. You can\njust do\n\n\t#define HALF_BITS (sizeof(unsigned long)*4)\n\t__syscall(PWRITEV, fd, iov, count, offset, (offset \u003e\u003e HALF_BITS) \u003e\u003e HALF_BITS);\n\nor something like that.  That way the user mode wrapper will also be\nnicely passing in a zero (it won\u0027t actually have to do the shifts, the\ncompiler will understand what is going on) for the last argument.\n\nAnd that is a good idea, even if nobody will necessarily ever care: if\nwe ever do move to a 128-bit lloff_t, this particular system call might\nbe left alone.  Of course, that will be the least of our worries if we\nreally ever need to care, so this may not be worth really caring about.\n\n[ Fixed for lost \u0027loff_t\u0027 cast noticed by Andrew Morton ]\n\nAcked-by: Gerd Hoffmann \u003ckraxel@redhat.com\u003e\nCc: H. Peter Anvin \u003chpa@zytor.com\u003e\nCc: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nCc: linux-api@vger.kernel.org\nCc: linux-arch@vger.kernel.org\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Ralf Baechle \u003cralf@linux-mips.org\u003e\u003e\nCc: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "f945b7abcb6cfd3106c9855aa2aa6e4396a19d76",
      "tree": "2e141cbb9c7b1d76123310695d74b4456723164a",
      "parents": [
        "04c860c188ebdcf396fd50751592fb5a9f51287a",
        "fc280c9692031ee41545d6bea00bbb7c7dec97a9"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Apr 03 15:27:58 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Apr 03 15:27:58 2009 -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: allow private mappings of \"direct_io\" files\n  fuse: allow kernel to access \"direct_io\" files\n"
    },
    {
      "commit": "811158b147a503fbdf9773224004ffd32002d1fe",
      "tree": "0a11dcfefe721bfc38ea9f1f4a238822dbae0dda",
      "parents": [
        "4e76c5ccd5ac9bd003467d3bb0f49b18572dd4cd",
        "b26e0ed4936b743b693a4cc1413561fa3e4eaf65"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Apr 03 15:24:35 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Apr 03 15:24:35 2009 -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: (28 commits)\n  trivial: Update my email address\n  trivial: NULL noise: drivers/mtd/tests/mtd_*test.c\n  trivial: NULL noise: drivers/media/dvb/frontends/drx397xD_fw.h\n  trivial: Fix misspelling of \"Celsius\".\n  trivial: remove unused variable \u0027path\u0027 in alloc_file()\n  trivial: fix a pdlfush -\u003e pdflush typo in comment\n  trivial: jbd header comment typo fix for JBD_PARANOID_IOFAIL\n  trivial: wusb: Storage class should be before const qualifier\n  trivial: drivers/char/bsr.c: Storage class should be before const qualifier\n  trivial: h8300: Storage class should be before const qualifier\n  trivial: fix where cgroup documentation is not correctly referred to\n  trivial: Give the right path in Documentation example\n  trivial: MTD: remove EOL from MODULE_DESCRIPTION\n  trivial: Fix typo in bio_split()\u0027s documentation\n  trivial: PWM: fix of #endif comment\n  trivial: fix typos/grammar errors in Kconfig texts\n  trivial: Fix misspelling of firmware\n  trivial: cgroups: documentation typo and spelling corrections\n  trivial: Update contact info for Jochen Hein\n  trivial: fix typo \"resgister\" -\u003e \"register\"\n  ...\n"
    },
    {
      "commit": "b983471794e568fd71fa767da77a62ba517c3e63",
      "tree": "92a1cc26c4846b49d90225d004ba1b7bd6fe3d81",
      "parents": [
        "5a3ae276057840f0e60664c12fc3ef80aa59d1d4",
        "c293498be69816087746161338de4b81efdf69fc"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Apr 03 15:14:44 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Apr 03 15:14:44 2009 -0700"
      },
      "message": "Merge git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable\n\n* git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable:\n  Btrfs: BUG to BUG_ON changes\n  Btrfs: remove dead code\n  Btrfs: remove dead code\n  Btrfs: fix typos in comments\n  Btrfs: remove unused ftrace include\n  Btrfs: fix __ucmpdi2 compile bug on 32 bit builds\n  Btrfs: free inode struct when btrfs_new_inode fails\n  Btrfs: fix race in worker_loop\n  Btrfs: add flushoncommit mount option\n  Btrfs: notreelog mount option\n  Btrfs: introduce btrfs_show_options\n  Btrfs: rework allocation clustering\n  Btrfs: Optimize locking in btrfs_next_leaf()\n  Btrfs: break up btrfs_search_slot into smaller pieces\n  Btrfs: kill the pinned_mutex\n  Btrfs: kill the block group alloc mutex\n  Btrfs: clean up find_free_extent\n  Btrfs: free space cache cleanups\n  Btrfs: unplug in the async bio submission threads\n  Btrfs: keep processing bios for a given bdev if our proc is batching\n"
    },
    {
      "commit": "9140db04ef185f934acf2b1b15b3dd5e6a6bfc22",
      "tree": "354dbc0351195ae2b6ea5f7dfbf68a99307c3d69",
      "parents": [
        "1fca3a05ef2823830925dfb66711d6d920265a8d"
      ],
      "author": {
        "name": "Srinivas Eeda",
        "email": "srinivas.eeda@oracle.com",
        "time": "Fri Mar 06 14:21:46 2009 -0800"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Fri Apr 03 11:39:26 2009 -0700"
      },
      "message": "ocfs2: recover orphans in offline slots during recovery and mount\n\nDuring recovery, a node recovers orphans in it\u0027s slot and the dead node(s). But\nif the dead nodes were holding orphans in offline slots, they will be left\nunrecovered.\n\nIf the dead node is the last one to die and is holding orphans in other slots\nand is the first one to mount, then it only recovers it\u0027s own slot, which\nleaves orphans in offline slots.\n\nThis patch queues complete_recovery to clean orphans for all offline slots\nduring mount and node recovery.\n\nSigned-off-by: Srinivas Eeda \u003csrinivas.eeda@oracle.com\u003e\nAcked-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\n"
    },
    {
      "commit": "1fca3a05ef2823830925dfb66711d6d920265a8d",
      "tree": "95717db99015caf84c8c90ab94af093b3d75d731",
      "parents": [
        "6ca497a83e592d64e050c4d04b6dedb8c915f39a"
      ],
      "author": {
        "name": "Hisashi Hifumi",
        "email": "hifumi.hisashi@oss.ntt.co.jp",
        "time": "Thu Mar 05 17:22:21 2009 +0900"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Fri Apr 03 11:39:26 2009 -0700"
      },
      "message": "ocfs2: Pagecache usage optimization on ocfs2\n\nA page can have multiple buffers and even if a page is not uptodate, some buffers\ncan be uptodate on pagesize !\u003d blocksize environment.\nThis aops checks that all buffers which correspond to a part of a file\nthat we want to read are uptodate. If so, we do not have to issue actual\nread IO to HDD even if a page is not uptodate because the portion we\nwant to read are uptodate.\n\"block_is_partially_uptodate\" function is already used by ext2/3/4.\nWith the following patch random read/write mixed workloads or random read after\nrandom write workloads can be optimized and we can get performance improvement.\n\nSigned-off-by: Hisashi Hifumi \u003chifumi.hisashi@oss.ntt.co.jp\u003e\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\n"
    },
    {
      "commit": "6ca497a83e592d64e050c4d04b6dedb8c915f39a",
      "tree": "0b9cd611d6d907881841eca73d12a7f3b85f1716",
      "parents": [
        "9405dccfd3201d2b76e120949bec81ba8cfbd2d0"
      ],
      "author": {
        "name": "wengang wang",
        "email": "wen.gang.wang@oracle.com",
        "time": "Fri Mar 06 21:29:10 2009 +0800"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Fri Apr 03 11:39:25 2009 -0700"
      },
      "message": "ocfs2: fix rare stale inode errors when exporting via nfs\n\nFor nfs exporting, ocfs2_get_dentry() returns the dentry for fh.\nocfs2_get_dentry() may read from disk when the inode is not in memory,\nwithout any cross cluster lock. this leads to the file system loading a\nstale inode.\n\nThis patch fixes above problem.\n\nSolution is that in case of inode is not in memory, we get the cluster\nlock(PR) of alloc inode where the inode in question is allocated from (this\ncauses node on which deletion is done sync the alloc inode) before reading\nout the inode itsself. then we check the bitmap in the group (the inode in\nquestion allcated from) to see if the bit is clear. if it\u0027s clear then it\u0027s\nstale. if the bit is set, we then check generation as the existing code\ndoes.\n\nWe have to read out the inode in question from disk first to know its alloc\nslot and allot bit. And if its not stale we read it out using ocfs2_iget().\nThe second read should then be from cache.\n\nAnd also we have to add a per superblock nfs_sync_lock to cover the lock for\nalloc inode and that for inode in question. this is because ocfs2_get_dentry()\nand ocfs2_delete_inode() lock on them in reverse order. nfs_sync_lock is locked\nin EX mode in ocfs2_get_dentry() and in PR mode in ocfs2_delete_inode(). so\nthat mutliple ocfs2_delete_inode() can run concurrently in normal case.\n\n[mfasheh@suse.com: build warning fixes and comment cleanups]\nSigned-off-by: Wengang Wang \u003cwen.gang.wang@oracle.com\u003e\nAcked-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\n"
    },
    {
      "commit": "9405dccfd3201d2b76e120949bec81ba8cfbd2d0",
      "tree": "91a9524cf4e01b82edad14be383d5df3fe29a372",
      "parents": [
        "516b7e52abc7efd61c084b217c61985a403828ed"
      ],
      "author": {
        "name": "Sunil Mushran",
        "email": "sunil.mushran@oracle.com",
        "time": "Thu Feb 26 15:00:49 2009 -0800"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Fri Apr 03 11:39:25 2009 -0700"
      },
      "message": "ocfs2/dlm: Tweak mle_state output\n\nThe debugfs file, mle_state, now prints the number of largest number of mles\nin one hash link.\n\nSigned-off-by: Sunil Mushran \u003csunil.mushran@oracle.com\u003e\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\n"
    },
    {
      "commit": "516b7e52abc7efd61c084b217c61985a403828ed",
      "tree": "80bd45f16b00bd009e6a0306cec430d0ef7b49bc",
      "parents": [
        "7141514b8307734c117f100c4a3637887c5def45"
      ],
      "author": {
        "name": "Sunil Mushran",
        "email": "sunil.mushran@oracle.com",
        "time": "Thu Feb 26 15:00:48 2009 -0800"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Fri Apr 03 11:39:24 2009 -0700"
      },
      "message": "ocfs2/dlm: Do not purge lockres that is being migrated dlm_purge_lockres()\n\nThis patch attempts to fix a fine race between purging and migration.\n\nSigned-off-by: Sunil Mushran \u003csunil.mushran@oracle.com\u003e\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\n"
    },
    {
      "commit": "7141514b8307734c117f100c4a3637887c5def45",
      "tree": "8f2944508cdb0dd1ea7288d7300e4c29995c904e",
      "parents": [
        "e64ff14607ac90b2f3349550a41cc8dc0c0b1324"
      ],
      "author": {
        "name": "Sunil Mushran",
        "email": "sunil.mushran@oracle.com",
        "time": "Thu Feb 26 15:00:47 2009 -0800"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Fri Apr 03 11:39:23 2009 -0700"
      },
      "message": "ocfs2/dlm: Remove struct dlm_lock_name in struct dlm_master_list_entry\n\nThis patch removes struct dlm_lock_name and adds the entries directly\nto struct dlm_master_list_entry. Under the new scheme, both mles that\nare backed by a lockres or not, will have the name populated in mle-\u003emname.\nThis allows us to get rid of code that was figuring out the location of\nthe mle name.\n\nSigned-off-by: Sunil Mushran \u003csunil.mushran@oracle.com\u003e\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\n"
    },
    {
      "commit": "e64ff14607ac90b2f3349550a41cc8dc0c0b1324",
      "tree": "e1aacbdff2ae5eef2b192212a7daf5dec0e6601c",
      "parents": [
        "7d62a978a8c85cd82301615840d744f0d83b87e7"
      ],
      "author": {
        "name": "Sunil Mushran",
        "email": "sunil.mushran@oracle.com",
        "time": "Thu Feb 26 15:00:46 2009 -0800"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Fri Apr 03 11:39:22 2009 -0700"
      },
      "message": "ocfs2/dlm: Show the number of lockres/mles in dlm_state\n\nThis patch shows the number of lockres\u0027 and mles in the debugfs file, dlm_state.\n\nSigned-off-by: Sunil Mushran \u003csunil.mushran@oracle.com\u003e\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\n"
    },
    {
      "commit": "7d62a978a8c85cd82301615840d744f0d83b87e7",
      "tree": "c8e3e59f85ddbfef31a41e8f966e6e88e9d4890b",
      "parents": [
        "6800791ab773453bdec337efb3f0cec6557f3bb3"
      ],
      "author": {
        "name": "Sunil Mushran",
        "email": "sunil.mushran@oracle.com",
        "time": "Thu Feb 26 15:00:45 2009 -0800"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Fri Apr 03 11:39:21 2009 -0700"
      },
      "message": "ocfs2/dlm: dlm_set_lockres_owner() and dlm_change_lockres_owner() inlined\n\nThis patch inlines dlm_set_lockres_owner() and dlm_change_lockres_owner().\n\nSigned-off-by: Sunil Mushran \u003csunil.mushran@oracle.com\u003e\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\n"
    },
    {
      "commit": "6800791ab773453bdec337efb3f0cec6557f3bb3",
      "tree": "c4f678c75d17aae11eae6e71d16962c7526da194",
      "parents": [
        "2041d8fdcec7603401829f60810c1dbd5e96c043"
      ],
      "author": {
        "name": "Sunil Mushran",
        "email": "sunil.mushran@oracle.com",
        "time": "Thu Feb 26 15:00:44 2009 -0800"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Fri Apr 03 11:39:21 2009 -0700"
      },
      "message": "ocfs2/dlm: Improve lockres counts\n\nThis patch replaces the lockres counts that tracked the number number of\nlocally and remotely mastered lockres\u0027 with a current and total count. The\ntotal count is the number of lockres\u0027 that have been created since the dlm\ndomain was created.\n\nThe number of locally and remotely mastered counts can be computed using\nthe locking_state output.\n\nSigned-off-by: Sunil Mushran \u003csunil.mushran@oracle.com\u003e\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\n"
    },
    {
      "commit": "2041d8fdcec7603401829f60810c1dbd5e96c043",
      "tree": "b11697962ccdec9556e66e6c261ecff33d1fb468",
      "parents": [
        "67ae1f0604da3bcf3ed6dec59ac71d07e54a404c"
      ],
      "author": {
        "name": "Sunil Mushran",
        "email": "sunil.mushran@oracle.com",
        "time": "Thu Feb 26 15:00:43 2009 -0800"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Fri Apr 03 11:39:21 2009 -0700"
      },
      "message": "ocfs2/dlm: Track number of mles\n\nThe lifetime of a mle is limited to the duration of the lockres mastery\nprocess. While typically this lifetime is fairly short, we have noticed\nthe number of mles explode under certain circumstances. This patch tracks\nthe number of each different types of mles and should help us determine\nhow best to speed up the mastery process.\n\nSigned-off-by: Sunil Mushran \u003csunil.mushran@oracle.com\u003e\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\n"
    },
    {
      "commit": "67ae1f0604da3bcf3ed6dec59ac71d07e54a404c",
      "tree": "dd97a77e0d718d6d154c41a7c5178c1cfcb709b6",
      "parents": [
        "2ed6c750d645d09b5948e46fada3ca1fda3157b5"
      ],
      "author": {
        "name": "Sunil Mushran",
        "email": "sunil.mushran@oracle.com",
        "time": "Thu Feb 26 15:00:42 2009 -0800"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Fri Apr 03 11:39:21 2009 -0700"
      },
      "message": "ocfs2/dlm: Indent dlm_cleanup_master_list()\n\nThe previous patch explicitly did not indent dlm_cleanup_master_list()\nso as to make the patch readable. This patch properly indents the\nfunction.\n\nSigned-off-by: Sunil Mushran \u003csunil.mushran@oracle.com\u003e\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\n"
    },
    {
      "commit": "2ed6c750d645d09b5948e46fada3ca1fda3157b5",
      "tree": "47d2a6b7d3f6407312f9857abdaf114f14223286",
      "parents": [
        "e2b66ddcce922529e058cf74d839c4c49c8379a1"
      ],
      "author": {
        "name": "Sunil Mushran",
        "email": "sunil.mushran@oracle.com",
        "time": "Thu Feb 26 15:00:41 2009 -0800"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Fri Apr 03 11:39:19 2009 -0700"
      },
      "message": "ocfs2/dlm: Activate dlm-\u003emaster_hash for master list entries\n\nWith this patch, the mles are stored in a hash and not a simple list.\nThis should improve the mle lookup time when the number of outstanding\nmasteries is large.\n\nSigned-off-by: Sunil Mushran \u003csunil.mushran@oracle.com\u003e\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\n"
    },
    {
      "commit": "e2b66ddcce922529e058cf74d839c4c49c8379a1",
      "tree": "d27e078e59c79624a2f7a1317c50934e543489f1",
      "parents": [
        "c2cd4a44333034203cb198915e2b75c3227d41bf"
      ],
      "author": {
        "name": "Sunil Mushran",
        "email": "sunil.mushran@oracle.com",
        "time": "Thu Feb 26 15:00:40 2009 -0800"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Fri Apr 03 11:39:18 2009 -0700"
      },
      "message": "ocfs2/dlm: Create and destroy the dlm-\u003emaster_hash\n\nThis patch adds code to create and destroy the dlm-\u003emaster_hash.\n\nSigned-off-by: Sunil Mushran \u003csunil.mushran@oracle.com\u003e\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\n"
    },
    {
      "commit": "c2cd4a44333034203cb198915e2b75c3227d41bf",
      "tree": "69e6bf95830daec0db0cd3219c55edfa87fc4e64",
      "parents": [
        "f77a9a78c3a1d995b3bf948dbcad5c4a1b2302d5"
      ],
      "author": {
        "name": "Sunil Mushran",
        "email": "sunil.mushran@oracle.com",
        "time": "Thu Feb 26 15:00:39 2009 -0800"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Fri Apr 03 11:39:18 2009 -0700"
      },
      "message": "ocfs2/dlm: Refactor dlm_clean_master_list()\n\nThis patch refactors dlm_clean_master_list() so as to make it\neasier to convert the mle list to a hash.\n\nSigned-off-by: Sunil Mushran \u003csunil.mushran@oracle.com\u003e\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\n"
    },
    {
      "commit": "f77a9a78c3a1d995b3bf948dbcad5c4a1b2302d5",
      "tree": "c12f1fa1da0a64693d39a2f98c5a1981bf58a83a",
      "parents": [
        "1c0845773ad9f4875603b752235aea8aa04565f3"
      ],
      "author": {
        "name": "Sunil Mushran",
        "email": "sunil.mushran@oracle.com",
        "time": "Thu Feb 26 15:00:38 2009 -0800"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Fri Apr 03 11:39:18 2009 -0700"
      },
      "message": "ocfs2/dlm: Clean up struct dlm_lock_name\n\nFor master mle, the name it stored in the attached lockres in struct qstr.\nFor block and migration mle, the name is stored inline in struct dlm_lock_name.\nThis patch attempts to make struct dlm_lock_name look like a struct qstr. While\nwe could use struct qstr, we don\u0027t because we want to avoid having to malloc\nand free the lockname string as the mle\u0027s lifetime is fairly short.\n\nSigned-off-by: Sunil Mushran \u003csunil.mushran@oracle.com\u003e\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\n"
    },
    {
      "commit": "1c0845773ad9f4875603b752235aea8aa04565f3",
      "tree": "35554daeb156154197c664d6dd5a52552eb292e4",
      "parents": [
        "feb473a6e8bd19297d0f3bb377b25055c0228c0a"
      ],
      "author": {
        "name": "Sunil Mushran",
        "email": "sunil.mushran@oracle.com",
        "time": "Thu Feb 26 15:00:37 2009 -0800"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Fri Apr 03 11:39:18 2009 -0700"
      },
      "message": "ocfs2/dlm: Encapsulate adding and removing of mle from dlm-\u003emaster_list\n\nThis patch encapsulates adding and removing of the mle from the\ndlm-\u003emaster_list. This patch is part of the series of patches that\nconverts the mle list to a mle hash.\n\nSigned-off-by: Sunil Mushran \u003csunil.mushran@oracle.com\u003e\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\n"
    },
    {
      "commit": "feb473a6e8bd19297d0f3bb377b25055c0228c0a",
      "tree": "4ceae3a185fc430c8927dc0bbb197a3694c37194",
      "parents": [
        "60ca81e82dae4aa2e8ae84cf96b4d08535931669"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "tao.ma@oracle.com",
        "time": "Wed Feb 25 00:53:25 2009 +0800"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Fri Apr 03 11:39:18 2009 -0700"
      },
      "message": "ocfs2: Optimize inode group allocation by recording last used group.\n\nIn ocfs2, the block group search looks for the \"emptiest\" group\nto allocate from. So if the allocator has many equally(or almost\nequally) empty groups, new block group will tend to get spread\nout amongst them.\n\nSo we add osb_inode_alloc_group in ocfs2_super to record the last\nused inode allocation group.\nFor more details, please see\nhttp://oss.oracle.com/osswiki/OCFS2/DesignDocs/InodeAllocationStrategy.\n\nI have done some basic test and the results are a ten times improvement on\nsome cold-cache stat workloads.\n\nSigned-off-by: Tao Ma \u003ctao.ma@oracle.com\u003e\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\n"
    },
    {
      "commit": "60ca81e82dae4aa2e8ae84cf96b4d08535931669",
      "tree": "da9b5d2a002ae886ec5e82b7c49429437b1b772d",
      "parents": [
        "138211515c102807a16c02fdc15feef1f6ef8124"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "tao.ma@oracle.com",
        "time": "Wed Feb 25 00:53:24 2009 +0800"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Fri Apr 03 11:39:17 2009 -0700"
      },
      "message": "ocfs2: Allocate inode groups from global_bitmap.\n\nInode groups used to be allocated from local alloc file,\nbut since we want all inodes to be contiguous enough, we\nwill try to allocate them directly from global_bitmap.\n\nSigned-off-by: Tao Ma \u003ctao.ma@oracle.com\u003e\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\n"
    },
    {
      "commit": "138211515c102807a16c02fdc15feef1f6ef8124",
      "tree": "9b6fff8512a19792f2e29458292607f4efb413c4",
      "parents": [
        "1d46dc08d33138c29c63d717807c08ab704fc773"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "tao.ma@oracle.com",
        "time": "Wed Feb 25 00:53:23 2009 +0800"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Fri Apr 03 11:39:17 2009 -0700"
      },
      "message": "ocfs2: Optimize inode allocation by remembering last group\n\nIn ocfs2, the inode block search looks for the \"emptiest\" inode\ngroup to allocate from. So if an inode alloc file has many equally\n(or almost equally) empty groups, new inodes will tend to get\nspread out amongst them, which in turn can put them all over the\ndisk. This is undesirable because directory operations on conceptually\n\"nearby\" inodes force a large number of seeks.\n\nSo we add ip_last_used_group in core directory inodes which records\nthe last used allocation group. Another field named ip_last_used_slot\nis also added in case inode stealing happens. When claiming new inode,\nwe passed in directory\u0027s inode so that the allocation can use this\ninformation.\nFor more details, please see\nhttp://oss.oracle.com/osswiki/OCFS2/DesignDocs/InodeAllocationStrategy.\n\nSigned-off-by: Tao Ma \u003ctao.ma@oracle.com\u003e\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\n"
    },
    {
      "commit": "1d46dc08d33138c29c63d717807c08ab704fc773",
      "tree": "8e4d2e1b5c49cb379c0f800e00e1cd01d33d4d0c",
      "parents": [
        "b80b549c3520b31d3bbc4b36e37e0a5102da0b94"
      ],
      "author": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Thu Feb 19 13:17:05 2009 -0800"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Fri Apr 03 11:39:17 2009 -0700"
      },
      "message": "ocfs2: fix leaf start calculation in ocfs2_dx_dir_rebalance()\n\nocfs2_dx_dir_rebalance() is passed the block offset of a dx leaf which needs\nrebalancing. Since we rebalance an entire cluster at a time however, this\nfunction needs to calculate the beginning of that cluster, in blocks. The\ncalculation was wrong, which would result in a read of non-leaf blocks. Fix\nthe calculation by adding ocfs2_block_to_cluster_start() which is a more\nstraight-forward way of determining this.\n\nReported-by: Tristan Ye \u003ctristan.ye@oracle.com\u003e\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\n"
    },
    {
      "commit": "b80b549c3520b31d3bbc4b36e37e0a5102da0b94",
      "tree": "403d548a9be6a1e1ae8063a732d520a06defd83c",
      "parents": [
        "3a8df2b9c365a9f366b76bbbce479e1cc18ddc16"
      ],
      "author": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Wed Feb 18 11:41:38 2009 -0800"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Fri Apr 03 11:39:17 2009 -0700"
      },
      "message": "ocfs2: re-order ocfs2_empty_dir checks\n\nocfs2_empty_dir() is far more expensive than checking link count. Since both\nneed to be checked at the same time, we can improve performance by checking\nlink count first.\n\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\n"
    },
    {
      "commit": "3a8df2b9c365a9f366b76bbbce479e1cc18ddc16",
      "tree": "576a2672cb9b1258d73505ecaddbac5ccde0eb25",
      "parents": [
        "e3a93c2db6410822aa24295c3874b44ba21730a8"
      ],
      "author": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Mon Nov 24 17:14:09 2008 -0800"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Fri Apr 03 11:39:16 2009 -0700"
      },
      "message": "ocfs2: Enable indexed directories\n\nSince the disk format is finalized, we can set this feature bit in the\nsupported mask.\n\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\nAcked-by: Joel Becker \u003cJoel.Becker@oracle.com\u003e\n"
    },
    {
      "commit": "e3a93c2db6410822aa24295c3874b44ba21730a8",
      "tree": "8de41a37abc6497745d07506a0fb5174da61d7c1",
      "parents": [
        "198a1ca3b735986542c538e38b9499ffcaed7005"
      ],
      "author": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Tue Feb 17 15:29:35 2009 -0800"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Fri Apr 03 11:39:16 2009 -0700"
      },
      "message": "ocfs2: Add total entry count to dx_root_block\n\nThis little bit of extra accounting speeds up ocfs2_empty_dir()\ndramatically by allowing us to short-circuit the full directory scan.\n\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\n"
    },
    {
      "commit": "198a1ca3b735986542c538e38b9499ffcaed7005",
      "tree": "3b02034534c4640e72623088a59d1e942c38e7c3",
      "parents": [
        "e7c17e43090afe558c40bfb66637744c27bd2aeb"
      ],
      "author": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Thu Nov 20 17:54:57 2008 -0800"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Fri Apr 03 11:39:16 2009 -0700"
      },
      "message": "ocfs2: Increase max links count\n\nSince we\u0027ve now got a directory format capable of handling a large number of\nentries, we can increase the maximum link count supported. This only gets\nincreased if the directory indexing feature is turned on.\n\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\nAcked-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "e7c17e43090afe558c40bfb66637744c27bd2aeb",
      "tree": "4c164c4ec59eaa7599c91f865a261517454ba45f",
      "parents": [
        "4ed8a6bb083bfcc21f1ed66a474b03c0386e4b34"
      ],
      "author": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Thu Jan 29 18:17:46 2009 -0800"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Fri Apr 03 11:39:16 2009 -0700"
      },
      "message": "ocfs2: Introduce dir free space list\n\nThe only operation which doesn\u0027t get faster with directory indexing is\ninsert, which still has to walk the entire unindexed directory portion to\nfind a free block. This patch provides an improvement in directory insert\nperformance by maintaining a singly linked list of directory leaf blocks\nwhich have space for additional dirents.\n\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\nAcked-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "4ed8a6bb083bfcc21f1ed66a474b03c0386e4b34",
      "tree": "89cc2629bed3949e980edcae3d807e71718a9028",
      "parents": [
        "9b7895efac906d66d19856194e1ba61f37e231a4"
      ],
      "author": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Mon Nov 24 17:02:08 2008 -0800"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Fri Apr 03 11:39:16 2009 -0700"
      },
      "message": "ocfs2: Store dir index records inline\n\nAllow us to store a small number of directory index records in the\nocfs2_dx_root_block. This saves us a disk read on small to medium sized\ndirectories (less than about 250 entries). The inline root is automatically\nturned into a root block with extents if the directory size increases beyond\nit\u0027s capacity.\n\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\nAcked-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "9b7895efac906d66d19856194e1ba61f37e231a4",
      "tree": "1ee6d2630cf3617251638170dcaceef41ddda8ec",
      "parents": [
        "4a12ca3a00a244e1fd1e673d151ea38b71e11d55"
      ],
      "author": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Wed Nov 12 16:27:44 2008 -0800"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Fri Apr 03 11:39:15 2009 -0700"
      },
      "message": "ocfs2: Add a name indexed b-tree to directory inodes\n\nThis patch makes use of Ocfs2\u0027s flexible btree code to add an additional\ntree to directory inodes. The new tree stores an array of small,\nfixed-length records in each leaf block. Each record stores a hash value,\nand pointer to a block in the traditional (unindexed) directory tree where a\ndirent with the given name hash resides. Lookup exclusively uses this tree\nto find dirents, thus providing us with constant time name lookups.\n\nSome of the hashing code was copied from ext3. Unfortunately, it has lots of\nunfixed checkpatch errors. I left that as-is so that tracking changes would\nbe easier.\n\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\nAcked-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "4a12ca3a00a244e1fd1e673d151ea38b71e11d55",
      "tree": "84e30310a7d93ead9910f761e19d3fe73c5861b3",
      "parents": [
        "59b526a30722f29e5dba6210a6e0fc34e3149b94"
      ],
      "author": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Wed Nov 12 15:43:34 2008 -0800"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Fri Apr 03 11:39:15 2009 -0700"
      },
      "message": "ocfs2: Introduce dir lookup helper struct\n\nMany directory manipulation calls pass around a tuple of dirent, and it\u0027s\ncontaining buffer_head. Dir indexing has a bit more state, but instead of\nadding yet more arguments to functions, we introduce \u0027struct\nocfs2_dir_lookup_result\u0027. In this patch, it simply holds the same tuple, but\nfuture patches will add more state.\n\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\nAcked-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "59b526a30722f29e5dba6210a6e0fc34e3149b94",
      "tree": "d373fe3f283f584f22ffb7eed60c937c0bf893a6",
      "parents": [
        "50397507e856455b3f5cb3d5c7c482209f9e46a0"
      ],
      "author": {
        "name": "Sunil Mushran",
        "email": "sunil.mushran@oracle.com",
        "time": "Tue Dec 16 15:49:18 2008 -0800"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Fri Apr 03 11:39:15 2009 -0700"
      },
      "message": "ocfs2: Remove debugfs file local_alloc_stats\n\nThis patch removes the debugfs file local_alloc_stats as that information\nis now included in the fs_state debugfs file.\n\nSigned-off-by: Sunil Mushran \u003csunil.mushran@oracle.com\u003e\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\n"
    },
    {
      "commit": "50397507e856455b3f5cb3d5c7c482209f9e46a0",
      "tree": "537d1aa6aec9108aa080a2b58f68fac767420416",
      "parents": [
        "96a6c64b5354b804b3ccfd1b31306565a01ebcb1"
      ],
      "author": {
        "name": "Sunil Mushran",
        "email": "sunil.mushran@oracle.com",
        "time": "Wed Dec 17 14:17:43 2008 -0800"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Fri Apr 03 11:39:15 2009 -0700"
      },
      "message": "ocfs2: Expose the file system state via debugfs\n\nThis patch creates a per mount debugfs file, fs_state, which exposes\ninformation like, cluster stack in use, states of the downconvert, recovery\nand commit threads, number of journal txns, some allocation stats, list of\nall slots, etc.\n\nSigned-off-by: Sunil Mushran \u003csunil.mushran@oracle.com\u003e\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\n"
    },
    {
      "commit": "96a6c64b5354b804b3ccfd1b31306565a01ebcb1",
      "tree": "de8bde922d2e5fdb4d0698dc4169b57acd7e4b8b",
      "parents": [
        "87d3d3f3931f3e0fca44fbb5c06ad45fc4dca9bc"
      ],
      "author": {
        "name": "Sunil Mushran",
        "email": "sunil.mushran@oracle.com",
        "time": "Tue Dec 16 15:49:16 2008 -0800"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Fri Apr 03 11:39:14 2009 -0700"
      },
      "message": "ocfs2: Move struct recovery_map to a header file\n\nMove the definition of struct recovery_map from journal.c to journal.h. This\nis preparation for the next patch.\n\nSigned-off-by: Sunil Mushran \u003csunil.mushran@oracle.com\u003e\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\n"
    },
    {
      "commit": "87d3d3f3931f3e0fca44fbb5c06ad45fc4dca9bc",
      "tree": "3f707f7b29905975b054906df0317f833cd411a0",
      "parents": [
        "20bec8ab1458c24bed0d5492ee15d87807fc415a"
      ],
      "author": {
        "name": "Sunil Mushran",
        "email": "sunil.mushran@oracle.com",
        "time": "Wed Dec 17 14:17:42 2008 -0800"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Fri Apr 03 11:39:14 2009 -0700"
      },
      "message": "ocfs2/hb: Expose the list of heartbeating nodes via debugfs\n\nThis patch creates a debugfs file, o2hb/livesnodes, which exposes the\naggregate list of heartbeating node across all heartbeat regions.\n\nSigned-off-by: Sunil Mushran \u003csunil.mushran@oracle.com\u003e\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\n"
    },
    {
      "commit": "20bec8ab1458c24bed0d5492ee15d87807fc415a",
      "tree": "e5f910947dbe314b96a591e41e2cfb2d3322caad",
      "parents": [
        "18b34b9546dc192d978dda940673f40928d2e36e",
        "e7c8f5079ed9ec9e6eb1abe3defc5fb4ebfdf1cb"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Apr 03 11:10:33 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Apr 03 11:10:33 2009 -0700"
      },
      "message": "Merge branch \u0027ext3-latency-fixes\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tytso/ext4\n\n* \u0027ext3-latency-fixes\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tytso/ext4:\n  ext3: Add replace-on-rename hueristics for data\u003dwriteback mode\n  ext3: Add replace-on-truncate hueristics for data\u003dwriteback mode\n  ext3: Use WRITE_SYNC for commits which are caused by fsync()\n  block_write_full_page: Use synchronous writes for WBC_SYNC_ALL writebacks\n"
    },
    {
      "commit": "3cc50ac0dbda5100684e570247782330155d35e0",
      "tree": "f4b8f22d1725ebe65d2fe658d292dabacd7ed564",
      "parents": [
        "d9b9be024a6628a01d8730d1fd0b5f25658a2794",
        "b797cac7487dee6bfddeb161631c1bbc54fa3cdb"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Apr 03 10:07:43 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Apr 03 10:07:43 2009 -0700"
      },
      "message": "Merge git://git.kernel.org/pub/scm/linux/kernel/git/dhowells/linux-2.6-fscache\n\n* git://git.kernel.org/pub/scm/linux/kernel/git/dhowells/linux-2.6-fscache: (41 commits)\n  NFS: Add mount options to enable local caching on NFS\n  NFS: Display local caching state\n  NFS: Store pages from an NFS inode into a local cache\n  NFS: Read pages from FS-Cache into an NFS inode\n  NFS: nfs_readpage_async() needs to be accessible as a fallback for local caching\n  NFS: Add read context retention for FS-Cache to call back with\n  NFS: FS-Cache page management\n  NFS: Add some new I/O counters for FS-Cache doing things for NFS\n  NFS: Invalidate FsCache page flags when cache removed\n  NFS: Use local disk inode cache\n  NFS: Define and create inode-level cache objects\n  NFS: Define and create superblock-level objects\n  NFS: Define and create server-level objects\n  NFS: Register NFS for caching and retrieve the top-level index\n  NFS: Permit local filesystem caching to be enabled for NFS\n  NFS: Add FS-Cache option bit and debug bit\n  NFS: Add comment banners to some NFS functions\n  FS-Cache: Make kAFS use FS-Cache\n  CacheFiles: A cache that backs onto a mounted filesystem\n  CacheFiles: Export things for CacheFiles\n  ...\n"
    },
    {
      "commit": "9b59f0316bc556a1b63518f0b1224cf9be48467b",
      "tree": "d6ffccbe5d9ce5f55c1b2efaf02220c701d4420a",
      "parents": [
        "ac7c1a776dfe1a9c83ea7885f858f5f1a144d8af",
        "0d8fe329a80714e0f729ae48cba8d64cbe5701cb"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Apr 03 09:53:22 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Apr 03 09:53:22 2009 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.open-osd.org/linux-open-osd\n\n* \u0027for-linus\u0027 of git://git.open-osd.org/linux-open-osd:\n  fs: Add exofs to Kernel build\n  exofs: Documentation\n  exofs: export_operations\n  exofs: super_operations and file_system_type\n  exofs: dir_inode and directory operations\n  exofs: address_space_operations\n  exofs: symlink_inode and fast_symlink_inode operations\n  exofs: file and file_inode operations\n  exofs: Kbuild, Headers and osd utils\n"
    },
    {
      "commit": "ac7c1a776dfe1a9c83ea7885f858f5f1a144d8af",
      "tree": "4ad3158dd6dc5029a221421ae9a3c339f10c3f10",
      "parents": [
        "3ba113d14cedcd88105a3b9c90f8ecce829e1095",
        "f36345ff9a4a77f2cc576a2777b6256d5c8798fa"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Apr 03 09:52:29 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Apr 03 09:52:29 2009 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://oss.sgi.com/xfs/xfs\n\n* \u0027for-linus\u0027 of git://oss.sgi.com/xfs/xfs: (61 commits)\n  Revert \"xfs: increase the maximum number of supported ACL entries\"\n  xfs: cleanup uuid handling\n  xfs: remove m_attroffset\n  xfs: fix various typos\n  xfs: pagecache usage optimization\n  xfs: remove m_litino\n  xfs: kill ino64 mount option\n  xfs: kill mutex_t typedef\n  xfs: increase the maximum number of supported ACL entries\n  xfs: factor out code to find the longest free extent in the AG\n  xfs: kill VN_BAD\n  xfs: kill vn_atime_* helpers.\n  xfs: cleanup xlog_bread\n  xfs: cleanup xlog_recover_do_trans\n  xfs: remove another leftover of the old inode log item format\n  xfs: cleanup log unmount handling\n  Fix xfs debug build breakage by pushing xfs_error.h after\n  xfs: include header files for prototypes\n  xfs: make symbols static\n  xfs: move declaration to header file\n  ...\n"
    },
    {
      "commit": "03c3fa0a3bf48dcb024263a9ea41daecacbc6efa",
      "tree": "8fcd8410094e86cb9e58efd835e8e70b6b928788",
      "parents": [
        "3e850509e19b4b013bf6aee7c0d24d047c4b968f",
        "146bca72c7e6ba52de82a63b1fce7934dc103dbc"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Apr 03 09:50:39 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Apr 03 09:50:39 2009 -0700"
      },
      "message": "Merge branch \u0027for_linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-udf-2.6\n\n* \u0027for_linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-udf-2.6:\n  udf: Don\u0027t write integrity descriptor too often\n  udf: Try anchor in block 256 first\n  udf: Some type fixes and cleanups\n  udf: use hardware sector size\n  udf: fix novrs mount option\n  udf: Fix oops when invalid character in filename occurs\n  udf: return f_fsid for statfs(2)\n  udf: Add checks to not underflow sector_t\n  udf: fix default mode and dmode options handling\n  udf: fix sparse warnings:\n  udf: unsigned last[i] cannot be less than 0\n  udf: implement mode and dmode mounting options\n  udf: reduce stack usage of udf_get_filename\n  udf: reduce stack usage of udf_load_pvoldesc\n  Fix the udf code not to pass structs on stack where possible.\n  Remove struct typedefs from fs/udf/ecma_167.h et al.\n"
    },
    {
      "commit": "223cdea4c4b5af5181b2da00ac85711d1e0c737c",
      "tree": "dfe7226c70ddabbf2e2e63924ba636345278e79c",
      "parents": [
        "31e6e2dac575c9d21a6ec56ca52ae89086baa705",
        "c8f517c444e4f9f55b5b5ca202b8404691a35805"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Apr 03 09:08:19 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Apr 03 09:08:19 2009 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://neil.brown.name/md\n\n* \u0027for-linus\u0027 of git://neil.brown.name/md: (53 commits)\n  md/raid5 revise rules for when to update metadata during reshape\n  md/raid5: minor code cleanups in make_request.\n  md: remove CONFIG_MD_RAID_RESHAPE config option.\n  md/raid5: be more careful about write ordering when reshaping.\n  md: don\u0027t display meaningless values in sysfs files resync_start and sync_speed\n  md/raid5: allow layout and chunksize to be changed on active array.\n  md/raid5: reshape using largest of old and new chunk size\n  md/raid5: prepare for allowing reshape to change layout\n  md/raid5: prepare for allowing reshape to change chunksize.\n  md/raid5: clearly differentiate \u0027before\u0027 and \u0027after\u0027 stripes during reshape.\n  Documentation/md.txt update\n  md: allow number of drives in raid5 to be reduced\n  md/raid5: change reshape-progress measurement to cope with reshaping backwards.\n  md: add explicit method to signal the end of a reshape.\n  md/raid5: enhance raid5_size to work correctly with negative delta_disks\n  md/raid5: drop qd_idx from r6_state\n  md/raid6: move raid6 data processing to raid6_pq.ko\n  md: raid5 run(): Fix max_degraded for raid level 4.\n  md: \u0027array_size\u0027 sysfs attribute\n  md: centralize -\u003earray_sectors modifications\n  ...\n"
    },
    {
      "commit": "b797cac7487dee6bfddeb161631c1bbc54fa3cdb",
      "tree": "daf0770b33d5705d527e34193480f7eeae58a326",
      "parents": [
        "5d1acff159730770cbab68b19443518c92ab1000"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Apr 03 16:42:48 2009 +0100"
      },
      "committer": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Apr 03 16:42:48 2009 +0100"
      },
      "message": "NFS: Add mount options to enable local caching on NFS\n\nAdd NFS mount options to allow the local caching support to be enabled.\n\nThe attached patch makes it possible for the NFS filesystem to be told to make\nuse of the network filesystem local caching service (FS-Cache).\n\nTo be able to use this, a recent nfsutils package is required.\n\nThere are three variant NFS mount options that can be added to a mount command\nto control caching for a mount.  Only the last one specified takes effect:\n\n (*) Adding \"fsc\" will request caching.\n\n (*) Adding \"fsc\u003d\u003cstring\u003e\" will request caching and also specify a uniquifier.\n\n (*) Adding \"nofsc\" will disable caching.\n\nFor example:\n\n\tmount warthog:/ /a -o fsc\n\nThe cache of a particular superblock (NFS FSID) will be shared between all\nmounts of that volume, provided they have the same connection parameters and\nare not marked \u0027nosharecache\u0027.\n\nWhere it is otherwise impossible to distinguish superblocks because all the\nparameters are identical, but the \u0027nosharecache\u0027 option is supplied, a\nuniquifying string must be supplied, else only the first mount will be\npermitted to use the cache.\n\nIf there\u0027s a key collision, then the second mount will disable caching and give\na warning into the kernel log.\n\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\nAcked-by: Steve Dickson \u003csteved@redhat.com\u003e\nAcked-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\nAcked-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nTested-by: Daire Byrne \u003cDaire.Byrne@framestore.com\u003e\n"
    },
    {
      "commit": "5d1acff159730770cbab68b19443518c92ab1000",
      "tree": "71969ce63215ffb636aa539ab049b71eac43da0d",
      "parents": [
        "7f8e05f60c87646e12c761fef61dd71a7e67112e"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Apr 03 16:42:47 2009 +0100"
      },
      "committer": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Apr 03 16:42:47 2009 +0100"
      },
      "message": "NFS: Display local caching state\n\nDisplay the local caching state in /proc/fs/nfsfs/volumes.\n\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\nAcked-by: Steve Dickson \u003csteved@redhat.com\u003e\nAcked-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\nAcked-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nTested-by: Daire Byrne \u003cDaire.Byrne@framestore.com\u003e\n"
    },
    {
      "commit": "7f8e05f60c87646e12c761fef61dd71a7e67112e",
      "tree": "f33bfcd5b4662a48890e8245362b381437be76fb",
      "parents": [
        "9a9fc1c03315f1606596e55b4096d39e2079a041"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Apr 03 16:42:45 2009 +0100"
      },
      "committer": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Apr 03 16:42:45 2009 +0100"
      },
      "message": "NFS: Store pages from an NFS inode into a local cache\n\nStore pages from an NFS inode into the cache data storage object associated\nwith that inode.\n\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\nAcked-by: Steve Dickson \u003csteved@redhat.com\u003e\nAcked-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\nAcked-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nTested-by: Daire Byrne \u003cDaire.Byrne@framestore.com\u003e\n"
    },
    {
      "commit": "9a9fc1c03315f1606596e55b4096d39e2079a041",
      "tree": "0eb9a2d9844a821e515baeb59e6d5e38384d5915",
      "parents": [
        "f42b293d6d5259043a8944b556eeab427c695d57"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Apr 03 16:42:44 2009 +0100"
      },
      "committer": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Apr 03 16:42:44 2009 +0100"
      },
      "message": "NFS: Read pages from FS-Cache into an NFS inode\n\nRead pages from an FS-Cache data storage object representing an inode into an\nNFS inode.\n\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\nAcked-by: Steve Dickson \u003csteved@redhat.com\u003e\nAcked-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\nAcked-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nTested-by: Daire Byrne \u003cDaire.Byrne@framestore.com\u003e\n"
    },
    {
      "commit": "f42b293d6d5259043a8944b556eeab427c695d57",
      "tree": "9427fb985f5426062c11755c47bbf4ba7606ee65",
      "parents": [
        "1fcdf534885b65e6d39780a5a89e9dfc5431cf68"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Apr 03 16:42:44 2009 +0100"
      },
      "committer": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Apr 03 16:42:44 2009 +0100"
      },
      "message": "NFS: nfs_readpage_async() needs to be accessible as a fallback for local caching\n\nnfs_readpage_async() needs to be non-static so that it can be used as a\nfallback for the local on-disk caching should an EIO crop up when reading the\ncache.\n\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\nAcked-by: Steve Dickson \u003csteved@redhat.com\u003e\nAcked-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\nAcked-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nTested-by: Daire Byrne \u003cDaire.Byrne@framestore.com\u003e\n"
    },
    {
      "commit": "1fcdf534885b65e6d39780a5a89e9dfc5431cf68",
      "tree": "2710681cd36e5ba1a6460082061464242c175772",
      "parents": [
        "545db45f0fc0d4203b045047798ce156972a3056"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Apr 03 16:42:44 2009 +0100"
      },
      "committer": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Apr 03 16:42:44 2009 +0100"
      },
      "message": "NFS: Add read context retention for FS-Cache to call back with\n\nAdd read context retention so that FS-Cache can call back into NFS when a read\noperation on the cache fails EIO rather than reading data.  This permits NFS to\nthen fetch the data from the server instead using the appropriate security\ncontext.\n\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\nAcked-by: Steve Dickson \u003csteved@redhat.com\u003e\nAcked-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\nAcked-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nTested-by: Daire Byrne \u003cDaire.Byrne@framestore.com\u003e\n"
    },
    {
      "commit": "545db45f0fc0d4203b045047798ce156972a3056",
      "tree": "783db1091f5d6f21dafece81f6c94caf0aec98b8",
      "parents": [
        "6a51091d0775cdc4a923f2172c61925ad416aa32"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Apr 03 16:42:44 2009 +0100"
      },
      "committer": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Apr 03 16:42:44 2009 +0100"
      },
      "message": "NFS: FS-Cache page management\n\nFS-Cache page management for NFS.  This includes hooking the releasing and\ninvalidation of pages marked with PG_fscache (aka PG_private_2) and waiting for\ncompletion of the write-to-cache flag (PG_fscache_write aka PG_owner_priv_2).\n\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\nAcked-by: Steve Dickson \u003csteved@redhat.com\u003e\nAcked-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\nAcked-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nTested-by: Daire Byrne \u003cDaire.Byrne@framestore.com\u003e\n"
    },
    {
      "commit": "6a51091d0775cdc4a923f2172c61925ad416aa32",
      "tree": "288fafe724eee5a0c67ff4c9bd437d35d3bbb9ab",
      "parents": [
        "d599064a1bca7bcbaabe54b94fa73ea86952cae3"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Apr 03 16:42:43 2009 +0100"
      },
      "committer": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Apr 03 16:42:43 2009 +0100"
      },
      "message": "NFS: Add some new I/O counters for FS-Cache doing things for NFS\n\nAdd some new NFS I/O counters for FS-Cache doing things for NFS.  A new line is\nemitted into /proc/pid/mountstats if caching is enabled that looks like:\n\n\tfsc: \u003crok\u003e \u003crfl\u003e \u003cwok\u003e \u003cwfl\u003e \u003cunc\u003e\n\nWhere \u003crok\u003e is the number of pages read successfully from the cache, \u003crfl\u003e is\nthe number of failed page reads against the cache, \u003cwok\u003e is the number of\nsuccessful page writes to the cache, \u003cwfl\u003e is the number of failed page writes\nto the cache, and \u003cunc\u003e is the number of NFS pages that have been disconnected\nfrom the cache.\n\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\nAcked-by: Steve Dickson \u003csteved@redhat.com\u003e\nAcked-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\nAcked-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nTested-by: Daire Byrne \u003cDaire.Byrne@framestore.com\u003e\n"
    },
    {
      "commit": "d599064a1bca7bcbaabe54b94fa73ea86952cae3",
      "tree": "f2b6d6b79053ea8a8b8178219203f30cc9c1c0b4",
      "parents": [
        "ef79c097bbe9724e13937271b3457df560e00370"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Apr 03 16:42:43 2009 +0100"
      },
      "committer": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Apr 03 16:42:43 2009 +0100"
      },
      "message": "NFS: Invalidate FsCache page flags when cache removed\n\nInvalidate the FsCache page flags on the pages belonging to an inode when the\ncache backing that NFS inode is removed.\n\nThis allows a live cache to be withdrawn.\n\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\nAcked-by: Steve Dickson \u003csteved@redhat.com\u003e\nAcked-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\nAcked-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nTested-by: Daire Byrne \u003cDaire.Byrne@framestore.com\u003e\n"
    },
    {
      "commit": "ef79c097bbe9724e13937271b3457df560e00370",
      "tree": "a8671781cc0c9deb85fa76a8b4211c5e693b4343",
      "parents": [
        "10329a5d48f5abc14a37d30b706e330f8598297a"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Apr 03 16:42:43 2009 +0100"
      },
      "committer": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Apr 03 16:42:43 2009 +0100"
      },
      "message": "NFS: Use local disk inode cache\n\nBind data storage objects in the local cache to NFS inodes.\n\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\nAcked-by: Steve Dickson \u003csteved@redhat.com\u003e\nAcked-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\nAcked-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nTested-by: Daire Byrne \u003cDaire.Byrne@framestore.com\u003e\n"
    },
    {
      "commit": "10329a5d48f5abc14a37d30b706e330f8598297a",
      "tree": "2423424d5faa9a9c3933bd1041d9f28f210aa1f2",
      "parents": [
        "08734048b380103f0412f58b84c2f76a2c8b599f"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Apr 03 16:42:43 2009 +0100"
      },
      "committer": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Apr 03 16:42:43 2009 +0100"
      },
      "message": "NFS: Define and create inode-level cache objects\n\nDefine and create inode-level cache data storage objects (as managed by\nnfs_inode structs).\n\nEach inode-level object is created in a superblock-level index object and is\nitself a data storage object into which pages from the inode are stored.\n\nThe inode object key is the NFS file handle for the inode.\n\nThe inode object is given coherency data to carry in the auxiliary data\npermitted by the cache.  This is a sequence made up of:\n\n (1) i_mtime from the NFS inode.\n\n (2) i_ctime from the NFS inode.\n\n (3) i_size from the NFS inode.\n\n (4) change_attr from the NFSv4 attribute data.\n\nAs the cache is a persistent cache, the auxiliary data is checked when a new\nNFS in-memory inode is set up that matches an already existing data storage\nobject in the cache.  If the coherency data is the same, the on-disk object is\nretained and used; if not, it is scrapped and a new one created.\n\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\nAcked-by: Steve Dickson \u003csteved@redhat.com\u003e\nAcked-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\nAcked-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nTested-by: Daire Byrne \u003cDaire.Byrne@framestore.com\u003e\n"
    },
    {
      "commit": "08734048b380103f0412f58b84c2f76a2c8b599f",
      "tree": "34a65d40e33b12d36f5c82adb686bcdae6eab0fe",
      "parents": [
        "147272813e043fb44bd112527951da70c1e663de"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Apr 03 16:42:42 2009 +0100"
      },
      "committer": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Apr 03 16:42:42 2009 +0100"
      },
      "message": "NFS: Define and create superblock-level objects\n\nDefine and create superblock-level cache index objects (as managed by\nnfs_server structs).\n\nEach superblock object is created in a server level index object and is itself\nan index into which inode-level objects are inserted.\n\nIdeally there would be one superblock-level object per server, and the former\nwould be folded into the latter; however, since the \"nosharecache\" option\nexists this isn\u0027t possible.\n\nThe superblock object key is a sequence consisting of:\n\n (1) Certain superblock s_flags.\n\n (2) Various connection parameters that serve to distinguish superblocks for\n     sget().\n\n (3) The volume FSID.\n\n (4) The security flavour.\n\n (5) The uniquifier length.\n\n (6) The uniquifier text.  This is normally an empty string, unless the fsc\u003dxyz\n     mount option was used to explicitly specify a uniquifier.\n\nThe key blob is of variable length, depending on the length of (6).\n\nThe superblock object is given no coherency data to carry in the auxiliary data\npermitted by the cache.  It is assumed that the superblock is always coherent.\n\nThis patch also adds uniquification handling such that two otherwise identical\nsuperblocks, at least one of which is marked \"nosharecache\", won\u0027t end up\ntrying to share the on-disk cache.  It will be possible to manually provide a\nuniquifier through a mount option with a later patch to avoid the error\notherwise produced.\n\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\nAcked-by: Steve Dickson \u003csteved@redhat.com\u003e\nAcked-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\nAcked-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nTested-by: Daire Byrne \u003cDaire.Byrne@framestore.com\u003e\n"
    },
    {
      "commit": "147272813e043fb44bd112527951da70c1e663de",
      "tree": "4b67df2bb809c7b661e7c6f4b1692ab8af41a996",
      "parents": [
        "8ec442ae4c6577ed181682e534d4eef524e30b3c"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Apr 03 16:42:42 2009 +0100"
      },
      "committer": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Apr 03 16:42:42 2009 +0100"
      },
      "message": "NFS: Define and create server-level objects\n\nDefine and create server-level cache index objects (as managed by nfs_client\nstructs).\n\nEach server object is created in the NFS top-level index object and is itself\nan index into which superblock-level objects are inserted.\n\nIdeally there would be one superblock-level object per server, and the former\nwould be folded into the latter; however, since the \"nosharecache\" option\nexists this isn\u0027t possible.\n\nThe server object key is a sequence consisting of:\n\n (1) NFS version\n\n (2) Server address family (eg: AF_INET or AF_INET6)\n\n (3) Server port.\n\n (4) Server IP address.\n\nThe key blob is of variable length, depending on the length of (4).\n\nThe server object is given no coherency data to carry in the auxiliary data\npermitted by the cache.\n\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\nAcked-by: Steve Dickson \u003csteved@redhat.com\u003e\nAcked-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\nAcked-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nTested-by: Daire Byrne \u003cDaire.Byrne@framestore.com\u003e\n"
    },
    {
      "commit": "8ec442ae4c6577ed181682e534d4eef524e30b3c",
      "tree": "44fb9013929f7227781525d1904ac16d6723ce6e",
      "parents": [
        "3b9ce977b2f31b6c396b6fb620df9881a30fac9d"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Apr 03 16:42:42 2009 +0100"
      },
      "committer": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Apr 03 16:42:42 2009 +0100"
      },
      "message": "NFS: Register NFS for caching and retrieve the top-level index\n\nRegister NFS for caching and retrieve the top-level cache index object cookie.\n\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\nAcked-by: Steve Dickson \u003csteved@redhat.com\u003e\nAcked-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\nAcked-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nTested-by: Daire Byrne \u003cDaire.Byrne@framestore.com\u003e\n"
    },
    {
      "commit": "3b9ce977b2f31b6c396b6fb620df9881a30fac9d",
      "tree": "136b6e29a0a0edc1cefe8588d25c7cb1c0e68cd6",
      "parents": [
        "c6a6f19e22da0a3d74214ee010224c9a30a794c1"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Apr 03 16:42:42 2009 +0100"
      },
      "committer": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Apr 03 16:42:42 2009 +0100"
      },
      "message": "NFS: Permit local filesystem caching to be enabled for NFS\n\nPermit local filesystem caching to be enabled for NFS in the kernel\nconfiguration.\n\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\nAcked-by: Steve Dickson \u003csteved@redhat.com\u003e\nAcked-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\nAcked-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nTested-by: Daire Byrne \u003cDaire.Byrne@framestore.com\u003e\n"
    },
    {
      "commit": "6b9b3514aa188183e74049853be43380ad49314f",
      "tree": "738f333421c2f57447dc4534ae83a19708e487cf",
      "parents": [
        "9b3f26c9110dcea62716aca9b8c68ceb482227ef"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Apr 03 16:42:41 2009 +0100"
      },
      "committer": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Apr 03 16:42:41 2009 +0100"
      },
      "message": "NFS: Add comment banners to some NFS functions\n\nAdd comment banners to some NFS functions so that they can be modified by the\nNFS fscache patches for further information.\n\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\nAcked-by: Steve Dickson \u003csteved@redhat.com\u003e\nAcked-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\nAcked-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nTested-by: Daire Byrne \u003cDaire.Byrne@framestore.com\u003e\n"
    },
    {
      "commit": "9b3f26c9110dcea62716aca9b8c68ceb482227ef",
      "tree": "f11fc0b125d6bc2149e99cb269073320ff50dba9",
      "parents": [
        "9ae326a69004dea8af2dae4fde58de27db700a8d"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Apr 03 16:42:41 2009 +0100"
      },
      "committer": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Apr 03 16:42:41 2009 +0100"
      },
      "message": "FS-Cache: Make kAFS use FS-Cache\n\nThe attached patch makes the kAFS filesystem in fs/afs/ use FS-Cache, and\nthrough it any attached caches.  The kAFS filesystem will use caching\nautomatically if it\u0027s available.\n\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\nAcked-by: Steve Dickson \u003csteved@redhat.com\u003e\nAcked-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\nAcked-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nTested-by: Daire Byrne \u003cDaire.Byrne@framestore.com\u003e\n"
    },
    {
      "commit": "9ae326a69004dea8af2dae4fde58de27db700a8d",
      "tree": "3a1d88a6e297989bfbd17648b398c7aa5ef9bf30",
      "parents": [
        "800a964787faef3509d194fa33268628c3d1daa9"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Apr 03 16:42:41 2009 +0100"
      },
      "committer": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Apr 03 16:42:41 2009 +0100"
      },
      "message": "CacheFiles: A cache that backs onto a mounted filesystem\n\nAdd an FS-Cache cache-backend that permits a mounted filesystem to be used as a\nbacking store for the cache.\n\nCacheFiles uses a userspace daemon to do some of the cache management - such as\nreaping stale nodes and culling.  This is called cachefilesd and lives in\n/sbin.  The source for the daemon can be downloaded from:\n\n\thttp://people.redhat.com/~dhowells/cachefs/cachefilesd.c\n\nAnd an example configuration from:\n\n\thttp://people.redhat.com/~dhowells/cachefs/cachefilesd.conf\n\nThe filesystem and data integrity of the cache are only as good as those of the\nfilesystem providing the backing services.  Note that CacheFiles does not\nattempt to journal anything since the journalling interfaces of the various\nfilesystems are very specific in nature.\n\nCacheFiles creates a misc character device - \"/dev/cachefiles\" - that is used\nto communication with the daemon.  Only one thing may have this open at once,\nand whilst it is open, a cache is at least partially in existence.  The daemon\nopens this and sends commands down it to control the cache.\n\nCacheFiles is currently limited to a single cache.\n\nCacheFiles attempts to maintain at least a certain percentage of free space on\nthe filesystem, shrinking the cache by culling the objects it contains to make\nspace if necessary - see the \"Cache Culling\" section.  This means it can be\nplaced on the same medium as a live set of data, and will expand to make use of\nspare space and automatically contract when the set of data requires more\nspace.\n\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\nREQUIREMENTS\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\nThe use of CacheFiles and its daemon requires the following features to be\navailable in the system and in the cache filesystem:\n\n\t- dnotify.\n\n\t- extended attributes (xattrs).\n\n\t- openat() and friends.\n\n\t- bmap() support on files in the filesystem (FIBMAP ioctl).\n\n\t- The use of bmap() to detect a partial page at the end of the file.\n\nIt is strongly recommended that the \"dir_index\" option is enabled on Ext3\nfilesystems being used as a cache.\n\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\nCONFIGURATION\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\nThe cache is configured by a script in /etc/cachefilesd.conf.  These commands\nset up cache ready for use.  The following script commands are available:\n\n (*) brun \u003cN\u003e%\n (*) bcull \u003cN\u003e%\n (*) bstop \u003cN\u003e%\n (*) frun \u003cN\u003e%\n (*) fcull \u003cN\u003e%\n (*) fstop \u003cN\u003e%\n\n\tConfigure the culling limits.  Optional.  See the section on culling\n\tThe defaults are 7% (run), 5% (cull) and 1% (stop) respectively.\n\n\tThe commands beginning with a \u0027b\u0027 are file space (block) limits, those\n\tbeginning with an \u0027f\u0027 are file count limits.\n\n (*) dir \u003cpath\u003e\n\n\tSpecify the directory containing the root of the cache.  Mandatory.\n\n (*) tag \u003cname\u003e\n\n\tSpecify a tag to FS-Cache to use in distinguishing multiple caches.\n\tOptional.  The default is \"CacheFiles\".\n\n (*) debug \u003cmask\u003e\n\n\tSpecify a numeric bitmask to control debugging in the kernel module.\n\tOptional.  The default is zero (all off).  The following values can be\n\tOR\u0027d into the mask to collect various information:\n\n\t\t1\tTurn on trace of function entry (_enter() macros)\n\t\t2\tTurn on trace of function exit (_leave() macros)\n\t\t4\tTurn on trace of internal debug points (_debug())\n\n\tThis mask can also be set through sysfs, eg:\n\n\t\techo 5 \u003e/sys/modules/cachefiles/parameters/debug\n\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\nSTARTING THE CACHE\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\nThe cache is started by running the daemon.  The daemon opens the cache device,\nconfigures the cache and tells it to begin caching.  At that point the cache\nbinds to fscache and the cache becomes live.\n\nThe daemon is run as follows:\n\n\t/sbin/cachefilesd [-d]* [-s] [-n] [-f \u003cconfigfile\u003e]\n\nThe flags are:\n\n (*) -d\n\n\tIncrease the debugging level.  This can be specified multiple times and\n\tis cumulative with itself.\n\n (*) -s\n\n\tSend messages to stderr instead of syslog.\n\n (*) -n\n\n\tDon\u0027t daemonise and go into background.\n\n (*) -f \u003cconfigfile\u003e\n\n\tUse an alternative configuration file rather than the default one.\n\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\nTHINGS TO AVOID\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\nDo not mount other things within the cache as this will cause problems.  The\nkernel module contains its own very cut-down path walking facility that ignores\nmountpoints, but the daemon can\u0027t avoid them.\n\nDo not create, rename or unlink files and directories in the cache whilst the\ncache is active, as this may cause the state to become uncertain.\n\nRenaming files in the cache might make objects appear to be other objects (the\nfilename is part of the lookup key).\n\nDo not change or remove the extended attributes attached to cache files by the\ncache as this will cause the cache state management to get confused.\n\nDo not create files or directories in the cache, lest the cache get confused or\nserve incorrect data.\n\nDo not chmod files in the cache.  The module creates things with minimal\npermissions to prevent random users being able to access them directly.\n\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\nCACHE CULLING\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\nThe cache may need culling occasionally to make space.  This involves\ndiscarding objects from the cache that have been used less recently than\nanything else.  Culling is based on the access time of data objects.  Empty\ndirectories are culled if not in use.\n\nCache culling is done on the basis of the percentage of blocks and the\npercentage of files available in the underlying filesystem.  There are six\n\"limits\":\n\n (*) brun\n (*) frun\n\n     If the amount of free space and the number of available files in the cache\n     rises above both these limits, then culling is turned off.\n\n (*) bcull\n (*) fcull\n\n     If the amount of available space or the number of available files in the\n     cache falls below either of these limits, then culling is started.\n\n (*) bstop\n (*) fstop\n\n     If the amount of available space or the number of available files in the\n     cache falls below either of these limits, then no further allocation of\n     disk space or files is permitted until culling has raised things above\n     these limits again.\n\nThese must be configured thusly:\n\n\t0 \u003c\u003d bstop \u003c bcull \u003c brun \u003c 100\n\t0 \u003c\u003d fstop \u003c fcull \u003c frun \u003c 100\n\nNote that these are percentages of available space and available files, and do\n_not_ appear as 100 minus the percentage displayed by the \"df\" program.\n\nThe userspace daemon scans the cache to build up a table of cullable objects.\nThese are then culled in least recently used order.  A new scan of the cache is\nstarted as soon as space is made in the table.  Objects will be skipped if\ntheir atimes have changed or if the kernel module says it is still using them.\n\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\nCACHE STRUCTURE\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\nThe CacheFiles module will create two directories in the directory it was\ngiven:\n\n (*) cache/\n\n (*) graveyard/\n\nThe active cache objects all reside in the first directory.  The CacheFiles\nkernel module moves any retired or culled objects that it can\u0027t simply unlink\nto the graveyard from which the daemon will actually delete them.\n\nThe daemon uses dnotify to monitor the graveyard directory, and will delete\nanything that appears therein.\n\nThe module represents index objects as directories with the filename \"I...\" or\n\"J...\".  Note that the \"cache/\" directory is itself a special index.\n\nData objects are represented as files if they have no children, or directories\nif they do.  Their filenames all begin \"D...\" or \"E...\".  If represented as a\ndirectory, data objects will have a file in the directory called \"data\" that\nactually holds the data.\n\nSpecial objects are similar to data objects, except their filenames begin\n\"S...\" or \"T...\".\n\nIf an object has children, then it will be represented as a directory.\nImmediately in the representative directory are a collection of directories\nnamed for hash values of the child object keys with an \u0027@\u0027 prepended.  Into\nthis directory, if possible, will be placed the representations of the child\nobjects:\n\n\tINDEX     INDEX      INDEX                             DATA FILES\n\t\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\tcache/@4a/I03nfs/@30/Ji000000000000000--fHg8hi8400\n\tcache/@4a/I03nfs/@30/Ji000000000000000--fHg8hi8400/@75/Es0g000w...DB1ry\n\tcache/@4a/I03nfs/@30/Ji000000000000000--fHg8hi8400/@75/Es0g000w...N22ry\n\tcache/@4a/I03nfs/@30/Ji000000000000000--fHg8hi8400/@75/Es0g000w...FP1ry\n\nIf the key is so long that it exceeds NAME_MAX with the decorations added on to\nit, then it will be cut into pieces, the first few of which will be used to\nmake a nest of directories, and the last one of which will be the objects\ninside the last directory.  The names of the intermediate directories will have\n\u0027+\u0027 prepended:\n\n\tJ1223/@23/+xy...z/+kl...m/Epqr\n\nNote that keys are raw data, and not only may they exceed NAME_MAX in size,\nthey may also contain things like \u0027/\u0027 and NUL characters, and so they may not\nbe suitable for turning directly into a filename.\n\nTo handle this, CacheFiles will use a suitably printable filename directly and\n\"base-64\" encode ones that aren\u0027t directly suitable.  The two versions of\nobject filenames indicate the encoding:\n\n\tOBJECT TYPE\tPRINTABLE\tENCODED\n\t\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\t\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\t\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\tIndex\t\t\"I...\"\t\t\"J...\"\n\tData\t\t\"D...\"\t\t\"E...\"\n\tSpecial\t\t\"S...\"\t\t\"T...\"\n\nIntermediate directories are always \"@\" or \"+\" as appropriate.\n\nEach object in the cache has an extended attribute label that holds the object\ntype ID (required to distinguish special objects) and the auxiliary data from\nthe netfs.  The latter is used to detect stale objects in the cache and update\nor retire them.\n\nNote that CacheFiles will erase from the cache any file it doesn\u0027t recognise or\nany file of an incorrect type (such as a FIFO file or a device file).\n\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\nSECURITY MODEL AND SELINUX\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\nCacheFiles is implemented to deal properly with the LSM security features of\nthe Linux kernel and the SELinux facility.\n\nOne of the problems that CacheFiles faces is that it is generally acting on\nbehalf of a process, and running in that process\u0027s context, and that includes a\nsecurity context that is not appropriate for accessing the cache - either\nbecause the files in the cache are inaccessible to that process, or because if\nthe process creates a file in the cache, that file may be inaccessible to other\nprocesses.\n\nThe way CacheFiles works is to temporarily change the security context (fsuid,\nfsgid and actor security label) that the process acts as - without changing the\nsecurity context of the process when it the target of an operation performed by\nsome other process (so signalling and suchlike still work correctly).\n\nWhen the CacheFiles module is asked to bind to its cache, it:\n\n (1) Finds the security label attached to the root cache directory and uses\n     that as the security label with which it will create files.  By default,\n     this is:\n\n\tcachefiles_var_t\n\n (2) Finds the security label of the process which issued the bind request\n     (presumed to be the cachefilesd daemon), which by default will be:\n\n\tcachefilesd_t\n\n     and asks LSM to supply a security ID as which it should act given the\n     daemon\u0027s label.  By default, this will be:\n\n\tcachefiles_kernel_t\n\n     SELinux transitions the daemon\u0027s security ID to the module\u0027s security ID\n     based on a rule of this form in the policy.\n\n\ttype_transition \u003cdaemon\u0027s-ID\u003e kernel_t : process \u003cmodule\u0027s-ID\u003e;\n\n     For instance:\n\n\ttype_transition cachefilesd_t kernel_t : process cachefiles_kernel_t;\n\nThe module\u0027s security ID gives it permission to create, move and remove files\nand directories in the cache, to find and access directories and files in the\ncache, to set and access extended attributes on cache objects, and to read and\nwrite files in the cache.\n\nThe daemon\u0027s security ID gives it only a very restricted set of permissions: it\nmay scan directories, stat files and erase files and directories.  It may\nnot read or write files in the cache, and so it is precluded from accessing the\ndata cached therein; nor is it permitted to create new files in the cache.\n\nThere are policy source files available in:\n\n\thttp://people.redhat.com/~dhowells/fscache/cachefilesd-0.8.tar.bz2\n\nand later versions.  In that tarball, see the files:\n\n\tcachefilesd.te\n\tcachefilesd.fc\n\tcachefilesd.if\n\nThey are built and installed directly by the RPM.\n\nIf a non-RPM based system is being used, then copy the above files to their own\ndirectory and run:\n\n\tmake -f /usr/share/selinux/devel/Makefile\n\tsemodule -i cachefilesd.pp\n\nYou will need checkpolicy and selinux-policy-devel installed prior to the\nbuild.\n\nBy default, the cache is located in /var/fscache, but if it is desirable that\nit should be elsewhere, than either the above policy files must be altered, or\nan auxiliary policy must be installed to label the alternate location of the\ncache.\n\nFor instructions on how to add an auxiliary policy to enable the cache to be\nlocated elsewhere when SELinux is in enforcing mode, please see:\n\n\t/usr/share/doc/cachefilesd-*/move-cache.txt\n\nWhen the cachefilesd rpm is installed; alternatively, the document can be found\nin the sources.\n\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\nA NOTE ON SECURITY\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\nCacheFiles makes use of the split security in the task_struct.  It allocates\nits own task_security structure, and redirects current-\u003eact_as to point to it\nwhen it acts on behalf of another process, in that process\u0027s context.\n\nThe reason it does this is that it calls vfs_mkdir() and suchlike rather than\nbypassing security and calling inode ops directly.  Therefore the VFS and LSM\nmay deny the CacheFiles access to the cache data because under some\ncircumstances the caching code is running in the security context of whatever\nprocess issued the original syscall on the netfs.\n\nFurthermore, should CacheFiles create a file or directory, the security\nparameters with that object is created (UID, GID, security label) would be\nderived from that process that issued the system call, thus potentially\npreventing other processes from accessing the cache - including CacheFiles\u0027s\ncache management daemon (cachefilesd).\n\nWhat is required is to temporarily override the security of the process that\nissued the system call.  We can\u0027t, however, just do an in-place change of the\nsecurity data as that affects the process as an object, not just as a subject.\nThis means it may lose signals or ptrace events for example, and affects what\nthe process looks like in /proc.\n\nSo CacheFiles makes use of a logical split in the security between the\nobjective security (task-\u003esec) and the subjective security (task-\u003eact_as).  The\nobjective security holds the intrinsic security properties of a process and is\nnever overridden.  This is what appears in /proc, and is what is used when a\nprocess is the target of an operation by some other process (SIGKILL for\nexample).\n\nThe subjective security holds the active security properties of a process, and\nmay be overridden.  This is not seen externally, and is used whan a process\nacts upon another object, for example SIGKILLing another process or opening a\nfile.\n\nLSM hooks exist that allow SELinux (or Smack or whatever) to reject a request\nfor CacheFiles to run in a context of a specific security label, or to create\nfiles and directories with another security label.\n\nThis documentation is added by the patch to:\n\n\tDocumentation/filesystems/caching/cachefiles.txt\n\nSigned-Off-By: David Howells \u003cdhowells@redhat.com\u003e\nAcked-by: Steve Dickson \u003csteved@redhat.com\u003e\nAcked-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\nAcked-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nTested-by: Daire Byrne \u003cDaire.Byrne@framestore.com\u003e\n"
    },
    {
      "commit": "800a964787faef3509d194fa33268628c3d1daa9",
      "tree": "37a722ed9d269d60bc26f6d8f0862d87e45a2424",
      "parents": [
        "385e1ca5f21c4680ad6a46a3aa2ea8af99e99c92"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Apr 03 16:42:40 2009 +0100"
      },
      "committer": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Apr 03 16:42:40 2009 +0100"
      },
      "message": "CacheFiles: Export things for CacheFiles\n\nExport a number of functions for CacheFiles\u0027s use.\n\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\nAcked-by: Steve Dickson \u003csteved@redhat.com\u003e\nAcked-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\nAcked-by: Rik van Riel \u003criel@redhat.com\u003e\nAcked-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nTested-by: Daire Byrne \u003cDaire.Byrne@framestore.com\u003e\n"
    },
    {
      "commit": "b510882281d56873e1194021643b7c325336f84f",
      "tree": "86cd206b0d2b55dc355833ca238d46488161b64c",
      "parents": [
        "952efe7b7840e1c726ae88222245e4efe6bd88f3"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Apr 03 16:42:39 2009 +0100"
      },
      "committer": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Apr 03 16:42:39 2009 +0100"
      },
      "message": "FS-Cache: Implement data I/O part of netfs API\n\nImplement the data I/O part of the FS-Cache netfs API.  The documentation and\nAPI header file were added in a previous patch.\n\nThis patch implements the following functions for the netfs to call:\n\n (*) fscache_attr_changed().\n\n     Indicate that the object has changed its attributes.  The only attribute\n     currently recorded is the file size.  Only pages within the set file size\n     will be stored in the cache.\n\n     This operation is submitted for asynchronous processing, and will return\n     immediately.  It will return -ENOMEM if an out of memory error is\n     encountered, -ENOBUFS if the object is not actually cached, or 0 if the\n     operation is successfully queued.\n\n (*) fscache_read_or_alloc_page().\n (*) fscache_read_or_alloc_pages().\n\n     Request data be fetched from the disk, and allocate internal metadata to\n     track the netfs pages and reserve disk space for unknown pages.\n\n     These operations perform semi-asynchronous data reads.  Upon returning\n     they will indicate which pages they think can be retrieved from disk, and\n     will have set in progress attempts to retrieve those pages.\n\n     These will return, in order of preference, -ENOMEM on memory allocation\n     error, -ERESTARTSYS if a signal interrupted proceedings, -ENODATA if one\n     or more requested pages are not yet cached, -ENOBUFS if the object is not\n     actually cached or if there isn\u0027t space for future pages to be cached on\n     this object, or 0 if successful.\n\n     In the case of the multipage function, the pages for which reads are set\n     in progress will be removed from the list and the page count decreased\n     appropriately.\n\n     If any read operations should fail, the completion function will be given\n     an error, and will also be passed contextual information to allow the\n     netfs to fall back to querying the server for the absent pages.\n\n     For each successful read, the page completion function will also be\n     called.\n\n     Any pages subsequently tracked by the cache will have PG_fscache set upon\n     them on return.  fscache_uncache_page() must be called for such pages.\n\n     If supplied by the netfs, the mark_pages_cached() cookie op will be\n     invoked for any pages now tracked.\n\n (*) fscache_alloc_page().\n\n     Allocate internal metadata to track a netfs page and reserve disk space.\n\n     This will return -ENOMEM on memory allocation error, -ERESTARTSYS on\n     signal, -ENOBUFS if the object isn\u0027t cached, or there isn\u0027t enough space\n     in the cache, or 0 if successful.\n\n     Any pages subsequently tracked by the cache will have PG_fscache set upon\n     them on return.  fscache_uncache_page() must be called for such pages.\n\n     If supplied by the netfs, the mark_pages_cached() cookie op will be\n     invoked for any pages now tracked.\n\n (*) fscache_write_page().\n\n     Request data be stored to disk.  This may only be called on pages that\n     have been read or alloc\u0027d by the above three functions and have not yet\n     been uncached.\n\n     This will return -ENOMEM on memory allocation error, -ERESTARTSYS on\n     signal, -ENOBUFS if the object isn\u0027t cached, or there isn\u0027t immediately\n     enough space in the cache, or 0 if successful.\n\n     On a successful return, this operation will have queued the page for\n     asynchronous writing to the cache.  The page will be returned with\n     PG_fscache_write set until the write completes one way or another.  The\n     caller will not be notified if the write fails due to an I/O error.  If\n     that happens, the object will become available and all pending writes will\n     be aborted.\n\n     Note that the cache may batch up page writes, and so it may take a while\n     to get around to writing them out.\n\n     The caller must assume that until PG_fscache_write is cleared the page is\n     use by the cache.  Any changes made to the page may be reflected on disk.\n     The page may even be under DMA.\n\n (*) fscache_uncache_page().\n\n     Indicate that the cache should stop tracking a page previously read or\n     alloc\u0027d from the cache.  If the page was alloc\u0027d only, but unwritten, it\n     will not appear on disk.\n\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\nAcked-by: Steve Dickson \u003csteved@redhat.com\u003e\nAcked-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\nAcked-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nTested-by: Daire Byrne \u003cDaire.Byrne@framestore.com\u003e\n"
    },
    {
      "commit": "952efe7b7840e1c726ae88222245e4efe6bd88f3",
      "tree": "fed43da6709707d0eb51b8695b6b382a221e99bd",
      "parents": [
        "ccc4fc3d11e91477036d1f82bfa2d442f6ce77f0"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Apr 03 16:42:39 2009 +0100"
      },
      "committer": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Apr 03 16:42:39 2009 +0100"
      },
      "message": "FS-Cache: Add and document asynchronous operation handling\n\nAdd and document asynchronous operation handling for use by FS-Cache\u0027s data\nstorage and retrieval routines.\n\nThe following documentation is added to:\n\n\tDocumentation/filesystems/caching/operations.txt\n\n\t\t       \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\t\t       ASYNCHRONOUS OPERATIONS HANDLING\n\t\t       \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\nOVERVIEW\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\nFS-Cache has an asynchronous operations handling facility that it uses for its\ndata storage and retrieval routines.  Its operations are represented by\nfscache_operation structs, though these are usually embedded into some other\nstructure.\n\nThis facility is available to and expected to be be used by the cache backends,\nand FS-Cache will create operations and pass them off to the appropriate cache\nbackend for completion.\n\nTo make use of this facility, \u003clinux/fscache-cache.h\u003e should be #included.\n\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\nOPERATION RECORD INITIALISATION\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\nAn operation is recorded in an fscache_operation struct:\n\n\tstruct fscache_operation {\n\t\tunion {\n\t\t\tstruct work_struct fast_work;\n\t\t\tstruct slow_work slow_work;\n\t\t};\n\t\tunsigned long\t\tflags;\n\t\tfscache_operation_processor_t processor;\n\t\t...\n\t};\n\nSomeone wanting to issue an operation should allocate something with this\nstruct embedded in it.  They should initialise it by calling:\n\n\tvoid fscache_operation_init(struct fscache_operation *op,\n\t\t\t\t    fscache_operation_release_t release);\n\nwith the operation to be initialised and the release function to use.\n\nThe op-\u003eflags parameter should be set to indicate the CPU time provision and\nthe exclusivity (see the Parameters section).\n\nThe op-\u003efast_work, op-\u003eslow_work and op-\u003eprocessor flags should be set as\nappropriate for the CPU time provision (see the Parameters section).\n\nFSCACHE_OP_WAITING may be set in op-\u003eflags prior to each submission of the\noperation and waited for afterwards.\n\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\nPARAMETERS\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\nThere are a number of parameters that can be set in the operation record\u0027s flag\nparameter.  There are three options for the provision of CPU time in these\noperations:\n\n (1) The operation may be done synchronously (FSCACHE_OP_MYTHREAD).  A thread\n     may decide it wants to handle an operation itself without deferring it to\n     another thread.\n\n     This is, for example, used in read operations for calling readpages() on\n     the backing filesystem in CacheFiles.  Although readpages() does an\n     asynchronous data fetch, the determination of whether pages exist is done\n     synchronously - and the netfs does not proceed until this has been\n     determined.\n\n     If this option is to be used, FSCACHE_OP_WAITING must be set in op-\u003eflags\n     before submitting the operation, and the operating thread must wait for it\n     to be cleared before proceeding:\n\n\t\twait_on_bit(\u0026op-\u003eflags, FSCACHE_OP_WAITING,\n\t\t\t    fscache_wait_bit, TASK_UNINTERRUPTIBLE);\n\n (2) The operation may be fast asynchronous (FSCACHE_OP_FAST), in which case it\n     will be given to keventd to process.  Such an operation is not permitted\n     to sleep on I/O.\n\n     This is, for example, used by CacheFiles to copy data from a backing fs\n     page to a netfs page after the backing fs has read the page in.\n\n     If this option is used, op-\u003efast_work and op-\u003eprocessor must be\n     initialised before submitting the operation:\n\n\t\tINIT_WORK(\u0026op-\u003efast_work, do_some_work);\n\n (3) The operation may be slow asynchronous (FSCACHE_OP_SLOW), in which case it\n     will be given to the slow work facility to process.  Such an operation is\n     permitted to sleep on I/O.\n\n     This is, for example, used by FS-Cache to handle background writes of\n     pages that have just been fetched from a remote server.\n\n     If this option is used, op-\u003eslow_work and op-\u003eprocessor must be\n     initialised before submitting the operation:\n\n\t\tfscache_operation_init_slow(op, processor)\n\nFurthermore, operations may be one of two types:\n\n (1) Exclusive (FSCACHE_OP_EXCLUSIVE).  Operations of this type may not run in\n     conjunction with any other operation on the object being operated upon.\n\n     An example of this is the attribute change operation, in which the file\n     being written to may need truncation.\n\n (2) Shareable.  Operations of this type may be running simultaneously.  It\u0027s\n     up to the operation implementation to prevent interference between other\n     operations running at the same time.\n\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\nPROCEDURE\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\nOperations are used through the following procedure:\n\n (1) The submitting thread must allocate the operation and initialise it\n     itself.  Normally this would be part of a more specific structure with the\n     generic op embedded within.\n\n (2) The submitting thread must then submit the operation for processing using\n     one of the following two functions:\n\n\tint fscache_submit_op(struct fscache_object *object,\n\t\t\t      struct fscache_operation *op);\n\n\tint fscache_submit_exclusive_op(struct fscache_object *object,\n\t\t\t\t\tstruct fscache_operation *op);\n\n     The first function should be used to submit non-exclusive ops and the\n     second to submit exclusive ones.  The caller must still set the\n     FSCACHE_OP_EXCLUSIVE flag.\n\n     If successful, both functions will assign the operation to the specified\n     object and return 0.  -ENOBUFS will be returned if the object specified is\n     permanently unavailable.\n\n     The operation manager will defer operations on an object that is still\n     undergoing lookup or creation.  The operation will also be deferred if an\n     operation of conflicting exclusivity is in progress on the object.\n\n     If the operation is asynchronous, the manager will retain a reference to\n     it, so the caller should put their reference to it by passing it to:\n\n\tvoid fscache_put_operation(struct fscache_operation *op);\n\n (3) If the submitting thread wants to do the work itself, and has marked the\n     operation with FSCACHE_OP_MYTHREAD, then it should monitor\n     FSCACHE_OP_WAITING as described above and check the state of the object if\n     necessary (the object might have died whilst the thread was waiting).\n\n     When it has finished doing its processing, it should call\n     fscache_put_operation() on it.\n\n (4) The operation holds an effective lock upon the object, preventing other\n     exclusive ops conflicting until it is released.  The operation can be\n     enqueued for further immediate asynchronous processing by adjusting the\n     CPU time provisioning option if necessary, eg:\n\n\top-\u003eflags \u0026\u003d ~FSCACHE_OP_TYPE;\n\top-\u003eflags |\u003d ~FSCACHE_OP_FAST;\n\n     and calling:\n\n\tvoid fscache_enqueue_operation(struct fscache_operation *op)\n\n     This can be used to allow other things to have use of the worker thread\n     pools.\n\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\nASYNCHRONOUS CALLBACK\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\nWhen used in asynchronous mode, the worker thread pool will invoke the\nprocessor method with a pointer to the operation.  This should then get at the\ncontainer struct by using container_of():\n\n\tstatic void fscache_write_op(struct fscache_operation *_op)\n\t{\n\t\tstruct fscache_storage *op \u003d\n\t\t\tcontainer_of(_op, struct fscache_storage, op);\n\t...\n\t}\n\nThe caller holds a reference on the operation, and will invoke\nfscache_put_operation() when the processor function returns.  The processor\nfunction is at liberty to call fscache_enqueue_operation() or to take extra\nreferences.\n\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\nAcked-by: Steve Dickson \u003csteved@redhat.com\u003e\nAcked-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\nAcked-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nTested-by: Daire Byrne \u003cDaire.Byrne@framestore.com\u003e\n"
    },
    {
      "commit": "ccc4fc3d11e91477036d1f82bfa2d442f6ce77f0",
      "tree": "c3ead4b385f9efce6e2688832dfb76391e18345d",
      "parents": [
        "36c9559022850f919269564a74bf17fdabf4bb30"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Apr 03 16:42:38 2009 +0100"
      },
      "committer": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Apr 03 16:42:38 2009 +0100"
      },
      "message": "FS-Cache: Implement the cookie management part of the netfs API\n\nImplement the cookie management part of the FS-Cache netfs client API.  The\ndocumentation and API header file were added in a previous patch.\n\nThis patch implements the following three functions:\n\n (1) fscache_acquire_cookie().\n\n     Acquire a cookie to represent an object to the netfs.  If the object in\n     question is a non-index object, then that object and its parent indices\n     will be created on disk at this point if they don\u0027t already exist.  Index\n     creation is deferred because an index may reside in multiple caches.\n\n (2) fscache_relinquish_cookie().\n\n     Retire or release a cookie previously acquired.  At this point, the\n     object on disk may be destroyed.\n\n (3) fscache_update_cookie().\n\n     Update the in-cache representation of a cookie.  This is used to update\n     the auxiliary data for coherency management purposes.\n\nWith this patch it is possible to have a netfs instruct a cache backend to\nlook up, validate and create metadata on disk and to destroy it again.\nThe ability to actually store and retrieve data in the objects so created is\nadded in later patches.\n\nNote that these functions will never return an error.  _All_ errors are\nhandled internally to FS-Cache.\n\nThe worst that can happen is that fscache_acquire_cookie() may return a NULL\npointer - which is considered a negative cookie pointer and can be passed back\nto any function that takes a cookie without harm.  A negative cookie pointer\nmerely suppresses caching at that level.\n\nThe stub in linux/fscache.h will detect inline the negative cookie pointer and\nabort the operation as fast as possible.  This means that the compiler doesn\u0027t\nhave to set up for a call in that case.\n\nSee the documentation in Documentation/filesystems/caching/netfs-api.txt for\nmore information.\n\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\nAcked-by: Steve Dickson \u003csteved@redhat.com\u003e\nAcked-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\nAcked-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nTested-by: Daire Byrne \u003cDaire.Byrne@framestore.com\u003e\n"
    },
    {
      "commit": "36c9559022850f919269564a74bf17fdabf4bb30",
      "tree": "f163afcf8f8a9eb1a5d63fd6198fcb3e29564493",
      "parents": [
        "2868cbea72dc89ae0eb17693596b1dedaafff1c5"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Apr 03 16:42:38 2009 +0100"
      },
      "committer": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Apr 03 16:42:38 2009 +0100"
      },
      "message": "FS-Cache: Object management state machine\n\nImplement the cache object management state machine.\n\nThe following documentation is added to illuminate the working of this state\nmachine.  It will also be added as:\n\n\tDocumentation/filesystems/caching/object.txt\n\n\t     \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\t     IN-KERNEL CACHE OBJECT REPRESENTATION AND MANAGEMENT\n\t     \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\nREPRESENTATION\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\nFS-Cache maintains an in-kernel representation of each object that a netfs is\ncurrently interested in.  Such objects are represented by the fscache_cookie\nstruct and are referred to as cookies.\n\nFS-Cache also maintains a separate in-kernel representation of the objects that\na cache backend is currently actively caching.  Such objects are represented by\nthe fscache_object struct.  The cache backends allocate these upon request, and\nare expected to embed them in their own representations.  These are referred to\nas objects.\n\nThere is a 1:N relationship between cookies and objects.  A cookie may be\nrepresented by multiple objects - an index may exist in more than one cache -\nor even by no objects (it may not be cached).\n\nFurthermore, both cookies and objects are hierarchical.  The two hierarchies\ncorrespond, but the cookies tree is a superset of the union of the object trees\nof multiple caches:\n\n\t    NETFS INDEX TREE               :      CACHE 1     :      CACHE 2\n\t                                   :                  :\n\t                                   :   +-----------+  :\n\t                          +-----------\u003e|  IObject  |  :\n\t      +-----------+       |        :   +-----------+  :\n\t      |  ICookie  |-------+        :         |        :\n\t      +-----------+       |        :         |        :   +-----------+\n\t            |             +------------------------------\u003e|  IObject  |\n\t            |                      :         |        :   +-----------+\n\t            |                      :         V        :         |\n\t            |                      :   +-----------+  :         |\n\t            V             +-----------\u003e|  IObject  |  :         |\n\t      +-----------+       |        :   +-----------+  :         |\n\t      |  ICookie  |-------+        :         |        :         V\n\t      +-----------+       |        :         |        :   +-----------+\n\t            |             +------------------------------\u003e|  IObject  |\n\t      +-----+-----+                :         |        :   +-----------+\n\t      |           |                :         |        :         |\n\t      V           |                :         V        :         |\n\t+-----------+     |                :   +-----------+  :         |\n\t|  ICookie  |-------------------------\u003e|  IObject  |  :         |\n\t+-----------+     |                :   +-----------+  :         |\n\t      |           V                :         |        :         V\n\t      |     +-----------+          :         |        :   +-----------+\n\t      |     |  ICookie  |--------------------------------\u003e|  IObject  |\n\t      |     +-----------+          :         |        :   +-----------+\n\t      V           |                :         V        :         |\n\t+-----------+     |                :   +-----------+  :         |\n\t|  DCookie  |-------------------------\u003e|  DObject  |  :         |\n\t+-----------+     |                :   +-----------+  :         |\n\t                  |                :                  :         |\n\t          +-------+-------+        :                  :         |\n\t          |               |        :                  :         |\n\t          V               V        :                  :         V\n\t    +-----------+   +-----------+  :                  :   +-----------+\n\t    |  DCookie  |   |  DCookie  |------------------------\u003e|  DObject  |\n\t    +-----------+   +-----------+  :                  :   +-----------+\n\t                                   :                  :\n\nIn the above illustration, ICookie and IObject represent indices and DCookie\nand DObject represent data storage objects.  Indices may have representation in\nmultiple caches, but currently, non-index objects may not.  Objects of any type\nmay also be entirely unrepresented.\n\nAs far as the netfs API goes, the netfs is only actually permitted to see\npointers to the cookies.  The cookies themselves and any objects attached to\nthose cookies are hidden from it.\n\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\nOBJECT MANAGEMENT STATE MACHINE\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\nWithin FS-Cache, each active object is managed by its own individual state\nmachine.  The state for an object is kept in the fscache_object struct, in\nobject-\u003estate.  A cookie may point to a set of objects that are in different\nstates.\n\nEach state has an action associated with it that is invoked when the machine\nwakes up in that state.  There are four logical sets of states:\n\n (1) Preparation: states that wait for the parent objects to become ready.  The\n     representations are hierarchical, and it is expected that an object must\n     be created or accessed with respect to its parent object.\n\n (2) Initialisation: states that perform lookups in the cache and validate\n     what\u0027s found and that create on disk any missing metadata.\n\n (3) Normal running: states that allow netfs operations on objects to proceed\n     and that update the state of objects.\n\n (4) Termination: states that detach objects from their netfs cookies, that\n     delete objects from disk, that handle disk and system errors and that free\n     up in-memory resources.\n\nIn most cases, transitioning between states is in response to signalled events.\nWhen a state has finished processing, it will usually set the mask of events in\nwhich it is interested (object-\u003eevent_mask) and relinquish the worker thread.\nThen when an event is raised (by calling fscache_raise_event()), if the event\nis not masked, the object will be queued for processing (by calling\nfscache_enqueue_object()).\n\nPROVISION OF CPU TIME\n---------------------\n\nThe work to be done by the various states is given CPU time by the threads of\nthe slow work facility (see Documentation/slow-work.txt).  This is used in\npreference to the workqueue facility because:\n\n (1) Threads may be completely occupied for very long periods of time by a\n     particular work item.  These state actions may be doing sequences of\n     synchronous, journalled disk accesses (lookup, mkdir, create, setxattr,\n     getxattr, truncate, unlink, rmdir, rename).\n\n (2) Threads may do little actual work, but may rather spend a lot of time\n     sleeping on I/O.  This means that single-threaded and 1-per-CPU-threaded\n     workqueues don\u0027t necessarily have the right numbers of threads.\n\nLOCKING SIMPLIFICATION\n----------------------\n\nBecause only one worker thread may be operating on any particular object\u0027s\nstate machine at once, this simplifies the locking, particularly with respect\nto disconnecting the netfs\u0027s representation of a cache object (fscache_cookie)\nfrom the cache backend\u0027s representation (fscache_object) - which may be\nrequested from either end.\n\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\nTHE SET OF STATES\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\nThe object state machine has a set of states that it can be in.  There are\npreparation states in which the object sets itself up and waits for its parent\nobject to transit to a state that allows access to its children:\n\n (1) State FSCACHE_OBJECT_INIT.\n\n     Initialise the object and wait for the parent object to become active.  In\n     the cache, it is expected that it will not be possible to look an object\n     up from the parent object, until that parent object itself has been looked\n     up.\n\nThere are initialisation states in which the object sets itself up and accesses\ndisk for the object metadata:\n\n (2) State FSCACHE_OBJECT_LOOKING_UP.\n\n     Look up the object on disk, using the parent as a starting point.\n     FS-Cache expects the cache backend to probe the cache to see whether this\n     object is represented there, and if it is, to see if it\u0027s valid (coherency\n     management).\n\n     The cache should call fscache_object_lookup_negative() to indicate lookup\n     failure for whatever reason, and should call fscache_obtained_object() to\n     indicate success.\n\n     At the completion of lookup, FS-Cache will let the netfs go ahead with\n     read operations, no matter whether the file is yet cached.  If not yet\n     cached, read operations will be immediately rejected with ENODATA until\n     the first known page is uncached - as to that point there can be no data\n     to be read out of the cache for that file that isn\u0027t currently also held\n     in the pagecache.\n\n (3) State FSCACHE_OBJECT_CREATING.\n\n     Create an object on disk, using the parent as a starting point.  This\n     happens if the lookup failed to find the object, or if the object\u0027s\n     coherency data indicated what\u0027s on disk is out of date.  In this state,\n     FS-Cache expects the cache to create\n\n     The cache should call fscache_obtained_object() if creation completes\n     successfully, fscache_object_lookup_negative() otherwise.\n\n     At the completion of creation, FS-Cache will start processing write\n     operations the netfs has queued for an object.  If creation failed, the\n     write ops will be transparently discarded, and nothing recorded in the\n     cache.\n\nThere are some normal running states in which the object spends its time\nservicing netfs requests:\n\n (4) State FSCACHE_OBJECT_AVAILABLE.\n\n     A transient state in which pending operations are started, child objects\n     are permitted to advance from FSCACHE_OBJECT_INIT state, and temporary\n     lookup data is freed.\n\n (5) State FSCACHE_OBJECT_ACTIVE.\n\n     The normal running state.  In this state, requests the netfs makes will be\n     passed on to the cache.\n\n (6) State FSCACHE_OBJECT_UPDATING.\n\n     The state machine comes here to update the object in the cache from the\n     netfs\u0027s records.  This involves updating the auxiliary data that is used\n     to maintain coherency.\n\nAnd there are terminal states in which an object cleans itself up, deallocates\nmemory and potentially deletes stuff from disk:\n\n (7) State FSCACHE_OBJECT_LC_DYING.\n\n     The object comes here if it is dying because of a lookup or creation\n     error.  This would be due to a disk error or system error of some sort.\n     Temporary data is cleaned up, and the parent is released.\n\n (8) State FSCACHE_OBJECT_DYING.\n\n     The object comes here if it is dying due to an error, because its parent\n     cookie has been relinquished by the netfs or because the cache is being\n     withdrawn.\n\n     Any child objects waiting on this one are given CPU time so that they too\n     can destroy themselves.  This object waits for all its children to go away\n     before advancing to the next state.\n\n (9) State FSCACHE_OBJECT_ABORT_INIT.\n\n     The object comes to this state if it was waiting on its parent in\n     FSCACHE_OBJECT_INIT, but its parent died.  The object will destroy itself\n     so that the parent may proceed from the FSCACHE_OBJECT_DYING state.\n\n(10) State FSCACHE_OBJECT_RELEASING.\n(11) State FSCACHE_OBJECT_RECYCLING.\n\n     The object comes to one of these two states when dying once it is rid of\n     all its children, if it is dying because the netfs relinquished its\n     cookie.  In the first state, the cached data is expected to persist, and\n     in the second it will be deleted.\n\n(12) State FSCACHE_OBJECT_WITHDRAWING.\n\n     The object transits to this state if the cache decides it wants to\n     withdraw the object from service, perhaps to make space, but also due to\n     error or just because the whole cache is being withdrawn.\n\n(13) State FSCACHE_OBJECT_DEAD.\n\n     The object transits to this state when the in-memory object record is\n     ready to be deleted.  The object processor shouldn\u0027t ever see an object in\n     this state.\n\nTHE SET OF EVENTS\n-----------------\n\nThere are a number of events that can be raised to an object state machine:\n\n (*) FSCACHE_OBJECT_EV_UPDATE\n\n     The netfs requested that an object be updated.  The state machine will ask\n     the cache backend to update the object, and the cache backend will ask the\n     netfs for details of the change through its cookie definition ops.\n\n (*) FSCACHE_OBJECT_EV_CLEARED\n\n     This is signalled in two circumstances:\n\n     (a) when an object\u0027s last child object is dropped and\n\n     (b) when the last operation outstanding on an object is completed.\n\n     This is used to proceed from the dying state.\n\n (*) FSCACHE_OBJECT_EV_ERROR\n\n     This is signalled when an I/O error occurs during the processing of some\n     object.\n\n (*) FSCACHE_OBJECT_EV_RELEASE\n (*) FSCACHE_OBJECT_EV_RETIRE\n\n     These are signalled when the netfs relinquishes a cookie it was using.\n     The event selected depends on whether the netfs asks for the backing\n     object to be retired (deleted) or retained.\n\n (*) FSCACHE_OBJECT_EV_WITHDRAW\n\n     This is signalled when the cache backend wants to withdraw an object.\n     This means that the object will have to be detached from the netfs\u0027s\n     cookie.\n\nBecause the withdrawing releasing/retiring events are all handled by the object\nstate machine, it doesn\u0027t matter if there\u0027s a collision with both ends trying\nto sever the connection at the same time.  The state machine can just pick\nwhich one it wants to honour, and that effects the other.\n\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\nAcked-by: Steve Dickson \u003csteved@redhat.com\u003e\nAcked-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\nAcked-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nTested-by: Daire Byrne \u003cDaire.Byrne@framestore.com\u003e\n"
    },
    {
      "commit": "2868cbea72dc89ae0eb17693596b1dedaafff1c5",
      "tree": "277e2cbdafabe6ca74458445838a07b571a94996",
      "parents": [
        "726dd7ff10c217dd74329c94643dc8ebea27334b"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Apr 03 16:42:38 2009 +0100"
      },
      "committer": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Apr 03 16:42:38 2009 +0100"
      },
      "message": "FS-Cache: Bit waiting helpers\n\nAdd helpers for use with wait_on_bit().\n\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\nAcked-by: Steve Dickson \u003csteved@redhat.com\u003e\nAcked-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\nAcked-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nTested-by: Daire Byrne \u003cDaire.Byrne@framestore.com\u003e\n"
    },
    {
      "commit": "726dd7ff10c217dd74329c94643dc8ebea27334b",
      "tree": "9bd5b011f945fca4f1b057f7e7750414b1fd9fbd",
      "parents": [
        "955d00917f0c094e0f2fb88df967e980ab66b8ca"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Apr 03 16:42:38 2009 +0100"
      },
      "committer": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Apr 03 16:42:38 2009 +0100"
      },
      "message": "FS-Cache: Add netfs registration\n\nAdd functions to register and unregister a network filesystem or other client\nof the FS-Cache service.  This allocates and releases the cookie representing\nthe top-level index for a netfs, and makes it available to the netfs.\n\nIf the FS-Cache facility is disabled, then the calls are optimised away at\ncompile time.\n\nNote that whilst this patch may appear to work with FS-Cache enabled and a\nnetfs attempting to use it, it will leak the cookie it allocates for the netfs\nas fscache_relinquish_cookie() is implemented in a later patch.  This will\ncause the slab code to emit a warning when the module is removed.\n\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\nAcked-by: Steve Dickson \u003csteved@redhat.com\u003e\nAcked-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\nAcked-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nTested-by: Daire Byrne \u003cDaire.Byrne@framestore.com\u003e\n"
    },
    {
      "commit": "955d00917f0c094e0f2fb88df967e980ab66b8ca",
      "tree": "c6109684239fd45462e494fb4f26aa8e2e651922",
      "parents": [
        "4c515dd47ab41be3f89e757d441661795470b376"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Apr 03 16:42:38 2009 +0100"
      },
      "committer": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Apr 03 16:42:38 2009 +0100"
      },
      "message": "FS-Cache: Provide a slab for cookie allocation\n\nProvide a slab from which can be allocated the FS-Cache cookies that will be\npresented to the netfs.\n\nAlso provide a slab constructor and a function to recursively discard a cookie\nand its ancestor chain.\n\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\nAcked-by: Steve Dickson \u003csteved@redhat.com\u003e\nAcked-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\nAcked-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nTested-by: Daire Byrne \u003cDaire.Byrne@framestore.com\u003e\n"
    },
    {
      "commit": "4c515dd47ab41be3f89e757d441661795470b376",
      "tree": "22b1959663cf77ecd60125ef112b87f1ee4fa6ef",
      "parents": [
        "0e04d4cefcf4d8fbbdb2c50e93ad541582933fd2"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Apr 03 16:42:37 2009 +0100"
      },
      "committer": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Apr 03 16:42:37 2009 +0100"
      },
      "message": "FS-Cache: Add cache management\n\nImplement the entry points by which a cache backend may initialise, add,\ndeclare an error upon and withdraw a cache.\n\nFurther, an object is created in sysfs under which each cache added will get\nan object created:\n\n\t/sys/fs/fscache/\u003ccachetag\u003e/\n\nAll of this is described in Documentation/filesystems/caching/backend-api.txt\nadded by a previous patch.\n\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\nAcked-by: Steve Dickson \u003csteved@redhat.com\u003e\nAcked-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\nAcked-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nTested-by: Daire Byrne \u003cDaire.Byrne@framestore.com\u003e\n"
    },
    {
      "commit": "0e04d4cefcf4d8fbbdb2c50e93ad541582933fd2",
      "tree": "97c4cda6a2c246660e6a5c718a9272375cdb259c",
      "parents": [
        "a6891645cf2ddd4778096848a864580e7258faba"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Apr 03 16:42:37 2009 +0100"
      },
      "committer": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Apr 03 16:42:37 2009 +0100"
      },
      "message": "FS-Cache: Add cache tag handling\n\nImplement two features of FS-Cache:\n\n (1) The ability to request and release cache tags - names by which a cache may\n     be known to a netfs, and thus selected for use.\n\n (2) An internal function by which a cache is selected by consulting the netfs,\n     if the netfs wishes to be consulted.\n\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\nAcked-by: Steve Dickson \u003csteved@redhat.com\u003e\nAcked-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\nAcked-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nTested-by: Daire Byrne \u003cDaire.Byrne@framestore.com\u003e\n"
    },
    {
      "commit": "a6891645cf2ddd4778096848a864580e7258faba",
      "tree": "e0095e8b87e199e7310508fc3687660746860600",
      "parents": [
        "7394daa8c61dfda4baa687f133748fa0b599b017"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Apr 03 16:42:37 2009 +0100"
      },
      "committer": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Apr 03 16:42:37 2009 +0100"
      },
      "message": "FS-Cache: Root index definition\n\nAdd a description of the root index of the cache for later patches to make use\nof.\n\nThe root index is owned by FS-Cache itself.  When a netfs requests caching\nfacilities, FS-Cache will, if one doesn\u0027t already exist, create an entry in\nthe root index with the key being the name of the netfs (\"AFS\" for example),\nand the auxiliary data holding the index structure version supplied by the\nnetfs:\n\n\t\t\t\t     FSDEF\n\t\t\t\t       |\n\t\t\t\t +-----------+\n\t\t\t\t |           |\n\t\t\t\tNFS         AFS\n\t\t\t       [v\u003d1]       [v\u003d1]\n\nIf an entry with the appropriate name does already exist, the version is\ncompared.  If the version is different, the entire subtree from that entry\nwill be discarded and a new entry created.\n\nThe new entry will be an index, and a cookie referring to it will be passed to\nthe netfs.  This is then the root handle by which the netfs accesses the\ncache.  It can create whatever objects it likes in that index, including\nfurther indices.\n\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\nAcked-by: Steve Dickson \u003csteved@redhat.com\u003e\nAcked-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\nAcked-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nTested-by: Daire Byrne \u003cDaire.Byrne@framestore.com\u003e\n"
    },
    {
      "commit": "7394daa8c61dfda4baa687f133748fa0b599b017",
      "tree": "32d2c55ed60596918ec62ce6ecca186337bf4660",
      "parents": [
        "06b3db1b9bccdc8c2c743122a89745279e5ecc46"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Apr 03 16:42:37 2009 +0100"
      },
      "committer": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Apr 03 16:42:37 2009 +0100"
      },
      "message": "FS-Cache: Add use of /proc and presentation of statistics\n\nMake FS-Cache create its /proc interface and present various statistical\ninformation through it.  Also provide the functions for updating this\ninformation.\n\nThese features are enabled by:\n\n\tCONFIG_FSCACHE_PROC\n\tCONFIG_FSCACHE_STATS\n\tCONFIG_FSCACHE_HISTOGRAM\n\nThe /proc directory for FS-Cache is also exported so that caching modules can\nadd their own statistics there too.\n\nThe FS-Cache module is loadable at this point, and the statistics files can be\nexamined by userspace:\n\n\tcat /proc/fs/fscache/stats\n\tcat /proc/fs/fscache/histogram\n\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\nAcked-by: Steve Dickson \u003csteved@redhat.com\u003e\nAcked-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\nAcked-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nTested-by: Daire Byrne \u003cDaire.Byrne@framestore.com\u003e\n"
    },
    {
      "commit": "06b3db1b9bccdc8c2c743122a89745279e5ecc46",
      "tree": "b60850bd899c1a87b5b372cfbf1e72cf380c862a",
      "parents": [
        "0dfc41d1efcc4180abfd32f68f0ade540e636ff6"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Apr 03 16:42:36 2009 +0100"
      },
      "committer": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Apr 03 16:42:36 2009 +0100"
      },
      "message": "FS-Cache: Add main configuration option, module entry points and debugging\n\nAdd the main configuration option, allowing FS-Cache to be selected; the\nmodule entry and exit functions and the debugging stuff used by these patches.\n\nThe two configuration options added are:\n\n\tCONFIG_FSCACHE\n\tCONFIG_FSCACHE_DEBUG\n\nThe first enables the facility, and the second makes the debugging statements\nenableable through the \"debug\" module parameter.  The value of this parameter\nis a bitmask as described in:\n\n\tDocumentation/filesystems/caching/fscache.txt\n\nThe module can be loaded at this point, but all it will do at this point in\nthe patch series is to start up the slow work facility and shut it down again.\n\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\nAcked-by: Steve Dickson \u003csteved@redhat.com\u003e\nAcked-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\nAcked-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nTested-by: Daire Byrne \u003cDaire.Byrne@framestore.com\u003e\n"
    },
    {
      "commit": "266cf658efcf6ac33541a46740f74f50c79d2b6b",
      "tree": "5c83b0879892d509e598dfd54be3ba3679ecd348",
      "parents": [
        "03fb3d2af96c2783c3a5bc03f3d984cf422f0e69"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Apr 03 16:42:36 2009 +0100"
      },
      "committer": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Apr 03 16:42:36 2009 +0100"
      },
      "message": "FS-Cache: Recruit a page flags for cache management\n\nRecruit a page flag to aid in cache management.  The following extra flag is\ndefined:\n\n (1) PG_fscache (PG_private_2)\n\n     The marked page is backed by a local cache and is pinning resources in the\n     cache driver.\n\nIf PG_fscache is set, then things that checked for PG_private will now also\ncheck for that.  This includes things like truncation and page invalidation.\nThe function page_has_private() had been added to make the checks for both\nPG_private and PG_private_2 at the same time.\n\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\nAcked-by: Steve Dickson \u003csteved@redhat.com\u003e\nAcked-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\nAcked-by: Rik van Riel \u003criel@redhat.com\u003e\nAcked-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nTested-by: Daire Byrne \u003cDaire.Byrne@framestore.com\u003e\n"
    },
    {
      "commit": "e7c8f5079ed9ec9e6eb1abe3defc5fb4ebfdf1cb",
      "tree": "fd0191b45890e37b5e20a2d7e200d34a6432eb7e",
      "parents": [
        "f7ab34ea723ed304b19698efca85d6f40cecd99b"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Fri Apr 03 01:34:49 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Fri Apr 03 01:34:49 2009 -0400"
      },
      "message": "ext3: Add replace-on-rename hueristics for data\u003dwriteback mode\n\nIn data\u003dwriteback mode, start an asynchronous flush when renaming a\nfile on top of an already-existing file.  This lowers the probability\nof data loss in the case of applications that attempt to replace a\nfile via using rename().\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n\n"
    },
    {
      "commit": "f7ab34ea723ed304b19698efca85d6f40cecd99b",
      "tree": "28a609a654a24bc40d694fd2ec87a1f785c97c79",
      "parents": [
        "512a004382f2c60d5c4f855476ba965adc00250c"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Fri Apr 03 01:34:35 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Fri Apr 03 01:34:35 2009 -0400"
      },
      "message": "ext3: Add replace-on-truncate hueristics for data\u003dwriteback mode\n\nIn data\u003dwriteback mode, start an asynchronous flush when closing a\nfile which had been previously truncated down to zero.  This lowers\nthe probability of data loss in the case of applications that attempt\nto replace a file using truncate.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "8fe74cf053de7ad2124a894996f84fa890a81093",
      "tree": "77dcd8fbf33ce53a3821942233962fb28c6f2848",
      "parents": [
        "c2eb2fa6d2b6fe122d3479ec5b28d978418b2698",
        "ced117c73edc917e96dea7cca98c91383f0792f7"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Apr 02 21:09:10 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Apr 02 21:09:10 2009 -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:\n  Remove two unneeded exports and make two symbols static in fs/mpage.c\n  Cleanup after commit 585d3bc06f4ca57f975a5a1f698f65a45ea66225\n  Trim includes of fdtable.h\n  Don\u0027t crap into descriptor table in binfmt_som\n  Trim includes in binfmt_elf\n  Don\u0027t mess with descriptor table in load_elf_binary()\n  Get rid of indirect include of fs_struct.h\n  New helper - current_umask()\n  check_unsafe_exec() doesn\u0027t care about signal handlers sharing\n  New locking/refcounting for fs_struct\n  Take fs_struct handling to new file (fs/fs_struct.c)\n  Get rid of bumping fs_struct refcount in pivot_root(2)\n  Kill unsharing fs_struct in __set_personality()\n"
    },
    {
      "commit": "41d577aa35aa0504fe28b76a948908bdb7fbec81",
      "tree": "0ed97b448540b81989af09e2a6b25cf25193975a",
      "parents": [
        "1c5b45411f93b44a6f3dde3328f88f11bca1bca5"
      ],
      "author": {
        "name": "Coly Li",
        "email": "coly.li@suse.de",
        "time": "Thu Apr 02 16:59:44 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Apr 02 19:05:10 2009 -0700"
      },
      "message": "fs/ufs: return f_fsid for statfs(2)\n\nMake ufs return f_fsid info for statfs(2).\n\nSigned-off-by: Coly Li \u003ccoly.li@suse.de\u003e\nCc: Evgeniy Dushistov \u003cdushistov@mail.ru\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "1c5b45411f93b44a6f3dde3328f88f11bca1bca5",
      "tree": "a53dc0eb22c866c4e0acc30b0a434869c2522dac",
      "parents": [
        "2fc7f562b439a361c62b9d8a67733a164fb6136f"
      ],
      "author": {
        "name": "Coly Li",
        "email": "coly.li@suse.de",
        "time": "Thu Apr 02 16:59:43 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Apr 02 19:05:10 2009 -0700"
      },
      "message": "fs/sysv: return f_fsid for statfs(2)\n\nMake sysv file system return f_fsid info for statfs(2).\n\nSigned-off-by: Coly Li \u003ccoly.li@suse.de\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "2fc7f562b439a361c62b9d8a67733a164fb6136f",
      "tree": "9b340f94fd0d14dde27efc42cbc91246c3a74983",
      "parents": [
        "651d0623045d3265a21ab9803b3a1e0f24a17461"
      ],
      "author": {
        "name": "Coly Li",
        "email": "coly.li@suse.de",
        "time": "Thu Apr 02 16:59:42 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Apr 02 19:05:10 2009 -0700"
      },
      "message": "fs/squashfs: return f_fsid for statfs(2)\n\nMake squashfs return f_fsid info for statfs(2).\n\nSigned-off-by: Coly Li \u003ccoly.li@suse.de\u003e\nCc: Phillip Lougher \u003cphillip@lougher.demon.co.uk\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "651d0623045d3265a21ab9803b3a1e0f24a17461",
      "tree": "dcfe9c374fcf7f36601a870837f19877d926f9aa",
      "parents": [
        "5b76dc066a4deb937665521566f89aead756f049"
      ],
      "author": {
        "name": "Coly Li",
        "email": "coly.li@suse.de",
        "time": "Thu Apr 02 16:59:41 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Apr 02 19:05:10 2009 -0700"
      },
      "message": "fs/reiserfs: return f_fsid for statfs(2)\n\nMake reiserfs3 return f_fsid info for statfs(2).  By Andreas\u0027 suggestion,\nthis patch populates a persistent f_fsid between boots/mounts with help of\non-disk uuid record.\n\nRandy Dunlap reported a compiling error from v2 patch like:\n    fs/built-in.o: In function `reiserfs_statfs\u0027:\n    super.c:(.text+0x7332b): undefined reference to `crc32_le\u0027\n    super.c:(.text+0x7333f): undefined reference to `crc32_le\u0027\nAlso he provided helpful solution to fix this error. The modification of v3\npatch is based on Randy\u0027s suggestion, add \u0027select CRC32\u0027 in fs/reiserfs/Kconfig.\n\nSigned-off-by: Coly Li \u003ccoly.li@suse.de\u003e\nCc: Randy Dunlap \u003crandy.dunlap@oracle.com\u003e\nCc: Jeff Mahoney \u003cjeffm@suse.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "5b76dc066a4deb937665521566f89aead756f049",
      "tree": "dc4a855e8c279c05cd1f2bed2216eeac2ca500de",
      "parents": [
        "197e671ee1d674b194b943467364fdfbefe7ce5a"
      ],
      "author": {
        "name": "Coly Li",
        "email": "coly.li@suse.de",
        "time": "Thu Apr 02 16:59:40 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Apr 02 19:05:10 2009 -0700"
      },
      "message": "fs/qnx4: return f_fsid for statfs(2)\n\nMake qnx4 file system return f_fsid info for statfs(2).\n\nSigned-off-by: Coly Li \u003ccoly.li@suse.de\u003e\nAcked-by: Anders Larsen \u003cal@alarsen.net\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "197e671ee1d674b194b943467364fdfbefe7ce5a",
      "tree": "a72e2cd4139f7e7b1647b199c8fa88b350cc0d4e",
      "parents": [
        "054475d2af2640a6d6cb83b528512c7b49eef9ca"
      ],
      "author": {
        "name": "Coly Li",
        "email": "coly.li@suse.de",
        "time": "Thu Apr 02 16:59:39 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Apr 02 19:05:10 2009 -0700"
      },
      "message": "fs/omfs: return f_fsid for statfs(2)\n\nMake omfs return f_fsid info for statfs(2).\n\nSigned-off-by: Coly Li \u003ccoly.li@suse.de\u003e\nAcked-by: Bob Copeland \u003cme@bobcopeland.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "054475d2af2640a6d6cb83b528512c7b49eef9ca",
      "tree": "2790c3043ff7be3f45fdbdd129c4ab917dc7a191",
      "parents": [
        "2430c4daf9e6cc6b144906a41f7f28c3f6ae5a2c"
      ],
      "author": {
        "name": "Coly Li",
        "email": "coly.li@suse.de",
        "time": "Thu Apr 02 16:59:39 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Apr 02 19:05:09 2009 -0700"
      },
      "message": "fs/minix: return f_fsid for statfs(2)\n\nMake minix file system return f_fsid info for statfs(2).\n\nSigned-off-by: Coly Li \u003ccoly.li@suse.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "2430c4daf9e6cc6b144906a41f7f28c3f6ae5a2c",
      "tree": "77205aaed6beda98cb414ebcbb2a6e57c5c85a50",
      "parents": [
        "604d295c26f2229636c7fa4eba33af017c3b70e3"
      ],
      "author": {
        "name": "Coly Li",
        "email": "coly.li@suse.de",
        "time": "Thu Apr 02 16:59:38 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Apr 02 19:05:09 2009 -0700"
      },
      "message": "fs/isofs: return f_fsid for statfs(2)\n\nMake isofs return f_fsid info for statfs(2).\n\nSigned-off-by: Coly Li \u003ccoly.li@suse.de\u003e\nCc: Jan Kara \u003cjack@ucw.cz\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "604d295c26f2229636c7fa4eba33af017c3b70e3",
      "tree": "a80ed9776739956f7280432b71278e4b7d100eb3",
      "parents": [
        "25564dd869d8615e80b70b37de7545bd21de3c7c"
      ],
      "author": {
        "name": "Coly Li",
        "email": "coly.li@suse.de",
        "time": "Thu Apr 02 16:59:37 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Apr 02 19:05:09 2009 -0700"
      },
      "message": "fs/hpfs: return f_fsid for statfs(2)\n\nMake hpfs return f_fsid info for statfs(2).\n\nSigned-off-by: Coly Li \u003ccoly.li@suse.de\u003e\nCc: Mikulas Patocka \u003cmikulas@artax.karlin.mff.cuni.cz\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "25564dd869d8615e80b70b37de7545bd21de3c7c",
      "tree": "4453809be73488064251f2686fc10eb523a0ea1d",
      "parents": [
        "7dd2c000ff50c758c7abfa95f57c854e3aeba5e6"
      ],
      "author": {
        "name": "Coly Li",
        "email": "coly.li@suse.de",
        "time": "Thu Apr 02 16:59:36 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Apr 02 19:05:09 2009 -0700"
      },
      "message": "fs/hfsplus: return f_fsid for statfs(2)\n\nMake hfsplus return f_fsid info for statfs(2).\n\nSigned-off-by: Coly Li \u003ccoly.li@suse.de\u003e\nCc: Roman Zippel \u003czippel@linux-m68k.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "7dd2c000ff50c758c7abfa95f57c854e3aeba5e6",
      "tree": "15d5041467bd3560019bc7f1d7d650936c3701cc",
      "parents": [
        "aac49b7543c816a6e2c1581c5b5002e6a0cef3d1"
      ],
      "author": {
        "name": "Coly Li",
        "email": "coly.li@suse.de",
        "time": "Thu Apr 02 16:59:35 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Apr 02 19:05:09 2009 -0700"
      },
      "message": "fs/hfs: return f_fsid for statfs(2)\n\nMake hfs return f_fsid info for statfs(2).\n\nSigned-off-by: Coly Li \u003ccoly.li@suse.de\u003e\nCc: Roman Zippel \u003czippel@linux-m68k.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "aac49b7543c816a6e2c1581c5b5002e6a0cef3d1",
      "tree": "3410068c8f33faad4c5a2d7f159465ef91230a6c",
      "parents": [
        "514c91a9cca12b19ed80ac6728278aff9bbf65f0"
      ],
      "author": {
        "name": "Coly Li",
        "email": "coly.li@suse.de",
        "time": "Thu Apr 02 16:59:35 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Apr 02 19:05:09 2009 -0700"
      },
      "message": "fs/fat: return f_fsid for statfs(2)\n\nMake fat return f_fsid info for statfs(2).\n\nSigned-off-by: Coly Li \u003ccoly.li@suse.de\u003e\nAcked-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "514c91a9cca12b19ed80ac6728278aff9bbf65f0",
      "tree": "cf38741f31c6214b3d64013b3d3fe3c99882a468",
      "parents": [
        "94ea77ac696d76522ad32a51e84a969f83284eda"
      ],
      "author": {
        "name": "Coly Li",
        "email": "coly.li@suse.de",
        "time": "Thu Apr 02 16:59:34 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Apr 02 19:05:09 2009 -0700"
      },
      "message": "fs/efs: return f_fsid for statfs(2)\n\nMake efs return f_fsid info for statfs(2), and do a little variable\nrenaming in efs_statfs().\n\nSigned-off-by: Coly Li \u003ccoly.li@suse.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "94ea77ac696d76522ad32a51e84a969f83284eda",
      "tree": "093e7553289e1a7f10b960f808cb86136757dbe9",
      "parents": [
        "8587246a004d6ac10aa12c10e3474cfd9dafa44a"
      ],
      "author": {
        "name": "Coly Li",
        "email": "coly.li@suse.de",
        "time": "Thu Apr 02 16:59:33 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Apr 02 19:05:08 2009 -0700"
      },
      "message": "fs/cramfs: return f_fsid for statfs(2)\n\nMake cramfs return f_fsid info for statfs(2).\n\nSigned-off-by: Coly Li \u003ccoly.li@suse.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "8587246a004d6ac10aa12c10e3474cfd9dafa44a",
      "tree": "326cc82deb2cc02a8d729c9b2b6f56c12e01c91a",
      "parents": [
        "a6a2a73c4dc6babba2cfa366305cb936fc469640"
      ],
      "author": {
        "name": "Coly Li",
        "email": "coly.li@suse.de",
        "time": "Thu Apr 02 16:59:32 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Apr 02 19:05:08 2009 -0700"
      },
      "message": "fs/befs: return f_fsid for statfs(2)\n\nMake befs return f_fsid info for statfs(2).\n\nSigned-off-by: Coly Li \u003ccoly.li@suse.de\u003e\nCc: Sergey S. Kostyliov \u003crathamahata@php4.ru\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "a6a2a73c4dc6babba2cfa366305cb936fc469640",
      "tree": "c99f6de9a85860957435d6d05b105c41863f5e40",
      "parents": [
        "accb40122040374e97fdf4bb81bdc9316b52c756"
      ],
      "author": {
        "name": "Coly Li",
        "email": "coly.li@suse.de",
        "time": "Thu Apr 02 16:59:32 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Apr 02 19:05:08 2009 -0700"
      },
      "message": "fs/affs: return f_fsid for statfs(2)\n\nMake affs return f_fsid info for statfs(2).\n\nSigned-off-by: Coly Li \u003ccoly.li@suse.de\u003e\nCc: Roman Zippel \u003czippel@linux-m68k.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "accb40122040374e97fdf4bb81bdc9316b52c756",
      "tree": "a3c1982d61036f361bc720d11a9345dd81f76f0c",
      "parents": [
        "10c7db279218eda4b19d29ee17db8a815b18d564"
      ],
      "author": {
        "name": "Coly Li",
        "email": "coly.li@suse.de",
        "time": "Thu Apr 02 16:59:27 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Apr 02 19:05:08 2009 -0700"
      },
      "message": "fs/adfs: return f_fsid for statfs(2)\n\nCurrently many file systems in Linux kernel do not return f_fsid in statfs\ninfo, the value is set as 0 in vfs layer.  Anyway, in some conditions,\nf_fsid from statfs(2) is useful, especially being used as (f_fsid, ino)\npair to uniquely identify a file.\n\nBasic idea of the patches is generating a unique fs ID by\nhuge_encode_dev(sb-\u003es_bdev-\u003ebd_dev) during file system mounting life time\n(no endian consistent issue).  sb is a point of struct super_block of\ncurrent mounted file system being accessed by statfs(2).\n\nThis patch:\n\nMake adfs return f_fsid info for statfs(2), and do a little variable\nrenaming in adfs_statfs().\n\nSigned-off-by: Coly Li \u003ccoly.li@suse.de\u003e\nCc: Roman Zippel \u003czippel@linux-m68k.org\u003e\nCc: \"Sergey S. Kostyliov\" \u003crathamahata@php4.ru\u003e\nCc: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\nCc: Mikulas Patocka \u003cmikulas@artax.karlin.mff.cuni.cz\u003e\nCc: Dave Kleikamp \u003cshaggy@austin.ibm.com\u003e\nCc: Bob Copeland \u003cme@bobcopeland.com\u003e\nCc: Anders Larsen \u003cal@alarsen.net\u003e\nCc: Phillip Lougher \u003cphillip@lougher.demon.co.uk\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nCc: Evgeniy Dushistov \u003cdushistov@mail.ru\u003e\nCc: Jan Kara \u003cjack@suse.cz\u003e\nCc: Andreas Dilger \u003cadilger@sun.com\u003e\nCc: Jamie Lokier \u003cjamie@shareable.org\u003e\nCc: Theodore Ts\u0027o \u003ctytso@mit.edu\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "10c7db279218eda4b19d29ee17db8a815b18d564",
      "tree": "2ab1abd85e3f68a13d50f6c7f617d3999c138b54",
      "parents": [
        "ddd9e91b71072b8ebe89311c3a44b077defa1756"
      ],
      "author": {
        "name": "Gerd Hoffmann",
        "email": "kraxel@redhat.com",
        "time": "Thu Apr 02 16:59:25 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Apr 02 19:05:08 2009 -0700"
      },
      "message": "preadv/pwritev: switch compat readv/preadv/writev/pwritev from fget to fget_light\n\nSigned-off-by: Gerd Hoffmann \u003ckraxel@redhat.com\u003e\nCc: Arnd Bergmann \u003carnd@arndb.de\u003e\nCc: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nCc: \u003clinux-api@vger.kernel.org\u003e\nCc: \u003clinux-arch@vger.kernel.org\u003e\nCc: Ralf Baechle \u003cralf@linux-mips.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "f3554f4bc69803ac2baaf7cf2aa4339e1f4b693e",
      "tree": "52505043de254dc3e34dad7110724fcc1f489eb9",
      "parents": [
        "6949a6318e60aeb9c755679ac7f978aefe8c1722"
      ],
      "author": {
        "name": "Gerd Hoffmann",
        "email": "kraxel@redhat.com",
        "time": "Thu Apr 02 16:59:23 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Apr 02 19:05:08 2009 -0700"
      },
      "message": "preadv/pwritev: Add preadv and pwritev system calls.\n\nThis patch adds preadv and pwritev system calls.  These syscalls are a\npretty straightforward combination of pread and readv (same for write).\nThey are quite useful for doing vectored I/O in threaded applications.\nUsing lseek+readv instead opens race windows you\u0027ll have to plug with\nlocking.\n\nOther systems have such system calls too, for example NetBSD, check\nhere: http://www.daemon-systems.org/man/preadv.2.html\n\nThe application-visible interface provided by glibc should look like\nthis to be compatible to the existing implementations in the *BSD family:\n\n  ssize_t preadv(int d, const struct iovec *iov, int iovcnt, off_t offset);\n  ssize_t pwritev(int d, const struct iovec *iov, int iovcnt, off_t offset);\n\nThis prototype has one problem though: On 32bit archs is the (64bit)\noffset argument unaligned, which the syscall ABI of several archs doesn\u0027t\nallow to do.  At least s390 needs a wrapper in glibc to handle this.  As\nwe\u0027ll need a wrappers in glibc anyway I\u0027ve decided to push problem to\nglibc entriely and use a syscall prototype which works without\narch-specific wrappers inside the kernel: The offset argument is\nexplicitly splitted into two 32bit values.\n\nThe patch sports the actual system call implementation and the windup in\nthe x86 system call tables.  Other archs follow as separate patches.\n\nSigned-off-by: Gerd Hoffmann \u003ckraxel@redhat.com\u003e\nCc: Arnd Bergmann \u003carnd@arndb.de\u003e\nCc: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nCc: \u003clinux-api@vger.kernel.org\u003e\nCc: \u003clinux-arch@vger.kernel.org\u003e\nCc: Ralf Baechle \u003cralf@linux-mips.org\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nCc: \"H. Peter Anvin\" \u003chpa@zytor.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "6949a6318e60aeb9c755679ac7f978aefe8c1722",
      "tree": "97fdbd5d494c5bc99145d5caed28be4ad0e467db",
      "parents": [
        "dac1213842f5caf081804a11d87d2a39a21d6f55"
      ],
      "author": {
        "name": "Gerd Hoffmann",
        "email": "kraxel@redhat.com",
        "time": "Thu Apr 02 16:59:21 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Apr 02 19:05:07 2009 -0700"
      },
      "message": "preadv/pwritev: create compat_writev()\n\nFactor out some code from compat_sys_writev() which can be shared with the\nupcoming compat_sys_pwritev().\n\nSigned-off-by: Gerd Hoffmann \u003ckraxel@redhat.com\u003e\nCc: Arnd Bergmann \u003carnd@arndb.de\u003e\nCc: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nCc: \u003clinux-api@vger.kernel.org\u003e\nCc: \u003clinux-arch@vger.kernel.org\u003e\nCc: Ralf Baechle \u003cralf@linux-mips.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "dac1213842f5caf081804a11d87d2a39a21d6f55",
      "tree": "0b357e0a70fc872c400eb764ec7243969a5439d6",
      "parents": [
        "98310e581e098514867573031b2bfa4ba89c0d93"
      ],
      "author": {
        "name": "Gerd Hoffmann",
        "email": "kraxel@redhat.com",
        "time": "Thu Apr 02 16:59:20 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Apr 02 19:05:07 2009 -0700"
      },
      "message": "preadv/pwritev: create compat_readv()\n\nThis patch series:\n\nImplement the preadv() and pwritev() syscalls.  *BSD has this syscall for\nquite some time.\n\nTest code:\n\n#if 0\nset -x\ngcc -Wall -O2 -o preadv $0\nexit 0\n#endif\n/*\n * preadv demo / test\n *\n * (c) 2008 Gerd Hoffmann \u003ckraxel@redhat.com\u003e\n *\n * build with \"sh $thisfile\"\n */\n\n#include \u003cstdio.h\u003e\n#include \u003cstdlib.h\u003e\n#include \u003cunistd.h\u003e\n#include \u003cerrno.h\u003e\n#include \u003cinttypes.h\u003e\n#include \u003csys/uio.h\u003e\n\n/* ----------------------------------------------------------------- */\n/* syscall windup                                                    */\n\n#include \u003csys/syscall.h\u003e\n#if 0\n/* WARNING: Be sure you know what you are doing if you enable this.\n * linux syscall code isn\u0027t upstream yet, syscall numbers are subject\n * to change */\n# ifndef __NR_preadv\n#  ifdef __i386__\n#   define __NR_preadv  333\n#   define __NR_pwritev 334\n#  endif\n#  ifdef __x86_64__\n#   define __NR_preadv  295\n#   define __NR_pwritev 296\n#  endif\n# endif\n#endif\n#ifndef __NR_preadv\n# error preadv/pwritev syscall numbers are unknown\n#endif\n\nstatic ssize_t preadv(int fd, const struct iovec *iov, int iovcnt, off_t offset)\n{\n    uint32_t pos_high \u003d (offset \u003e\u003e 32) \u0026 0xffffffff;\n    uint32_t pos_low  \u003d  offset        \u0026 0xffffffff;\n\n    return syscall(__NR_preadv, fd, iov, iovcnt, pos_high, pos_low);\n}\n\nstatic ssize_t pwritev(int fd, const struct iovec *iov, int iovcnt, off_t offset)\n{\n    uint32_t pos_high \u003d (offset \u003e\u003e 32) \u0026 0xffffffff;\n    uint32_t pos_low  \u003d  offset        \u0026 0xffffffff;\n\n    return syscall(__NR_pwritev, fd, iov, iovcnt, pos_high, pos_low);\n}\n\n/* ----------------------------------------------------------------- */\n/* demo/test app                                                     */\n\nstatic char filename[] \u003d \"/tmp/preadv-XXXXXX\";\nstatic char outbuf[11] \u003d \"0123456789\";\nstatic char inbuf[11]  \u003d \"----------\";\n\nstatic struct iovec ovec[2] \u003d {{\n        .iov_base \u003d outbuf + 5,\n        .iov_len  \u003d 5,\n    },{\n        .iov_base \u003d outbuf + 0,\n        .iov_len  \u003d 5,\n    }};\n\nstatic struct iovec ivec[3] \u003d {{\n        .iov_base \u003d inbuf + 6,\n        .iov_len  \u003d 2,\n    },{\n        .iov_base \u003d inbuf + 4,\n        .iov_len  \u003d 2,\n    },{\n        .iov_base \u003d inbuf + 2,\n        .iov_len  \u003d 2,\n    }};\n\nvoid cleanup(void)\n{\n    unlink(filename);\n}\n\nint main(int argc, char **argv)\n{\n    int fd, rc;\n\n    fd \u003d mkstemp(filename);\n    if (-1 \u003d\u003d fd) {\n        perror(\"mkstemp\");\n        exit(1);\n    }\n    atexit(cleanup);\n\n    /* write to file: \"56789-01234\" */\n    rc \u003d pwritev(fd, ovec, 2, 0);\n    if (rc \u003c 0) {\n        perror(\"pwritev\");\n        exit(1);\n    }\n\n    /* read from file: \"78-90-12\" */\n    rc \u003d preadv(fd, ivec, 3, 2);\n    if (rc \u003c 0) {\n        perror(\"preadv\");\n        exit(1);\n    }\n\n    printf(\"result  : %s\\n\", inbuf);\n    printf(\"expected: %s\\n\", \"--129078--\");\n    exit(0);\n}\n\nThis patch:\n\nFactor out some code from compat_sys_readv() which can be shared with the\nupcoming compat_sys_preadv().\n\nSigned-off-by: Gerd Hoffmann \u003ckraxel@redhat.com\u003e\nCc: Arnd Bergmann \u003carnd@arndb.de\u003e\nCc: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nCc: \u003clinux-api@vger.kernel.org\u003e\nCc: \u003clinux-arch@vger.kernel.org\u003e\nCc: Ralf Baechle \u003cralf@linux-mips.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "98310e581e098514867573031b2bfa4ba89c0d93",
      "tree": "b4eeec1516af4be7bd7f3f64dbf49f80e84b2bca",
      "parents": [
        "6e873ec71d091f52510f6aa9bc71d4732438522a"
      ],
      "author": {
        "name": "David VomLehn",
        "email": "dvomlehn@cisco.com",
        "time": "Thu Apr 02 16:59:15 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Apr 02 19:05:07 2009 -0700"
      },
      "message": "cramfs: propagate uncompression errors\n\nDecompression errors can arise due to corruption of compressed blocks on\nflash or in memory.  This patch propagates errors detected during\ndecompression back to the block layer.\n\nSigned-off-by: David VomLehn \u003cdvomlehn@cisco.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    }
  ],
  "next": "ab4ad55512e95b68ca3e25516068e18874f89252"
}
