)]}'
{
  "log": [
    {
      "commit": "23d69b09b78c4876e134f104a3814c30747c53f1",
      "tree": "40744de4f4126c21027ce537264524095e0e7979",
      "parents": [
        "e744070fd4ff9d3114277e52d77afa21579adce2",
        "569ff2de2e1c8ac67c8df3a7367d46d0d9460a35"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jan 07 16:58:04 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jan 07 16:58:04 2011 -0800"
      },
      "message": "Merge branch \u0027for-2.6.38\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq\n\n* \u0027for-2.6.38\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq: (33 commits)\n  usb: don\u0027t use flush_scheduled_work()\n  speedtch: don\u0027t abuse struct delayed_work\n  media/video: don\u0027t use flush_scheduled_work()\n  media/video: explicitly flush request_module work\n  ioc4: use static work_struct for ioc4_load_modules()\n  init: don\u0027t call flush_scheduled_work() from do_initcalls()\n  s390: don\u0027t use flush_scheduled_work()\n  rtc: don\u0027t use flush_scheduled_work()\n  mmc: update workqueue usages\n  mfd: update workqueue usages\n  dvb: don\u0027t use flush_scheduled_work()\n  leds-wm8350: don\u0027t use flush_scheduled_work()\n  mISDN: don\u0027t use flush_scheduled_work()\n  macintosh/ams: don\u0027t use flush_scheduled_work()\n  vmwgfx: don\u0027t use flush_scheduled_work()\n  tpm: don\u0027t use flush_scheduled_work()\n  sonypi: don\u0027t use flush_scheduled_work()\n  hvsi: don\u0027t use flush_scheduled_work()\n  xen: don\u0027t use flush_scheduled_work()\n  gdrom: don\u0027t use flush_scheduled_work()\n  ...\n\nFixed up trivial conflict in drivers/media/video/bt8xx/bttv-input.c\nas per Tejun.\n"
    },
    {
      "commit": "880566e17c4fce0d998d92610d32fcb9506aa6dd",
      "tree": "74b8adcfea568bd6c99dd73412aedcff3a0e496d",
      "parents": [
        "258a5aa8dfc6294f5f7df892023ee4d3e57c9841"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:02 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:30 2011 +1100"
      },
      "message": "xfs: provide simple rcu-walk ACL implementation\n\nThis simple implementation just checks for no ACLs on the inode, and\nif so, then the rcu-walk may proceed, otherwise fail it.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "b74c79e99389cd79b31fcc08f82c24e492e63c7e",
      "tree": "763c6b412517306670bc625e90035f2d16bb739f",
      "parents": [
        "34286d6662308d82aed891852d04c7c3a2649b16"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:49:58 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:29 2011 +1100"
      },
      "message": "fs: provide rcu-walk aware permission i_ops\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "fa0d7e3de6d6fc5004ad9dea0dd6b286af8f03e9",
      "tree": "203e0f73883e4c26b5597e36042386a1237dab35",
      "parents": [
        "77812a1ef139d84270d27faacc0630c887411013"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:49:49 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:26 2011 +1100"
      },
      "message": "fs: icache RCU free inodes\n\nRCU free the struct inode. This will allow:\n\n- Subsequent store-free path walking patch. The inode must be consulted for\n  permissions when walking, so an RCU inode reference is a must.\n- sb_inode_list_lock to be moved inside i_lock because sb list walkers who want\n  to take i_lock no longer need to take sb_inode_list_lock to walk the list in\n  the first place. This will simplify and optimize locking.\n- Could remove some nested trylock loops in dcache code\n- Could potentially simplify things a bit in VM land. Do not need to take the\n  page lock to follow page-\u003emapping.\n\nThe downsides of this is the performance cost of using RCU. In a simple\ncreat/unlink microbenchmark, performance drops by about 10% due to inability to\nreuse cache-hot slab objects. As iterations increase and RCU freeing starts\nkicking over, this increases to about 20%.\n\nIn cases where inode lifetimes are longer (ie. many inodes may be allocated\nduring the average life span of a single inode), a lot of this cache reuse is\nnot applicable, so the regression caused by this patch is smaller.\n\nThe cache-hot regression could largely be avoided by using SLAB_DESTROY_BY_RCU,\nhowever this adds some complexity to list walking and store-free path walking,\nso I prefer to implement this at a later date, if it is shown to be a win in\nreal situations. I haven\u0027t found a regression in any non-micro benchmark so I\ndoubt it will be a problem.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "afe2c511fb2d75f1515081ff1be15bd79cfe722d",
      "tree": "28aa74e9e0c654a95bf3306101e10ac1d16919d1",
      "parents": [
        "2d64672ed38721b7a3815009d79bfb90a1f34a17"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Dec 14 16:21:17 2010 +0100"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Dec 15 10:56:11 2010 +0100"
      },
      "message": "workqueue: convert cancel_rearming_delayed_work[queue]() users to cancel_delayed_work_sync()\n\ncancel_rearming_delayed_work[queue]() has been superceded by\ncancel_delayed_work_sync() quite some time ago.  Convert all the\nin-kernel users.  The conversions are completely equivalent and\ntrivial.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: \"David S. Miller\" \u003cdavem@davemloft.net\u003e\nAcked-by: Greg Kroah-Hartman \u003cgregkh@suse.de\u003e\nAcked-by: Evgeniy Polyakov \u003czbr@ioremap.net\u003e\nCc: Jeff Garzik \u003cjgarzik@pobox.com\u003e\nCc: Benjamin Herrenschmidt \u003cbenh@kernel.crashing.org\u003e\nCc: Mauro Carvalho Chehab \u003cmchehab@infradead.org\u003e\nCc: netdev@vger.kernel.org\nCc: Anton Vorontsov \u003ccbou@mail.ru\u003e\nCc: David Woodhouse \u003cdwmw2@infradead.org\u003e\nCc: \"J. Bruce Fields\" \u003cbfields@fieldses.org\u003e\nCc: Neil Brown \u003cneilb@suse.de\u003e\nCc: Alex Elder \u003caelder@sgi.com\u003e\nCc: xfs-masters@oss.sgi.com\nCc: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nCc: Pekka Enberg \u003cpenberg@cs.helsinki.fi\u003e\nCc: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nCc: netfilter-devel@vger.kernel.org\nCc: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\nCc: linux-nfs@vger.kernel.org\n"
    },
    {
      "commit": "05340d4ab2ec2b6b4962c1c41c6ea8fb550f947b",
      "tree": "9368b1f2e39ef219898bf32a7a2673d85720740d",
      "parents": [
        "c76febef574fd86566bbdf1a73a547a439115c25"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Tue Dec 07 10:16:41 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Thu Dec 09 17:07:02 2010 -0600"
      },
      "message": "xfs: log timestamp changes to the source inode in rename\n\nNow that we don\u0027t mark VFS inodes dirty anymore for internal\ntimestamp changes, but rely on the transaction subsystem to push\nthem out, we need to explicitly log the source inode in rename after\nupdating it\u0027s timestamps to make sure the changes actually get\nforced out by sync/fsync or an AIL push.\n\nWe already account for the fourth inode in the log reservation, as a\nrename of directories needs to update the nlink field, so just\nadding the xfs_trans_log_inode call is enough.\n\nThis fixes the xfsqa 065 regression introduced by:\n\n\t\"xfs: don\u0027t use vfs writeback for pure metadata modifications\"\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "c76febef574fd86566bbdf1a73a547a439115c25",
      "tree": "bdfb67e30f7c55f54413c2bee79049bbbefff805",
      "parents": [
        "de25c1818c44f580ff556cb9e0f7a1c687ed870b"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Tue Nov 30 15:15:31 2010 +1100"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Wed Dec 01 07:40:20 2010 -0600"
      },
      "message": "xfs: only run xfs_error_test if error injection is active\n\nRecent tests writing lots of small files showed the flusher thread\nbeing CPU bound and taking a long time to do allocations on a debug\nkernel. perf showed this as the prime reason:\n\n             samples  pcnt function                    DSO\n             _______ _____ ___________________________ _________________\n\n           224648.00 36.8% xfs_error_test              [kernel.kallsyms]\n            86045.00 14.1% xfs_btree_check_sblock      [kernel.kallsyms]\n            39778.00  6.5% prandom32                   [kernel.kallsyms]\n            37436.00  6.1% xfs_btree_increment         [kernel.kallsyms]\n            29278.00  4.8% xfs_btree_get_rec           [kernel.kallsyms]\n            27717.00  4.5% random32                    [kernel.kallsyms]\n\nWalking btree blocks during allocation checking them requires each\nblock (a cache hit, so no I/O) call xfs_error_test(), which then\ndoes a random32() call as the first operation.  IOWs, ~50% of the\nCPU is being consumed just testing whether we need to inject an\nerror, even though error injection is not active.\n\nKill this overhead when error injection is not active by adding a\nglobal counter of active error traps and only calling into\nxfs_error_test when fault injection is active.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "de25c1818c44f580ff556cb9e0f7a1c687ed870b",
      "tree": "a8fafd9317cf4841b6004119f6e84ddbece73af3",
      "parents": [
        "309c848002052edbec650075a1eb098b17c17f35"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Tue Nov 30 15:15:46 2010 +1100"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Wed Dec 01 07:40:20 2010 -0600"
      },
      "message": "xfs: avoid moving stale inodes in the AIL\n\nWhen an inode has been marked stale because the cluster is being\nfreed, we don\u0027t want to (re-)insert this inode into the AIL. There\nis a race condition where the cluster buffer may be unpinned before\nthe inode is inserted into the AIL during transaction committed\nprocessing. If the buffer is unpinned before the inode item has been\ncommitted and inserted, then it is possible for the buffer to be\nreleased and hence processthe stale inode callbacks before the inode\nis inserted into the AIL.\n\nIn this case, we then insert a clean, stale inode into the AIL which\nwill never get removed by an IO completion. It will, however, get\nreclaimed and that triggers an assert in xfs_inode_free()\ncomplaining about freeing an inode still in the AIL.\n\nThis race can be avoided by not moving stale inodes forward in the AIL\nduring transaction commit completion processing. This closes the\nrace condition by ensuring we never insert clean stale inodes into\nthe AIL. It is safe to do this because a dirty stale inode, by\ndefinition, must already be in the AIL.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "309c848002052edbec650075a1eb098b17c17f35",
      "tree": "7e3e38c9ebcfa539716298c0f8a0000b45cffd8e",
      "parents": [
        "90810b9e82a36c3c57c1aeb8b2918b242a130b26"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Tue Nov 30 15:16:02 2010 +1100"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Wed Dec 01 07:40:20 2010 -0600"
      },
      "message": "xfs: delayed alloc blocks beyond EOF are valid after writeback\n\nThere is an assumption in the parts of XFS that flushing a dirty\nfile will make all the delayed allocation blocks disappear from an\ninode. That is, that after calling xfs_flush_pages() then\nip-\u003ei_delayed_blks will be zero.\n\nThis is an invalid assumption as we may have specualtive\npreallocation beyond EOF and they are recorded in\nip-\u003ei_delayed_blks. A flush of the dirty pages of an inode will not\nchange the state of these blocks beyond EOF, so a non-zero\ndeeelalloc block count after a flush is valid.\n\nThe bmap code has an invalid ASSERT() that needs to be removed, and\nthe swapext code has a bug in that while it swaps the data forks\naround, it fails to swap the i_delayed_blks counter associated with\nthe fork and hence can get the block accounting wrong.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "90810b9e82a36c3c57c1aeb8b2918b242a130b26",
      "tree": "2fdb8bd75866fc3d61cb7fe2f2cc26f0e6895641",
      "parents": [
        "c726de4409a8d3a03877b1ef4342bfe8a15f5e5e"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Tue Nov 30 15:16:16 2010 +1100"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Wed Dec 01 07:40:20 2010 -0600"
      },
      "message": "xfs: push stale, pinned buffers on trylock failures\n\nAs reported by Nick Piggin, XFS is suffering from long pauses under\nhighly concurrent workloads when hosted on ramdisks. The problem is\nthat an inode buffer is stuck in the pinned state in memory and as a\nresult either the inode buffer or one of the inodes within the\nbuffer is stopping the tail of the log from being moved forward.\n\nThe system remains in this state until a periodic log force issued\nby xfssyncd causes the buffer to be unpinned. The main problem is\nthat these are stale buffers, and are hence held locked until the\ntransaction/checkpoint that marked them state has been committed to\ndisk. When the filesystem gets into this state, only the xfssyncd\ncan cause the async transactions to be committed to disk and hence\nunpin the inode buffer.\n\nThis problem was encountered when scaling the busy extent list, but\nonly the blocking lock interface was fixed to solve the problem.\nExtend the same fix to the buffer trylock operations - if we fail to\nlock a pinned, stale buffer, then force the log immediately so that\nwhen the next attempt to lock it comes around, it will have been\nunpinned.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "c726de4409a8d3a03877b1ef4342bfe8a15f5e5e",
      "tree": "f1212b8f61f6dcdb52206842e8436a45f878a9e9",
      "parents": [
        "e8a7e48bb248a1196484d3f8afa53bded2b24e71"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Tue Nov 30 15:14:39 2010 +1100"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Wed Dec 01 07:40:19 2010 -0600"
      },
      "message": "xfs: fix failed write truncation handling.\n\nSince the move to the new truncate sequence we call xfs_setattr to\ntruncate down excessively instanciated blocks.  As shown by the testcase\nin kernel.org BZ #22452 that doesn\u0027t work too well.  Due to the confusion\nof the internal inode size, and the VFS inode i_size it zeroes data that\nit shouldn\u0027t.\n\nBut full blown truncate seems like overkill here.  We only instanciate\ndelayed allocations in the write path, and given that we never released\nthe iolock we can\u0027t have converted them to real allocations yet either.\n\nThe only nasty case is pre-existing preallocation which we need to skip.\nWe already do this for page discard during writeback, so make the delayed\nallocation block punching a generic function and call it from the failed\nwrite path as well as xfs_aops_discard_page. The callers are\nresponsible for ensuring that partial blocks are not truncated away,\nand that they hold the ilock.\n\nBased on a fix originally from Christoph Hellwig. This version used\nfilesystem blocks as the range unit.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "ece413f59f257682de4a2e2e42af33b016af53f3",
      "tree": "fe26d60458a4bfbd39e7e319e41c0ceca011914d",
      "parents": [
        "c6f6cd0608b1826ee1797cf57a808416e4bdb806"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Wed Nov 10 21:39:11 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Wed Nov 10 15:51:10 2010 -0600"
      },
      "message": "xfs: remove incorrect assert in xfs_vm_writepage\n\nIn commit 20cb52ebd1b5ca6fa8a5d9b6b1392292f5ca8a45, titled\n\"xfs: simplify xfs_vm_writepage\" I added an assert that any !mapped and\nuptodate buffers are not dirty.  That asserts turns out to trigger a lot\nwhen running fsx on filesystems with small block sizes.  The reason for\nthat is that the assert is simply incorrect.  !mapped and uptodate\njust mean this buffer covers a hole, and whenever we do a set_page_dirty\nwe mark all blocks in the page dirty, no matter if they have data or\nnot.  So remove the assert, and update the comment above the condition\nto match reality.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "c6f6cd0608b1826ee1797cf57a808416e4bdb806",
      "tree": "4c82ec811ef359f71c83f2a68c46498f0b59618b",
      "parents": [
        "5d2bf8a55e03b0e59ed5a4ac2ff7f9ee3ba7e40d"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Sat Nov 06 11:43:08 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Wed Nov 10 12:00:48 2010 -0600"
      },
      "message": "xfs: use hlist_add_fake\n\nXFS does not need it\u0027s inodes to actuall be hashed in the VFS inode\ncache, but we require the inode to be marked hashed for the\nwriteback code to work.\n\nInsted of using insert_inode_hash, which requires a second\ninode_lock roundtrip after the partial merge of the inode\nscalability patches in 2.6.37-rc simply use the new hlist_add_fake\nhelper to mark it hashed without requiring a lock or touching a\nglobal cache line.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "5d2bf8a55e03b0e59ed5a4ac2ff7f9ee3ba7e40d",
      "tree": "fc46c4d8f0504fd64504a30e4590267d1bfed9fe",
      "parents": [
        "785ce41805ea7b6a9b2775ed9f4cf10cd7a90c03"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Sat Nov 06 11:42:56 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Wed Nov 10 12:00:48 2010 -0600"
      },
      "message": "xfs: fix a few compiler warnings with CONFIG_XFS_QUOTA\u003dn\n\nAndi Kleen reported that gcc-4.5 gives lots of warnings for him\ninside the XFS code.  It turned out most of them are due to the\nquota stubs beeing macros, and gcc now complaining about macros\nevaluating to 0 that are not assigned to variables.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "785ce41805ea7b6a9b2775ed9f4cf10cd7a90c03",
      "tree": "8b56f215db003db8984465697cebf2ce9aa119c9",
      "parents": [
        "bfe2741967eaa3434fa9b3d8f24b1422d4540e7d"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Sat Nov 06 11:42:44 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Wed Nov 10 12:00:48 2010 -0600"
      },
      "message": "xfs: tell lockdep about parent iolock usage in filestreams\n\nThe filestreams code may take the iolock on the parent inode while\nholding it on a child.  This is the only place in XFS where we take\nboth the child and parent iolock, so just telling lockdep about it\nis enough.  The lock flag required for that was already added as\npart of the ilock lockdep annotations and unused so far.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "bfe2741967eaa3434fa9b3d8f24b1422d4540e7d",
      "tree": "d012589ede1f1d7e571d7dc75868f445531cccf8",
      "parents": [
        "f83282a8ef799c0bdcb0c32971487087da1bc216"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Mon Nov 08 08:55:05 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Wed Nov 10 12:00:48 2010 -0600"
      },
      "message": "xfs: move delayed write buffer trace\n\nThe delayed write buffer split trace currently issues a trace for\nevery buffer it scans. These buffers are not necessarily queued for\ndelayed write. Indeed, when buffers are pinned, there can be\nthousands of traces of buffers that aren\u0027t actually queued for\ndelayed write and the ones that are are lost in the noise. Move the\ntrace point to record only buffers that are split out for IO to be\nissued on.\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": "f83282a8ef799c0bdcb0c32971487087da1bc216",
      "tree": "953c706c4c96a85348cc6e1404436411919b6d80",
      "parents": [
        "6762b938eac878a30a90e770ac655874c36bc642"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Mon Nov 08 08:55:04 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Wed Nov 10 12:00:48 2010 -0600"
      },
      "message": "xfs: fix per-ag reference counting in inode reclaim tree walking\n\nThe walk fails to decrement the per-ag reference count when the\nnon-blocking walk fails to obtain the per-ag reclaim lock, leading\nto an assert failure on debug kernels when unmounting a filesystem.\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": "6762b938eac878a30a90e770ac655874c36bc642",
      "tree": "424b9893aa5494104b8d93de2b9c52fbdce37b75",
      "parents": [
        "5d0af85cd0964bb845b63d5059bb20e8f7731e65"
      ],
      "author": {
        "name": "Kulikov Vasiliy",
        "email": "segooon@gmail.com",
        "time": "Sat Oct 30 14:26:17 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Wed Nov 10 12:00:47 2010 -0600"
      },
      "message": "xfs: xfs_ioctl: fix information leak to userland\n\nal_hreq is copied from userland.  If al_hreq.buflen is not properly aligned\nthen xfs_attr_list will ignore the last bytes of kbuf.  These bytes are\nunitialized.  It leads to leaking of contents of kernel stack memory.\n\nSigned-off-by: Vasiliy Kulikov \u003csegooon@gmail.com\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "5d0af85cd0964bb845b63d5059bb20e8f7731e65",
      "tree": "8c3bb47546b361be20e972cf6069ccd29f38ba41",
      "parents": [
        "f6614b7bb405a9b35dd28baea989a749492c46b2"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Thu Oct 28 21:37:10 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Wed Nov 10 12:00:47 2010 -0600"
      },
      "message": "xfs: remove experimental tag from the delaylog option\n\nWe promised to do this for 2.6.37, and the code looks stable enough to\nkeep that promise.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "152a08366671080f27b32e0c411ad620c5f88b57",
      "tree": "d13d16028f74839c678bce355ba8aac75d939fa8",
      "parents": [
        "c96e41e92b4aaf11e1f9775ecf0d1c8cbff829ed"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sun Jul 25 00:46:55 2010 +0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Oct 29 04:16:13 2010 -0400"
      },
      "message": "new helper: mount_bdev()\n\n... and switch of the obvious get_sb_bdev() users to -\u003emount()\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "7d2f280e75f05919314e250cadf361a327ed555c",
      "tree": "47db5a9a0ceaf31adf49c18b663b1e08184f7cff",
      "parents": [
        "e3e1288e86a07cdeb0aee5860a2dff111c6eff79",
        "4408ea41c0ab4b711d4da44dd954fb06dce6c3f8"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Oct 27 20:13:18 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Oct 27 20:13:18 2010 -0700"
      },
      "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: (24 commits)\n  quota: Fix possible oops in __dquot_initialize()\n  ext3: Update kernel-doc comments\n  jbd/2: fixed typos\n  ext2: fixed typo.\n  ext3: Fix debug messages in ext3_group_extend()\n  jbd: Convert atomic_inc() to get_bh()\n  ext3: Remove misplaced BUFFER_TRACE() in ext3_truncate()\n  jbd: Fix debug message in do_get_write_access()\n  jbd: Check return value of __getblk()\n  ext3: Use DIV_ROUND_UP() on group desc block counting\n  ext3: Return proper error code on ext3_fill_super()\n  ext3: Remove unnecessary casts on bh-\u003eb_data\n  ext3: Cleanup ext3_setup_super()\n  quota: Fix issuing of warnings from dquot_transfer\n  quota: fix dquot_disable vs dquot_transfer race v2\n  jbd: Convert bitops to buffer fns\n  ext3/jbd: Avoid WARN() messages when failing to write the superblock\n  jbd: Use offset_in_page() instead of manual calculation\n  jbd: Remove unnecessary goto statement\n  jbd: Use printk_ratelimited() in journal_alloc_journal_head()\n  ...\n"
    },
    {
      "commit": "426e1f5cec4821945642230218876b0e89aafab1",
      "tree": "2728ace018d0698886989da586210ef1543a7098",
      "parents": [
        "9e5fca251f44832cb996961048ea977f80faf6ea",
        "63997e98a3be68d7cec806d22bf9b02b2e1daabb"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Oct 26 17:58:44 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Oct 26 17:58:44 2010 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6: (52 commits)\n  split invalidate_inodes()\n  fs: skip I_FREEING inodes in writeback_sb_inodes\n  fs: fold invalidate_list into invalidate_inodes\n  fs: do not drop inode_lock in dispose_list\n  fs: inode split IO and LRU lists\n  fs: switch bdev inode bdi\u0027s correctly\n  fs: fix buffer invalidation in invalidate_list\n  fsnotify: use dget_parent\n  smbfs: use dget_parent\n  exportfs: use dget_parent\n  fs: use RCU read side protection in d_validate\n  fs: clean up dentry lru modification\n  fs: split __shrink_dcache_sb\n  fs: improve DCACHE_REFERENCED usage\n  fs: use percpu counter for nr_dentry and nr_dentry_unused\n  fs: simplify __d_free\n  fs: take dcache_lock inside __d_path\n  fs: do not assign default i_ino in new_inode\n  fs: introduce a per-cpu last_ino allocator\n  new helper: ihold()\n  ...\n"
    },
    {
      "commit": "1b430beee5e388605dfb092b214ef0320f752cf6",
      "tree": "c1b1ece282aab771fd1386a3fe0c6e82cb5c5bfe",
      "parents": [
        "d19d5476f4b9f91d2de92b91588bb118beba6c0d"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Tue Oct 26 14:21:26 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Oct 26 16:52:05 2010 -0700"
      },
      "message": "writeback: remove nonblocking/encountered_congestion references\n\nThis removes more dead code that was somehow missed by commit 0d99519efef\n(writeback: remove unused nonblocking and congestion checks).  There are\nno behavior change except for the removal of two entries from one of the\next4 tracing interface.\n\nThe nonblocking checks in -\u003ewritepages are no longer used because the\nflusher now prefer to block on get_request_wait() than to skip inodes on\nIO congestion.  The latter will lead to more seeky IO.\n\nThe nonblocking checks in -\u003ewritepage are no longer used because it\u0027s\nredundant with the WB_SYNC_NONE check.\n\nWe no long set -\u003enonblocking in VM page out and page migration, because\na) it\u0027s effectively redundant with WB_SYNC_NONE in current code\nb) it\u0027s old semantic of \"Don\u0027t get stuck on request queues\" is mis-behavior:\n   that would skip some dirty inodes on congestion and page out others, which\n   is unfair in terms of LRU age.\n\nInspired by Christoph Hellwig. Thanks!\n\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nCc: Theodore Ts\u0027o \u003ctytso@mit.edu\u003e\nCc: David Howells \u003cdhowells@redhat.com\u003e\nCc: Sage Weil \u003csage@newdream.net\u003e\nCc: Steve French \u003csfrench@samba.org\u003e\nCc: Chris Mason \u003cchris.mason@oracle.com\u003e\nCc: Jens Axboe \u003caxboe@kernel.dk\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "85fe4025c616a7c0ed07bc2fc8c5371b07f3888c",
      "tree": "7a5db7accb6192f2911f2473b4e3191227b914cc",
      "parents": [
        "f991bd2e14210fb93d722cb23e54991de20e8a3d"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Sat Oct 23 11:19:54 2010 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Oct 25 21:26:11 2010 -0400"
      },
      "message": "fs: do not assign default i_ino in new_inode\n\nInstead of always assigning an increasing inode number in new_inode\nmove the call to assign it into those callers that actually need it.\nFor now callers that need it is estimated conservatively, that is\nthe call is added to all filesystems that do not assign an i_ino\nby themselves.  For a few more filesystems we can avoid assigning\nany inode number given that they aren\u0027t user visible, and for others\nit could be done lazily when an inode number is actually needed,\nbut that\u0027s left for later patches.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "7de9c6ee3ecffd99e1628e81a5ea5468f7581a1f",
      "tree": "88787e77ba8a253d0a26aeda4bd5e58532d592e0",
      "parents": [
        "646ec4615cd05972581c9c5342ed7a1e77df17bb"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sat Oct 23 11:11:40 2010 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Oct 25 21:26:11 2010 -0400"
      },
      "message": "new helper: ihold()\n\nClones an existing reference to inode; caller must already hold one.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "646ec4615cd05972581c9c5342ed7a1e77df17bb",
      "tree": "23c252d906f5356205b4d42c4ff9b4e6f70ebca2",
      "parents": [
        "f7899bd5472e8e99741369b4a32eca44e5282a85"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Sat Oct 23 07:15:32 2010 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Oct 25 21:26:10 2010 -0400"
      },
      "message": "fs: remove inode_add_to_list/__inode_add_to_list\n\nSplit up inode_add_to_list/__inode_add_to_list.  Locking for the two\nlists will be split soon so these helpers really don\u0027t buy us much\nanymore.\n\nThe __ prefixes for the sb list helpers will go away soon, but until\ninode_lock is gone we\u0027ll need them to distinguish between the locked\nand unlocked variants.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "ebdec241d509cf69f6ebf1ecdc036359d3dbe154",
      "tree": "e3c23f9b213936cb8501c83f55522a01f4a69aca",
      "parents": [
        "56b0dacfa2b8416815a2f2a5f4f51e46be4cf14c"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Wed Oct 06 10:47:23 2010 +0200"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Oct 25 21:18:20 2010 -0400"
      },
      "message": "fs: kill block_prepare_write\n\n__block_write_begin and block_prepare_write are identical except for slightly\ndifferent calling conventions.  Convert all callers to the __block_write_begin\ncalling conventions and drop block_prepare_write.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "5fe3a5ae5c09d53b2b3c7a971e1d87ab3a747055",
      "tree": "1e0d3e10c83e456a1678c4e01acb5ff624129202",
      "parents": [
        "0fc0531e0a2174377a86fd6953ecaa00287d8f70",
        "39dc948c6921169e13224a97fa53188922acfde8"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Oct 22 17:32:27 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Oct 22 17:32:27 2010 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://oss.sgi.com/xfs/xfs\n\n* \u0027for-linus\u0027 of git://oss.sgi.com/xfs/xfs: (36 commits)\n  xfs: semaphore cleanup\n  xfs: Extend project quotas to support 32bit project ids\n  xfs: remove xfs_buf wrappers\n  xfs: remove xfs_cred.h\n  xfs: remove xfs_globals.h\n  xfs: remove xfs_version.h\n  xfs: remove xfs_refcache.h\n  xfs: fix the xfs_trans_committed\n  xfs: remove unused t_callback field in struct xfs_trans\n  xfs: fix bogus m_maxagi check in xfs_iget\n  xfs: do not use xfs_mod_incore_sb_batch for per-cpu counters\n  xfs: do not use xfs_mod_incore_sb for per-cpu counters\n  xfs: remove XFS_MOUNT_NO_PERCPU_SB\n  xfs: pack xfs_buf structure more tightly\n  xfs: convert buffer cache hash to rbtree\n  xfs: serialise inode reclaim within an AG\n  xfs: batch inode reclaim lookup\n  xfs: implement batched inode lookups for AG walking\n  xfs: split out inode walk inode grabbing\n  xfs: split inode AG walking into separate code for reclaim\n  ...\n"
    },
    {
      "commit": "91b745016c12d440386c40fb76ab69c8e08cbc06",
      "tree": "881a26a43b3ee924c0979a54b38c7a87d79d7f1a",
      "parents": [
        "04cc69768e7d1f40d98b79d23d203674553b4da2",
        "daaae6b010ac0f60c9c35e481589966f9f1fcc22"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Oct 22 17:13:10 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Oct 22 17:13:10 2010 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq:\n  workqueue: remove in_workqueue_context()\n  workqueue: Clarify that schedule_on_each_cpu is synchronous\n  memory_hotplug: drop spurious calls to flush_scheduled_work()\n  shpchp: update workqueue usage\n  pciehp: update workqueue usage\n  isdn/eicon: don\u0027t call flush_scheduled_work() from diva_os_remove_soft_isr()\n  workqueue: add and use WQ_MEM_RECLAIM flag\n  workqueue: fix HIGHPRI handling in keep_working()\n  workqueue: add queue_work and activate_work trace points\n  workqueue: prepare for more tracepoints\n  workqueue: implement flush[_delayed]_work_sync()\n  workqueue: factor out start_flush_work()\n  workqueue: cleanup flush/cancel functions\n  workqueue: implement alloc_ordered_workqueue()\n\nFix up trivial conflict in fs/gfs2/main.c as per Tejun\n"
    },
    {
      "commit": "fa251f89903d73989e2f63e13d0eaed1e07ce0da",
      "tree": "3f7fe779941e3b6d67754dd7c44a32f48ea47c74",
      "parents": [
        "dd3932eddf428571762596e17b65f5dc92ca361b",
        "cd07202cc8262e1669edff0d97715f3dd9260917"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Oct 19 09:13:04 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Oct 19 09:13:04 2010 +0200"
      },
      "message": "Merge branch \u0027v2.6.36-rc8\u0027 into for-2.6.37/barrier\n\nConflicts:\n\tblock/blk-core.c\n\tdrivers/block/loop.c\n\tmm/swapfile.c\n\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "a731cd116c9334e01bcf3e676c0c621fe7de6ce4",
      "tree": "33113c64bd92edc448398e7325983317ce5a55a1",
      "parents": [
        "6743099ce57a40509a86849a22317ed4b7516911"
      ],
      "author": {
        "name": "Thomas Gleixner",
        "email": "tglx@linutronix.de",
        "time": "Tue Sep 07 14:33:15 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Oct 18 15:09:09 2010 -0500"
      },
      "message": "xfs: semaphore cleanup\n\nGet rid of init_MUTEX[_LOCKED]() and use sema_init() instead.\n\n(Ported to current XFS code by \u003caelder@sgi.com\u003e.)\n\nSigned-off-by: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "6743099ce57a40509a86849a22317ed4b7516911",
      "tree": "c26c8192713b02cc7a96a4094dcf896395cc7f81",
      "parents": [
        "1a1a3e97bad42e92cd2f32e81c396c8ee0bddb28"
      ],
      "author": {
        "name": "Arkadiusz Mi?kiewicz",
        "email": "arekm@maven.pl",
        "time": "Sun Sep 26 06:10:18 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Oct 18 15:08:08 2010 -0500"
      },
      "message": "xfs: Extend project quotas to support 32bit project ids\n\nThis patch adds support for 32bit project quota identifiers.\n\nOn disk format is backward compatible with 16bit projid numbers. projid\non disk is now kept in two 16bit values - di_projid_lo (which holds the\nsame position as old 16bit projid value) and new di_projid_hi (takes\nexisting padding) and converts from/to 32bit value on the fly.\n\nxfs_admin (for existing fs), mkfs.xfs (for new fs) needs to be used\nto enable PROJID32BIT support.\n\nSigned-off-by: Arkadiusz Miśkiewicz \u003carekm@maven.pl\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "1a1a3e97bad42e92cd2f32e81c396c8ee0bddb28",
      "tree": "6c8291164698decff609dfda60285a7d94c0a832",
      "parents": [
        "6c77b0ea1bdf85dfd48c20ceb10fd215a95c66e2"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Wed Oct 06 18:41:18 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Oct 18 15:08:07 2010 -0500"
      },
      "message": "xfs: remove xfs_buf wrappers\n\nStop having two different names for many buffer functions and use\nthe more descriptive xfs_buf_* names directly.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "6c77b0ea1bdf85dfd48c20ceb10fd215a95c66e2",
      "tree": "c2233ab16624c0ad0e80180d955c2238c2e759e1",
      "parents": [
        "78a4b0961ff241c6f23b16329db0d67e97cb86a7"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Wed Oct 06 18:41:17 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Oct 18 15:08:06 2010 -0500"
      },
      "message": "xfs: remove xfs_cred.h\n\nWe\u0027re not actually passing around credentials inside XFS for a while\nnow, so remove all xfs_cred.h with it\u0027s cred_t typedef and all\ninstances of it.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "78a4b0961ff241c6f23b16329db0d67e97cb86a7",
      "tree": "6d6a49d21ef98feb8ebf01f847b58d9024b85a7b",
      "parents": [
        "668332e5fec809bb100da619fda80e033b12b4a7"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Wed Oct 06 18:41:16 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Oct 18 15:08:05 2010 -0500"
      },
      "message": "xfs: remove xfs_globals.h\n\nThis header only provides one extern that isn\u0027t actually declared\nanywhere, and shadowed by a macro.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "668332e5fec809bb100da619fda80e033b12b4a7",
      "tree": "9388cfa5a915c119de3f9760cba85c7d1972f717",
      "parents": [
        "1ae4fe6dba24ebabcd12cd0fa45cc5955394cbd8"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Wed Oct 06 18:41:15 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Oct 18 15:08:04 2010 -0500"
      },
      "message": "xfs: remove xfs_version.h\n\nIt used to have a place when it contained an automatically generated\nCVS version, but these days it\u0027s entirely superflous.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "1ae4fe6dba24ebabcd12cd0fa45cc5955394cbd8",
      "tree": "8a300751ca16b584e3f56a413b0207a8fc79f0a9",
      "parents": [
        "4957a449a1bce2f5095f57f84114dc038a8f08d5"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Wed Oct 06 18:41:14 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Oct 18 15:08:03 2010 -0500"
      },
      "message": "xfs: remove xfs_refcache.h\n\nThis header has been completely unused for a couple of years.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "4957a449a1bce2f5095f57f84114dc038a8f08d5",
      "tree": "f0998e5e512126cd231bb0ff1967e15511a899a8",
      "parents": [
        "dfe188d4283752086d48380cde40d9801c318667"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Wed Oct 06 18:41:13 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Oct 18 15:08:02 2010 -0500"
      },
      "message": "xfs: fix the xfs_trans_committed\n\nUse the correct prototype for xfs_trans_committed instead of casting it.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "dfe188d4283752086d48380cde40d9801c318667",
      "tree": "d37bd7f7dbee527882abc6cb8e6fa6bcedb19587",
      "parents": [
        "d276734d937a649ff43fd197d0df7a747bd55b7e"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Wed Oct 06 18:41:12 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Oct 18 15:08:01 2010 -0500"
      },
      "message": "xfs: remove unused t_callback field in struct xfs_trans\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "d276734d937a649ff43fd197d0df7a747bd55b7e",
      "tree": "37bfbeb8e20805be02a3770f68232798ba687d3c",
      "parents": [
        "1b0407125f9a5be63e861eb27c8af9e32f20619c"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Wed Oct 06 18:31:23 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Oct 18 15:08:01 2010 -0500"
      },
      "message": "xfs: fix bogus m_maxagi check in xfs_iget\n\nThese days inode64 should only control which AGs we allocate new\ninodes from, while we still try to support reading all existing\ninodes.  To make this actually work the check ontop of xfs_iget\nneeds to be relaxed to allow inodes in all allocation groups instead\nof just those that we allow allocating inodes from.  Note that we\ncan\u0027t simply remove the check - it prevents us from accessing\ninvalid data when fed invalid inode numbers from NFS or bulkstat.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "1b0407125f9a5be63e861eb27c8af9e32f20619c",
      "tree": "206f43a7131ad11b8c603247254a8eb9aa2fc17e",
      "parents": [
        "96540c78583a417113df4d027e6b68a595ab9a09"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Thu Sep 30 02:25:56 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Oct 18 15:08:00 2010 -0500"
      },
      "message": "xfs: do not use xfs_mod_incore_sb_batch for per-cpu counters\n\nUpdate the per-cpu counters manually in xfs_trans_unreserve_and_mod_sb\nand remove support for per-cpu counters from xfs_mod_incore_sb_batch\nto simplify it.  And added benefit is that we don\u0027t have to take\nm_sb_lock for transactions that only modify per-cpu counters.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "96540c78583a417113df4d027e6b68a595ab9a09",
      "tree": "777505137ab426a9dff955cd8e3fe0c3afc0e482",
      "parents": [
        "61ba35dea0593fbc8d062cab3e4c4c3da5ce7104"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Thu Sep 30 02:25:55 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Oct 18 15:07:59 2010 -0500"
      },
      "message": "xfs: do not use xfs_mod_incore_sb for per-cpu counters\n\nExport xfs_icsb_modify_counters and always use it for modifying\nthe per-cpu counters.  Remove support for per-cpu counters from\nxfs_mod_incore_sb to simplify it.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "61ba35dea0593fbc8d062cab3e4c4c3da5ce7104",
      "tree": "fa28b2c9d0c5a71f1d0415b042d45a7a56b8c2ff",
      "parents": [
        "50f59e8eed85ec4c79bc2454ed50c7886f6c5ebf"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Thu Sep 30 02:25:54 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Oct 18 15:07:58 2010 -0500"
      },
      "message": "xfs: remove XFS_MOUNT_NO_PERCPU_SB\n\nFail the mount if we can\u0027t allocate memory for the per-CPU counters.\nThis is consistent with how we handle everything else in the mount\npath and makes the superblock counter modification a lot simpler.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "50f59e8eed85ec4c79bc2454ed50c7886f6c5ebf",
      "tree": "ffb2fa359ee0751ce2f0f6dd29afc39eeda1ca86",
      "parents": [
        "74f75a0cb7033918eb0fa4a50df25091ac75c16e"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Fri Sep 24 19:59:15 2010 +1000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Oct 18 15:07:57 2010 -0500"
      },
      "message": "xfs: pack xfs_buf structure more tightly\n\npahole reports the struct xfs_buf has quite a few holes in it, so\npacking the structure better will reduce the size of it by 16 bytes.\nAlso, move all the fields used in cache lookups into the first\ncacheline.\n\nBefore on x86_64:\n\n        /* size: 320, cachelines: 5 */\n\t/* sum members: 298, holes: 6, sum holes: 22 */\n\nAfter on x86_64:\n\n        /* size: 304, cachelines: 5 */\n\t/* padding: 6 */\n\t/* last cacheline: 48 bytes */\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "74f75a0cb7033918eb0fa4a50df25091ac75c16e",
      "tree": "3885c0b357c760152d14df03ef88839fdbf5f964",
      "parents": [
        "69b491c214d7fd4d4df972ae5377be99ca3753db"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Fri Sep 24 19:59:04 2010 +1000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Oct 18 15:07:56 2010 -0500"
      },
      "message": "xfs: convert buffer cache hash to rbtree\n\nThe buffer cache hash is showing typical hash scalability problems.\nIn large scale testing the number of cached items growing far larger\nthan the hash can efficiently handle. Hence we need to move to a\nself-scaling cache indexing mechanism.\n\nI have selected rbtrees for indexing becuse they can have O(log n)\nsearch scalability, and insert and remove cost is not excessive,\neven on large trees. Hence we should be able to cache large numbers\nof buffers without incurring the excessive cache miss search\npenalties that the hash is imposing on us.\n\nTo ensure we still have parallel access to the cache, we need\nmultiple trees. Rather than hashing the buffers by disk address to\nselect a tree, it seems more sensible to separate trees by typical\naccess patterns. Most operations use buffers from within a single AG\nat a time, so rather than searching lots of different lists,\nseparate the buffer indexes out into per-AG rbtrees. This means that\nsearches during metadata operation have a much higher chance of\nhitting cache resident nodes, and that updates of the tree are less\nlikely to disturb trees being accessed on other CPUs doing\nindependent operations.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "69b491c214d7fd4d4df972ae5377be99ca3753db",
      "tree": "b0d022080d8da893e525ee6502878424cffbd8c2",
      "parents": [
        "e3a20c0b02e1704ab115dfa9d012caf0fbc45ed0"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Mon Sep 27 11:09:51 2010 +1000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Oct 18 15:07:55 2010 -0500"
      },
      "message": "xfs: serialise inode reclaim within an AG\n\nMemory reclaim via shrinkers has a terrible habit of having N+M\nconcurrent shrinker executions (N \u003d num CPUs, M \u003d num kswapds) all\ntrying to shrink the same cache. When the cache they are all working\non is protected by a single spinlock, massive contention an\nslowdowns occur.\n\nWrap the per-ag inode caches with a reclaim mutex to serialise\nreclaim access to the AG. This will block concurrent reclaim in each\nAG but still allow reclaim to scan multiple AGs concurrently. Allow\nshrinkers to move on to the next AG if it can\u0027t get the lock, and if\nwe can\u0027t get any AG, then start blocking on locks.\n\nTo prevent reclaimers from continually scanning the same inodes in\neach AG, add a cursor that tracks where the last reclaim got up to\nand start from that point on the next reclaim. This should avoid\nonly ever scanning a small number of inodes at the satart of each AG\nand not making progress. If we have a non-shrinker based reclaim\npass, ignore the cursor and reset it to zero once we are done.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "e3a20c0b02e1704ab115dfa9d012caf0fbc45ed0",
      "tree": "77cd4c9129b8b6fc85b0e9005a82088df9ed752f",
      "parents": [
        "78ae5256768b91f25ce7a4eb9f56d563e302cc10"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Fri Sep 24 19:51:50 2010 +1000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Oct 18 15:07:54 2010 -0500"
      },
      "message": "xfs: batch inode reclaim lookup\n\nBatch and optimise the per-ag inode lookup for reclaim to minimise\nscanning overhead. This involves gang lookups on the radix trees to\nget multiple inodes during each tree walk, and tighter validation of\nwhat inodes can be reclaimed without blocking befor we take any\nlocks.\n\nThis is based on ideas suggested in a proof-of-concept patch\nposted by Nick Piggin.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "78ae5256768b91f25ce7a4eb9f56d563e302cc10",
      "tree": "73b03ac578c2cb572fdef6d9be5788eee98076b1",
      "parents": [
        "e13de955ca67b0bd1cec9a2f9352a3053065bf7f"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Tue Sep 28 12:28:19 2010 +1000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Oct 18 15:07:53 2010 -0500"
      },
      "message": "xfs: implement batched inode lookups for AG walking\n\nWith the reclaim code separated from the generic walking code, it is\nsimple to implement batched lookups for the generic walk code.\nSeparate out the inode validation from the execute operations and\nmodify the tree lookups to get a batch of inodes at a time.\n\nReclaim operations will be optimised separately.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "e13de955ca67b0bd1cec9a2f9352a3053065bf7f",
      "tree": "b3b132b1e13791f8766da9fab4bad336f87775cc",
      "parents": [
        "65d0f20533c503b50bd5e7e86434512af7761eea"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Tue Sep 28 12:28:06 2010 +1000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Oct 18 15:07:52 2010 -0500"
      },
      "message": "xfs: split out inode walk inode grabbing\n\nWhen doing read side inode cache walks, the code to validate and\ngrab an inode is common to all callers. Split it out of the execute\ncallbacks in preparation for batching lookups. Similarly, split out\nthe inode reference dropping from the execute callbacks into the\nmain lookup look to be symmetric with the grab.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "65d0f20533c503b50bd5e7e86434512af7761eea",
      "tree": "0e04d6898fc0c729886067a3daf79b10a7a19992",
      "parents": [
        "69d6cc76cff3573ceefda178b75e20878866fdc3"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Fri Sep 24 18:40:15 2010 +1000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Oct 18 15:07:52 2010 -0500"
      },
      "message": "xfs: split inode AG walking into separate code for reclaim\n\nThe reclaim walk requires different locking and has a slightly\ndifferent walk algorithm, so separate it out so that it can be\noptimised separately.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "69d6cc76cff3573ceefda178b75e20878866fdc3",
      "tree": "c26739c748ecd4e869b1c429c82b0618fddf7ccb",
      "parents": [
        "1922c949c59f93beb560d59874bcc6d5c00115ac"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Wed Sep 22 10:47:20 2010 +1000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Oct 18 15:07:51 2010 -0500"
      },
      "message": "xfs: remove buftarg hash for external devices\n\nFor RT and external log devices, we never use hashed buffers on them\nnow.  Remove the buftarg hash tables that are set up for them.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "1922c949c59f93beb560d59874bcc6d5c00115ac",
      "tree": "f680f7cc4a36f9233f2c54c473a69a658ea9e224",
      "parents": [
        "26af655233dd486659235f3049959d2f7dafc5a1"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Wed Sep 22 10:47:20 2010 +1000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Oct 18 15:07:50 2010 -0500"
      },
      "message": "xfs: use unhashed buffers for size checks\n\nWhen we are checking we can access the last block of each device, we\ndo not need to use cached buffers as they will be tossed away\nimmediately. Use uncached buffers for size checks so that all IO\nprior to full in-memory structure initialisation does not use the\nbuffer cache.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "26af655233dd486659235f3049959d2f7dafc5a1",
      "tree": "590b4976871582d6cad34880705a9a4021e204f5",
      "parents": [
        "ebad861b5702c3e2332a3e906978f47144d22f70"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Wed Sep 22 10:47:20 2010 +1000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Oct 18 15:07:49 2010 -0500"
      },
      "message": "xfs: kill XBF_FS_MANAGED buffers\n\nFilesystem level managed buffers are buffers that have their\nlifecycle controlled by the filesystem layer, not the buffer cache.\nWe currently cache these buffers, which makes cleanup and cache\nwalking somewhat troublesome. Convert the fs managed buffers to\nuncached buffers obtained by via xfs_buf_get_uncached(), and remove\nthe XBF_FS_MANAGED special cases from the buffer cache.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "ebad861b5702c3e2332a3e906978f47144d22f70",
      "tree": "7b4502277c46d26d1d26258d05596b58ab6b868a",
      "parents": [
        "5adc94c247c3779782c7b0b8b5e28cf50596eb37"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Wed Sep 22 10:47:20 2010 +1000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Oct 18 15:07:48 2010 -0500"
      },
      "message": "xfs: store xfs_mount in the buftarg instead of in the xfs_buf\n\nEach buffer contains both a buftarg pointer and a mount pointer. If\nwe add a mount pointer into the buftarg, we can avoid needing the\nb_mount field in every buffer and grab it from the buftarg when\nneeded instead. This shrinks the xfs_buf by 8 bytes.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "5adc94c247c3779782c7b0b8b5e28cf50596eb37",
      "tree": "95c2fac56cf6b9559b70aeaa43dae5a18b3c3fec",
      "parents": [
        "686865f76e35b28ba7aa6afa19209426f0da6201"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Fri Sep 24 21:58:31 2010 +1000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Oct 18 15:07:47 2010 -0500"
      },
      "message": "xfs: introduced uncached buffer read primitve\n\nTo avoid the need to use cached buffers for single-shot or buffers\ncached at the filesystem level, introduce a new buffer read\nprimitive that bypasses the cache an reads directly from disk.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "686865f76e35b28ba7aa6afa19209426f0da6201",
      "tree": "49f0ea4c6cb6ec4c71d1bce041ab21bbcd4920c8",
      "parents": [
        "dcd79a1423f64ee0184629874805c3ac40f3a2c5"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Fri Sep 24 20:07:47 2010 +1000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Oct 18 15:07:46 2010 -0500"
      },
      "message": "xfs: rename xfs_buf_get_nodaddr to be more appropriate\n\nxfs_buf_get_nodaddr() is really used to allocate a buffer that is\nuncached. While it is not directly assigned a disk address, the fact\nthat they are not cached is a more important distinction. With the\nupcoming uncached buffer read primitive, we should be consistent\nwith this disctinction.\n\nWhile there, make page allocation in xfs_buf_get_nodaddr() safe\nagainst memory reclaim re-entrancy into the filesystem by allowing\na flags parameter to be passed.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "dcd79a1423f64ee0184629874805c3ac40f3a2c5",
      "tree": "7015d6b6537d4fe3f5371a843a0a9cd45204fb47",
      "parents": [
        "e176579e70118ed7cfdb60f963628fe0ca771f3d"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Tue Sep 28 12:27:25 2010 +1000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Oct 18 15:07:45 2010 -0500"
      },
      "message": "xfs: don\u0027t use vfs writeback for pure metadata modifications\n\nUnder heavy multi-way parallel create workloads, the VFS struggles\nto write back all the inodes that have been changed in age order.\nThe bdi flusher thread becomes CPU bound, spending 85% of it\u0027s time\nin the VFS code, mostly traversing the superblock dirty inode list\nto separate dirty inodes old enough to flush.\n\nWe already keep an index of all metadata changes in age order - in\nthe AIL - and continued log pressure will do age ordered writeback\nwithout any extra overhead at all. If there is no pressure on the\nlog, the xfssyncd will periodically write back metadata in ascending\ndisk address offset order so will be very efficient.\n\nHence we can stop marking VFS inodes dirty during transaction commit\nor when changing timestamps during transactions. This will keep the\ninodes in the superblock dirty list to those containing data or\nunlogged metadata changes.\n\nHowever, the timstamp changes are slightly more complex than this -\nthere are a couple of places that do unlogged updates of the\ntimestamps, and the VFS need to be informed of these. Hence add a\nnew function xfs_trans_ichgtime() for transactional changes,\nand leave xfs_ichgtime() for the non-transactional changes.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Alex Elder \u003caelder@sgi.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "e176579e70118ed7cfdb60f963628fe0ca771f3d",
      "tree": "e2d252fcd692aa4e3907300521e2af81c974f875",
      "parents": [
        "bd32d25a7cf7242512e77e70bab63df4402ab91c"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Wed Sep 22 10:47:20 2010 +1000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Oct 18 15:07:44 2010 -0500"
      },
      "message": "xfs: lockless per-ag lookups\n\nWhen we start taking a reference to the per-ag for every cached\nbuffer in the system, kernel lockstat profiling on an 8-way create\nworkload shows the mp-\u003em_perag_lock has higher acquisition rates\nthan the inode lock and has significantly more contention. That is,\nit becomes the highest contended lock in the system.\n\nThe perag lookup is trivial to convert to lock-less RCU lookups\nbecause perag structures never go away. Hence the only thing we need\nto protect against is tree structure changes during a grow. This can\nbe done simply by replacing the locking in xfs_perag_get() with RCU\nread locking. This removes the mp-\u003em_perag_lock completely from this\npath.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "bd32d25a7cf7242512e77e70bab63df4402ab91c",
      "tree": "8188f1f697a74e433369f11c03c4c6dfce70956e",
      "parents": [
        "d1583a3833290ab9f8b13a064acbb5e508c59f60"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Wed Sep 22 10:47:20 2010 +1000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Oct 18 15:07:43 2010 -0500"
      },
      "message": "xfs: remove debug assert for per-ag reference counting\n\nWhen we start taking references per cached buffer to the the perag\nit is cached on, it will blow the current debug maximum reference\ncount assert out of the water. The assert has never caught a bug,\nand we have tracing to track changes if there ever is a problem,\nso just remove it.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "d1583a3833290ab9f8b13a064acbb5e508c59f60",
      "tree": "8d349b284c80bc42e6e0ea5bb60824f723be617d",
      "parents": [
        "9c169915ad374cd9efb1556943b2074ec07e1749"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Fri Sep 24 18:14:13 2010 +1000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Oct 18 15:07:42 2010 -0500"
      },
      "message": "xfs: reduce the number of CIL lock round trips during commit\n\nWhen commiting a transaction, we do a lock CIL state lock round trip\non every single log vector we insert into the CIL. This is resulting\nin the lock being as hot as the inode and dcache locks on 8-way\ncreate workloads. Rework the insertion loops to bring the number\nof lock round trips to one per transaction for log vectors, and one\nmore do the busy extents.\n\nAlso change the allocation of the log vector buffer not to zero it\nas we copy over the entire allocated buffer anyway.\n\nThis patch also includes a structural cleanup to the CIL item\ninsertion provided by Christoph Hellwig.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "9c169915ad374cd9efb1556943b2074ec07e1749",
      "tree": "2152b6a34e169fc1cba874f9309f872b5fb5379e",
      "parents": [
        "c0e59e1ac0a106bbab93404024bb6e7927ad9d6d"
      ],
      "author": {
        "name": "Poyo VL",
        "email": "poyo_vl@yahoo.com",
        "time": "Thu Sep 02 07:41:55 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Oct 18 15:07:39 2010 -0500"
      },
      "message": "xfs: eliminate some newly-reported gcc warnings\n\nIonut Gabriel Popescu \u003cpoyo_vl@yahoo.com\u003e submitted a simple change\nto eliminate some \"may be used uninitialized\" warnings when building\nXFS.  The reported condition seems to be something that GCC did not\nused to recognize or report.  The warnings were produced by:\n\n    gcc version 4.5.0 20100604\n    [gcc-4_5-branch revision 160292] (SUSE Linux)\n\nSigned-off-by: Ionut Gabriel Popescu \u003cpoyo_vl@yahoo.com\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "c0e59e1ac0a106bbab93404024bb6e7927ad9d6d",
      "tree": "dd8cdef0570d3774245bdbd3a39d2e16a0fed2d5",
      "parents": [
        "acecf1b5d8a846bf818bf74df454330f0b444b0a"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Tue Sep 07 23:34:07 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Oct 18 15:07:38 2010 -0500"
      },
      "message": "xfs: remove the -\u003ekill_root btree operation\n\nThe implementation os -\u003ekill_root only differ by either simply\nzeroing out the now unused buffer in the btree cursor in the inode\nallocation btree or using xfs_btree_setbuf in the allocation btree.\n\nInitially both of them used xfs_btree_setbuf, but the use in the\nialloc btree was removed early on because it interacted badly with\nxfs_trans_binval.\n\nIn addition to zeroing out the buffer in the cursor xfs_btree_setbuf\nupdates the bc_ra array in the btree cursor, and calls\nxfs_trans_brelse on the buffer previous occupying the slot.\n\nThe bc_ra update should be done for the alloc btree updated too,\nalthough the lack of it does not cause serious problems.  The\nxfs_trans_brelse call on the other hand is effectively a no-op in\nthe end - it keeps decrementing the bli_recur refcount until it hits\nzero, and then just skips out because the buffer will always be\ndirty at this point.  So removing it for the allocation btree is\njust fine.\n\nSo unify the code and move it to xfs_btree.c.  While we\u0027re at it\nalso replace the call to xfs_btree_setbuf with a NULL bp argument in\nxfs_btree_del_cursor with a direct call to xfs_trans_brelse given\nthat the cursor is beeing freed just after this and the state\nupdates are superflous.  After this xfs_btree_setbuf is only used\nwith a non-NULL bp argument and can thus be simplified.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "acecf1b5d8a846bf818bf74df454330f0b444b0a",
      "tree": "9d337467b6882bff99fec04cd30b6cc0a831da5f",
      "parents": [
        "52fda114249578311776b25da9f73a9c34f4fd8c"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Mon Sep 06 01:44:45 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Oct 18 15:07:37 2010 -0500"
      },
      "message": "xfs: stop using xfs_qm_dqtobp in xfs_qm_dqflush\n\nIn xfs_qm_dqflush we know that q_blkno must be initialized already from a\nprevious xfs_qm_dqread.  So instead of calling xfs_qm_dqtobp we can\nsimply read the quota buffer directly.  This also saves us from a duplicate\nxfs_qm_dqcheck call check and allows xfs_qm_dqtobp to be simplified now\nthat it is always called for a newly initialized inode.  In addition to\nthat properly unwind all locks in xfs_qm_dqflush when xfs_qm_dqcheck\nfails.\n\nThis mirrors a similar cleanup in the inode lookup done earlier.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "52fda114249578311776b25da9f73a9c34f4fd8c",
      "tree": "976f100c5b68d799bb552280dad2f3bf9b078c90",
      "parents": [
        "447223520520b17d3b6d0631aa4838fbaf8eddb4"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Mon Sep 06 01:44:22 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Oct 18 15:07:36 2010 -0500"
      },
      "message": "xfs: simplify xfs_qm_dqusage_adjust\n\nThere is no need to have the users and group/project quota locked at the\nsame time.  Get rid of xfs_qm_dqget_noattach and just do a xfs_qm_dqget\ninside xfs_qm_quotacheck_dqadjust for the quota we are operating on\nright now.  The new version of xfs_qm_quotacheck_dqadjust holds the\ninode lock over it\u0027s operations, which is not a problem as it simply\nincrements counters and there is no concern about log contention\nduring mount time.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "447223520520b17d3b6d0631aa4838fbaf8eddb4",
      "tree": "068716a0537e0f7007a037073c4b7bc608233c1e",
      "parents": [
        "3ae4c9deb30a8d5ee305b461625dcb298c9804a9"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Tue Aug 24 12:02:11 2010 +1000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Oct 18 15:07:25 2010 -0500"
      },
      "message": "xfs: Introduce XFS_IOC_ZERO_RANGE\n\nXFS_IOC_ZERO_RANGE is the equivalent of an atomic XFS_IOC_UNRESVSP/\nXFS_IOC_RESVSP call pair. It enabled ranges of written data to be\nturned into zeroes without requiring IO or having to free and\nreallocate the extents in the range given as would occur if we had\nto punch and then preallocate them separately.  This enables\napplications to zero parts of files very quickly without changing\nthe layout of the files in any way.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "3ae4c9deb30a8d5ee305b461625dcb298c9804a9",
      "tree": "ad118eaa99b28ed1742db8c9eb5c572dbeab46a3",
      "parents": [
        "cd07202cc8262e1669edff0d97715f3dd9260917"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Tue Aug 24 12:01:50 2010 +1000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Oct 18 15:07:24 2010 -0500"
      },
      "message": "xfs: use range primitives for xfs page cache operations\n\nWhile XFS passes ranges to operate on from the core code, the\nfunctions being called ignore the either the entire range or the end\nof the range. This is historical because when the function were\nwritten linux didn\u0027t have the necessary range operations. Update the\nfunctions to use the correct operations.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "6370a6ad3b53df90b4700977f7718118a2cd524a",
      "tree": "2d1f45a19e66329813ce133b18f920d8c450b0c0",
      "parents": [
        "30310045dd20a286cf3800f063f79b468e132fb1"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Oct 11 15:12:27 2010 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Oct 11 15:20:26 2010 +0200"
      },
      "message": "workqueue: add and use WQ_MEM_RECLAIM flag\n\nAdd WQ_MEM_RECLAIM flag which currently maps to WQ_RESCUER, mark\nWQ_RESCUER as internal and replace all external WQ_RESCUER usages to\nWQ_MEM_RECLAIM.\n\nThis makes the API users express the intent of the workqueue instead\nof indicating the internal mechanism used to guarantee forward\nprogress.  This is also to make it cleaner to add more semantics to\nWQ_MEM_RECLAIM.  For example, if deemed necessary, memory reclaim\nworkqueues can be made highpri.\n\nThis patch doesn\u0027t introduce any functional change.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Jeff Garzik \u003cjgarzik@pobox.com\u003e\nCc: Dave Chinner \u003cdavid@fromorbit.com\u003e\nCc: Steven Whitehouse \u003cswhiteho@redhat.com\u003e\n"
    },
    {
      "commit": "081003fff467ea0e727f66d5d435b4f473a789b3",
      "tree": "ce27d1d92d3d9b2c3bfb528a49c84fef5e695afb",
      "parents": [
        "7c6d45e665d5322401e4439060bbf758b08422d4"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Fri Oct 01 07:43:54 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Wed Oct 06 22:35:48 2010 -0500"
      },
      "message": "xfs: properly account for reclaimed inodes\n\nWhen marking an inode reclaimable, a per-AG counter is increased, the\ninode is tagged reclaimable in its per-AG tree, and, when this is the\nfirst reclaimable inode in the AG, the AG entry in the per-mount tree\nis also tagged.\n\nWhen an inode is finally reclaimed, however, it is only deleted from\nthe per-AG tree.  Neither the counter is decreased, nor is the parent\ntree\u0027s AG entry untagged properly.\n\nSince the tags in the per-mount tree are not cleared, the inode\nshrinker iterates over all AGs that have had reclaimable inodes at one\npoint in time.\n\nThe counters on the other hand signal an increasing amount of slab\nobjects to reclaim.  Since \"70e60ce xfs: convert inode shrinker to\nper-filesystem context\" this is not a real issue anymore because the\nshrinker bails out after one iteration.\n\nBut the problem was observable on a machine running v2.6.34, where the\nreclaimable work increased and each process going into direct reclaim\neventually got stuck on the xfs inode shrinking path, trying to scan\nseveral million objects.\n\nFix this by properly unwinding the reclaimable-state tracking of an\ninode when it is reclaimed.\n\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: stable@kernel.org\nReviewed-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "80f44b152c889e592616adf0d33b856107f4bace",
      "tree": "432867c97f855e57a023bbf13c4c81e700393448",
      "parents": [
        "c6ea21e35bf3691cad59647c771e6606067f627d"
      ],
      "author": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Tue Aug 17 12:14:44 2010 +0200"
      },
      "committer": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Tue Oct 05 12:16:37 2010 +0200"
      },
      "message": "quota: Make QUOTACTL config be selected by its users\n\nRemove \"depends on\" line from QUOTACTL config option and rather select\nthe option explicitely from config options which need it. It makes more\nsense this way and also fixes Kconfig warning due to GFS2 selecting\nQUOTACTL but QUOTACTL not depending on it.\n\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\n"
    },
    {
      "commit": "80168676ebfe4af51407d30f336d67f082d45201",
      "tree": "30f12022ffadd153cec05f460bdaa620690d7b12",
      "parents": [
        "899611ee7d373e5eeda08e9a8632684e1ebbbf00"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Fri Sep 24 18:13:44 2010 +1000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Wed Sep 29 07:51:03 2010 -0500"
      },
      "message": "xfs: force background CIL push under sustained load\n\nI have been seeing occasional pauses in transaction throughput up to\n30s long under heavy parallel workloads. The only notable thing was\nthat the xfsaild was trying to be active during the pauses, but\nmaking no progress. It was running exactly 20 times a second (on the\n50ms no-progress backoff), and the number of pushbuf events was\nconstant across this time as well.  IOWs, the xfsaild appeared to be\nstuck on buffers that it could not push out.\n\nFurther investigation indicated that it was trying to push out inode\nbuffers that were pinned and/or locked. The xfsbufd was also getting\nwoken at the same frequency (by the xfsaild, no doubt) to push out\ndelayed write buffers. The xfsbufd was not making any progress\nbecause all the buffers in the delwri queue were pinned. This scan-\nand-make-no-progress dance went one in the trace for some seconds,\nbefore the xfssyncd came along an issued a log force, and then\nthings started going again.\n\nHowever, I noticed something strange about the log force - there\nwere way too many IO\u0027s issued. 516 log buffers were written, to be\nexact. That added up to 129MB of log IO, which got me very\ninterested because it\u0027s almost exactly 25% of the size of the log.\nHe delayed logging code is suppose to aggregate the minimum of 25%\nof the log or 8MB worth of changes before flushing. That\u0027s what\nreally puzzled me - why did a log force write 129MB instead of only\n8MB?\n\nEssentially what has happened is that no CIL pushes had occurred\nsince the previous tail push which cleared out 25% of the log space.\nThat caused all the new transactions to block because there wasn\u0027t\nlog space for them, but they kick the xfsaild to push the tail.\nHowever, the xfsaild was not making progress because there were\nbuffers it could not lock and flush, and the xfsbufd could not flush\nthem because they were pinned. As a result, both the xfsaild and the\nxfsbufd could not move the tail of the log forward without the CIL\nfirst committing.\n\nThe cause of the problem was that the background CIL push, which\nshould happen when 8MB of aggregated changes have been committed, is\nbeing held off by the concurrent transaction commit load. The\nbackground push does a down_write_trylock() which will fail if there\nis a concurrent transaction commit holding the push lock in read\nmode. With 8 CPUs all doing transactions as fast as they can, there\nwas enough concurrent transaction commits to hold off the background\npush until tail-pushing could no longer free log space, and the halt\nwould occur.\n\nIt should be noted that there is no reason why it would halt at 25%\nof log space used by a single CIL checkpoint. This bug could\ndefinitely violate the \"no transaction should be larger than half\nthe log\" requirement and hence result in corruption if the system\ncrashed under heavy load. This sort of bug is exactly the reason why\ndelayed logging was tagged as experimental....\n\nThe fix is to start blocking background pushes once the threshold\nhas been exceeded. Rework the threshold calculations to keep the\namount of log space a CIL checkpoint can use to below that of the\nAIL push threshold to avoid the problem completely.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Alex Elder \u003caelder@sgi.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "dd3932eddf428571762596e17b65f5dc92ca361b",
      "tree": "57cec5ae2f862037f78b7e993323d77955bb6463",
      "parents": [
        "8786fb70ccb36c7cff64680bb80c46d3a09d44db"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Thu Sep 16 20:51:46 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu Sep 16 20:52:58 2010 +0200"
      },
      "message": "block: remove BLKDEV_IFL_WAIT\n\nAll the blkdev_issue_* helpers can only sanely be used for synchronous\ncaller.  To issue cache flushes or barriers asynchronously the caller needs\nto set up a bio by itself with a completion callback to move the asynchronous\nstate machine ahead.  So drop the BLKDEV_IFL_WAIT flag that is always\nspecified when calling blkdev_issue_* and also remove the now unused flags\nargument to blkdev_issue_flush and blkdev_issue_zeroout.  For\nblkdev_issue_discard we need to keep it for the secure discard flag, which\ngains a more descriptive name and loses the bitops vs flag confusion.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "51749e47e191db8e588ad5cebea731caf7b705d7",
      "tree": "35eecb6db9f24bdff527502bb4fd318f2c8be014",
      "parents": [
        "a122eb2fdfd78b58c6dd992d6f4b1aaef667eef9"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Wed Sep 08 09:00:22 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Fri Sep 10 10:16:54 2010 -0500"
      },
      "message": "xfs: log IO completion workqueue is a high priority queue\n\nThe workqueue implementation in 2.6.36-rcX has changed, resulting\nin the workqueues no longer having dedicated threads for work\nprocessing. This has caused severe livelocks under heavy parallel\ncreate workloads because the log IO completions have been getting\nheld up behind metadata IO completions.  Hence log commits would\nstall, memory allocation would stall because pages could not be\ncleaned, and lock contention on the AIL during inode IO completion\nprocessing was being seen to slow everything down even further.\n\nBy making the log Io completion workqueue a high priority workqueue,\nthey are queued ahead of all data/metadata IO completions and\nprocessed before the data/metadata completions. Hence the log never\ngets stalled, and operations needed to clean memory can continue as\nquickly as possible. This avoids the livelock conditions and allos\nthe system to keep running under heavy load as per normal.\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": "a122eb2fdfd78b58c6dd992d6f4b1aaef667eef9",
      "tree": "754cbb6319fd3114c6aeb1bf456bf37cff699c69",
      "parents": [
        "cc491e27d31f1bb3dacb309407b47d65669ceb9d"
      ],
      "author": {
        "name": "Dan Rosenberg",
        "email": "dan.j.rosenberg@gmail.com",
        "time": "Mon Sep 06 18:24:57 2010 -0400"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Fri Sep 10 07:39:28 2010 -0500"
      },
      "message": "xfs: prevent reading uninitialized stack memory\n\nThe XFS_IOC_FSGETXATTR ioctl allows unprivileged users to read 12\nbytes of uninitialized stack memory, because the fsxattr struct\ndeclared on the stack in xfs_ioc_fsgetxattr() does not alter (or zero)\nthe 12-byte fsx_pad member before copying it back to the user.  This\npatch takes care of it.\n\nSigned-off-by: Dan Rosenberg \u003cdan.j.rosenberg@gmail.com\u003e\nReviewed-by: Eric Sandeen \u003csandeen@redhat.com\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "80f6c29d8a758650d5c9eac05074b4b3e8c266df",
      "tree": "a08a3c49536e382a8f3e473c98d08613a0ac82fa",
      "parents": [
        "2cf6d26a354ab6362e301b5a323832b02867df47"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Wed Aug 18 05:29:11 2010 -0400"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Sep 10 12:35:38 2010 +0200"
      },
      "message": "xfs: replace barriers with explicit flush / FUA usage\n\nSwitch to the WRITE_FLUSH_FUA flag for log writes and remove the EOPNOTSUPP\ndetection for barriers.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "cb7a93412ab52361bc255cbe2c767e0741c09f43",
      "tree": "063b89ca160ac43b8df41cf6d12158c4ca7fe897",
      "parents": [
        "9af25465081480a75824fd7a16a37a5cfebeede9",
        "72656c46f50b8dfe50e15793692982e636e3df20"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Fri Sep 03 09:02:32 2010 -0500"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Fri Sep 03 09:02:32 2010 -0500"
      },
      "message": "Merge branch \u00272.6.36-xfs-misc\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/dgc/xfsdev\n"
    },
    {
      "commit": "9af25465081480a75824fd7a16a37a5cfebeede9",
      "tree": "475ea0ef9247b65b0ce8997ba581a87bd71c11b6",
      "parents": [
        "23963e54ce187ca6e907c83176c15508b0f6e60d"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "tao.ma@oracle.com",
        "time": "Mon Aug 30 02:44:03 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Fri Sep 03 09:02:11 2010 -0500"
      },
      "message": "xfs: Make fiemap work with sparse files\n\nIn xfs_vn_fiemap, we set bvm_count to fi_extent_max + 1 and want\nto return fi_extent_max extents, but actually it won\u0027t work for\na sparse file. The reason is that in xfs_getbmap we will\ncalculate holes and set it in \u0027out\u0027, while out is malloced by\nbmv_count(fi_extent_max+1) which didn\u0027t consider holes. So in the\nworst case, if \u0027out\u0027 vector looks like\n[hole, extent, hole, extent, hole, ... hole, extent, hole],\nwe will only return half of fi_extent_max extents.\n\nThis patch add a new parameter BMV_IF_NO_HOLES for bvm_iflags.\nSo with this flags, we don\u0027t use our \u0027out\u0027 in xfs_getbmap for\na hole. The solution is a bit ugly by just don\u0027t increasing\nindex of \u0027out\u0027 vector. I felt that it is not easy to skip it\nat the very beginning since we have the complicated check and\nsome function like xfs_getbmapx_fix_eof_hole to adjust \u0027out\u0027.\n\nCc: Dave Chinner \u003cdavid@fromorbit.com\u003e\nSigned-off-by: Tao Ma \u003ctao.ma@oracle.com\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "72656c46f50b8dfe50e15793692982e636e3df20",
      "tree": "8841c80c9cf5873c915a821e98f3ae09746ec9d8",
      "parents": [
        "9bc08a45fb117c696e4940cfa1208cb1cc7a2f25"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Fri Sep 03 12:19:33 2010 +1000"
      },
      "committer": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Fri Sep 03 12:19:33 2010 +1000"
      },
      "message": "xfs: prevent 32bit overflow in space reservation\n\nIf we attempt to preallocate more than 2^32 blocks of space in a\nsingle syscall, the transaction block reservation will overflow\nleading to a hangs in the superblock block accounting code. This\nis trivially reproduced with xfs_io. Fix the problem by capping the\nallocation reservation to the maximum number of blocks a single\nxfs_bmapi() call can allocate (2^21 blocks).\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "23963e54ce187ca6e907c83176c15508b0f6e60d",
      "tree": "9cac313a1dce67874c9711061ff10f82ccb7c4d0",
      "parents": [
        "2bfc96a127bc1cc94d26bfaa40159966064f9c8c"
      ],
      "author": {
        "name": "Arkadiusz Mi?kiewicz",
        "email": "arekm@maven.pl",
        "time": "Thu Aug 26 10:19:43 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Thu Sep 02 10:29:08 2010 -0500"
      },
      "message": "xfs: Disallow 32bit project quota id\n\nCurrently on-disk structure is able to keep only 16bit project quota\nid, so disallow 32bit ones. This fixes a problem where parts of\nkernel structures holding project quota id are 32bit while parts\n(on-disk) are 16bit variables which causes project quota member\nfiles to be inaccessible for some operations (like mv/rm).\n\nSigned-off-by: Arkadiusz Mi?kiewicz \u003carekm@maven.pl\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "9bc08a45fb117c696e4940cfa1208cb1cc7a2f25",
      "tree": "610e4cb520d62c4ad6ae0f20ddd64cd15520c33a",
      "parents": [
        "2bfc96a127bc1cc94d26bfaa40159966064f9c8c"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Thu Sep 02 15:14:38 2010 +1000"
      },
      "committer": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Thu Sep 02 15:14:38 2010 +1000"
      },
      "message": "xfs: improve buffer cache hash scalability\n\nWhen doing large parallel file creates on a 16p machines, large amounts of\ntime is being spent in _xfs_buf_find(). A system wide profile with perf top\nshows this:\n\n          1134740.00 19.3% _xfs_buf_find\n           733142.00 12.5% __ticket_spin_lock\n\nThe problem is that the hash contains 45,000 buffers, and the hash table width\nis only 256 buffers. That means we\u0027ve got around 200 buffers per chain, and\nsearching it is quite expensive. The hash table size needs to increase.\n\nSecondly, every time we do a lookup, we promote the buffer we find to the head\nof the hash chain. This is causing cachelines to be dirtied and causes\ninvalidation of cachelines across all CPUs that may have walked the hash chain\nrecently. hence every walk of the hash chain is effectively a cold cache walk.\nRemove the promotion to avoid this invalidation.\n\nThe results are:\n\n          1045043.00 21.2% __ticket_spin_lock\n           326184.00  6.6% _xfs_buf_find\n\nA 70% drop in the CPU usage when looking up buffers. Unfortunately that does\nnot result in an increase in performance underthis workload as contention on\nthe inode_lock soaks up most of the reduction in CPU usage.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "b5420f235953448eeae615b3361584dc5e414f34",
      "tree": "7c28ca9ee8a78d3d2a881a9269cd04ce88480e57",
      "parents": [
        "3b93c7aaefc05ee2a75e2726929b01a321402984"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Tue Aug 24 11:47:51 2010 +1000"
      },
      "committer": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Tue Aug 24 11:47:51 2010 +1000"
      },
      "message": "xfs: do not discard page cache data on EAGAIN\n\nIf xfs_map_blocks returns EAGAIN because of lock contention we must redirty the\npage and not disard the pagecache content and return an error from writepage.\nWe used to do this correctly, but the logic got lost during the recent\nreshuffle of the writepage code.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nReported-by: Mike Gao \u003cygao.linux@gmail.com\u003e\nTested-by: Mike Gao \u003cygao.linux@gmail.com\u003e\nReviewed-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\n"
    },
    {
      "commit": "3b93c7aaefc05ee2a75e2726929b01a321402984",
      "tree": "736a4017e86d65598ae7b30cb11412afd66f9629",
      "parents": [
        "a44f13edf0ebb4e41942d0f16ca80489dcf6659d"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Tue Aug 24 11:45:53 2010 +1000"
      },
      "committer": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Tue Aug 24 11:45:53 2010 +1000"
      },
      "message": "xfs: don\u0027t do memory allocation under the CIL context lock\n\nFormatting items requires memory allocation when using delayed\nlogging. Currently that memory allocation is done while holding the\nCIL context lock in read mode. This means that if memory allocation\ntakes some time (e.g. enters reclaim), we cannot push on the CIL\nuntil the allocation(s) required by formatting complete. This can\nstall CIL pushes for some time, and once a push is stalled so are\nall new transaction commits.\n\nFix this splitting the item formatting into two steps. The first\nstep which does the allocation and memcpy() into the allocated\nbuffer is now done outside the CIL context lock, and only the CIL\ninsert is done inside the CIL context lock. This avoids the stall\nissue.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "a44f13edf0ebb4e41942d0f16ca80489dcf6659d",
      "tree": "42bcbee56a62851e969292033efd600cced80ca5",
      "parents": [
        "1a387d3be2b30c90f20d49a3497a8fc0693a9d18"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Tue Aug 24 11:40:03 2010 +1000"
      },
      "committer": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Tue Aug 24 11:40:03 2010 +1000"
      },
      "message": "xfs: Reduce log force overhead for delayed logging\n\nDelayed logging adds some serialisation to the log force process to\nensure that it does not deference a bad commit context structure\nwhen determining if a CIL push is necessary or not. It does this by\ngrabing the CIL context lock exclusively, then dropping it before\npushing the CIL if necessary. This causes serialisation of all log\nforces and pushes regardless of whether a force is necessary or not.\nAs a result fsync heavy workloads (like dbench) can be significantly\nslower with delayed logging than without.\n\nTo avoid this penalty, copy the current sequence from the context to\nthe CIL structure when they are swapped. This allows us to do\nunlocked checks on the current sequence without having to worry\nabout dereferencing context structures that may have already been\nfreed. Hence we can remove the CIL context locking in the forcing\ncode and only call into the push code if the current context matches\nthe sequence we need to force.\n\nBy passing the sequence into the push code, we can check the\nsequence again once we have the CIL lock held exclusive and abort if\nthe sequence has already been pushed. This avoids a lock round-trip\nand unnecessary CIL pushes when we have racing push calls.\n\nThe result is that the regression in dbench performance goes away -\nthis change improves dbench performance on a ramdisk from ~2100MB/s\nto ~2500MB/s. This compares favourably to not using delayed logging\nwhich retuns ~2500MB/s for the same workload.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "1a387d3be2b30c90f20d49a3497a8fc0693a9d18",
      "tree": "4c8081f6620976dbfc3ecee0e26296c0890bceba",
      "parents": [
        "2fe33661fcd79d4c53022509f7223d526b5fa233"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Tue Aug 24 11:46:31 2010 +1000"
      },
      "committer": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Tue Aug 24 11:46:31 2010 +1000"
      },
      "message": "xfs: dummy transactions should not dirty VFS state\n\nWhen we  need to cover the log, we issue dummy transactions to ensure\nthe current log tail is on disk. Unfortunately we currently use the\nroot inode in the dummy transaction, and the act of committing the\ntransaction dirties the inode at the VFS level.\n\nAs a result, the VFS writeback of the dirty inode will prevent the\nfilesystem from idling long enough for the log covering state\nmachine to complete. The state machine gets stuck in a loop issuing\nnew dummy transactions to cover the log and never makes progress.\n\nTo avoid this problem, the dummy transactions should not cause\nexternally visible state changes. To ensure this occurs, make sure\nthat dummy transactions log an unchanging field in the superblock as\nit\u0027s state is never propagated outside the filesystem. This allows\nthe log covering state machine to complete successfully and the\nfilesystem now correctly enters a fully idle state about 90s after\nthe last modification was made.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "2fe33661fcd79d4c53022509f7223d526b5fa233",
      "tree": "1c26f0ca23372dc7142fa4f9395056c529378801",
      "parents": [
        "efceab1d563153a2b1a6e7d35376241a48126989"
      ],
      "author": {
        "name": "Stuart Brodsky",
        "email": "sbrodsky@sgi.com",
        "time": "Tue Aug 24 11:46:05 2010 +1000"
      },
      "committer": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Tue Aug 24 11:46:05 2010 +1000"
      },
      "message": "xfs: ensure f_ffree returned by statfs() is non-negative\n\nBecause of delayed updates to sb_icount field in the super block, it\nis possible to allocate over maxicount number of inodes.  This\ncauses the arithmetic to calculate a negative number of free inodes\nin user commands like df or stat -f.\n\nSince maxicount is a somewhat arbitrary number, a slight over\nallocation is not critical but user commands should be displayed as\n0 or greater and never go negative.  To do this the value in the\nstats buffer f_ffree is capped to never go negative.\n\n[ Modified to use max_t as per Christoph\u0027s comment. ]\n\nSigned-off-by: Stu Brodsky \u003csbrodsky@sgi.com\u003e\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\n"
    },
    {
      "commit": "efceab1d563153a2b1a6e7d35376241a48126989",
      "tree": "1c3f9cf4d947a60f4fa4055ef4847af084e9db0e",
      "parents": [
        "546a1924224078c6f582e68f890b05b387b42653"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Tue Aug 24 11:44:56 2010 +1000"
      },
      "committer": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Tue Aug 24 11:44:56 2010 +1000"
      },
      "message": "xfs: handle negative wbc-\u003enr_to_write during sync writeback\n\nDuring data integrity (WB_SYNC_ALL) writeback, wbc-\u003enr_to_write will\ngo negative on inodes with more than 1024 dirty pages due to\nimplementation details of write_cache_pages(). Currently XFS will\nabort page clustering in writeback once nr_to_write drops below\nzero, and so for data integrity writeback we will do very\ninefficient page at a time allocation and IO submission for inodes\nwith large numbers of dirty pages.\n\nFix this by only aborting the page clustering code when\nwbc-\u003enr_to_write is negative and the sync mode is WB_SYNC_NONE.\n\nCc: \u003cstable@kernel.org\u003e\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "4536f2ad8b330453d7ebec0746c4374eadd649b1",
      "tree": "55e4804119f4629279b1848b2a35eaf297b1d5bc",
      "parents": [
        "5b3eed756cd37255cad1181bd86bfd0977e97953"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Tue Aug 24 11:42:30 2010 +1000"
      },
      "committer": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Tue Aug 24 11:42:30 2010 +1000"
      },
      "message": "xfs: fix untrusted inode number lookup\n\nCommit 7124fe0a5b619d65b739477b3b55a20bf805b06d (\"xfs: validate untrusted inode\nnumbers during lookup\") changes the inode lookup code to do btree lookups for\nuntrusted inode numbers. This change made an invalid assumption about the\nalignment of inodes and hence incorrectly calculated the first inode in the\ncluster. As a result, some inode numbers were being incorrectly considered\ninvalid when they were actually valid.\n\nThe issue was not picked up by the xfstests suite because it always runs fsr\nand dump (the two utilities that utilise the bulkstat interface) on cache hot\ninodes and hence the lookup code in the cold cache path was not sufficiently\nexercised to uncover this intermittent problem.\n\nFix the issue by relaxing the btree lookup criteria and then checking if the\nrecord returned contains the inode number we are lookup for. If it we get an\nincorrect record, then the inode number is invalid.\n\nCc: \u003cstable@kernel.org\u003e\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "5b3eed756cd37255cad1181bd86bfd0977e97953",
      "tree": "3d6b178c346d5980dd650336c107abd9d75ee584",
      "parents": [
        "d17c701ce6a548a92f7f8a3cec20299465f36ee3"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Tue Aug 24 11:42:41 2010 +1000"
      },
      "committer": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Tue Aug 24 11:42:41 2010 +1000"
      },
      "message": "xfs: ensure we mark all inodes in a freed cluster XFS_ISTALE\n\nUnder heavy load parallel metadata loads (e.g. dbench), we can fail\nto mark all the inodes in a cluster being freed as XFS_ISTALE as we\nskip inodes we cannot get the XFS_ILOCK_EXCL or the flush lock on.\nWhen this happens and the inode cluster buffer has already been\nmarked stale and freed, inode reclaim can try to write the inode out\nas it is dirty and not marked stale. This can result in writing th\nmetadata to an freed extent, or in the case it has already\nbeen overwritten trigger a magic number check failure and return an\nEUCLEAN error such as:\n\nFilesystem \"ram0\": inode 0x442ba1 background reclaim flush failed with 117\n\nFix this by ensuring that we hoover up all in memory inodes in the\ncluster and mark them XFS_ISTALE when freeing the cluster.\n\nCc: \u003cstable@kernel.org\u003e\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "d17c701ce6a548a92f7f8a3cec20299465f36ee3",
      "tree": "26a4e52b998edf3762baea43c0d9755118240c8d",
      "parents": [
        "76be97c1fc945db08aae1f1b746012662d643e97"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Tue Aug 24 11:42:52 2010 +1000"
      },
      "committer": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Tue Aug 24 11:42:52 2010 +1000"
      },
      "message": "xfs: unlock items before allowing the CIL to commit\n\nWhen we commit a transaction using delayed logging, we need to\nunlock the items in the transaciton before we unlock the CIL context\nand allow it to be checkpointed. If we unlock them after we release\nthe CIl context lock, the CIL can checkpoint and complete before\nwe free the log items. This breaks stale buffer item unlock and\nunpin processing as there is an implicit assumption that the unlock\nwill occur before the unpin.\n\nAlso, some log items need to store the LSN of the transaction commit\nin the item (inodes and EFIs) and so can race with other transaction\ncompletions if we don\u0027t prevent the CIL from checkpointing before\nthe unlock occurs.\n\nCc: \u003cstable@kernel.org\u003e\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "5f248c9c251c60af3403902b26e08de43964ea0b",
      "tree": "6d3328e72a7e4015a64017eb30be18095c6a3c64",
      "parents": [
        "f6cec0ae58c17522a7bc4e2f39dae19f199ab534",
        "dca332528bc69e05f67161e1ed59929633d5e63d"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Aug 10 11:26:52 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Aug 10 11:26:52 2010 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6: (96 commits)\n  no need for list_for_each_entry_safe()/resetting with superblock list\n  Fix sget() race with failing mount\n  vfs: don\u0027t hold s_umount over close_bdev_exclusive() call\n  sysv: do not mark superblock dirty on remount\n  sysv: do not mark superblock dirty on mount\n  btrfs: remove junk sb_dirt change\n  BFS: clean up the superblock usage\n  AFFS: wait for sb synchronization when needed\n  AFFS: clean up dirty flag usage\n  cifs: truncate fallout\n  mbcache: fix shrinker function return value\n  mbcache: Remove unused features\n  add f_flags to struct statfs(64)\n  pass a struct path to vfs_statfs\n  update VFS documentation for method changes.\n  All filesystems that need invalidate_inode_buffers() are doing that explicitly\n  convert remaining -\u003eclear_inode() to -\u003eevict_inode()\n  Make -\u003edrop_inode() just return whether inode needs to be dropped\n  fs/inode.c:clear_inode() is gone\n  fs/inode.c:evict() doesn\u0027t care about delete vs. non-delete paths now\n  ...\n\nFix up trivial conflicts in fs/nilfs2/super.c\n"
    },
    {
      "commit": "b57922d97fd6f79b6dbe6db0c4fd30d219fa08c1",
      "tree": "1d39e9cd8e1c1f502fb7e985a08286859c69aa36",
      "parents": [
        "45321ac54316eaeeebde0b5f728a1791e500974c"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Jun 07 14:34:48 2010 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Aug 09 16:48:37 2010 -0400"
      },
      "message": "convert remaining -\u003eclear_inode() to -\u003eevict_inode()\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "a4ffdde6e56fdf8c34ddadc2674d6eb978083369",
      "tree": "0fa07df92d804cb7d0482135195e4835cb16403a",
      "parents": [
        "b5fc510c48f631882ccec3c0f02a25d5b67de09f"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Jun 02 17:38:30 2010 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Aug 09 16:47:44 2010 -0400"
      },
      "message": "simplify checks for I_CLEAR/I_FREEING\n\nadd I_CLEAR instead of replacing I_FREEING with it.  I_CLEAR is\nequivalent to I_FREEING for almost all code looking at either;\nit\u0027s there to keep track of having called clear_inode() exactly\nonce per inode lifetime, at some point after having set I_FREEING.\nI_CLEAR and I_FREEING never get set at the same time with the\ncurrent code, so we can switch to setting i_flags to I_FREEING | I_CLEAR\ninstead of I_CLEAR without loss of information.  As the result of\nsuch change, checks become simpler and the amount of code that needs\nto know about I_CLEAR shrinks a lot.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "fa9b227e9019ebaeeb06224ba531a490f91144b3",
      "tree": "ff3644c6572d2b22db0d8b71f1a79ae0ad33d102",
      "parents": [
        "2f246fd0f126f3b3c23a4e6b7109350e83356bd6"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Mon Jun 14 05:17:31 2010 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Aug 09 16:47:42 2010 -0400"
      },
      "message": "xfs: new truncate sequence\n\nConvert XFS to the new truncate sequence.  We still can have errors after\nupdating the file size in xfs_setattr, but these are real I/O errors and lead\nto a transaction abort and filesystem shutdown, so they are not an issue.\n\nErrors from -\u003ewrite_begin and write_end can now be handled correctly because\nwe can actually get rid of the delalloc extents while previous the buffer\nstate was stipped in block_invalidatepage.\n\nThere is still no error handling for -\u003edirect_IO, because doing so will need\nsome major restructuring given that we only have the iolock shared and do not\nhold i_mutex at all.  Fortunately leaving the normally allocated blocks behind\nthere is not a major issue and this will get cleaned up by xfs_free_eofblock\nlater.\n\nNote: the patch is against Al\u0027s vfs.git tree as that contains the nessecary\npreparations.  I\u0027d prefer to get it applied there so that we can get some\ntesting in linux-next.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "155130a4f7848b1aac439cab6bda1a175507c71c",
      "tree": "5019b14b0a9221b08959196e01e3f9326957d678",
      "parents": [
        "6e1db88d536adcbbfe562b2d4b7d6425784fff12"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Fri Jun 04 11:29:58 2010 +0200"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Aug 09 16:47:33 2010 -0400"
      },
      "message": "get rid of block_write_begin_newtrunc\n\nMove the call to vmtruncate to get rid of accessive blocks to the callers\nin preparation of the new truncate sequence and rename the non-truncating\nversion to block_write_begin.\n\nWhile we\u0027re at it also remove several unused arguments to block_write_begin.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "eafdc7d190a944c755a9fe68573c193e6e0217e7",
      "tree": "915c3cc8004706fabf88eae1ab123a3fa0147516",
      "parents": [
        "256249584bda1a9357e2d29987a37f5b2df035f6"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Fri Jun 04 11:29:53 2010 +0200"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Aug 09 16:47:29 2010 -0400"
      },
      "message": "sort out blockdev_direct_IO variants\n\nMove the call to vmtruncate to get rid of accessive blocks to the callers\nin prepearation of the new truncate calling sequence.  This was only done\nfor DIO_LOCKING filesystems, so the __blockdev_direct_IO_newtrunc variant\nwas not needed anyway.  Get rid of blockdev_direct_IO_no_locking and\nits _newtrunc variant while at it as just opencoding the two additional\nparamters is shorted than the name suffix.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "90e0c225968f0878e090c7ff3f88323973476cee",
      "tree": "30fff5a5cb18b08d40e4d496489be6ce714a6cde",
      "parents": [
        "938a73b959cf77aadc41bded3bf416b618aa20b3",
        "5f11e6a44059f728dddd8d0dbe5b4368ea93575b"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Aug 07 12:57:07 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Aug 07 12:57:07 2010 -0700"
      },
      "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:\n  ext3: Fix dirtying of journalled buffers in data\u003djournal mode\n  ext3: default to ordered mode\n  quota: Use mark_inode_dirty_sync instead of mark_inode_dirty\n  quota: Change quota error message to print out disk and function name\n  MAINTAINERS: Update entries of ext2 and ext3\n  MAINTAINERS: Update address of Andreas Dilger\n  ext3: Avoid filesystem corruption after a crash under heavy delete load\n  ext3: remove vestiges of nobh support\n  ext3: Fix set but unused variables\n  quota: clean up quota active checks\n  quota: Clean up the namespace in dqblk_xfs.h\n  quota: check quota reservation on remove_dquot_ref\n"
    },
    {
      "commit": "209fb87a259ead17e966627b7f053d16a96898da",
      "tree": "2cb348a32e2c1488cfb14189e975bcbcb6a0695f",
      "parents": [
        "fb511f2150174b18b28ad54708c1adda0df39b17"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Sun Jul 18 21:17:11 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Jul 26 16:09:19 2010 -0500"
      },
      "message": "xfs simplify and speed up direct I/O completions\n\nOur current handling of direct I/O completions is rather suboptimal,\nbecause we defer it to a workqueue more often than needed, and we\nperform a much to aggressive flush of the workqueue in case unwritten\nextent conversions happen.\n\nThis patch changes the direct I/O reads to not even use a completion\nhandler, as we don\u0027t bother to use it at all, and to perform the unwritten\nextent conversions in caller context for synchronous direct I/O.\n\nFor a small I/O size direct I/O workload on a consumer grade SSD, such as\nthe untar of a kernel tree inside qemu this patch gives speedups of\nabout 5%.  Getting us much closer to the speed of a native block device,\nor a fully allocated XFS file.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "fb511f2150174b18b28ad54708c1adda0df39b17",
      "tree": "2642c10c35a8dcbf7aa1e46115a5b48555aa258b",
      "parents": [
        "40e2e97316af6e62affab7a392e792494b8d9dde"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Sun Jul 18 21:17:10 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Jul 26 16:09:10 2010 -0500"
      },
      "message": "xfs: move aio completion after unwritten extent conversion\n\nIf we write into an unwritten extent using AIO we need to complete the AIO\nrequest after the extent conversion has finished.  Without that a read could\nrace to see see the extent still unwritten and return zeros.   For synchronous\nI/O we already take care of that by flushing the xfsconvertd workqueue (which\nmight be a bit of overkill).\n\nTo do that add iocb and result fields to struct xfs_ioend, so that we can\ncall aio_complete from xfs_end_io after the extent conversion has happened.\nNote that we need a new result field as io_error is used for positive errno\nvalues, while the AIO code can return negative error values and positive\ntransfer sizes.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "40e2e97316af6e62affab7a392e792494b8d9dde",
      "tree": "981ce3b464467893683d47f52ae5d35fdd32d46a",
      "parents": [
        "696123fca877905696591829c97a2cef11c8d048"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Sun Jul 18 21:17:09 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Jul 26 16:09:02 2010 -0500"
      },
      "message": "direct-io: move aio_complete into -\u003eend_io\n\nFilesystems with unwritten extent support must not complete an AIO request\nuntil the transaction to convert the extent has been commited.  That means\nthe aio_complete calls needs to be moved into the -\u003eend_io callback so\nthat the filesystem can control when to call it exactly.\n\nThis makes a bit of a mess out of dio_complete and the -\u003eend_io callback\nprototype even more complicated.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Jan Kara \u003cjack@suse.cz\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "696123fca877905696591829c97a2cef11c8d048",
      "tree": "d18c83ee0cd6148f156edb854996ea1554da78fd",
      "parents": [
        "ecd7f082d68d7fb1c96bcf72071aa85db9c00ddf"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Mon Jul 26 13:51:46 2010 -0500"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Jul 26 16:07:38 2010 -0500"
      },
      "message": "xfs: fix big endian build\n\nCommit 0fd7275cc42ab734eaa1a2c747e65479bd1e42af (\"xfs: fix gcc 4.6\nset but not read and unused statement warnings\") failed to convert\nsome code inside XFS_NATIVE_HOST (big endian host code only) and\nhence fails to build on such machines. Fix it.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "ecd7f082d68d7fb1c96bcf72071aa85db9c00ddf",
      "tree": "1cc4b35219fd1437ec52bc8519a5de96281ba00f",
      "parents": [
        "5d18898b20dfed5f373f8a9a7cbe01446036f8e9"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Thu Jul 22 12:52:08 2010 +1000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Jul 26 13:16:53 2010 -0500"
      },
      "message": "xfs: clean up xfs_bmap_get_bp\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nSigned-off-by: Dave Chinner \u003cdavid@fromorbit.com\u003e\n\n"
    }
  ],
  "next": "5d18898b20dfed5f373f8a9a7cbe01446036f8e9"
}
