)]}'
{
  "log": [
    {
      "commit": "88e88374ee4958786397a57f684de6f1fc5e0242",
      "tree": "750fe86ece5d65e597223eb07c5ce7cf5b3749a0",
      "parents": [
        "7e125f7b9cbfce4101191b8076d606c517a73066",
        "ccf7c23fc129e75ef60e6f59f60a485b7a056598"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon May 24 11:57:36 2010 -0500"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon May 24 11:57:36 2010 -0500"
      },
      "message": "Merge branch \u0027delayed-logging-for-2.6.35\u0027 into for-linus\n"
    },
    {
      "commit": "71e330b593905e40d6c5afa824d38ee02d70ce5f",
      "tree": "4c9fa6c4766280752fc40f3057fd6cf64396c16c",
      "parents": [
        "a9a745daadab26f13884ff26a50fa38247c11ce9"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Fri May 21 14:37:18 2010 +1000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon May 24 10:38:03 2010 -0500"
      },
      "message": "xfs: Introduce delayed logging core code\n\nThe delayed logging code only changes in-memory structures and as\nsuch can be enabled and disabled with a mount option. Add the mount\noption and emit a warning that this is an experimental feature that\nshould not be used in production yet.\n\nWe also need infrastructure to track committed items that have not\nyet been written to the log. This is what the Committed Item List\n(CIL) is for.\n\nThe log item also needs to be extended to track the current log\nvector, the associated memory buffer and it\u0027s location in the Commit\nItem List. Extend the log item and log vector structures to enable\nthis tracking.\n\nTo maintain the current log format for transactions with delayed\nlogging, we need to introduce a checkpoint transaction and a context\nfor tracking each checkpoint from initiation to transaction\ncompletion.  This includes adding a log ticket for tracking space\nlog required/used by the context checkpoint.\n\nTo track all the changes we need an io vector array per log item,\nrather than a single array for the entire transaction. Using the new\nlog vector structure for this requires two passes - the first to\nallocate the log vector structures and chain them together, and the\nsecond to fill them out.  This log vector chain can then be passed\nto the CIL for formatting, pinning and insertion into the CIL.\n\nFormatting of the log vector chain is relatively simple - it\u0027s just\na loop over the iovecs on each log vector, but it is made slightly\nmore complex because we re-write the iovec after the copy to point\nback at the memory buffer we just copied into.\n\nThis code also needs to pin log items. If the log item is not\nalready tracked in this checkpoint context, then it needs to be\npinned. Otherwise it is already pinned and we don\u0027t need to pin it\nagain.\n\nThe only other complexity is calculating the amount of new log space\nthe formatting has consumed. This needs to be accounted to the\ntransaction in progress, and the accounting is made more complex\nbecase we need also to steal space from it for log metadata in the\ncheckpoint transaction. Calculate all this at insert time and update\nall the tickets, counters, etc correctly.\n\nOnce we\u0027ve formatted all the log items in the transaction, attach\nthe busy extents to the checkpoint context so the busy extents live\nuntil checkpoint completion and can be processed at that point in\ntime. Transactions can then be freed at this point in time.\n\nNow we need to issue checkpoints - we are tracking the amount of log space\nused by the items in the CIL, so we can trigger background checkpoints when the\nspace usage gets to a certain threshold. Otherwise, checkpoints need ot be\ntriggered when a log synchronisation point is reached - a log force event.\n\nBecause the log write code already handles chained log vectors, writing the\ntransaction is trivial, too. Construct a transaction header, add it\nto the head of the chain and write it into the log, then issue a\ncommit record write. Then we can release the checkpoint log ticket\nand attach the context to the log buffer so it can be called during\nIo completion to complete the checkpoint.\n\nWe also need to allow for synchronising multiple in-flight\ncheckpoints. This is needed for two things - the first is to ensure\nthat checkpoint commit records appear in the log in the correct\nsequence order (so they are replayed in the correct order). The\nsecond is so that xfs_log_force_lsn() operates correctly and only\nflushes and/or waits for the specific sequence it was provided with.\n\nTo do this we need a wait variable and a list tracking the\ncheckpoint commits in progress. We can walk this list and wait for\nthe checkpoints to change state or complete easily, an this provides\nthe necessary synchronisation for correct operation in both cases.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "ed3b4d6cdc81e8feefdbfa3c584614be301b6d39",
      "tree": "5b8cd5735dfbc5eb834f96d25a8eb587186715be",
      "parents": [
        "955833cf2ad0aa39b336e853cad212d867199984"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Fri May 21 12:07:08 2010 +1000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon May 24 10:34:00 2010 -0500"
      },
      "message": "xfs: Improve scalability of busy extent tracking\n\nWhen we free a metadata extent, we record it in the per-AG busy\nextent array so that it is not re-used before the freeing\ntransaction hits the disk. This array is fixed size, so when it\noverflows we make further allocation transactions synchronous\nbecause we cannot track more freed extents until those transactions\nhit the disk and are completed. Under heavy mixed allocation and\nfreeing workloads with large log buffers, we can overflow this array\nquite easily.\n\nFurther, the array is sparsely populated, which means that inserts\nneed to search for a free slot, and array searches often have to\nsearch many more slots that are actually used to check all the\nbusy extents. Quite inefficient, really.\n\nTo enable this aspect of extent freeing to scale better, we need\na structure that can grow dynamically. While in other areas of\nXFS we have used radix trees, the extents being freed are at random\nlocations on disk so are better suited to being indexed by an rbtree.\n\nSo, use a per-AG rbtree indexed by block number to track busy\nextents.  This incures a memory allocation when marking an extent\nbusy, but should not occur too often in low memory situations. This\nshould scale to an arbitrary number of extents so should not be a\nlimitation for features such as in-memory aggregation of\ntransactions.\n\nHowever, there are still situations where we can\u0027t avoid allocating\nbusy extents (such as allocation from the AGFL). To minimise the\noverhead of such occurences, we need to avoid doing a synchronous\nlog force while holding the AGF locked to ensure that the previous\ntransactions are safely on disk before we use the extent. We can do\nthis by marking the transaction doing the allocation as synchronous\nrather issuing a log force.\n\nBecause of the locking involved and the ordering of transactions,\nthe synchronous transaction provides the same guarantees as a\nsynchronous log force because it ensures that all the prior\ntransactions are already on disk when the synchronous transaction\nhits the disk. i.e. it preserves the free-\u003eallocate order of the\nextent correctly in recovery.\n\nBy doing this, we avoid holding the AGF locked while log writes are\nin progress, hence reducing the length of time the lock is held and\ntherefore we increase the rate at which we can allocate and free\nfrom the allocation group, thereby increasing overall throughput.\n\nThe only problem with this approach is that when a metadata buffer is\nmarked stale (e.g. a directory block is removed), then buffer remains\npinned and locked until the log goes to disk. The issue here is that\nif that stale buffer is reallocated in a subsequent transaction, the\nattempt to lock that buffer in the transaction will hang waiting\nthe log to go to disk to unlock and unpin the buffer. Hence if\nsomeone tries to lock a pinned, stale, locked buffer we need to\npush on the log to get it unlocked ASAP. Effectively we are trading\noff a guaranteed log force for a much less common trigger for log\nforce to occur.\n\nIdeally we should not reallocate busy extents. That is a much more\ncomplex fix to the problem as it involves direct intervention in the\nallocation btree searches in many places. This is left to a future\nset of modifications.\n\nFinally, now that we track busy extents in allocated memory, we\ndon\u0027t need the descriptors in the transaction structure to point to\nthem. We can replace the complex busy chunk infrastructure with a\nsimple linked list of busy extents. This allows us to remove a large\nchunk of code, making the overall change a net reduction in code\nsize.\n\nSigned-off-by: Dave Chinner \u003cdavid@fromorbit.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "c11554104f4dcb509fd43973389b097a04b9d51d",
      "tree": "18b67546aa2baacaa729ae51ad656465bdc2654f",
      "parents": [
        "64fc35de60da3b1fe970168d10914bf1cf34a3e3"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Fri May 07 11:05:19 2010 +1000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon May 24 10:33:39 2010 -0500"
      },
      "message": "xfs: Clean up XFS_BLI_* flag namespace\n\nClean up the buffer log format (XFS_BLI_*) flags because they have a\npolluted namespace. They XFS_BLI_ prefix is used for both in-memory\nand on-disk flag feilds, but have overlapping values for different\nflags. Rename the buffer log format flags to use the XFS_BLF_*\nprefix to avoid confusing them with the in-memory XFS_BLI_* prefixed\nflags.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "e8bebe2f71d26871b0970ae1d9cf0ed3cdd9569d",
      "tree": "c0d82cbd11daaf579b74121c6641d58947091094",
      "parents": [
        "6109e2ce2600e2db26cd0424bb9c6ed019723288",
        "82f3952c02add60b15eea9151d4d99b6b82066c6"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri May 21 19:37:45 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri May 21 19:37:45 2010 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6: (69 commits)\n  fix handling of offsets in cris eeprom.c, get rid of fake on-stack files\n  get rid of home-grown mutex in cris eeprom.c\n  switch ecryptfs_write() to struct inode *, kill on-stack fake files\n  switch ecryptfs_get_locked_page() to struct inode *\n  simplify access to ecryptfs inodes in -\u003ereadpage() and friends\n  AFS: Don\u0027t put struct file on the stack\n  Ban ecryptfs over ecryptfs\n  logfs: replace inode uid,gid,mode initialization with helper function\n  ufs: replace inode uid,gid,mode initialization with helper function\n  udf: replace inode uid,gid,mode init with helper\n  ubifs: replace inode uid,gid,mode initialization with helper function\n  sysv: replace inode uid,gid,mode initialization with helper function\n  reiserfs: replace inode uid,gid,mode initialization with helper function\n  ramfs: replace inode uid,gid,mode initialization with helper function\n  omfs: replace inode uid,gid,mode initialization with helper function\n  bfs: replace inode uid,gid,mode initialization with helper function\n  ocfs2: replace inode uid,gid,mode initialization with helper function\n  nilfs2: replace inode uid,gid,mode initialization with helper function\n  minix: replace inode uid,gid,mode init with helper\n  ext4: replace inode uid,gid,mode init with helper\n  ...\n\nTrivial conflict in fs/fs-writeback.c (mark bitfields unsigned)\n"
    },
    {
      "commit": "46e58764f0c502847ed1f4662aa37eefa602a8f9",
      "tree": "c3dc3f8aae37014726a372106e6028df1a5e63ab",
      "parents": [
        "94d09a98cdb163be12fb5c76841fa295f0bee22a"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Thu May 13 17:53:20 2010 -0700"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri May 21 18:31:19 2010 -0400"
      },
      "message": "xfs: constify xattr_handler\n\nSigned-off-by: Stephen Hemminger \u003cshemminger@vyatta.com\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "ee9a3607fb03e804ddf624544105f4e34260c380",
      "tree": "ce41b6e0fa10982a306f6c142a92dbf3c9961284",
      "parents": [
        "b492e95be0ae672922f4734acf3f5d35c30be948",
        "d515e86e639890b33a09390d062b0831664f04a2"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri May 21 21:27:26 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri May 21 21:27:26 2010 +0200"
      },
      "message": "Merge branch \u0027master\u0027 into for-2.6.35\n\nConflicts:\n\tfs/ext3/fsync.c\n\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "c472b43275976512e4c1c32da5ced03f339cb380",
      "tree": "9159fbfd1190456e8b3e699b856022c23f6ec10c",
      "parents": [
        "b9b2dd36c1bc64430f8e13990ab135cbecc10076"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Thu May 06 17:05:17 2010 -0400"
      },
      "committer": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Fri May 21 19:30:44 2010 +0200"
      },
      "message": "quota: unify -\u003eset_dqblk\n\nPass the larger struct fs_disk_quota to the -\u003eset_dqblk operation so\nthat the Q_SETQUOTA and Q_XSETQUOTA operations can be implemented\nwith a single filesystem operation and we can retire the -\u003eset_xquota\noperation.  The additional information (RT-subvolume accounting and\nwarn counts) are left zero for the VFS quota implementation.\n\nAdd new fieldmask values for setting the numer of blocks and inodes\nvalues which is required for the VFS quota, but wasn\u0027t for XFS.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\n"
    },
    {
      "commit": "b9b2dd36c1bc64430f8e13990ab135cbecc10076",
      "tree": "051bb6a238c9ff98fe135de3e8591c65cf242d46",
      "parents": [
        "0636c73ee7b129f77f577aaaefc8dde057be6d18"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Thu May 06 17:04:58 2010 -0400"
      },
      "committer": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Fri May 21 19:30:43 2010 +0200"
      },
      "message": "quota: unify -\u003eget_dqblk\n\nPass the larger struct fs_disk_quota to the -\u003eget_dqblk operation so\nthat the Q_GETQUOTA and Q_XGETQUOTA operations can be implemented\nwith a single filesystem operation and we can retire the -\u003eget_xquota\noperation.  The additional information (RT-subvolume accounting and\nwarn counts) are left zero for the VFS quota implementation.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\n"
    },
    {
      "commit": "bd1556a146d46070049428dded306829cb65161d",
      "tree": "3ce3c35fb3359a83766a0442156cee692479037b",
      "parents": [
        "2b8f12b7e438fa6ba4a0f8f861871be0beb3a3e6"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Wed Apr 28 12:29:00 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Wed May 19 09:58:20 2010 -0500"
      },
      "message": "xfs: clean up end index calculation in xfs_page_state_convert\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "2b8f12b7e438fa6ba4a0f8f861871be0beb3a3e6",
      "tree": "8528d14896aef2e8718fd9edc4fc716d7815ae3f",
      "parents": [
        "558e6891693f4c383c51c7343a88dea174eadacf"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Wed Apr 28 12:28:59 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Wed May 19 09:58:19 2010 -0500"
      },
      "message": "xfs: clean up mapping size calculation in __xfs_get_blocks\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "558e6891693f4c383c51c7343a88dea174eadacf",
      "tree": "df7512d1f97fb4557d920d3ceb566dee256c1a7c",
      "parents": [
        "34a52c6c064fb9f1fd1310407ce076a4bb049734"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Wed Apr 28 12:28:58 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Wed May 19 09:58:19 2010 -0500"
      },
      "message": "xfs: clean up xfs_iomap_valid\n\nRename all iomap_valid identifiers to imap_valid to fit the new\nworld order, and clean up xfs_iomap_valid to convert the passed in\noffset to blocks instead of the imap values to bytes.  Use the\nsimpler inode-\u003ei_blkbits instead of the XFS macros for this.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "34a52c6c064fb9f1fd1310407ce076a4bb049734",
      "tree": "2b05a8d21f644ab733f7e242971bd0314c46b355",
      "parents": [
        "207d041602cead1c1a16288f6225aea9da1f5bc4"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Wed Apr 28 12:28:57 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Wed May 19 09:58:17 2010 -0500"
      },
      "message": "xfs: move I/O type flags into xfs_aops.c\n\nThe IOMAP_ flags are now only used inside xfs_aops.c for extent\nprobing and I/O completion tracking, so more them here, and rename\nthem to IO_* as there\u0027s no mapping involved at all.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "207d041602cead1c1a16288f6225aea9da1f5bc4",
      "tree": "ad6149735c8bc0c5d112e301e6e17dac6280dcb6",
      "parents": [
        "e513182d4d7ec8f1870ae368c549ef2838e2c105"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Wed Apr 28 12:28:56 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Wed May 19 09:58:17 2010 -0500"
      },
      "message": "xfs: kill struct xfs_iomap\n\nNow that struct xfs_iomap contains exactly the same units as struct\nxfs_bmbt_irec we can just use the latter directly in the aops code.\nReplace the missing IOMAP_NEW flag with a new boolean output\nparameter to xfs_iomap.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "e513182d4d7ec8f1870ae368c549ef2838e2c105",
      "tree": "1dc543b7f798c4826684bf2a0a5d83bd363f246f",
      "parents": [
        "8699bb0a480193e62d5ccb9c86e2c26b407090a8"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Wed Apr 28 12:28:55 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Wed May 19 09:58:17 2010 -0500"
      },
      "message": "xfs: report iomap_bn in block base\n\nReport the iomap_bn field of struct xfs_iomap in terms of filesystem\nblocks instead of in terms of bytes.  Shift the byte conversions\ninto the caller, and replace the IOMAP_DELAY and IOMAP_HOLE flag\nchecks with checks for HOLESTARTBLOCK and DELAYSTARTBLOCK.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "8699bb0a480193e62d5ccb9c86e2c26b407090a8",
      "tree": "aabcc9cd0800cf5c0d0605d46a104ed825f90db6",
      "parents": [
        "9563b3d8998c78d5b7e718b546d5f68037c494fe"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Wed Apr 28 12:28:54 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Wed May 19 09:58:17 2010 -0500"
      },
      "message": "xfs: report iomap_offset and iomap_bsize in block base\n\nReport the iomap_offset and iomap_bsize fields of struct xfs_iomap\nin terms of fsblocks instead of in terms of disk blocks.  Shift the\nbyte conversions into the callers temporarily, but they will\ndisappear or get cleaned up later.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "9563b3d8998c78d5b7e718b546d5f68037c494fe",
      "tree": "f614d05139491b129515443855e80eb0c562157b",
      "parents": [
        "046f1685bb5211c3dea74fda0198c19171e9abc9"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Wed Apr 28 12:28:53 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Wed May 19 09:58:17 2010 -0500"
      },
      "message": "xfs: remove iomap_delta\n\nThe iomap_delta field in struct xfs_iomap just contains the\ndifference between the offset passed to xfs_iomap and the\niomap_offset.  Just calculate it in the only caller that cares.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "046f1685bb5211c3dea74fda0198c19171e9abc9",
      "tree": "3d01a53802173f26cd0475c74344b598f855e8f2",
      "parents": [
        "826bf0adce0cddd9c94c2706b63d181dfc5cdaaa"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Wed Apr 28 12:28:52 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Wed May 19 09:58:16 2010 -0500"
      },
      "message": "xfs: remove iomap_target\n\nInstead of using the iomap_target field in struct xfs_iomap\nand the IOMAP_REALTIME flag just use the already existing\nxfs_find_bdev_for_inode helper.  There\u0027s some fallout as we\nneed to pass the inode in a few more places, which we also\nuse to sanitize some calling conventions.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "2d1ff3c75a4642062d314634290be6d8da4ffb03",
      "tree": "1112feee61ad0c7653c6877d04397b4949c46471",
      "parents": [
        "48389ef17583f2214bbd2c119b3015677419c16b"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "tao.ma@oracle.com",
        "time": "Thu Apr 29 15:13:56 2010 +1000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Wed May 19 09:58:16 2010 -0500"
      },
      "message": "xfs: Make fiemap work in query mode.\n\nAccording to Documentation/filesystems/fiemap.txt, If fm_extent_count\nis zero, then the fm_extents[] array is ignored (no extents will be\nreturned), and the fm_mapped_extents count will hold the number of\nextents needed.\n\nBut as the commit 97db39a1f6f69e906e98118392400de5217aa33a has changed\nbmv_count to the caller\u0027s input buffer, this number query function can\u0027t\nwork any more. As this commit is written to change bmv_count from\nMAXEXTNUM because of ENOMEM.\n\nThis patch just try to  set bm.bmv_count to something sane.\nThanks to Dave Chinner \u003cdavid@fromorbit.com\u003e for the suggestion.\n\nCc: Eric Sandeen \u003csandeen@redhat.com\u003e\nCc: Alex Elder \u003caelder@sgi.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Tao Ma \u003ctao.ma@oracle.com\u003e\n"
    },
    {
      "commit": "37bc5743fdc29f60fb104cd9031babbabddff25a",
      "tree": "abbcde46a9741a40a0ced8d1f289f6af65725d15",
      "parents": [
        "fce1cad651e3cf2779ed8f9e6608daf50d29daaf"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Tue Apr 20 17:00:59 2010 +1000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Wed May 19 09:58:14 2010 -0500"
      },
      "message": "xfs: wait for direct I/O to complete in fsync and write_inode\n\nWe need to wait for all pending direct I/O requests before taking care of\nmetadata in fsync and write_inode.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Dave Chinner \u003cdavid@fromorbit.com\u003e\n\n"
    },
    {
      "commit": "fce1cad651e3cf2779ed8f9e6608daf50d29daaf",
      "tree": "cbd2eba102e09c48a1f7795ba95f2fbd287d9b2e",
      "parents": [
        "3f943d853d6ce6d808e7362e4444c7ed5f692357"
      ],
      "author": {
        "name": "Andrea Gelmini",
        "email": "andrea.gelmini@gelma.net",
        "time": "Thu Mar 25 17:22:41 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Wed May 19 09:58:14 2010 -0500"
      },
      "message": "xfs: xfs_trace.c: duplicated include\n\nfs/xfs/linux-2.6/xfs_trace.c: xfs_attr_sf.h is included more than once.\n\nSigned-off-by: Andrea Gelmini \u003candrea.gelmini@gelma.net\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "8c38366f99f83a7fa441e0c0669fefc18615e005",
      "tree": "05789fdea7c34b1b6f29151b6a13bd49f3c6fec9",
      "parents": [
        "df308bcfec27e0c6bc83715dfd417caff5c33f19"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Fri Mar 12 10:59:40 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Wed May 19 09:58:13 2010 -0500"
      },
      "message": "xfs: enforce synchronous writes in xfs_bwrite\n\nxfs_bwrite is used with the intention of synchronously writing out\nbuffers, but currently it does not actually clear the async flag if\nthat\u0027s left from previous writes but instead implements async\nbehaviour if it finds it.  Remove the code handling asynchronous\nwrites as we\u0027ve got rid of those entirely outside of the log and\ndelwri buffers, and make sure that we clear the async and read flags\nbefore writing the buffer.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "df308bcfec27e0c6bc83715dfd417caff5c33f19",
      "tree": "558d5b910a4de3cbb36b44eeca1e1f619f2cddf3",
      "parents": [
        "f983710758218c7aad4aae3e40a7312a21d6f55a"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Fri Mar 12 10:59:16 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Wed May 19 09:58:13 2010 -0500"
      },
      "message": "xfs: remove periodic superblock writeback\n\nAll modifications to the superblock are done transactional through\nxfs_trans_log_buf, so there is no reason to initiate periodic\nasynchronous writeback.  This only removes the superblock from the\ndelwri list and will lead to sub-optimal I/O scheduling.\n\nCut down xfs_sync_fsdata now that it\u0027s only used for synchronous\nsuperblock writes and move the log coverage checks into the two\ncallers.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "e6a81f13aa9aa20ef03174210aed24791865b05e",
      "tree": "727202721a225004e2522f32278de294c3748e70",
      "parents": [
        "368e136174344c417bad6ff0380b7b3f574bf120"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Tue Apr 13 15:06:51 2010 +1000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Wed May 19 09:58:11 2010 -0500"
      },
      "message": "xfs: convert the dquot hash list to use list heads\n\nConvert the dquot hash list on the filesystem to use listhead\ninfrastructure rather than the roll-your-own in the quota code.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "368e136174344c417bad6ff0380b7b3f574bf120",
      "tree": "1718f3e35b42adbaabf5a65062f2d3f5ecf1ac43",
      "parents": [
        "3a25404b3fccd41d36b2fda18d86011201608c38"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Tue Apr 13 15:06:50 2010 +1000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Wed May 19 09:58:11 2010 -0500"
      },
      "message": "xfs: remove duplicate code from dquot reclaim\n\nThe dquot shaker and the free-list reclaim code use exactly the same\nalgorithm but the code is duplicated and slightly different in each\ncase. Make the shaker code use the single dquot reclaim code to\nremove the code duplication.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "9abbc539bf7f299819ad0a235064a1b643ab6407",
      "tree": "0c15d4f4933bce3a1a1db19509f4993ce2e46286",
      "parents": [
        "e6b1f27370fc67ac9868b2dbe2c22bc26952900e"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Tue Apr 13 15:06:46 2010 +1000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Wed May 19 09:58:10 2010 -0500"
      },
      "message": "xfs: add log item recovery tracing\n\nCurrently there is no tracing in log recovery, so it is difficult to\ndetermine what is going on when something goes wrong.\n\nAdd tracing for log item recovery to provide visibility into the log\nrecovery process. The tracing added shows regions being extracted\nfrom the log transactions and added to the transaction hash forming\nrecovery items, followed by the reordering, cancelling and finally\nrecovery of the items.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "4aaf15d1aa9673dd2cc45c48957c946cb4aa2694",
      "tree": "aec24df27ca9cde2d359b77f9ac97f8ad44a1baa",
      "parents": [
        "43f5efc5b59db1b66e39fe9fdfc4ba6a27152afa"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Mon Mar 08 11:24:07 2010 +1100"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Wed May 19 09:58:08 2010 -0500"
      },
      "message": "xfs: Add inode pin counts to traces\n\nWe don\u0027t record pin counts in inode events right now, and this makes\nit difficult to track down problems related to pinning inodes. Add\nthe pin count to the inode trace class and add trace events for\npinning and unpinning inodes.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "e2a07812e93d4a51b1b1a6f15145a1634948db47",
      "tree": "2d13997492891384df9cbbd472296f2cb17f18d7",
      "parents": [
        "fda168c24586ab8e01b0eb68028d78fe3e4fb71a"
      ],
      "author": {
        "name": "Jan Engelhardt",
        "email": "jengelh@medozas.de",
        "time": "Tue Mar 23 09:52:55 2010 +1100"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Wed May 19 09:58:07 2010 -0500"
      },
      "message": "xfs: add blockdev name to kthreads\n\nThis allows to see in `ps` and similar tools which kthreads are\nallotted to which block device/filesystem, similar to what jbd2\ndoes. As the process name is a fixed 16-char array, no extra\nspace is needed in tasks.\n\n  PID TTY      STAT   TIME COMMAND\n    2 ?        S      0:00 [kthreadd]\n  197 ?        S      0:00  \\_ [jbd2/sda2-8]\n  198 ?        S      0:00  \\_ [ext4-dio-unwrit]\n  204 ?        S      0:00  \\_ [flush-8:0]\n 2647 ?        S      0:00  \\_ [xfs_mru_cache]\n 2648 ?        S      0:00  \\_ [xfslogd/0]\n 2649 ?        S      0:00  \\_ [xfsdatad/0]\n 2650 ?        S      0:00  \\_ [xfsconvertd/0]\n 2651 ?        S      0:00  \\_ [xfsbufd/ram0]\n 2652 ?        S      0:00  \\_ [xfsaild/ram0]\n 2653 ?        S      0:00  \\_ [xfssyncd/ram0]\n\nSigned-off-by: Jan Engelhardt \u003cjengelh@medozas.de\u003e\nReviewed-by: Dave Chinner \u003cdavid@fromorbit.com\u003e\n"
    },
    {
      "commit": "fda168c24586ab8e01b0eb68028d78fe3e4fb71a",
      "tree": "015ac765550296cac1bc9b3eee833d99630a83fa",
      "parents": [
        "e40152ee1e1c7a63f4777791863215e3faa37a86"
      ],
      "author": {
        "name": "Zhitong Wang",
        "email": "zhitong.wangzt@alibaba-inc.com",
        "time": "Tue Mar 23 09:51:22 2010 +1100"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Wed May 19 09:58:07 2010 -0500"
      },
      "message": "xfs: Fix integer overflow in fs/xfs/linux-2.6/xfs_ioctl*.c\n\nThe am_hreq.opcount field in the xfs_attrmulti_by_handle() interface\nis not bounded correctly. The opcount is used to determine the size\nof the buffer required. The size is bounded, but can overflow and so\nthe size checks may not be sufficient to catch invalid opcounts.\nFix it by catching opcount values that would cause overflows before\ncalculating the size.\n\nSigned-off-by: Zhitong Wang \u003czhitong.wangzt@alibaba-inc.com\u003e\nReviewed-by: Dave Chinner \u003cdavid@fromorbit.com\u003e\n"
    },
    {
      "commit": "9bf729c0af67897ea8498ce17c29b0683f7f2028",
      "tree": "9e6350fd9da5aef0b53ddeddd82f618ae16bf931",
      "parents": [
        "79dba2eaa771c3173957eccfd288e0e0d12e4d3f"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Thu Apr 29 09:55:50 2010 +1000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Thu Apr 29 16:22:13 2010 -0500"
      },
      "message": "xfs: add a shrinker to background inode reclaim\n\nOn low memory boxes or those with highmem, kernel can OOM before the\nbackground reclaims inodes via xfssyncd. Add a shrinker to run inode\nreclaim so that it inode reclaim is expedited when memory is low.\n\nThis is more complex than it needs to be because the VM folk don\u0027t\nwant a context added to the shrinker infrastructure. Hence we need\nto add a global list of XFS mount structures so the shrinker can\ntraverse them.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "7407cf355fdf5500430be966dbbde84a27293bad",
      "tree": "922861288ff38558ed721a79653f52b17b13bb95",
      "parents": [
        "6a47dc1418682c83d603b491df1d048f73aa973e",
        "79dba2eaa771c3173957eccfd288e0e0d12e4d3f"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Thu Apr 29 09:36:24 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Thu Apr 29 09:36:24 2010 +0200"
      },
      "message": "Merge branch \u0027master\u0027 into for-2.6.35\n\nConflicts:\n\tfs/block_dev.c\n\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "fbd9b09a177a481eda256447c881f014f29034fe",
      "tree": "ef7e213045382f82a1e3e3cf134d196a1045dd7a",
      "parents": [
        "6b4517a7913a09d3259bb1d21c9cb300f12294bd"
      ],
      "author": {
        "name": "Dmitry Monakhov",
        "email": "dmonakhov@openvz.org",
        "time": "Wed Apr 28 17:55:06 2010 +0400"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Wed Apr 28 19:47:36 2010 +0200"
      },
      "message": "blkdev: generalize flags for blkdev_issue_fn functions\n\nThe patch just convert all blkdev_issue_xxx function to common\nset of flags. Wait/allocation semantics preserved.\n\nSigned-off-by: Dmitry Monakhov \u003cdmonakhov@openvz.org\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "f1d486a3617a2f620b31224e4ace1496c4627e39",
      "tree": "82eae8ca41e529690c2b71d712e886161e786e6b",
      "parents": [
        "b6f8dd49dbdbfa60a33bba3d4b766fe341109b4b"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Tue Apr 13 15:06:45 2010 +1000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Fri Apr 16 13:51:44 2010 -0500"
      },
      "message": "xfs: don\u0027t warn on EAGAIN in inode reclaim\n\nAny inode reclaim flush that returns EAGAIN will result in the inode\nreclaim being attempted again later. There is no need to issue a\nwarning into the logs about this situation.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Alex Elder \u003caelder@sgi.com\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "5a0e3ad6af8660be21ca98a971cd00f331318c05",
      "tree": "5bfb7be11a03176a87296a43ac6647975c00a1d1",
      "parents": [
        "ed391f4ebf8f701d3566423ce8f17e614cde9806"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 24 17:04:11 2010 +0900"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Mar 30 22:02:32 2010 +0900"
      },
      "message": "include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h\n\npercpu.h is included by sched.h and module.h and thus ends up being\nincluded when building most .c files.  percpu.h includes slab.h which\nin turn includes gfp.h making everything defined by the two files\nuniversally available and complicating inclusion dependencies.\n\npercpu.h -\u003e slab.h dependency is about to be removed.  Prepare for\nthis change by updating users of gfp and slab facilities include those\nheaders directly instead of assuming availability.  As this conversion\nneeds to touch large number of source files, the following script is\nused as the basis of conversion.\n\n  http://userweb.kernel.org/~tj/misc/slabh-sweep.py\n\nThe script does the followings.\n\n* Scan files for gfp and slab usages and update includes such that\n  only the necessary includes are there.  ie. if only gfp is used,\n  gfp.h, if slab is used, slab.h.\n\n* When the script inserts a new include, it looks at the include\n  blocks and try to put the new include such that its order conforms\n  to its surrounding.  It\u0027s put in the include block which contains\n  core kernel includes, in the same order that the rest are ordered -\n  alphabetical, Christmas tree, rev-Xmas-tree or at the end if there\n  doesn\u0027t seem to be any matching order.\n\n* If the script can\u0027t find a place to put a new include (mostly\n  because the file doesn\u0027t have fitting include block), it prints out\n  an error message indicating which .h file needs to be added to the\n  file.\n\nThe conversion was done in the following steps.\n\n1. The initial automatic conversion of all .c files updated slightly\n   over 4000 files, deleting around 700 includes and adding ~480 gfp.h\n   and ~3000 slab.h inclusions.  The script emitted errors for ~400\n   files.\n\n2. Each error was manually checked.  Some didn\u0027t need the inclusion,\n   some needed manual addition while adding it to implementation .h or\n   embedding .c file was more appropriate for others.  This step added\n   inclusions to around 150 files.\n\n3. The script was run again and the output was compared to the edits\n   from #2 to make sure no file was left behind.\n\n4. Several build tests were done and a couple of problems were fixed.\n   e.g. lib/decompress_*.c used malloc/free() wrappers around slab\n   APIs requiring slab.h to be added manually.\n\n5. The script was run on all .h files but without automatically\n   editing them as sprinkling gfp.h and slab.h inclusions around .h\n   files could easily lead to inclusion dependency hell.  Most gfp.h\n   inclusion directives were ignored as stuff from gfp.h was usually\n   wildly available and often used in preprocessor macros.  Each\n   slab.h inclusion directive was examined and added manually as\n   necessary.\n\n6. percpu.h was updated not to include slab.h.\n\n7. Build test were done on the following configurations and failures\n   were fixed.  CONFIG_GCOV_KERNEL was turned off for all tests (as my\n   distributed build env didn\u0027t work with gcov compiles) and a few\n   more options had to be turned off depending on archs to make things\n   build (like ipr on powerpc/64 which failed due to missing writeq).\n\n   * x86 and x86_64 UP and SMP allmodconfig and a custom test config.\n   * powerpc and powerpc64 SMP allmodconfig\n   * sparc and sparc64 SMP allmodconfig\n   * ia64 SMP allmodconfig\n   * s390 SMP allmodconfig\n   * alpha SMP allmodconfig\n   * um on x86_64 SMP allmodconfig\n\n8. percpu.h modifications were reverted so that it could be applied as\n   a separate patch and serve as bisection point.\n\nGiven the fact that I had only a couple of failures from tests on step\n6, I\u0027m fairly confident about the coverage of this conversion patch.\nIf there is a breakage, it\u0027s likely to be something in one of the arch\nheaders which should be easily discoverable easily on most builds of\nthe specific arch.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nGuess-its-ok-by: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nCc: Ingo Molnar \u003cmingo@redhat.com\u003e\nCc: Lee Schermerhorn \u003cLee.Schermerhorn@hp.com\u003e\n"
    },
    {
      "commit": "e8c3753ce4cd6a805ebcfdb3aa6d30e6f4b8b3e0",
      "tree": "cf0618d802720d77a8d1910e1085e82b1dfbb588",
      "parents": [
        "8a262e573d30187b32b5534ec489446931239cc5"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Mon Mar 15 02:36:35 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Tue Mar 16 15:40:53 2010 -0500"
      },
      "message": "xfs: don\u0027t warn about page discards on shutdown\n\nIf we are doing a forced shutdown, we can get lots of noise about\ndelalloc pages being discarded. This is happens by design during a\nforced shutdown, so don\u0027t spam the logs with these messages.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "8a262e573d30187b32b5534ec489446931239cc5",
      "tree": "e510327146e3329d19fac8269cc51d437c8a650f",
      "parents": [
        "cd9640a70d542ca026a812ac34733799da0a39c9"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Tue Mar 16 18:55:56 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Tue Mar 16 15:40:36 2010 -0500"
      },
      "message": "xfs: use scalable vmap API\n\nRe-apply a commit that had been reverted due to regressions\nthat have since been fixed.\n\n    From 95f8e302c04c0b0c6de35ab399a5551605eeb006 Mon Sep 17 00:00:00 2001\n    From: Nick Piggin \u003cnpiggin@suse.de\u003e\n    Date: Tue, 6 Jan 2009 14:43:09 +1100\n\n    Implement XFS\u0027s large buffer support with the new vmap APIs. See the vmap\n    rewrite (db64fe02) for some numbers. The biggest improvement that comes from\n    using the new APIs is avoiding the global KVA allocation lock on every call.\n\n    Signed-off-by: Nick Piggin \u003cnpiggin@suse.de\u003e\n    Reviewed-by: Christoph Hellwig \u003chch@infradead.org\u003e\n    Signed-off-by: Lachlan McIlroy \u003clachlan@sgi.com\u003e\n\nOnly modifications here were a minor reformat, plus making the patch\napply given the new use of xfs_buf_is_vmapped().\n\nModified-by: Alex Elder \u003caelder@sgi.com\u003e\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "cd9640a70d542ca026a812ac34733799da0a39c9",
      "tree": "497c3ab912f25994d7adc4c7a860cf01bb78c95c",
      "parents": [
        "57d54889cd00db2752994b389ba714138652e60c"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Tue Mar 16 18:55:54 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Tue Mar 16 15:40:19 2010 -0500"
      },
      "message": "xfs: remove old vmap cache\n\nRe-apply a commit that had been reverted due to regressions\nthat have since been fixed.\n\n    Original commit: d2859751cd0bf586941ffa7308635a293f943c17\n    Author: Nick Piggin \u003cnpiggin@suse.de\u003e\n    Date: Tue, 6 Jan 2009 14:40:44 +1100\n\n    XFS\u0027s vmap batching simply defers a number (up to 64) of vunmaps,\n    and keeps track of them in a list. To purge the batch, it just goes\n    through the list and calls vunamp on each one. This is pretty poor:\n    a global TLB flush is generally still performed on each vunmap, with\n    the most expensive parts of the operation being the broadcast IPIs\n    and locking involved in the SMP callouts, and the locking involved\n    in the vmap management -- none of these are avoided by just batching\n    up the calls. I\u0027m actually surprised it ever made much difference.\n    (Now that the lazy vmap allocator is upstream, this description is\n    not quite right, but the vunmap batching still doesn\u0027t seem to do\n    much).\n\n    Rip all this logic out of XFS completely. I will improve vmap\n    performance and scalability directly in subsequent patch.\n\n    Signed-off-by: Nick Piggin \u003cnpiggin@suse.de\u003e\n    Reviewed-by: Christoph Hellwig \u003chch@infradead.org\u003e\n    Signed-off-by: Lachlan McIlroy \u003clachlan@sgi.com\u003e\n\nThe only change I made was to use the \"new\" xfs_buf_is_vmapped()\nfunction in a place it had been open-coded in the original.\n\nModified-by: Alex Elder \u003caelder@sgi.com\u003e\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "66ce3cf84deba6cc71dcf43c9d56a4278e5f712d",
      "tree": "7580bcc42fc7c52620b98d78ebdc654bd7ed83ea",
      "parents": [
        "05c5cb31ec47cacf38db56d9efaa37ca9d473132",
        "9b1f56d60acfd634728f91f34922066c6f80ede6"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Mar 06 11:32:21 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Mar 06 11:32:21 2010 -0800"
      },
      "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: (21 commits)\n  xfs: return inode fork offset in bulkstat for fsr\n  xfs: Increase the default size of the reserved blocks pool\n  xfs: truncate delalloc extents when IO fails in writeback\n  xfs: check for more work before sleeping in xfssyncd\n  xfs: Fix a build warning in xfs_aops.c\n  xfs: fix locking for inode cache radix tree tag updates\n  xfs: remove xfs_ipin/xfs_iunpin\n  xfs: cleanup xfs_iunpin_wait/xfs_iunpin_nowait\n  xfs: kill xfs_lrw.h\n  xfs: factor common xfs_trans_bjoin code\n  xfs: stop passing opaque handles to xfs_log.c routines\n  xfs: split xfs_bmap_btalloc\n  xfs: fix xfs_fsblock_t tracing\n  xfs: fix inode pincount check in fsync\n  xfs: Non-blocking inode locking in IO completion\n  xfs: implement optimized fdatasync\n  xfs: remove wrapper for the fsync file operation\n  xfs: remove wrappers for read/write file operations\n  xfs: merge xfs_lrw.c into xfs_file.c\n  xfs: fix dquota trace format\n  ...\n"
    },
    {
      "commit": "05c5cb31ec47cacf38db56d9efaa37ca9d473132",
      "tree": "03f900679819abd8700d5ea93c22e3a59d3af7ca",
      "parents": [
        "4582a30c2fdca5d2b40f63a20ea082b93230ff2b",
        "4ea41e2de5bba756858bb40f964e3490b6d1a25c"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Mar 06 11:31:38 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Mar 06 11:31:38 2010 -0800"
      },
      "message": "Merge branch \u0027for-2.6.34\u0027 of git://linux-nfs.org/~bfields/linux\n\n* \u0027for-2.6.34\u0027 of git://linux-nfs.org/~bfields/linux: (22 commits)\n  nfsd4: fix minor memory leak\n  svcrpc: treat uid\u0027s as unsigned\n  nfsd: ensure sockets are closed on error\n  Revert \"sunrpc: move the close processing after do recvfrom method\"\n  Revert \"sunrpc: fix peername failed on closed listener\"\n  sunrpc: remove unnecessary svc_xprt_put\n  NFSD: NFSv4 callback client should use RPC_TASK_SOFTCONN\n  xfs_export_operations.commit_metadata\n  commit_metadata export operation replacing nfsd_sync_dir\n  lockd: don\u0027t clear sm_monitored on nsm_reboot_lookup\n  lockd: release reference to nsm_handle in nlm_host_rebooted\n  nfsd: Use vfs_fsync_range() in nfsd_commit\n  NFSD: Create PF_INET6 listener in write_ports\n  SUNRPC: NFS kernel APIs shouldn\u0027t return ENOENT for \"transport not found\"\n  SUNRPC: Bury \"#ifdef IPV6\" in svc_create_xprt()\n  NFSD: Support AF_INET6 in svc_addsock() function\n  SUNRPC: Use rpc_pton() in ip_map_parse()\n  nfsd: 4.1 has an rfc number\n  nfsd41: Create the recovery entry for the NFSv4.1 client\n  nfsd: use vfs_fsync for non-directories\n  ...\n"
    },
    {
      "commit": "e213e26ab3988c516c06eba4dcd030ac052f6dc9",
      "tree": "6e26fbdbb842b387697d73daf6e70cf718269a77",
      "parents": [
        "c812a51d11bbe983f4c24e32b59b265705ddd3c2",
        "efd8f0e6f6c1faa041f228d7113bd3a9db802d49"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Mar 05 13:20:53 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Mar 05 13:20:53 2010 -0800"
      },
      "message": "Merge branch \u0027for_linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs-2.6\n\n* \u0027for_linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs-2.6: (33 commits)\n  quota: stop using QUOTA_OK / NO_QUOTA\n  dquot: cleanup dquot initialize routine\n  dquot: move dquot initialization responsibility into the filesystem\n  dquot: cleanup dquot drop routine\n  dquot: move dquot drop responsibility into the filesystem\n  dquot: cleanup dquot transfer routine\n  dquot: move dquot transfer responsibility into the filesystem\n  dquot: cleanup inode allocation / freeing routines\n  dquot: cleanup space allocation / freeing routines\n  ext3: add writepage sanity checks\n  ext3: Truncate allocated blocks if direct IO write fails to update i_size\n  quota: Properly invalidate caches even for filesystems with blocksize \u003c pagesize\n  quota: generalize quota transfer interface\n  quota: sb_quota state flags cleanup\n  jbd: Delay discarding buffers in journal_unmap_buffer\n  ext3: quota_write cross block boundary behaviour\n  quota: drop permission checks from xfs_fs_set_xstate/xfs_fs_set_xquota\n  quota: split out compat_sys_quotactl support from quota.c\n  quota: split out netlink notification support from quota.c\n  quota: remove invalid optimization from quota_sync_all\n  ...\n\nFixed trivial conflicts in fs/namei.c and fs/ufs/inode.c\n"
    },
    {
      "commit": "a9185b41a4f84971b930c519f0c63bd450c4810d",
      "tree": "268cf4e206cca12fb9e1dd68984e7c190e465b46",
      "parents": [
        "26821ed40b4230259e770c9911180f38fcaa6f59"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Fri Mar 05 09:21:37 2010 +0100"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Mar 05 13:25:52 2010 -0500"
      },
      "message": "pass writeback_control to -\u003ewrite_inode\n\nThis gives the filesystem more information about the writeback that\nis happening.  Trond requested this for the NFS unstable write handling,\nand other filesystems might benefit from this too by beeing able to\ndistinguish between the different callers in more detail.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "26821ed40b4230259e770c9911180f38fcaa6f59",
      "tree": "40cd0fed705ec59dd3c909b96452bae1fc532796",
      "parents": [
        "64ba9926759792cf7b95f823402e2781edd1b5d4"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Fri Mar 05 09:21:21 2010 +0100"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Mar 05 13:25:10 2010 -0500"
      },
      "message": "make sure data is on disk before calling -\u003ewrite_inode\n\nSimilar to the fsync issue fixed a while ago in commit\n2daea67e966dc0c42067ebea015ddac6834cef88 we need to write for data to\nactually hit the disk before writing out the metadata to guarantee\ndata integrity for filesystems that modify the inode in the data I/O\ncompletion path.  Currently XFS and NFS handle this manually, and AFS\nhas a write_inode method that does nothing but waiting for data, while\nothers are possibly missing out on this.\n\nFortunately this change has a lot less impact than the fsync change\nas none of the write_inode methods starts data writeout of any form\nby itself.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "9b1f56d60acfd634728f91f34922066c6f80ede6",
      "tree": "e8f64d4bea808341f56f41e724c2920ae6b1ed26",
      "parents": [
        "64ba9926759792cf7b95f823402e2781edd1b5d4",
        "07000ee686cf19e853fa06f7904eff2cfe230ea3"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Fri Mar 05 11:45:03 2010 -0600"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Fri Mar 05 11:45:03 2010 -0600"
      },
      "message": "Merge branch \u0027for-2.6.34-rc1-batch2\u0027 into for-linus\n"
    },
    {
      "commit": "3ed3a4343b79a79d10e31f85f2d1afabcead76c6",
      "tree": "9d3982cfb179bff8071ef99f2e2b36e3872dfa6a",
      "parents": [
        "20f6b2c785cf187445f126321638ab8ba7aa7494"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Fri Mar 05 02:00:42 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Fri Mar 05 11:01:53 2010 -0600"
      },
      "message": "xfs: truncate delalloc extents when IO fails in writeback\n\nWe currently use block_invalidatepage() to clean up pages where I/O\nfails in -\u003ewritepage(). Unfortunately, if the page has delalloc\nregions on it, we fail to remove the delalloc regions when we\ninvalidate the page.  This can result in tripping a BUG() in\nxfs_get_blocks() later on if a direct IO read is done on that same\nregion - the delalloc extent is returned when none is supposed to be\nthere.\n\nFix this by truncating away the delalloc regions on the page before\ninvalidating it. Because they are delalloc, we can do this without\nneeding a transaction. Indeed - if we get ENOSPC errors, we have to\nbe able to do this truncation without a transaction as there is\nno space left for block reservation (typically why we see a ENOSPC\nin writeback).\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "20f6b2c785cf187445f126321638ab8ba7aa7494",
      "tree": "bf8ba702047ae78cffeac6fd97852bde3741621b",
      "parents": [
        "694189328a7e566cb84bd3205503a42b60e87882"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Thu Mar 04 01:46:23 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Fri Mar 05 11:01:45 2010 -0600"
      },
      "message": "xfs: check for more work before sleeping in xfssyncd\n\nxfssyncd processes a queue of work by detaching the queue and\nthen iterating over all the work items. It then sleeps for a\ntime period or until new work comes in. If new work is queued\nwhile xfssyncd is actively processing the detached work queue,\nit will not process that new work until after a sleep timeout\nor the next work event queued wakes it.\n\nFix this by checking the work queue again before going to sleep.\n\nSigned-off-by: Dave Chinner \u003cdavid@fromorbit.com\u003e\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "694189328a7e566cb84bd3205503a42b60e87882",
      "tree": "dfd6cb104db477741ed8cc8a878832e90904f184",
      "parents": [
        "f1f724e4b523d444c5a598d74505aefa3d6844d2"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Thu Mar 04 00:57:09 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Fri Mar 05 11:01:22 2010 -0600"
      },
      "message": "xfs: Fix a build warning in xfs_aops.c\n\nFix a build warning that slipped through.  Dave Chinner had posted\nan updated version of his patch but the previous version--without\nthis fix--was what got committed.\n\nReported-by: Stephen Rothwell \u003csfr@canb.auug.org.au\u003e\nSigned-off-by: Stephen Rothwell \u003csfr@canb.auug.org.au\u003e\nSigned-off-by: Dave Chinner \u003cdavid@fromorbit.com\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "ac0e773718dc20551e72900d2e7eada96ac91100",
      "tree": "c46ec45c2044b0995ef241be4b800527210414d7",
      "parents": [
        "5582c76f901d240f57329212b59b4d957ea8d6cf"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Tue Feb 16 03:44:56 2010 -0500"
      },
      "committer": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Fri Mar 05 00:20:25 2010 +0100"
      },
      "message": "quota: drop permission checks from xfs_fs_set_xstate/xfs_fs_set_xquota\n\nWe already do these checks in the generic code.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\n"
    },
    {
      "commit": "8c4e4acd660a09e571a71583b5bbe1eee700c9ad",
      "tree": "05d1208e70d96dfa6857dbb84de7f3554a721992",
      "parents": [
        "c988afb5fa3fc450207c3dfc0ce535f4bfdae4d1"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Tue Feb 16 03:44:51 2010 -0500"
      },
      "committer": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Fri Mar 05 00:20:24 2010 +0100"
      },
      "message": "quota: clean up Q_XQUOTASYNC\n\nCurrently Q_XQUOTASYNC calls into the quota_sync method, but XFS does something\nentirely different in it than the rest of the filesystems.  xfs_quota which\ncalls Q_XQUOTASYNC expects an asynchronous data writeout to flush delayed\nallocations, while the \"VFS\" quota support wants to flush changes to the quota\nfile.\n\nSo make Q_XQUOTASYNC call into the writeback code directly and make the\nquota_sync method optional as XFS doesn\u0027t need in the sense expected by the\nrest of the quota code.\n\nGFS2 was using limited XFS-style quota and has a quota_sync method fitting\nneither the style used by vfs_quota_sync nor xfs_fs_quota_sync.  I left it\nin for now as per discussion with Steve it expects to be called from the\nsync path this way.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\n"
    },
    {
      "commit": "4ea41e2de5bba756858bb40f964e3490b6d1a25c",
      "tree": "51a688be321dd42f80d8a0c966eb6a60408d50b3",
      "parents": [
        "8d75da8afd068fa58b35e69c7c8c46770d9e7a98",
        "398007f863a4af2b4a5a07219c5a617f1a098115"
      ],
      "author": {
        "name": "J. Bruce Fields",
        "email": "bfields@citi.umich.edu",
        "time": "Thu Mar 04 12:03:16 2010 -0500"
      },
      "committer": {
        "name": "J. Bruce Fields",
        "email": "bfields@citi.umich.edu",
        "time": "Thu Mar 04 12:04:51 2010 -0500"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://oss.sgi.com/xfs/xfs into for-2.6.34-incoming\n\nResolve merge conflict in fs/xfs/linux-2.6/xfs_export.c.\n"
    },
    {
      "commit": "f1f724e4b523d444c5a598d74505aefa3d6844d2",
      "tree": "49408b17a42628b7a0fbc1d5bf163bb716e73545",
      "parents": [
        "a14a5ab58f9d783ec3a2a287320fab22e1764813"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Mon Mar 01 11:30:31 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Mar 01 19:14:36 2010 -0600"
      },
      "message": "xfs: fix locking for inode cache radix tree tag updates\n\nThe radix-tree code requires it\u0027s users to serialize tag updates\nagainst other updates to the tree.  While XFS protects tag updates\nagainst each other it does not serialize them against updates of the\ntree contents, which can lead to tag corruption.  Fix the inode\ncache to always take pag_ici_lock in exclusive mode when updating\nradix tree tags.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nReported-by: Patrick Schreurs \u003cpatrick@news-service.com\u003e\nTested-by: Patrick Schreurs \u003cpatrick@news-service.com\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "d7658d487f4c62983015ba6c99f02dedb3ea97c7",
      "tree": "e5f4af467180d4f5301a3b6ea82583ec974e6c9f",
      "parents": [
        "d7e84f413726876c0ec66bbf90770f69841f7663"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Wed Feb 17 19:36:13 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Mar 01 16:35:44 2010 -0600"
      },
      "message": "xfs: kill xfs_lrw.h\n\nMove the two declarations to better fitting headers now that\nxfs_lrw.c is gone.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Dave Chinner \u003cdavid@fromorbit.com\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "f7008d0aeba21396b3422df135b692ae701bd0c8",
      "tree": "6c51cbd3f7377f0394551988ce3b646fe2b31133",
      "parents": [
        "024910cbac323ab2e5ad6d7fa7958799b04b9728"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Mon Feb 15 22:02:19 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Mar 01 16:35:17 2010 -0600"
      },
      "message": "xfs: fix xfs_fsblock_t tracing\n\nUsing a static buffer in xfs_fmtfsblock means we can corrupt traces if\nmultiple CPUs hit this code path at the same.  Just remove xfs_fmtfsblock\nfor now and print the block number purely numerical.  If we want the\nNULLFSBLOCK and NULLSTARTBLOCK formatting back the best way would be\na decoding plugin in the trace-cmd userspace command.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Dave Chinner \u003cdavid@fromorbit.com\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "024910cbac323ab2e5ad6d7fa7958799b04b9728",
      "tree": "6902b06ec9307930e17964192f9e8bfdb750d3bd",
      "parents": [
        "77d7a0c2eeb285c9069e15396703d0cb9690ac50"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Wed Feb 17 19:34:57 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Mar 01 16:35:10 2010 -0600"
      },
      "message": "xfs: fix inode pincount check in fsync\n\nWe need to hold the ilock to check the inode pincount safely.  While\nwe\u0027re at it also remove the check for ip-\u003ei_itemp-\u003eili_last_lsn, a\npinned inode always has it set.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Dave Chinner \u003cdavid@fromorbit.com\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "77d7a0c2eeb285c9069e15396703d0cb9690ac50",
      "tree": "22de501446dd5ba08581b04616408f90449f7211",
      "parents": [
        "66d834ea603d61bd90fedad90300ca91c5bba0a3"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Wed Feb 17 05:36:29 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Mar 01 16:34:52 2010 -0600"
      },
      "message": "xfs: Non-blocking inode locking in IO completion\n\nThe introduction of barriers to loop devices has created a new IO\norder completion dependency that XFS does not handle. The loop\ndevice implements barriers using fsync and so turns a log IO in the\nXFS filesystem on the loop device into a data IO in the backing\nfilesystem. That is, the completion of log IOs in the loop\nfilesystem are now dependent on completion of data IO in the backing\nfilesystem.\n\nThis can cause deadlocks when a flush daemon issues a log force with\nan inode locked because the IO completion of IO on the inode is\nblocked by the inode lock. This in turn prevents further data IO\ncompletion from occuring on all XFS filesystems on that CPU (due to\nthe shared nature of the completion queues). This then prevents the\nlog IO from completing because the log is waiting for data IO\ncompletion as well.\n\nThe fix for this new completion order dependency issue is to make\nthe IO completion inode locking non-blocking. If the inode lock\ncan\u0027t be grabbed, simply requeue the IO completion back to the work\nqueue so that it can be processed later. This prevents the\ncompletion queue from being blocked and allows data IO completion on\nother inodes to proceed, hence avoiding completion order dependent\ndeadlocks.\n\nSigned-off-by: Dave Chinner \u003cdavid@fromorbit.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "66d834ea603d61bd90fedad90300ca91c5bba0a3",
      "tree": "f73072b9d87bd71a0739f07e4d0e26f10c5d925a",
      "parents": [
        "fd3200bef7d66ed3924f72c79a465fb7ff85478a"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Mon Feb 15 09:44:49 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Mar 01 16:34:45 2010 -0600"
      },
      "message": "xfs: implement optimized fdatasync\n\nAllow us to track the difference between timestamp and size updates\nby using mark_inode_dirty from the I/O completion code, and checking\nthe VFS inode flags in xfs_file_fsync.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Dave Chinner \u003cdavid@fromorbit.com\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "fd3200bef7d66ed3924f72c79a465fb7ff85478a",
      "tree": "f10c210269fc59854dd8f8b247b63454d772a574",
      "parents": [
        "00258e36b2d33b1b5cef7b489e06c5e0a9df58b5"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Mon Feb 15 09:44:48 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Mar 01 16:34:38 2010 -0600"
      },
      "message": "xfs: remove wrapper for the fsync file operation\n\nCurrently the fsync file operation is divided into a low-level\nroutine doing all the work and one that implements the Linux file\noperation and does minimal argument wrapping.  This is a leftover\nfrom the days of the vnode operations layer and can be removed to\nsimplify the code a bit, as well as preparing for the implementation\nof an optimized fdatasync which needs to look at the Linux inode\nstate.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "00258e36b2d33b1b5cef7b489e06c5e0a9df58b5",
      "tree": "0c5908b2bb005c52582cffe8bbc5c75c77659db4",
      "parents": [
        "dda35b8f84d209784041bbad47f9e195a08a7527"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Mon Feb 15 09:44:47 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Mar 01 16:34:29 2010 -0600"
      },
      "message": "xfs: remove wrappers for read/write file operations\n\nCurrently the aio_read, aio_write, splice_read and splice_write file\noperations are divided into a low-level routine doing all the work\nand one that implements the Linux file operations and does minimal\nargument wrapping.  This is a leftover from the days of the vnode\noperations layer and can be removed to simplify the code a lot.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Dave Chinner \u003cdavid@fromorbit.com\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "dda35b8f84d209784041bbad47f9e195a08a7527",
      "tree": "d132d40c3f0646e74ab29ffd45f771f8b87a5883",
      "parents": [
        "b262e5dfd9ddd2f6d0ef3fa53eb88690f22134a5"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Mon Feb 15 09:44:46 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Mar 01 16:34:18 2010 -0600"
      },
      "message": "xfs: merge xfs_lrw.c into xfs_file.c\n\nCurrently the code to implement the file operations is split over\ntwo small files.  Merge the content of xfs_lrw.c into xfs_file.c to\nhave it in one place.  Note that I haven\u0027t done various cleanups\nthat are possible after this yet, they will follow in the next\npatch.  Also the function xfs_dev_is_read_only which was in\nxfs_lrw.c before really doesn\u0027t fit in here at all and was moved to\nxfs_mount.c.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Dave Chinner \u003cdavid@fromorbit.com\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "b262e5dfd9ddd2f6d0ef3fa53eb88690f22134a5",
      "tree": "5e698eb189760ca5068d062d2004e5e3b4cf3e86",
      "parents": [
        "a9cc799eca0c798ab5dd8648564fc2025bdd9bd2"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Sun Feb 14 22:01:45 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Mar 01 16:34:11 2010 -0600"
      },
      "message": "xfs: fix dquota trace format\n\nThe be32_to_cpu in the TP_printk output breaks automatic parsing of\nthe trace format by the trace-cmd tools, so we have to move it into\nthe TP_assign block.  While we\u0027re at it also fix the format for the\nquota limits to more regular and easier parseable.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Dave Chinner \u003cdavid@fromorbit.com\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "a9cc799eca0c798ab5dd8648564fc2025bdd9bd2",
      "tree": "8776d8ba707dd7e87fd282335ef3ed66ba9973b4",
      "parents": [
        "398007f863a4af2b4a5a07219c5a617f1a098115"
      ],
      "author": {
        "name": "Eric Sandeen",
        "email": "sandeen@sandeen.net",
        "time": "Wed Feb 03 17:50:13 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Mar 01 16:33:41 2010 -0600"
      },
      "message": "xfs: increase readdir buffer size\n\nWhile doing some testing of readdir perf a while back,\nI noticed that the buffer size we\u0027re using internally is\nsmaller than what glibc gives us by default.  Upping this\nsize helped a bit, and seems safe.\n\nglibc\u0027s __alloc_dir() does:\n\n  const size_t default_allocation \u003d (4 * BUFSIZ \u003c sizeof (struct dirent64)\n                                     ? sizeof (struct dirent64) : 4 * BUFSIZ);\n  const size_t small_allocation \u003d (BUFSIZ \u003c sizeof (struct dirent64)\n                                   ? sizeof (struct dirent64) : BUFSIZ);\n  size_t allocation \u003d default_allocation;\n#ifdef _STATBUF_ST_BLKSIZE\n  if (statp !\u003d NULL \u0026\u0026 default_allocation \u003c statp-\u003est_blksize)\n    allocation \u003d statp-\u003est_blksize;\n#endif\n\nand\n\n#define _G_BUFSIZ 8192\n#define _IO_BUFSIZ _G_BUFSIZ\n# define BUFSIZ _IO_BUFSIZ\n\nso the default buffer is 4 * 8192 \u003d 32768\n(except in the unlikely case of blocks \u003e 32k....)\n\nSigned-off-by: Eric Sandeen \u003csandeen@sandeen.net\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "b305956abc3c50c52598bbf39b7a5f4850058ba8",
      "tree": "9046d97af63236dba36bc3be139c7e0a92e09d41",
      "parents": [
        "41630959ed5ce694ec2e8c0f3c69743e011394c8",
        "398007f863a4af2b4a5a07219c5a617f1a098115"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Feb 26 17:18:52 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Feb 26 17:18:52 2010 -0800"
      },
      "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: (52 commits)\n  fs/xfs: Correct NULL test\n  xfs: optimize log flushing in xfs_fsync\n  xfs: only clear the suid bit once in xfs_write\n  xfs: kill xfs_bawrite\n  xfs: log changed inodes instead of writing them synchronously\n  xfs: remove invalid barrier optimization from xfs_fsync\n  xfs: kill the unused XFS_QMOPT_* flush flags V2\n  xfs: Use delay write promotion for dquot flushing\n  xfs: Sort delayed write buffers before dispatch\n  xfs: Don\u0027t issue buffer IO direct from AIL push V2\n  xfs: Use delayed write for inodes rather than async V2\n  xfs: Make inode reclaim states explicit\n  xfs: more reserved blocks fixups\n  xfs: turn off sign warnings\n  xfs: don\u0027t hold onto reserved blocks on remount,ro\n  xfs: quota limit statvfs available blocks\n  xfs: replace KM_LARGE with explicit vmalloc use\n  xfs: cleanup up xfs_log_force calling conventions\n  xfs: kill XLOG_VEC_SET_TYPE\n  xfs: remove duplicate buffer flags\n  ...\n"
    },
    {
      "commit": "f24407d2bde27a4eb75ce5e52069bf4f1ba0e8a5",
      "tree": "6ad6dbc0b3d394435615b5e53b7d2ab3bde4c354",
      "parents": [
        "654451748b779b28077d9058442d0f354251870d",
        "73c77e2ccc14413c232c3e0b3aa43a0c4b72ec70"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Feb 26 17:05:10 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Feb 26 17:05:10 2010 -0800"
      },
      "message": "Merge git://git.kernel.org/pub/scm/linux/kernel/git/jejb/xfs-vipt\n\n* git://git.kernel.org/pub/scm/linux/kernel/git/jejb/xfs-vipt:\n  xfs: fix xfs to work with Virtually Indexed architectures\n  sh: add mm API for DMA to vmalloc/vmap areas\n  arm: add mm API for DMA to vmalloc/vmap areas\n  parisc: add mm API for DMA to vmalloc/vmap areas\n  mm: add coherence API for DMA to vmalloc/vmap areas\n"
    },
    {
      "commit": "978ebd97d1426d5708d3f353179ab81f191a7eeb",
      "tree": "6456e766099798df58f315f989bbb075b14a9aec",
      "parents": [
        "f501912a35c02eadc55ca9396ece55fe36f785d0"
      ],
      "author": {
        "name": "Ben Myers",
        "email": "bpm@sgi.com",
        "time": "Wed Feb 17 14:05:16 2010 -0600"
      },
      "committer": {
        "name": "J. Bruce Fields",
        "email": "bfields@citi.umich.edu",
        "time": "Sat Feb 20 13:14:50 2010 -0800"
      },
      "message": "xfs_export_operations.commit_metadata\n\nThis is the commit_metadata export operation for XFS.\n\n- Takes one inode to be committed.\n\n- Forces the log up to the lsn of the inode.\n\n- Doesn\u0027t force the log if the inode doesn\u0027t have a pincount.\n\nSigned-off-by: Ben Myers \u003cbpm@sgi.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Dave Chinner \u003cdavid@fromorbit.com\u003e\n[bfields@citi.umich.edu: trivial whitespace fix]\nSigned-off-by: J. Bruce Fields \u003cbfields@citi.umich.edu\u003e\n"
    },
    {
      "commit": "87185517de81101da5afbc82cefdeed6eeaa38fb",
      "tree": "29cb781d74d5e81d941e1a913222de90f6266477",
      "parents": [
        "5322892d867e186c6b4c5fff5c99ea4863696a60"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Wed Feb 03 19:43:31 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Fri Feb 12 13:43:57 2010 -0600"
      },
      "message": "xfs: only clear the suid bit once in xfs_write\n\nfile_remove_suid already calls into -\u003esetattr to clear the suid and\nsgid bits if needed, no need to start a second transaction to do it\nourselves.\n\nNote that xfs_write_clear_setuid issues a sync transaction while the\npath through -\u003esetattr doesn\u0027t, but that is consistant with the\nother filesystems.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Alex Elder \u003caelder@sgi.com\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "73c77e2ccc14413c232c3e0b3aa43a0c4b72ec70",
      "tree": "31ff85de9d06c07d1e06114274239c75560ff15c",
      "parents": [
        "c9334f6067dbe0380141fc75b122e0a533878838"
      ],
      "author": {
        "name": "James Bottomley",
        "email": "James.Bottomley@suse.de",
        "time": "Mon Jan 25 11:42:24 2010 -0600"
      },
      "committer": {
        "name": "James Bottomley",
        "email": "James.Bottomley@HansenPartnership.com",
        "time": "Fri Feb 05 12:32:35 2010 -0600"
      },
      "message": "xfs: fix xfs to work with Virtually Indexed architectures\n\nxfs_buf.c includes what is essentially a hand rolled version of\nblk_rq_map_kern().  In order to work properly with the vmalloc buffers\nthat xfs uses, this hand rolled routine must also implement the flushing\nAPI for vmap/vmalloc areas.\n\n[style updates from hch@lst.de]\nAcked-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: James Bottomley \u003cJames.Bottomley@suse.de\u003e\n"
    },
    {
      "commit": "5322892d867e186c6b4c5fff5c99ea4863696a60",
      "tree": "2d4168ac5a62d0d27e5bcfef021b56a20aa875a7",
      "parents": [
        "07fec73625dc0db6f9aed68019918208a2ca53f5"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Thu Feb 04 10:09:14 2010 +1100"
      },
      "committer": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Thu Feb 04 10:09:14 2010 +1100"
      },
      "message": "xfs: kill xfs_bawrite\n\nThere are no more users of this function left in the XFS code\nnow that we\u0027ve switched everything to delayed write flushing.\nRemove it.\n\nSigned-off-by: Dave Chinner \u003cdavid@fromorbit.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "07fec73625dc0db6f9aed68019918208a2ca53f5",
      "tree": "04f4ad3f829c3d64d6b2a3c0bddf11a4374eb93d",
      "parents": [
        "e8b217e7530c6a073ac69f1c85b922d93fdf5647"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Tue Feb 09 11:43:49 2010 +1100"
      },
      "committer": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Tue Feb 09 11:43:49 2010 +1100"
      },
      "message": "xfs: log changed inodes instead of writing them synchronously\n\nWhen an inode has already be flushed delayed write,\nxfs_inode_clean() returns true and hence xfs_fs_write_inode() can\nreturn on a synchronous inode write without having written the\ninode. Currently these sycnhronous writes only come sync(1),\nunmount, a sycnhronous NFS export and cachefiles so should be\nrelatively rare and out of common performance paths.\n\nRealistically, a synchronous inode write is not necessary here; we\ncan avoid writing the inode by logging any non-transactional changes\nthat are pending.  This needs to be done with synchronous\ntransactions, but it avoids seeking between the log and inode\nclusters as we do now. We don\u0027t force the log if the inode is\npinned, though, so this differs from the fsync case.  For normal\nsys_sync and unmount behaviour this is fine because we do a\nsynchronous log force in xfs_sync_data which is called from the\n-\u003esync_fs code.\n\nIt does however break the NFS synchronous export guarantees for now,\nbut work is under way to fix this at a higher level or for the\nhigher level to provide an additional flag in the writeback control\nto tell us that a log force is needed.\n\nPortions of this patch are based on work from Dave Chinner.\n\nSigned-off-by: Christoph Hellwig \u003chch@infradead.org\u003e\nReviewed-by: Dave Chinner \u003cdavid@fromorbit.com\u003e\nReviewed-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "089716aa1480b7197bcd678b8477774c379a2768",
      "tree": "63d38d2a210dc103ac106ebf88eecf94005c31b2",
      "parents": [
        "d808f617ad00a413585b806de340feda5ad9a2da"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Tue Jan 26 15:13:25 2010 +1100"
      },
      "committer": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Tue Jan 26 15:13:25 2010 +1100"
      },
      "message": "xfs: Sort delayed write buffers before dispatch\n\nCurrently when the xfsbufd writes delayed write buffers, it pushes\nthem to disk in the order they come off the delayed write list. If\nthere are lots of buffers ѕpread widely over the disk, this results\nin overwhelming the elevator sort queues in the block layer and we\nend up losing the posibility of merging adjacent buffers to minimise\nthe number of IOs.\n\nUse the new generic list_sort function to sort the delwri dispatch\nqueue before issue to ensure that the buffers are pushed in the most\nfriendly order possible to the lower layers.\n\nSigned-off-by: Dave Chinner \u003cdavid@fromorbit.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "d808f617ad00a413585b806de340feda5ad9a2da",
      "tree": "ed03d4d019a9d8b566ffd454e112e9fbce70bad8",
      "parents": [
        "c854363e80b49dd04a4de18ebc379eb8c8806674"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Tue Feb 02 10:13:42 2010 +1100"
      },
      "committer": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Tue Feb 02 10:13:42 2010 +1100"
      },
      "message": "xfs: Don\u0027t issue buffer IO direct from AIL push V2\n\nAll buffers logged into the AIL are marked as delayed write.\nWhen the AIL needs to push the buffer out, it issues an async write of the\nbuffer. This means that IO patterns are dependent on the order of\nbuffers in the AIL.\n\nInstead of flushing the buffer, promote the buffer in the delayed\nwrite list so that the next time the xfsbufd is run the buffer will\nbe flushed by the xfsbufd. Return the state to the xfsaild that the\nbuffer was promoted so that the xfsaild knows that it needs to cause\nthe xfsbufd to run to flush the buffers that were promoted.\n\nUsing the xfsbufd for issuing the IO allows us to dispatch all\nbuffer IO from the one queue. This means that we can make much more\nenlightened decisions on what order to flush buffers to disk as\nwe don\u0027t have multiple places issuing IO. Optimisations to xfsbufd\nwill be in a future patch.\n\nVersion 2\n- kill XFS_ITEM_FLUSHING as it is now unused.\n\nSigned-off-by: Dave Chinner \u003cdavid@fromorbit.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "c854363e80b49dd04a4de18ebc379eb8c8806674",
      "tree": "8c8d0dec26d961631a3cd8b6c402b5d1444336e5",
      "parents": [
        "777df5afdb26c71634edd60582be620ff94e87a0"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Sat Feb 06 12:39:36 2010 +1100"
      },
      "committer": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Sat Feb 06 12:39:36 2010 +1100"
      },
      "message": "xfs: Use delayed write for inodes rather than async V2\n\nWe currently do background inode flush asynchronously, resulting in\ninodes being written in whatever order the background writeback\nissues them. Not only that, there are also blocking and non-blocking\nasynchronous inode flushes, depending on where the flush comes from.\n\nThis patch completely removes asynchronous inode writeback. It\nremoves all the strange writeback modes and replaces them with\neither a synchronous flush or a non-blocking delayed write flush.\nThat is, inode flushes will only issue IO directly if they are\nsynchronous, and background flushing may do nothing if the operation\nwould block (e.g. on a pinned inode or buffer lock).\n\nDelayed write flushes will now result in the inode buffer sitting in\nthe delwri queue of the buffer cache to be flushed by either an AIL\npush or by the xfsbufd timing out the buffer. This will allow\naccumulation of dirty inode buffers in memory and allow optimisation\nof inode cluster writeback at the xfsbufd level where we have much\ngreater queue depths than the block layer elevators. We will also\nget adjacent inode cluster buffer IO merging for free when a later\npatch in the series allows sorting of the delayed write buffers\nbefore dispatch.\n\nThis effectively means that any inode that is written back by\nbackground writeback will be seen as flush locked during AIL\npushing, and will result in the buffers being pushed from there.\nThis writeback path is currently non-optimal, but the next patch\nin the series will fix that problem.\n\nA side effect of this delayed write mechanism is that background\ninode reclaim will no longer directly flush inodes, nor can it wait\non the flush lock. The result is that inode reclaim must leave the\ninode in the reclaimable state until it is clean. Hence attempts to\nreclaim a dirty inode in the background will simply skip the inode\nuntil it is clean and this allows other mechanisms (i.e. xfsbufd) to\ndo more optimal writeback of the dirty buffers. As a result, the\ninode reclaim code has been rewritten so that it no longer relies on\nthe ambiguous return values of xfs_iflush() to determine whether it\nis safe to reclaim an inode.\n\nPortions of this patch are derived from patches by Christoph\nHellwig.\n\nVersion 2:\n- cleanup reclaim code as suggested by Christoph\n- log background reclaim inode flush errors\n- just pass sync flags to xfs_iflush\n\nSigned-off-by: Dave Chinner \u003cdavid@fromorbit.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "777df5afdb26c71634edd60582be620ff94e87a0",
      "tree": "26ed86f1ec114250230e4e090be18980c94ce73f",
      "parents": [
        "d5db0f97fbbeff11c88dec1aaf1536a975afbaeb"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Sat Feb 06 12:37:26 2010 +1100"
      },
      "committer": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Sat Feb 06 12:37:26 2010 +1100"
      },
      "message": "xfs: Make inode reclaim states explicit\n\nA.K.A.: don\u0027t rely on xfs_iflush() return value in reclaim\n\nWe have gradually been moving checks out of the reclaim code because\nthey are duplicated in xfs_iflush(). We\u0027ve had a history of problems\nin this area, and many of them stem from the overloading of the\nreturn values from xfs_iflush() and interaction with inode flush\nlocking to determine if the inode is safe to reclaim.\n\nWith the desire to move to delayed write flushing of inodes and\nnon-blocking inode tree reclaim walks, the overloading of the\nreturn value of xfs_iflush makes it very difficult to determine\nthe correct thing to do next.\n\nThis patch explicitly re-adds the checks to the inode reclaim code,\nremoving the reliance on the return value of xfs_iflush() to\ndetermine what to do next. It also means that we can clearly\ndocument all the inode states that reclaim must handle and hence\nwe can easily see that we handled all the necessary cases.\n\nThis also removes the need for the xfs_inode_clean() check in\nxfs_iflush() as all callers now check this first (safely).\n\nSigned-off-by: Dave Chinner \u003cdavid@fromorbit.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "d5db0f97fbbeff11c88dec1aaf1536a975afbaeb",
      "tree": "3e81db2cb8c5004f3c30ccaa35e54fbf1549897f",
      "parents": [
        "388f1f0c346b533b06d8bc792f7204ebc3e4b7da"
      ],
      "author": {
        "name": "Eric Sandeen",
        "email": "sandeen@sandeen.net",
        "time": "Fri Feb 05 22:59:53 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Feb 08 17:41:48 2010 -0600"
      },
      "message": "xfs: more reserved blocks fixups\n\nThis mangles the reserved blocks counts a little more.\n\n1) add a helper function for the default reserved count\n2) add helper functions to save/restore counts on ro/rw\n3) save/restore reserved blocks on freeze/thaw\n4) disallow changing reserved count while readonly\n\nV2: changed field name to match Dave\u0027s changes\n\nSigned-off-by: Eric Sandeen \u003csandeen@sandeen.net\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "cbe132a8bdcff0f9afd9060948fb50597c7400b8",
      "tree": "2bf70f1520b6cc60fb3097763dde24600466369d",
      "parents": [
        "9b00f30762fe9f914eb6e03057a616ed63a4e8ca"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Tue Jan 26 15:08:49 2010 +1100"
      },
      "committer": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Tue Jan 26 15:08:49 2010 +1100"
      },
      "message": "xfs: don\u0027t hold onto reserved blocks on remount,ro\n\nIf we hold onto reserved blocks when doing a remount,ro we end\nup writing the blocks used count to disk that includes the reserved\nblocks. Reserved blocks are not actually used, so this results in\nthe values in the superblock being incorrect.\n\nHence if we run xfs_check or xfs_repair -n while the filesystem is\nmounted remount,ro we end up with an inconsistent filesystem being\nreported. Also, running xfs_copy on the remount,ro filesystem will\nresult in an inconsistent image being generated.\n\nTo fix this, unreserve the blocks when doing the remount,ro, and\nreserved them again on remount,rw. This way a remount,ro filesystem\nwill appear consistent on disk to all utilities.\n\nSigned-off-by: Dave Chinner \u003cdavid@fromorbit.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "bdfb04301fa5fdd95f219539a9a5b9663b1e5fc2",
      "tree": "6d50b1c71d1f227cf1800ee0531a475266ef6da8",
      "parents": [
        "a14a348bff2f99471a28e5928eb6801224c053d8"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Wed Jan 20 21:55:30 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Thu Jan 21 13:44:56 2010 -0600"
      },
      "message": "xfs: replace KM_LARGE with explicit vmalloc use\n\nWe use the KM_LARGE flag to make kmem_alloc and friends use vmalloc\nif necessary.  As we only need this for a few boot/mount time\nallocations just switch to explicit vmalloc calls there.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "a14a348bff2f99471a28e5928eb6801224c053d8",
      "tree": "9a34d7e988cd78bc9b19369cbad3ad009b9a2bfd",
      "parents": [
        "4139b3b337cffd106744386c842b89dc86e31d4b"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Tue Jan 19 09:56:46 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Thu Jan 21 13:44:49 2010 -0600"
      },
      "message": "xfs: cleanup up xfs_log_force calling conventions\n\nRemove the XFS_LOG_FORCE argument which was always set, and the\nXFS_LOG_URGE define, which was never used.\n\nSplit xfs_log_force into a two helpers - xfs_log_force which forces\nthe whole log, and xfs_log_force_lsn which forces up to the\nspecified LSN.  The underlying implementations already were entirely\nseparate, as were the users.\n\nAlso re-indent the new _xfs_log_force/_xfs_log_force which\npreviously had a weird coding style.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "0cadda1c5f194f98a05d252ff4385d86d2ed0862",
      "tree": "a299a7a976f1478f9024f1d3aff9a2351a8397fe",
      "parents": [
        "a210c1aa7f6c90b729cc3a72d03e789b13cb6c47"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Tue Jan 19 09:56:44 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Thu Jan 21 13:44:36 2010 -0600"
      },
      "message": "xfs: remove duplicate buffer flags\n\nCurrently we define aliases for the buffer flags in various\nnamespaces, which only adds confusion.  Remove all but the XBF_\nflags to clean this up a bit.\n\nNote that we still abuse XFS_B_ASYNC/XBF_ASYNC for some non-buffer\nuses, but I\u0027ll clean that up later.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Dave Chinner \u003cdavid@fromorbit.com\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "a9273ca5c6814f393e18ed66645f817b2b71e9ad",
      "tree": "3714b7de8b233a31ea6995754f80349327738a88",
      "parents": [
        "b9c48649577dfc4a8c263c106d518effa24ea54b"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Wed Jan 20 10:47:48 2010 +1100"
      },
      "committer": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Wed Jan 20 10:47:48 2010 +1100"
      },
      "message": "xfs: convert attr to use unsigned names\n\nTo be consistent with the directory code, the attr code should use\nunsigned names. Convert the names from the vfs at the highest level\nto unsigned, and ænsure they are consistenly used as unsigned down\nto disk.\n\nSigned-off-by: Dave Chinner \u003cdavid@fromorbit.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "b9c48649577dfc4a8c263c106d518effa24ea54b",
      "tree": "deb48047076b5a97691c0b00ac65c6db96296515",
      "parents": [
        "a3380ae39fa321282c407ba5e1835e14b64853d9"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Wed Jan 20 10:47:39 2010 +1100"
      },
      "committer": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Wed Jan 20 10:47:39 2010 +1100"
      },
      "message": "xfs: xfs_buf_iomove() doesn\u0027t care about signedness\n\nxfs_buf_iomove() uses xfs_caddr_t as it\u0027s parameter types, but it doesn\u0027t\ncare about the signedness of the variables as it is just copying the\ndata. Change the prototype to use void * so that we don\u0027t get sign\nwarnings at call sites.\n\nSigned-off-by: Dave Chinner \u003cdavid@fromorbit.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "4e23471a3f3aba885ea70100db47ccacb5f069f6",
      "tree": "976d7943087e8f49fada9204b6914c84b3c25a31",
      "parents": [
        "64e0bc7d2a6609ad265757a600e2a0d93c8adb47"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Wed Jan 13 22:17:56 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Fri Jan 15 15:35:17 2010 -0600"
      },
      "message": "xfs: move more buffer helpers into xfs_buf.c\n\nMove xfsbdstrat and xfs_bdstrat_cb from xfs_lrw.c and xfs_bioerror\nand xfs_bioerror_relse from xfs_rw.c into xfs_buf.c.  This also\nmeans xfs_bioerror and xfs_bioerror_relse can be marked static now.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "64e0bc7d2a6609ad265757a600e2a0d93c8adb47",
      "tree": "15733d61868f4dbd59da833cd84614ff78ef1049",
      "parents": [
        "873ff5501d8cd1a21045d6c1da34f0c3876bc235"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Wed Jan 13 22:17:58 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Fri Jan 15 15:35:07 2010 -0600"
      },
      "message": "xfs: clean up xfs_bwrite\n\nFold XFS_bwrite into it\u0027s only caller, xfs_bwrite and move it into\nxfs_buf.c instead of leaving it as a fairly large inline function.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "873ff5501d8cd1a21045d6c1da34f0c3876bc235",
      "tree": "4bff470bffcb611d19d3fc5448d0dd7c24b8baf6",
      "parents": [
        "e57336ff7fc7520bec7b3a7741043bdebaf622ea"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Wed Jan 13 22:17:57 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Fri Jan 15 15:34:54 2010 -0600"
      },
      "message": "xfs: clean up log buffer writes\n\nDon\u0027t bother using XFS_bwrite as it doesn\u0027t provide much code for\nour use case.  Instead opencode it and fold xlog_bdstrat_cb into the\nnew xlog_bdstrat helper.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "b657fc82a3ca6d7ad16a59e81765f0fb0e86cdbb",
      "tree": "55c0fa936d1b9e192917340ba833f1d72504c0a7",
      "parents": [
        "0fa800fbd549736dfdc1d7761f87e33dc8cd973b"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Mon Jan 11 11:47:47 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Fri Jan 15 15:34:22 2010 -0600"
      },
      "message": "xfs: Kill filestreams cache flush\n\nThe filestreams cache flush is not needed in the sync code as it\ndoes not affect data writeback, and it is now not used by the growfs\ncode, either, so kill it.\n\nSigned-off-by: Dave Chinner \u003cdavid@fromorbit.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "0fa800fbd549736dfdc1d7761f87e33dc8cd973b",
      "tree": "3940f2f5bc4bb3bec888f7ef9ed8a8c875e02695",
      "parents": [
        "aed3bb90abaf0b42e8c8747e192f7bb97f445279"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Mon Jan 11 11:47:46 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Fri Jan 15 15:34:12 2010 -0600"
      },
      "message": "xfs: Add trace points for per-ag refcount debugging.\n\nUninline xfs_perag_{get,put} so that tracepoints can be inserted\ninto them to speed debugging of reference count problems.\n\nSigned-off-by: Dave Chinner \u003cdavid@fromorbit.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "5017e97d52628fb8ae56e434e86ac2e72ddaac2b",
      "tree": "bbad07b8fc75e9d309d0a4c450a886eaf7e687fd",
      "parents": [
        "c9c129714e71c890bed1bd5b61697a896c3c2d54"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Mon Jan 11 11:47:40 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Fri Jan 15 15:33:02 2010 -0600"
      },
      "message": "xfs: rename xfs_get_perag\n\nxfs_get_perag is really getting the perag that an inode belongs to\nbased on it\u0027s inode number. Convert the use of this function to just\nget the perag from a provided ag number.  Use this new function to\nobtain the per-ag structure when traversing the per AG inode trees\nfor sync and reclaim.\n\nSigned-off-by: Dave Chinner \u003cdavid@fromorbit.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "c9c129714e71c890bed1bd5b61697a896c3c2d54",
      "tree": "8eff8e5ba534feb20dae7b143ea42bf0b0c24725",
      "parents": [
        "453eac8a9aa417878a38bdfbccafd5f7ce4e8e4e"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Mon Jan 11 11:49:59 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Fri Jan 15 15:32:54 2010 -0600"
      },
      "message": "xfs: Don\u0027t wake xfsbufd when idle\n\nThe xfsbufd wakes every xfsbufd_centisecs (once per second by\ndefault) for each filesystem even when the filesystem is idle.  If\nthe xfsbufd has nothing to do, put it into a long term sleep and\nonly wake it up when there is work pending (i.e. dirty buffers to\nflush soon). This will make laptop power misers happy.\n\nSigned-off-by: Dave Chinner \u003cdavid@fromorbit.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "453eac8a9aa417878a38bdfbccafd5f7ce4e8e4e",
      "tree": "252e37d5b29693cc73fc1ce890c9b303d45e6efa",
      "parents": [
        "f0a7695380efa31cd281730917f7e907a724d5cb"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Mon Jan 11 11:49:58 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Fri Jan 15 15:32:46 2010 -0600"
      },
      "message": "xfs: Don\u0027t wake the aild once per second\n\nNow that the AIL push algorithm is traversal safe, we don\u0027t need a\nwatchdog function in the xfsaild to catch pushes that fail to make\nprogress. Remove the watchdog timeout and make pushes purely driven\nby demand. This will remove the once-per-second wakeup that is seen\nwhen the filesystem is idle and make laptop power misers happy.\n\nSigned-off-by: Dave Chinner \u003cdavid@fromorbit.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "5d77c0dc0c05c2c65aee16149fae06831a118730",
      "tree": "742ac29243b5cd00b4e3cf2a01b6aec5046912ae",
      "parents": [
        "6bded0f383fd7971b76ad6c194dda7d5b814b871"
      ],
      "author": {
        "name": "Eric Sandeen",
        "email": "sandeen@sandeen.net",
        "time": "Thu Nov 19 15:52:00 2009 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Fri Jan 15 15:31:38 2010 -0600"
      },
      "message": "xfs: make several more functions static\n\nJust minor housekeeping, a lot more functions can be trivially made\nstatic; others could if we reordered things a bit...\n\nSigned-off-by: Eric Sandeen \u003csandeen@sandeen.net\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "3a85cd96d3ab3c6dcf88b81fc6eaddb84e565a43",
      "tree": "9b1cfa8db498d7e76b1aa745254261010814f676",
      "parents": [
        "e09f98606dcc156de1146c209d45a0d6d5f51c3f"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Thu Jan 14 01:33:55 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Fri Jan 15 15:20:06 2010 -0600"
      },
      "message": "xfs: add tracing to xfs_swap_extents\n\nTo be able to diagnose whether the swap extents function is\ndetecting compatible inode data fork configurations for swapping\nextents, add tracing points to the code to allow us to see the\nformat of the inode forks before and after the swap.\n\nSigned-off-by: Dave Chinner \u003cdavid@fromorbit.com\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "57817c68229984818fea9e614d6f95249c3fb098",
      "tree": "1c3265ae92ccf51617763a568c4c76be3a596578",
      "parents": [
        "018027be90a6946e8cf3f9b17b5582384f7ed117"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Sun Jan 10 23:51:47 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Fri Jan 15 13:44:44 2010 -0600"
      },
      "message": "xfs: reclaim all inodes by background tree walks\n\nWe cannot do direct inode reclaim without taking the flush lock to\nensure that we do not reclaim an inode under IO. We check the inode\nis clean before doing direct reclaim, but this is not good enough\nbecause the inode flush code marks the inode clean once it has\ncopied the in-core dirty state to the backing buffer.\n\nIt is the flush lock that determines whether the inode is still\nunder IO, even though it is marked clean, and the inode is still\nrequired at IO completion so we can\u0027t reclaim it even though it is\nclean in core. Hence the requirement that we need to take the flush\nlock even on clean inodes because this guarantees that the inode\nwriteback IO has completed and it is safe to reclaim the inode.\n\nWith delayed write inode flushing, we coul dend up waiting a long\ntime on the flush lock even for a clean inode. The background\nreclaim already handles this efficiently, so avoid all the problems\nby killing the direct reclaim path altogether.\n\nSigned-off-by: Dave Chinner \u003cdavid@fromorbit.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "018027be90a6946e8cf3f9b17b5582384f7ed117",
      "tree": "a8816b9884e21eab9cb3342af9de9ddc28f9f0de",
      "parents": [
        "c8e20be020f234c8d492927a424a7d8bbefd5b5d"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Sun Jan 10 23:51:46 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Fri Jan 15 13:44:21 2010 -0600"
      },
      "message": "xfs: Avoid inodes in reclaim when flushing from inode cache\n\nThe reclaim code will handle flushing of dirty inodes before reclaim\noccurs, so avoid them when determining whether an inode is a\ncandidate for flushing to disk when walking the radix trees.  This\nis based on a test patch from Christoph Hellwig.\n\nSigned-off-by: Dave Chinner \u003cdavid@fromorbit.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "c8e20be020f234c8d492927a424a7d8bbefd5b5d",
      "tree": "ced84d52bf87d72d36a65e3ddca6b4fc4b7f819f",
      "parents": [
        "7284ce6c9f6153d1777df5f310c959724d1bd446"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Sun Jan 10 23:51:45 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Fri Jan 15 13:43:55 2010 -0600"
      },
      "message": "xfs: reclaim inodes under a write lock\n\nMake the inode tree reclaim walk exclusive to avoid races with\nconcurrent sync walkers and lookups. This is a version of a patch\nposted by Christoph Hellwig that avoids all the code duplication.\n\nSigned-off-by: Dave Chinner \u003cdavid@fromorbit.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "fd45e4784164d1017521086524e3442318c67370",
      "tree": "aaaf8f524d4bf094f6debadc6e580f81038f4915",
      "parents": [
        "44e08c45cc14e6190a424be8d450070c8e508fad"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Sat Jan 02 02:38:56 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Sun Jan 10 12:22:02 2010 -0600"
      },
      "message": "xfs: Ensure we force all busy extents in range to disk\n\nWhen we search for and find a busy extent during allocation we\nforce the log out to ensure the extent free transaction is on\ndisk before the allocation transaction. The current implementation\nhas a subtle bug in it--it does not handle multiple overlapping\nranges.\n\nThat is, if we free lots of little extents into a single\ncontiguous extent, then allocate the contiguous extent, the busy\nsearch code stops searching at the first extent it finds that\noverlaps the allocated range. It then uses the commit LSN of the\ntransaction to force the log out to.\n\nUnfortunately, the other busy ranges might have more recent\ncommit LSNs than the first busy extent that is found, and this\nresults in xfs_alloc_search_busy() returning before all the\nextent free transactions are on disk for the range being\nallocated. This can lead to potential metadata corruption or\nstale data exposure after a crash because log replay won\u0027t replay\nall the extent free transactions that cover the allocation range.\n\nModified-by: Alex Elder \u003caelder@sgi.com\u003e\n\n(Dropped the \"found\" argument from the xfs_alloc_busysearch trace\nevent.)\n\nSigned-off-by: Dave Chinner \u003cdavid@fromorbit.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "d6d59bada372bcf8bd36c3bbc71c485c29dd2a4b",
      "tree": "140a4625597ffac953ce1d0dbbfed7caa436e053",
      "parents": [
        "ea9a48881e093a41a79305fb1545ca0794b203dc"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Wed Dec 23 16:09:13 2009 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Sun Jan 10 12:21:58 2010 -0600"
      },
      "message": "xfs: fix timestamp handling in xfs_setattr\n\nWe currently have some rather odd code in xfs_setattr for\nupdating the a/c/mtime timestamps:\n\n - first we do a non-transaction update if all three are updated\n   together\n - second we implicitly update the ctime for various changes\n   instead of relying on the ATTR_CTIME flag\n - third we set the timestamps to the current time instead of the\n   arguments in the iattr structure in many cases.\n\nThis patch makes sure we update it in a consistent way:\n\n - always transactional\n - ctime is only updated if ATTR_CTIME is set or we do a size\n   update, which is a special case\n - always to the times passed in from the caller instead of the\n   current time\n\nThe only non-size caller of xfs_setattr that doesn\u0027t come from\nthe VFS is updated to set ATTR_CTIME and pass in a valid ctime\nvalue.\n\nReported-by: Eric Blake \u003cebb9@byu.net\u003e\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "ea9a48881e093a41a79305fb1545ca0794b203dc",
      "tree": "b17a7fec50d6a1552190235470a24be2078c95ca",
      "parents": [
        "3c8ad49b015eb115fbd6982f56d530f53cf57f84"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Mon Dec 21 14:03:03 2009 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Sun Jan 10 12:21:56 2010 -0600"
      },
      "message": "xfs: use DECLARE_EVENT_CLASS\n\nUsing DECLARE_EVENT_CLASS allows us to to use trace event code\ninstead of duplicating it in the binary.  This was not available\nbefore 2.6.33 so it had to be done as a separate step once the\nprerequisite was merged.\n\nThis only requires changes to xfs_trace.h and the results are\nrather impressive:\n\nhch@brick:~/work/linux-2.6/obj-kvm$ size fs/xfs/xfs.o*\ntext\t   data\t    bss\t    dec\t    hex\tfilename\n 607732\t  41884\t   3616\t 653232\t  9f7b0\tfs/xfs/xfs.o\n1026732\t  41884\t   3808\t1072424\t 105d28\tfs/xfs/xfs.o.old\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "a539bd8c86549b545b4ed27a0cfaf53fe649054d",
      "tree": "b31f3a00cc96147e3872534ba0d713f828f89f5b",
      "parents": [
        "74d2e4f8d79ae0c4b6ec027958d5b18058662eea"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Thu Dec 17 00:20:07 2009 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Fri Jan 08 13:32:29 2010 -0600"
      },
      "message": "xfs: kill some warnings on i386 builds\n\nRandy Dunlap Reported printk() format-related warnings reported\non i386 builds in his environment.  Dave Chinner provided this\npatch to eliminate them.\n\nSigned-off by: Dave Chinner \u003cdavid@fromorbit.com\u003e\nAcked-by: Randy Dunlap \u003crandy.dunlap@oracle.com\u003e\n\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "eaff8079d4f1016a12e34ab323737314f24127dd",
      "tree": "a3d9e00320c6195e55811d5247a521f99341a411",
      "parents": [
        "7a0ad10c367ab57c899d340372f37880cbe6ab52"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Thu Dec 17 14:25:01 2009 +0100"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Dec 17 11:03:25 2009 -0500"
      },
      "message": "kill I_LOCK\n\nAfter I_SYNC was split from I_LOCK the leftover is always used together with\nI_NEW and thus superflous.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "bea4c899f2b5fad80099aea979780ef19f9b1987",
      "tree": "65130f4bc91b92e72498fc58bf895d35f2ebf0f2",
      "parents": [
        "73efc4681cb5e3c8807daf106f001e7f0798d8a0",
        "3fc98b1ac036675b95f6e3fafd5ef147b97d4d30"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Dec 16 13:29:39 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Dec 16 13:29:39 2009 -0800"
      },
      "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:\n  XFS: Free buffer pages array unconditionally\n  xfs: kill xfs_bmbt_rec_32/64 types\n  xfs: improve metadata I/O merging in the elevator\n  xfs: check for not fully initialized inodes in xfs_ireclaim\n"
    },
    {
      "commit": "3fc98b1ac036675b95f6e3fafd5ef147b97d4d30",
      "tree": "1710b6e0140a12a6e20ef0494b11e42b9f0fcfc6",
      "parents": [
        "a5f9be58c2b87106100a6053d09b1f9f8d551c6e"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Mon Dec 14 23:11:57 2009 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Wed Dec 16 13:41:20 2009 -0600"
      },
      "message": "XFS: Free buffer pages array unconditionally\n\nThe code in xfs_free_buf() only attempts to free the b_pages array if the\nbuffer is a page cache backed or page allocated buffer. The extra log buffer\nthat is used when the log wraps uses pages that are allocated to a different\nlog buffer, but it still has a b_pages array allocated when those pages\nare associated to with the extra buffer in xfs_buf_associate_memory.\n\nHence we need to always attempt to free the b_pages array when tearing\ndown a buffer, not just on buffers that are explicitly marked as page bearing\nbuffers. This fixes a leak detected by the kernel memory leak code.\n\nSigned-off-by: Dave Chinner \u003cdavid@fromorbit.com\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "2ee1abad73a12df5521cd3f017f081f1f684a361",
      "tree": "e44a88b0ae7f01d339426d7a6d18bde017bb9cf1",
      "parents": [
        "b44b1126279b60597f96bbe77507b1650f88a969"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dgc@sgi.com",
        "time": "Tue Nov 24 18:03:15 2009 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Wed Dec 16 13:41:19 2009 -0600"
      },
      "message": "xfs: improve metadata I/O merging in the elevator\n\nChange all async metadata buffers to use [READ|WRITE]_META I/O types\nso that the I/O doesn\u0027t get issued immediately. This allows merging of\nadjacent metadata requests but still prioritises them over bulk data.\nThis shows a 10-15% improvement in sequential create speed of small\nfiles.\n\nDon\u0027t include the log buffers in this classification - leave them as\nsync types so they are issued immediately.\n\nSigned-off-by: Dave Chinner \u003cdgc@sgi.com\u003e\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "1e431f5ce78f3ae8254d725060288b78ff74f086",
      "tree": "a144fd7b6120ec61958c82023b25620a18aa3d6d",
      "parents": [
        "1c7c474c31aea6d5cb2fb35f31d9e9e91ae466b1"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Tue Nov 03 16:44:53 2009 +0100"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Dec 16 12:16:49 2009 -0500"
      },
      "message": "cleanup blockdev_direct_IO locking\n\nCurrently the locking in blockdev_direct_IO is a mess, we have three different\nlocking types and very confusing checks for some of them.  The most\ncomplicated one is DIO_OWN_LOCKING for reads, which happens to not actually be\nused.\n\nThis patch gets rid of the DIO_OWN_LOCKING - as mentioned above the read case\nis unused anyway, and the write side is almost identical to DIO_NO_LOCKING.\nThe difference is that DIO_NO_LOCKING always sets the create argument for\nthe get_blocks callback to zero, but we can easily move that to the actual\nget_blocks callbacks.  There are four users of the DIO_NO_LOCKING mode:\ngfs already ignores the create argument and thus is fine with the new\nversion, ocfs2 only errors out if create were ever set, and we can remove\nthis dead code now, the block device code only ever uses create for an\nerror message if we are fully beyond the device which can never happen,\nand last but not least XFS will need the new behavour for writes.\n\nNow we can replace the lock_type variable with a flags one, where no flag\nmeans the DIO_NO_LOCKING behaviour and DIO_LOCKING is kept as the first\nflag.  Separate out the check for not allowing to fill holes into a separate\nflag, although for now both flags always get set at the same time.\n\nAlso revamp the documentation of the locking scheme to actually make sense.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    }
  ],
  "next": "431547b3c4533b8c7fd150ab36980b9a3147797b"
}
