)]}'
{
  "log": [
    {
      "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": "18b34b9546dc192d978dda940673f40928d2e36e",
      "tree": "ca396840ed95fc46cd360c68bf2cefe5ab4cbda8",
      "parents": [
        "ca1ee219c070eab755712d50638bbcd1f8630fc1",
        "d6bb69cfa88b8ac9f952de4fada5b216d5ba8830"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Apr 03 10:39:20 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Apr 03 10:39:20 2009 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/lrg/voltage-2.6\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/lrg/voltage-2.6: (32 commits)\n  regulator: twl4030 VAUX3 supports 3.0V\n  regulator: Support disabling of unused regulators by machines\n  regulator: Don\u0027t increment use_count for boot_on regulators\n  twl4030-regulator: expose VPLL2\n  regulator: refcount fixes\n  regulator: Don\u0027t warn if we failed to get a regulator\n  regulator: Allow boot_on regulators to be disabled by clients\n  regulator: Implement list_voltage for WM835x LDOs and DCDCs\n  twl4030-regulator: list more VAUX4 voltages\n  regulator: Don\u0027t warn on omitted voltage constraints\n  regulator: Implement list_voltage() for WM8400 DCDCs and LDOs\n  MMC: regulator utilities\n  regulator: twl4030 voltage enumeration (v2)\n  regulator: twl4030 regulators\n  regulator: get_status() grows kerneldoc\n  regulator: enumerate voltages (v2)\n  regulator: Fix get_mode() for WM835x DCDCs\n  regulator: Allow regulators to set the initial operating mode\n  regulator: Suggest use of datasheet supply or pin names for consumers\n  regulator: email - update email address and regulator webpage.\n  ...\n"
    },
    {
      "commit": "ca1ee219c070eab755712d50638bbcd1f8630fc1",
      "tree": "c0c252a9095830aadc5dc9ffdd16d9167dd605c9",
      "parents": [
        "3cc50ac0dbda5100684e570247782330155d35e0",
        "afeeb7cebbd223ffee303fd8de4ba97458b13581"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Apr 03 10:36:57 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Apr 03 10:36:57 2009 -0700"
      },
      "message": "Merge git://git.infradead.org/iommu-2.6\n\n* git://git.infradead.org/iommu-2.6:\n  intel-iommu: Fix address wrap on 32-bit kernel.\n  intel-iommu: Enable DMAR on 32-bit kernel.\n  intel-iommu: fix PCI device detach from virtual machine\n  intel-iommu: VT-d page table to support snooping control bit\n  iommu: Add domain_has_cap iommu_ops\n  intel-iommu: Snooping control support\n\nFixed trivial conflicts in arch/x86/Kconfig and drivers/pci/intel-iommu.c\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": "d9b9be024a6628a01d8730d1fd0b5f25658a2794",
      "tree": "9f8e606f975f6dff4213747e85fedaccd148eb60",
      "parents": [
        "9b59f0316bc556a1b63518f0b1224cf9be48467b",
        "99360b4c18f7675b50d283301d46d755affe75fd"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Apr 03 10:02:45 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Apr 03 10:02:45 2009 -0700"
      },
      "message": "Merge git://git.kernel.org/pub/scm/linux/kernel/git/agk/linux-2.6-dm\n\n* git://git.kernel.org/pub/scm/linux/kernel/git/agk/linux-2.6-dm: (36 commits)\n  dm: set queue ordered mode\n  dm: move wait queue declaration\n  dm: merge pushback and deferred bio lists\n  dm: allow uninterruptible wait for pending io\n  dm: merge __flush_deferred_io into caller\n  dm: move bio_io_error into __split_and_process_bio\n  dm: rename __split_bio\n  dm: remove unnecessary struct dm_wq_req\n  dm: remove unnecessary work queue context field\n  dm: remove unnecessary work queue type field\n  dm: bio list add bio_list_add_head\n  dm snapshot: persistent fix dtr cleanup\n  dm snapshot: move status to exception store\n  dm snapshot: move ctr parsing to exception store\n  dm snapshot: use DMEMIT macro for status\n  dm snapshot: remove dm_snap header\n  dm snapshot: remove dm_snap header use\n  dm exception store: move cow pointer\n  dm exception store: move chunk_fields\n  dm exception store: move dm_target pointer\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": "3ba113d14cedcd88105a3b9c90f8ecce829e1095",
      "tree": "357f50c6a45bf57a16d46b3157dfcd4e28233079",
      "parents": [
        "bad6a5c08c119572c888d5df2bd7691a4da6b9e8",
        "b609308e1415efebdf79ebd553f4dd47b0ff2722"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Apr 03 09:52:04 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Apr 03 09:52:04 2009 -0700"
      },
      "message": "Merge git://git.kernel.org/pub/scm/linux/kernel/git/kyle/parisc-2.6\n\n* git://git.kernel.org/pub/scm/linux/kernel/git/kyle/parisc-2.6: (23 commits)\n  parisc: move dereference_function_descriptor to process.c\n  parisc: Move kernel Elf_Fdesc define to \u003casm/elf.h\u003e\n  parisc: fix build when ARCH_HAS_KMAP\n  parisc: fix \"make tar-pkg\"\n  parisc: drivers: fix warnings\n  parisc: select BUG always\n  parisc: asm/pdc.h should include asm/page.h\n  parisc: led: remove proc_dir_entry::owner\n  parisc: fix macro expansion in atomic.h\n  parisc: iosapic: fix build breakage\n  parisc: oops_enter()/oops_exit() in die()\n  parisc: document light weight syscall ABI\n  parisc: blink all or loadavg LEDs on oops\n  parisc: add ftrace (function and graph tracer) functionality\n  parisc: simplify sys_clone()\n  parisc: add LATENCYTOP_SUPPORT and CONFIG_STACKTRACE_SUPPORT\n  parisc: allow to build with 16k default kernel page size\n  parisc: expose 32/64-bit capabilities in cpuinfo\n  parisc: use constants instead of numbers in assembly\n  parisc: fix usage of 32bit PTE page table entries on 32bit kernels\n  ...\n"
    },
    {
      "commit": "bad6a5c08c119572c888d5df2bd7691a4da6b9e8",
      "tree": "7070d6c17659332caad8f3d8f38b51855b3f05c4",
      "parents": [
        "03c3fa0a3bf48dcb024263a9ea41daecacbc6efa",
        "0b5f037a4dc495f9c40eed7f076fc6c23af3359b"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Apr 03 09:51:35 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Apr 03 09:51:35 2009 -0700"
      },
      "message": "Merge git://git.kernel.org/pub/scm/linux/kernel/git/kyle/rtc-parisc\n\n* git://git.kernel.org/pub/scm/linux/kernel/git/kyle/rtc-parisc:\n  powerpc/ps3: Add rtc-ps3\n  powerpc: Hook up rtc-generic, and kill rtc-ppc\n  m68k: Hook up rtc-generic\n  parisc: rtc: Rename rtc-parisc to rtc-generic\n  parisc: rtc: Add missing module alias\n  parisc: rtc: platform_driver_probe() fixups\n  parisc: rtc: get_rtc_time() returns unsigned int\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": "3e850509e19b4b013bf6aee7c0d24d047c4b968f",
      "tree": "3775fea2ac9ff910a79611915ae873a86e9efd79",
      "parents": [
        "a0e0404fb06164100991cacf8e055f6b30f87cc9",
        "edd4070f5d943b35e3e1a2e5e95e4a2eebb11d53"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Apr 03 09:50:14 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Apr 03 09:50:14 2009 -0700"
      },
      "message": "Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/rcu-doc-2.6\n\n* git://git.kernel.org/pub/scm/linux/kernel/git/davem/rcu-doc-2.6:\n  Doc: Fix spelling in RCU/rculist_nulls.txt.\n  Doc: Fix wrong API example usage of call_rcu().\n  Doc: Fix missing whitespaces in RCU documentation.\n"
    },
    {
      "commit": "a0e0404fb06164100991cacf8e055f6b30f87cc9",
      "tree": "01d83119962cb49df5009e3c42e2c22be36ecb9b",
      "parents": [
        "3688e07f83d81941c4a8b20e29602c6d0c883539"
      ],
      "author": {
        "name": "Akinobu Mita",
        "email": "akinobu.mita@gmail.com",
        "time": "Thu Apr 02 16:01:26 2009 +0900"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Apr 03 09:49:41 2009 -0700"
      },
      "message": "mm: fix misuse of debug_kmap_atomic\n\nCommit 7ca43e7564679604d86e9ed834e7bbcffd8a4a3f (\"mm: use debug_kmap_atomic\")\nintroduced some debug_kmap_atomic() in wrong places.\n\nSigned-off-by: Akinobu Mita \u003cakinobu.mita@gmail.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "3688e07f83d81941c4a8b20e29602c6d0c883539",
      "tree": "d7169ef37071cc14225e7700a4f6c08981f3f5e4",
      "parents": [
        "c54c4dec61eec88de8260a00260fe89aa538f267"
      ],
      "author": {
        "name": "Kumar Gala",
        "email": "galak@kernel.crashing.org",
        "time": "Wed Apr 01 23:38:49 2009 -0500"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Apr 03 09:48:29 2009 -0700"
      },
      "message": "Fix highmem PPC build failure\n\nCommit f4112de6b679d84bd9b9681c7504be7bdfb7c7d5 (\"mm: introduce\ndebug_kmap_atomic\") broke PPC builds with CONFIG_HIGHMEM\u003dy:\n\n   CC      init/main.o\n  In file included from include/linux/highmem.h:25,\n                   from include/linux/pagemap.h:11,\n                   from include/linux/mempolicy.h:63,\n                   from init/main.c:53:\n  arch/powerpc/include/asm/highmem.h: In function \u0027kmap_atomic_prot\u0027:\n  arch/powerpc/include/asm/highmem.h:98: error: implicit declaration of function \u0027debug_kmap_atomic\u0027\n  In file included from include/linux/pagemap.h:11,\n                   from include/linux/mempolicy.h:63,\n                   from init/main.c:53:\n  include/linux/highmem.h: At top level:\n  include/linux/highmem.h:196: warning: conflicting types for \u0027debug_kmap_atomic\u0027\n  include/linux/highmem.h:196: error: static declaration of \u0027debug_kmap_atomic\u0027 follows non-static declaration\n  include/asm/highmem.h:98: error: previous implicit declaration of \u0027debug_kmap_atomic\u0027 was here\n  make[1]: *** [init/main.o] Error 1\n  make: *** [init] Error 2\n\nSigned-off-by: Kumar Gala \u003cgalak@kernel.crashing.org\u003e\nAcked-by: Akinobu Mita \u003cakinobu.mita@gmail.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "c54c4dec61eec88de8260a00260fe89aa538f267",
      "tree": "b515c760f6eba432f05625b417612550c755efe5",
      "parents": [
        "5de1ccbe51e89c51a2fe5ab333b7c9c2e7294aff",
        "0d44dc59b2b434b29aafeae581d06f81efac7c83"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Apr 03 09:45:53 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Apr 03 09:45:53 2009 -0700"
      },
      "message": "Merge git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6\n\n* git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6:\n  crypto: ixp4xx - Fix handling of chained sg buffers\n  crypto: shash - Fix unaligned calculation with short length\n  hwrng: timeriomem - Use phys address rather than virt\n"
    },
    {
      "commit": "5de1ccbe51e89c51a2fe5ab333b7c9c2e7294aff",
      "tree": "588d68842d6a082828e3a17efa3de6177b712a97",
      "parents": [
        "223cdea4c4b5af5181b2da00ac85711d1e0c737c",
        "b4d63e8e745b0000ba22f44ff34cd51e8b4d0389"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Apr 03 09:44:58 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Apr 03 09:44:58 2009 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/gerg/m68knommu\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/gerg/m68knommu: (41 commits)\n  m68knommu: improve compile arch switch settings\n  m68knommu: fix 5407 ColdFire UART vector setup\n  m68knommu: fix 5307 ColdFire UART vector setup\n  m68knommu: fix 5249 ColdFire UART vector setup\n  m68knommu: fix 5249 ColdFire UART setup\n  m68knommu: fix end of uart table marker\n  m68knommu: switch to using generic_handle_irq()\n  m68k: merge the mmu and non-mmu versions of tlbflush.h\n  m68knommu: introduce basic clk infrastructure\n  m68k: merge the mmu and non-mmu versions of module.h\n  m68knommu: add missing interrupt line definition for UART 2\n  m68k: merge the mmu and non-mmu versions of mmu_context.h\n  m68k: merge the mmu and non-mmu versions of current.h\n  m68k: merge the mmu and non-mmu versions of div64.h\n  m68k: merge the mmu and non-mmu versions of bugs.h\n  m68k: merge the mmu and non-mmu versions of bug.h\n  m68k: use the mmu version of cache.h for m68knommu as well\n  m68k: use the mmu version of bootinfo.h for m68knommu as well\n  m68k: merge the mmu and non-mmu versions of fb.h\n  m68k: merge the mmu and non-mmu versions of segment.h\n  ...\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": "31e6e2dac575c9d21a6ec56ca52ae89086baa705",
      "tree": "a83dc42a3e4ff2e49e532031ec3e86c402e4baa1",
      "parents": [
        "ea02259fdf47ca81ff3ca0c22906d989094fb8ff",
        "67a52bb90b515c2a96ec51a3571bcd70a2fadb50"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Apr 03 09:05:40 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Apr 03 09:05:40 2009 -0700"
      },
      "message": "Merge master.kernel.org:/home/rmk/linux-2.6-arm\n\n* master.kernel.org:/home/rmk/linux-2.6-arm:\n  [ARM] fix build-breaking 7a192ec commit\n  ARM: Add SMSC911X support to Overo platform (V2)\n  arm: update omap_ldp defconfig to use smsc911x\n  arm: update realview defconfigs to use smsc911x\n  arm: update pcm037 defconfig to use smsc911x\n  arm: convert omap ldp platform to use smsc911x\n  arm: convert realview platform to use smsc911x\n  arm: convert pcm037 platform to use smsc911x\n  [ARM] 5444/1: ARM: Realview: Fix event-device multiplicators in localtimer.c\n  [ARM] 5442/1: pxa/cm-x255: fix reverse RDY gpios in PCMCIA driver\n  [ARM] 5441/1: Use pr_err on error paths in at91 pm\n  [ARM] 5440/1: Fix VFP state corruption due to preemption during VFP exceptions\n  [ARM] 5439/1: Do not clear bit 10 of DFSR during abort handling on ARMv6\n  [ARM] 5437/1: Add documentation for \"nohlt\" kernel parameter\n  [ARM] 5436/1: ARM: OMAP: Fix compile for rx51\n  [ARM] arch_reset() now takes a second parameter\n  [ARM] Kirkwood: small L2 code cleanup\n  [ARM] Kirkwood: invalidate L2 cache before enabling it\n"
    },
    {
      "commit": "ea02259fdf47ca81ff3ca0c22906d989094fb8ff",
      "tree": "5d3672aa246e016f695bc62a861902a50de7b461",
      "parents": [
        "8fe74cf053de7ad2124a894996f84fa890a81093",
        "eae6c2b6414fc6673ac5415442fe463c01005366"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Apr 03 09:02:32 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Apr 03 09:02:32 2009 -0700"
      },
      "message": "Merge git://git.kernel.org/pub/scm/linux/kernel/git/bart/linux-hdreg-h-cleanup\n\n* git://git.kernel.org/pub/scm/linux/kernel/git/bart/linux-hdreg-h-cleanup:\n  remove \u003clinux/ata.h\u003e include from \u003clinux/hdreg.h\u003e\n  include/linux/hdreg.h: remove unused defines\n  isd200: use ATA_* defines instead of *_STAT and *_ERR ones\n  include/linux/hdreg.h: cover WIN_* and friends with #ifndef/#endif __KERNEL__\n  aoe: WIN_* -\u003e ATA_CMD_*\n  isd200: WIN_* -\u003e ATA_CMD_*\n  include/linux/hdreg.h: cover struct hd_driveid with #ifndef/#endif __KERNEL__\n  xsysace: make it \u0027struct hd_driveid\u0027-free\n  ubd_kern: make it \u0027struct hd_driveid\u0027-free\n  isd200: make it \u0027struct hd_driveid\u0027-free\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": "c6a6f19e22da0a3d74214ee010224c9a30a794c1",
      "tree": "e10e6bf056e9a7f276e98bd55d0d04b491844807",
      "parents": [
        "6b9b3514aa188183e74049853be43380ad49314f"
      ],
      "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: Add FS-Cache option bit and debug bit\n\nAdd FS-Cache option bit to nfs_server struct.  This is set to indicate local\non-disk caching is enabled for a particular superblock.\n\nAlso add debug bit for local caching operations.\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": "385e1ca5f21c4680ad6a46a3aa2ea8af99e99c92",
      "tree": "7d887b59d943c5dd62c9604b7ea37fd2d650df71",
      "parents": [
        "b510882281d56873e1194021643b7c325336f84f"
      ],
      "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": "CacheFiles: Permit the page lock state to be monitored\n\nAdd a function to install a monitor on the page lock waitqueue for a particular\npage, thus allowing the page being unlocked to be detected.\n\nThis is used by CacheFiles to detect read completion on a page in the backing\nfilesystem so that it can then copy the data to the waiting netfs page.\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": "0dfc41d1efcc4180abfd32f68f0ade540e636ff6",
      "tree": "f066d08e2c33d2b475e55c5b18e4e4bff537ee75",
      "parents": [
        "2d6fff637037395cc946ef910a880b5fa67b5370"
      ],
      "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 the FS-Cache cache backend API and documentation\n\nAdd the API for a generic facility (FS-Cache) by which caches may declare them\nselves open for business, and may obtain work to be done from network\nfilesystems.  The header file is included by:\n\n\t#include \u003clinux/fscache-cache.h\u003e\n\nDocumentation for the API is also added to:\n\n\tDocumentation/filesystems/caching/backend-api.txt\n\nThis API is not usable without the implementation of the utility functions\nwhich will be added in further patches.\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": "2d6fff637037395cc946ef910a880b5fa67b5370",
      "tree": "a369011a976d5faf4fe45cf237503078cbbfb9b4",
      "parents": [
        "266cf658efcf6ac33541a46740f74f50c79d2b6b"
      ],
      "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 the FS-Cache netfs API and documentation\n\nAdd the API for a generic facility (FS-Cache) by which filesystems (such as AFS\nor NFS) may call on local caching capabilities without having to know anything\nabout how the cache works, or even if there is a cache:\n\n\t+---------+\n\t|         |                        +--------------+\n\t|   NFS   |--+                     |              |\n\t|         |  |                 +--\u003e|   CacheFS    |\n\t+---------+  |   +----------+  |   |  /dev/hda5   |\n\t             |   |          |  |   +--------------+\n\t+---------+  +--\u003e|          |  |\n\t|         |      |          |--+\n\t|   AFS   |-----\u003e| FS-Cache |\n\t|         |      |          |--+\n\t+---------+  +--\u003e|          |  |\n\t             |   |          |  |   +--------------+\n\t+---------+  |   +----------+  |   |              |\n\t|         |  |                 +--\u003e|  CacheFiles  |\n\t|  ISOFS  |--+                     |  /var/cache  |\n\t|         |                        +--------------+\n\t+---------+\n\nGeneral documentation and documentation of the netfs specific API are provided\nin addition to the header files.\n\nAs this patch stands, it is possible to build a filesystem against the facility\nand attempt to use it.  All that will happen is that all requests will be\nimmediately denied as if no cache is present.\n\nFurther patches will implement the core of the facility.  The facility will\ntransfer requests from networking filesystems to appropriate caches if\npossible, or else gracefully deny them.\n\nIf this facility is disabled in the kernel configuration, then all its\noperations will trivially reduce to nothing during compilation.\n\nWHY NOT I_MAPPING?\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\nI have added my own API to implement caching rather than using i_mapping to do\nthis for a number of reasons.  These have been discussed a lot on the LKML and\nCacheFS mailing lists, but to summarise the basics:\n\n (1) Most filesystems don\u0027t do hole reportage.  Holes in files are treated as\n     blocks of zeros and can\u0027t be distinguished otherwise, making it difficult\n     to distinguish blocks that have been read from the network and cached from\n     those that haven\u0027t.\n\n (2) The backing inode must be fully populated before being exposed to\n     userspace through the main inode because the VM/VFS goes directly to the\n     backing inode and does not interrogate the front inode\u0027s VM ops.\n\n     Therefore:\n\n     (a) The backing inode must fit entirely within the cache.\n\n     (b) All backed files currently open must fit entirely within the cache at\n     \t the same time.\n\n     (c) A working set of files in total larger than the cache may not be\n     \t cached.\n\n     (d) A file may not grow larger than the available space in the cache.\n\n     (e) A file that\u0027s open and cached, and remotely grows larger than the\n     \t cache is potentially stuffed.\n\n (3) Writes go to the backing filesystem, and can only be transferred to the\n     network when the file is closed.\n\n (4) There\u0027s no record of what changes have been made, so the whole file must\n     be written back.\n\n (5) The pages belong to the backing filesystem, and all metadata associated\n     with that page are relevant only to the backing filesystem, and not\n     anything stacked atop it.\n\nOVERVIEW\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\nFS-Cache provides (or will provide) the following facilities:\n\n (1) Caches can be added / removed at any time, even whilst in use.\n\n (2) Adds a facility by which tags can be used to refer to caches, even if\n     they\u0027re not available yet.\n\n (3) More than one cache can be used at once.  Caches can be selected\n     explicitly by use of tags.\n\n (4) The netfs is provided with an interface that allows either party to\n     withdraw caching facilities from a file (required for (1)).\n\n (5) A netfs may annotate cache objects that belongs to it.  This permits the\n     storage of coherency maintenance data.\n\n (6) Cache objects will be pinnable and space reservations will be possible.\n\n (7) The interface to the netfs returns as few errors as possible, preferring\n     rather to let the netfs remain oblivious.\n\n (8) Cookies are used to represent indices, files and other objects to the\n     netfs.  The simplest cookie is just a NULL pointer - indicating nothing\n     cached there.\n\n (9) The netfs is allowed to propose - dynamically - any index hierarchy it\n     desires, though it must be aware that the index search function is\n     recursive, stack space is limited, and indices can only be children of\n     indices.\n\n(10) Indices can be used to group files together to reduce key size and to make\n     group invalidation easier.  The use of indices may make lookup quicker,\n     but that\u0027s cache dependent.\n\n(11) Data I/O is effectively done directly to and from the netfs\u0027s pages.  The\n     netfs indicates that page A is at index B of the data-file represented by\n     cookie C, and that it should be read or written.  The cache backend may or\n     may not start I/O on that page, but if it does, a netfs callback will be\n     invoked to indicate completion.  The I/O may be either synchronous or\n     asynchronous.\n\n(12) Cookies can be \"retired\" upon release.  At this point FS-Cache will mark\n     them as obsolete and the index hierarchy rooted at that point will get\n     recycled.\n\n(13) The netfs provides a \"match\" function for index searches.  In addition to\n     saying whether a match was made or not, this can also specify that an\n     entry should be updated or deleted.\n\nFS-Cache maintains a virtual index tree in which all indices, files, objects\nand pages are kept.  Bits of this tree may actually reside in one or more\ncaches.\n\n                                           FSDEF\n                                             |\n                        +------------------------------------+\n                        |                                    |\n                       NFS                                  AFS\n                        |                                    |\n           +--------------------------+                +-----------+\n           |                          |                |           |\n        homedir                     mirror          afs.org   redhat.com\n           |                          |                            |\n     +------------+           +---------------+              +----------+\n     |            |           |               |              |          |\n   00001        00002       00007           00125        vol00001   vol00002\n     |            |           |               |                         |\n +---+---+     +-----+      +---+      +------+------+            +-----+----+\n |   |   |     |     |      |   |      |      |      |            |     |    |\nPG0 PG1 PG2   PG0  XATTR   PG0 PG1   DIRENT DIRENT DIRENT        R/W   R/O  Bak\n                     |                                            |\n                    PG0                                       +-------+\n                                                              |       |\n                                                            00001   00003\n                                                              |\n                                                          +---+---+\n                                                          |   |   |\n                                                         PG0 PG1 PG2\n\nIn the example above, two netfs\u0027s can be seen to be backed: NFS and AFS.  These\nhave different index hierarchies:\n\n (*) The NFS primary index will probably contain per-server indices.  Each\n     server index is indexed by NFS file handles to get data file objects.\n     Each data file objects can have an array of pages, but may also have\n     further child objects, such as extended attributes and directory entries.\n     Extended attribute objects themselves have page-array contents.\n\n (*) The AFS primary index contains per-cell indices.  Each cell index contains\n     per-logical-volume indices.  Each of volume index contains up to three\n     indices for the read-write, read-only and backup mirrors of those volumes.\n     Each of these contains vnode data file objects, each of which contains an\n     array of pages.\n\nThe very top index is the FS-Cache master index in which individual netfs\u0027s\nhave entries.\n\nAny index object may reside in more than one cache, provided it only has index\nchildren.  Any index with non-index object children will be assumed to only\nreside in one cache.\n\nThe FS-Cache overview can be found in:\n\n\tDocumentation/filesystems/caching/fscache.txt\n\nThe netfs API to FS-Cache can be found in:\n\n\tDocumentation/filesystems/caching/netfs-api.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": "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": "03fb3d2af96c2783c3a5bc03f3d984cf422f0e69",
      "tree": "6618f82f8be26ba2c7ac38d6e6e16befc8e1140f",
      "parents": [
        "8f0aa2f25b31ba27db84259141e52ee6ec0d2820"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Apr 03 16:42:35 2009 +0100"
      },
      "committer": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Apr 03 16:42:35 2009 +0100"
      },
      "message": "FS-Cache: Release page-\u003eprivate after failed readahead\n\nThe attached patch causes read_cache_pages() to release page-private data on a\npage for which add_to_page_cache() fails.  If the filler function fails, then\nthe problematic page is left attached to the pagecache (with appropriate flags\nset, one presumes) and the remaining to-be-attached pages are invalidated and\ndiscarded.  This permits pages with caching references associated with them to\nbe cleaned up.\n\nThe invalidatepage() address space op is called (indirectly) to do the honours.\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": "8f0aa2f25b31ba27db84259141e52ee6ec0d2820",
      "tree": "f2935c02ac8508dacd125bb1c8bb6f4879fe778e",
      "parents": [
        "12e22c5e4bc08ab4b05ac079fe40d9891c5e81a0"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Apr 03 16:42:35 2009 +0100"
      },
      "committer": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Apr 03 16:42:35 2009 +0100"
      },
      "message": "Document the slow work thread pool\n\nDocument the slow work thread pool.\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": "12e22c5e4bc08ab4b05ac079fe40d9891c5e81a0",
      "tree": "e3d34a8f21d4c00dff311dfef564c59a76e1ae70",
      "parents": [
        "109d9272c423f46604d45fedfe87e21ee0b25180"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Apr 03 16:42:35 2009 +0100"
      },
      "committer": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Apr 03 16:42:35 2009 +0100"
      },
      "message": "Make the slow work pool configurable\n\nMake the slow work pool configurable through /proc/sys/kernel/slow-work.\n\n (*) /proc/sys/kernel/slow-work/min-threads\n\n     The minimum number of threads that should be in the pool as long as it is\n     in use.  This may be anywhere between 2 and max-threads.\n\n (*) /proc/sys/kernel/slow-work/max-threads\n\n     The maximum number of threads that should in the pool.  This may be\n     anywhere between min-threads and 255 or NR_CPUS * 2, whichever is greater.\n\n (*) /proc/sys/kernel/slow-work/vslow-percentage\n\n     The percentage of active threads in the pool that may be used to execute\n     very slow work items.  This may be between 1 and 99.  The resultant number\n     is bounded to between 1 and one fewer than the number of active threads.\n     This ensures there is always at least one thread that can process very\n     slow work items, and always at least one thread that won\u0027t.\n\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\nAcked-by: Serge Hallyn \u003cserue@us.ibm.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": "109d9272c423f46604d45fedfe87e21ee0b25180",
      "tree": "b6bd1d94fd3e018ee97dedb577aa6757787db1a9",
      "parents": [
        "07fe7cb7c7c179f473fd9c823348fd3eb5dad369"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Apr 03 16:42:35 2009 +0100"
      },
      "committer": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Apr 03 16:42:35 2009 +0100"
      },
      "message": "Make slow-work thread pool actually dynamic\n\nMake the slow-work thread pool actually dynamic in the number of threads it\ncontains.  With this patch, it will both create additional threads when it has\nextra work to do, and cull excess threads that aren\u0027t doing anything.\n\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\nAcked-by: Serge Hallyn \u003cserue@us.ibm.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": "07fe7cb7c7c179f473fd9c823348fd3eb5dad369",
      "tree": "516c959de929a4c39870629e550b3307601fa73f",
      "parents": [
        "8fe74cf053de7ad2124a894996f84fa890a81093"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Apr 03 16:42:35 2009 +0100"
      },
      "committer": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Apr 03 16:42:35 2009 +0100"
      },
      "message": "Create a dynamically sized pool of threads for doing very slow work items\n\nCreate a dynamically sized pool of threads for doing very slow work items, such\nas invoking mkdir() or rmdir() - things that may take a long time and may\nsleep, holding mutexes/semaphores and hogging a thread, and are thus unsuitable\nfor workqueues.\n\nThe number of threads is always at least a settable minimum, but more are\nstarted when there\u0027s more work to do, up to a limit.  Because of the nature of\nthe load, it\u0027s not suitable for a 1-thread-per-CPU type pool.  A system with\none CPU may well want several threads.\n\nThis is used by FS-Cache to do slow caching operations in the background, such\nas looking up, creating or deleting cache objects.\n\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\nAcked-by: Serge Hallyn \u003cserue@us.ibm.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": "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": "c2eb2fa6d2b6fe122d3479ec5b28d978418b2698",
      "tree": "bf709d2cd22b338ba78fe024cbc41e479557df68",
      "parents": [
        "ef8a97bbc92ec07e3a07a81cc011dc549f8c7a23",
        "029a2edbd36f5e34ff1aebfba1bca31b5ac9899e"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Apr 02 21:06:42 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Apr 02 21:06:42 2009 -0700"
      },
      "message": "Merge branch \u0027drm-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/airlied/drm-2.6\n\n* \u0027drm-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/airlied/drm-2.6: (21 commits)\n  drm/radeon: load the right microcode on rs780\n  drm: remove unused \"can_grow\" parameter from drm_crtc_helper_initial_config\n  drm: fix EDID backward compat check\n  drm: sync the mode validation for INTERLACE/DBLSCAN\n  drm: fix typo in edid vendor parsing.\n  DRM: drm_crtc_helper.h doesn\u0027t actually need i2c.h\n  drm: fix missing inline function on 32-bit powerpc.\n  drm: Use pgprot_writecombine in GEM GTT mapping to get the right bits for !PAT.\n  drm/i915: Add a spinlock to protect the active_list\n  drm/i915: Fix SDVO TV support\n  drm/i915: Fix SDVO CREATE_PREFERRED_INPUT_TIMING command\n  drm/i915: Fix error in SDVO DTD and modeline convert\n  drm/i915: Fix SDVO command debug function\n  drm/i915: fix TV mode setting in property change\n  drm/i915: only set TV mode when any property changed\n  drm/i915: clean up udelay usage\n  drm/i915: add VGA hotplug support for 945+\n  drm/i915: correctly set IGD device\u0027s gtt size for KMS.\n  drm/i915: avoid hanging on to a stale pointer to raw_edid.\n  drm/i915: check for -EINVAL from vm_insert_pfn\n  ...\n"
    },
    {
      "commit": "ef8a97bbc92ec07e3a07a81cc011dc549f8c7a23",
      "tree": "82a95f16d9236bc35a4cfd42ba8cab61981efda8",
      "parents": [
        "4f032ac4122a77dbabf7a24b2739b2790448180f",
        "6c8ad3b07f7d9efdc41396db6da0aed906922701"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Apr 02 21:05:30 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Apr 02 21:05:30 2009 -0700"
      },
      "message": "Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6\n\n* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6: (54 commits)\n  glge: remove unused #include \u003cversion.h\u003e\n  dnet: remove unused #include \u003cversion.h\u003e\n  tcp: miscounts due to tcp_fragment pcount reset\n  tcp: add helper for counter tweaking due mid-wq change\n  hso: fix for the \u0027invalid frame length\u0027 messages\n  hso: fix for crash when unplugging the device\n  fsl_pq_mdio: Fix compile failure\n  fsl_pq_mdio: Revive UCC MDIO support\n  ucc_geth: Pass proper device to DMA routines, otherwise oops happens\n  i.MX31: Fixing cs89x0 network building to i.MX31ADS\n  tc35815: Fix build error if NAPI enabled\n  hso: add Vendor/Product ID\u0027s for new devices\n  ucc_geth: Remove unused header\n  gianfar: Remove unused header\n  kaweth: Fix locking to be SMP-safe\n  net: allow multiple dev per napi with GRO\n  r8169: reset IntrStatus after chip reset\n  ixgbe: Fix potential memory leak/driver panic issue while setting up Tx \u0026 Rx ring parameters\n  ixgbe: fix ethtool -A|a behavior\n  ixgbe: Patch to fix driver panic while freeing up tx \u0026 rx resources\n  ...\n"
    },
    {
      "commit": "4f032ac4122a77dbabf7a24b2739b2790448180f",
      "tree": "6a56afe2e32f346f2d24ac592a7cfdd0263c1629",
      "parents": [
        "2d09cde985702503970d7cc18d762fae17e1cf88"
      ],
      "author": {
        "name": "Jack Steiner",
        "email": "steiner@sgi.com",
        "time": "Thu Apr 02 16:59:48 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Apr 02 19:05:11 2009 -0700"
      },
      "message": "cpumask: fix slab corruption caused by alloc_cpumask_var_node()\n\nFix slab corruption caused by alloc_cpumask_var_node() overwriting the\ntail end of an off-stack cpumask.\n\nThe function zeros out cpumask bits beyond the last possible cpu.  The\nstarting point for zeroing should be the beginning of the mask offset by a\nbyte count derived from the number of possible cpus.  The offset was\ncalculated in bits instead of bytes.  This resulted in overwriting the end\nof the cpumask.\n\nSigned-off-by: Jack Steiner \u003csteiner@sgi.com\u003e\nAcked-by: Mike Travis \u003ctravis.sgi.com\u003e\nAcked-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Rusty Russell \u003crusty@rustcorp.com.au\u003e\nCc: Stephen Rothwell \u003csfr@canb.auug.org.au\u003e\nCc: \u003cstable@kernel.org\u003e\t\t[2.6.29.x]\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "2d09cde985702503970d7cc18d762fae17e1cf88",
      "tree": "c296357ef9a7b0194da1471a1ab5c2b8270c258e",
      "parents": [
        "f5f7eac41db827a47b2163330eecd7bb55ae9f12"
      ],
      "author": {
        "name": "Robin Holt",
        "email": "holt@sgi.com",
        "time": "Thu Apr 02 16:59:47 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Apr 02 19:05:11 2009 -0700"
      },
      "message": "ia64: implement interrupt-enabling rwlocks\n\nImplement __raw_read_lock_flags and __raw_write_lock_flags for the ia64\narchitecture.\n\n[kosaki.motohiro@jp.fujitsu.com: typo fix]\nSigned-off-by: Petr Tesarik \u003cptesarik@suse.cz\u003e\nSigned-off-by: Robin Holt \u003cholt@sgi.com\u003e\nCc: \u003clinux-arch@vger.kernel.org\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nAcked-by: Tony Luck \u003ctony.luck@intel.com\u003e\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "f5f7eac41db827a47b2163330eecd7bb55ae9f12",
      "tree": "ae8ab45dba49c1b3d5f2088051389e6fd3e4a24c",
      "parents": [
        "e8c158bb313c1df421eab7dc4299cd39cbbf5895"
      ],
      "author": {
        "name": "Robin Holt",
        "email": "holt@sgi.com",
        "time": "Thu Apr 02 16:59:46 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Apr 02 19:05:11 2009 -0700"
      },
      "message": "Allow rwlocks to re-enable interrupts\n\nPass the original flags to rwlock arch-code, so that it can re-enable\ninterrupts if implemented for that architecture.\n\nInitially, make __raw_read_lock_flags and __raw_write_lock_flags stubs\nwhich just do the same thing as non-flags variants.\n\nSigned-off-by: Petr Tesarik \u003cptesarik@suse.cz\u003e\nSigned-off-by: Robin Holt \u003cholt@sgi.com\u003e\nAcked-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: \u003clinux-arch@vger.kernel.org\u003e\nAcked-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: \"Luck, Tony\" \u003ctony.luck@intel.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "e8c158bb313c1df421eab7dc4299cd39cbbf5895",
      "tree": "8a5f1d01e58d0e358b2b0c9407fc494912e83c27",
      "parents": [
        "41d577aa35aa0504fe28b76a948908bdb7fbec81"
      ],
      "author": {
        "name": "Robin Holt",
        "email": "holt@sgi.com",
        "time": "Thu Apr 02 16:59:45 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Apr 02 19:05:10 2009 -0700"
      },
      "message": "Factor out #ifdefs from kernel/spinlock.c to LOCK_CONTENDED_FLAGS\n\nSGI has observed that on large systems, interrupts are not serviced for a\nlong period of time when waiting for a rwlock.  The following patch series\nre-enables irqs while waiting for the lock, resembling the code which is\nalready there for spinlocks.\n\nI only made the ia64 version, because the patch adds some overhead to the\nfast path.  I assume there is currently no demand to have this for other\narchitectures, because the systems are not so large.  Of course, the\npossibility to implement raw_{read|write}_lock_flags for any architecture\nis still there.\n\nThis patch:\n\nThe new macro LOCK_CONTENDED_FLAGS expands to the correct implementation\ndepending on the config options, so that IRQ\u0027s are re-enabled when\npossible, but they remain disabled if CONFIG_LOCKDEP is set.\n\nSigned-off-by: Petr Tesarik \u003cptesarik@suse.cz\u003e\nSigned-off-by: Robin Holt \u003cholt@sgi.com\u003e\nCc: \u003clinux-arch@vger.kernel.org\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: \"Luck, Tony\" \u003ctony.luck@intel.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "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": "ddd9e91b71072b8ebe89311c3a44b077defa1756",
      "tree": "9795e75bee284c1f2d55314c942bb8a1553e6b14",
      "parents": [
        "f3554f4bc69803ac2baaf7cf2aa4339e1f4b693e"
      ],
      "author": {
        "name": "Ralf Baechle",
        "email": "ralf@linux-mips.org",
        "time": "Thu Apr 02 16:59:24 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Apr 02 19:05:08 2009 -0700"
      },
      "message": "preadv/pwritev: MIPS: Add preadv(2) and pwritev(2) syscalls.\n\nSigned-off-by: Ralf Baechle \u003cralf@linux-mips.org\u003e\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\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"
    },
    {
      "commit": "6e873ec71d091f52510f6aa9bc71d4732438522a",
      "tree": "2da4c9f58fb700e0389bd4a31fb6cebeca45e311",
      "parents": [
        "1bc4faa59b0e6aa5ede2d5d8fa74b6e051b31dca"
      ],
      "author": {
        "name": "Robin Holt",
        "email": "holt@sgi.com",
        "time": "Thu Apr 02 16:59:14 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Apr 02 19:05:07 2009 -0700"
      },
      "message": "xpc_sn2: fix max() warning about pointers of different types\n\nFix a minor compile warning when building on ia64.\n\ndrivers/misc/sgi-xp/xpc_sn2.c: In function `xpc_clear_remote_msgqueue_flags_sn2\u0027:\ndrivers/misc/sgi-xp/xpc_sn2.c:1746: warning: comparison of distinct pointer types lacks a cast\n\nSigned-off-by: Robin Holt \u003cholt@sgi.com\u003e\nCc: Sam Ravnborg \u003csam@ravnborg.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "1bc4faa59b0e6aa5ede2d5d8fa74b6e051b31dca",
      "tree": "ceeeb23f214a41ee50f61835c32887a5f2a6f158",
      "parents": [
        "7b8274e93fbabc7534aa51f95551c30aecdd0066"
      ],
      "author": {
        "name": "Robin Holt",
        "email": "holt@sgi.com",
        "time": "Thu Apr 02 16:59:13 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Apr 02 19:05:07 2009 -0700"
      },
      "message": "sgi-gru: remove SGI_GRU as a valid config option for ia64 configs with SGI_UV\n\nSome current configs turn on GRU for ia64.  The GRU code does not\ncorrectly load on boot on ia64 (GRU does continue to work for x86-64), so\nchanging the IA64 Kconfig to not select GRU on ia64 configs for now until\nwe have time to fix.\n\nSigned-off-by: Robin Holt \u003cholt@sgi.com\u003e\nAcked-by: Jack Steiner \u003csteiner@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "7b8274e93fbabc7534aa51f95551c30aecdd0066",
      "tree": "f1cfc0e87b07a4094ee06d2dc73673635b4b1775",
      "parents": [
        "27ca8a7b2bdfb3e22e67fbd5df58e6b6f0bbcd48"
      ],
      "author": {
        "name": "Jack Steiner",
        "email": "steiner@sgi.com",
        "time": "Thu Apr 02 16:59:12 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Apr 02 19:05:07 2009 -0700"
      },
      "message": "sgi-gru: support multiple pagesizes in GRU\n\nAdd multiple pagesize support to the GRU driver.\n\nSigned-off-by: Jack Steiner \u003csteiner@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "27ca8a7b2bdfb3e22e67fbd5df58e6b6f0bbcd48",
      "tree": "c7fbe657ba4d31b1977b7247dd7626414246a1c3",
      "parents": [
        "e1c3219d06447dab8a87b96df1211d158e21071e"
      ],
      "author": {
        "name": "Jack Steiner",
        "email": "steiner@sgi.com",
        "time": "Thu Apr 02 16:59:11 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Apr 02 19:05:07 2009 -0700"
      },
      "message": "sgi-gru: fix bugs related to module unload of the GRU driver\n\nFix bugs related to module unload of the GRU driver.\n\nSigned-off-by: Jack Steiner \u003csteiner@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    }
  ],
  "next": "e1c3219d06447dab8a87b96df1211d158e21071e"
}
