)]}'
{
  "log": [
    {
      "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": "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": "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": "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"
    },
    {
      "commit": "5d18898b20dfed5f373f8a9a7cbe01446036f8e9",
      "tree": "dc96915d62c7140ad4ac33a3724ddf36f9db022f",
      "parents": [
        "939d723b721eef71060201738653a73443ff4510"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Tue Jul 20 17:51:31 2010 +1000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Jul 26 13:16:52 2010 -0500"
      },
      "message": "xfs: simplify xfs_truncate_file\n\nxfs_truncate_file is only used for truncating quota files.  Move it to\nxfs_qm_syscalls.c so it can be marked static and take advatange of the\nfact by removing the unused page cache validation and taking the iget\ninto the helper.\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"
    },
    {
      "commit": "939d723b721eef71060201738653a73443ff4510",
      "tree": "3965391cebe9f1e0c1acb0b394c50c1b83312aa3",
      "parents": [
        "a64afb057b607c04383ab5fb53c51421ba18c434"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Tue Jul 20 17:51:16 2010 +1000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Jul 26 13:16:52 2010 -0500"
      },
      "message": "xfs: kill the b_strat callback in xfs_buf\n\nThe b_strat callback is used by xfs_buf_iostrategy to perform additional\nchecks before submitting a buffer.  It is used in xfs_bwrite and when\nwriting out delayed buffers.  In xfs_bwrite it we can de-virtualize the\ncall easily as b_strat is set a few lines above the call to\nxfs_buf_iostrategy.  For the delayed buffers the rationale is a bit\nmore complicated:\n\n - there are three callers of xfs_buf_delwri_queue, which places buffers\n   on the delwri list:\n    (1) xfs_bdwrite - this sets up b_strat, so it\u0027s fine\n    (2) xfs_buf_iorequest.  None of the callers can have XBF_DELWRI set:\n\t- xlog_bdstrat is only used for log buffers, which are never delwri\n\t- _xfs_buf_read explicitly clears the delwri flag\n\t- xfs_buf_iodone_work retries log buffers only\n\t- xfsbdstrat - only used for reads, superblock writes without the\n\t  delwri flag, log I/O and file zeroing with explicitly allocated\n\t  buffers.\n\t- xfs_buf_iostrategy - only calls xfs_buf_iorequest if b_strat is\n\t  not set\n    (3) xfs_buf_unlock\n\t- only puts the buffer on the delwri list if the DELWRI flag is\n\t  already set.  The DELWRI flag is only ever set in xfs_bwrite,\n\t  xfs_buf_iodone_callbacks, or xfs_trans_log_buf.  For\n\t  xfs_buf_iodone_callbacks and xfs_trans_log_buf we require\n\t  an initialized buf item, which means b_strat was set to\n\t  xfs_bdstrat_cb in xfs_buf_item_init.\n\nConclusion: we can just get rid of the callback and replace it with\nexplicit calls to xfs_bdstrat_cb.\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"
    },
    {
      "commit": "a64afb057b607c04383ab5fb53c51421ba18c434",
      "tree": "8f90f37bbdf1c81311342d8781da1742b3192f74",
      "parents": [
        "0664ce8d0fde731d76fa7e86b3afb54f3a6830ff"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Tue Jul 20 17:50:52 2010 +1000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Jul 26 13:16:51 2010 -0500"
      },
      "message": "xfs: remove obsolete osyncisosync mount option\n\nSince Linux 2.6.33 the kernel has support for real O_SYNC, which made\nthe osyncisosync option a no-op.  Warn the users about this and remove\nthe mount flag for it.\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"
    },
    {
      "commit": "0664ce8d0fde731d76fa7e86b3afb54f3a6830ff",
      "tree": "c33c78d3a3e34ecc7f1ddda363040b57687b6b25",
      "parents": [
        "73523a2ecf03f0bfe7c36c244aff8a2ef2208a4a"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Tue Jul 20 17:31:01 2010 +1000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Jul 26 13:16:51 2010 -0500"
      },
      "message": "xfs: clean up filestreams helpers\n\nMove xfs_filestream_peek_ag, xxfs_filestream_get_ag and xfs_filestream_put_ag\nfrom xfs_filestream.h to xfs_filestream.c where it\u0027s only callers are, and\nremove the inline marker while we\u0027re at it to let the compiler decide on the\ninlining.  Also don\u0027t return a value from xfs_filestream_put_ag because\nwe don\u0027t need it.\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"
    },
    {
      "commit": "73523a2ecf03f0bfe7c36c244aff8a2ef2208a4a",
      "tree": "b6b1f2be9a4b276a41381a51fc7278bf7e365471",
      "parents": [
        "0f1a932f5d4d6ee71afb141914e2d5f11f27eee1"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Tue Jul 20 17:54:45 2010 +1000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Jul 26 13:16:51 2010 -0500"
      },
      "message": "xfs: fix gcc 4.6 set but not read and unused statement warnings\n\n[hch: dropped a few hunks that need structural changes instead]\n\nSigned-off-by: Andi Kleen \u003cak@linux.intel.com\u003e\nReviewed-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nSigned-off-by: Dave Chinner \u003cdavid@fromorbit.com\u003e\n\n"
    },
    {
      "commit": "0f1a932f5d4d6ee71afb141914e2d5f11f27eee1",
      "tree": "231f4a8cd8baa2a948205a842a4ebc323b162c35",
      "parents": [
        "3f34885cd7c6a3f4deea48e3bbc704d91d5704f4"
      ],
      "author": {
        "name": "Tony Luck",
        "email": "tony.luck@intel.com",
        "time": "Tue Jul 20 17:54:41 2010 +1000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Jul 26 13:16:50 2010 -0500"
      },
      "message": "xfs: Fix build when CONFIG_XFS_POSIX_ACL\u003dn\n\nWhen CONFIG_XFS_POSIX_ACL is not set \"xfs_check_acl\" is #defined\nto NULL - which breaks the code attempting to add a tracepoint\non this function.\n\nOnly define the tracepoint when the function exists.\n\nSigned-off-by: Tony Luck \u003ctony.luck@intel.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Dave Chinner \u003cdavid@fromorbit.com\u003e\n"
    },
    {
      "commit": "3f34885cd7c6a3f4deea48e3bbc704d91d5704f4",
      "tree": "c03bcdaf42d70d7e08df2cd629d5308870660bed",
      "parents": [
        "aea1b9532143218f8599ecedbbd6bfbf812385e1"
      ],
      "author": {
        "name": "Kulikov Vasiliy",
        "email": "segooon@gmail.com",
        "time": "Tue Jul 20 17:54:28 2010 +1000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Jul 26 13:16:50 2010 -0500"
      },
      "message": "xfs: fix unsigned underflow in xfs_free_eofblocks\n\nmap_len is unsigned. Checking map_len \u003c\u003d 0 is buggy when it should be\nbelow zero. So, check exact expression instead of map_len.\n\nSigned-off-by: Kulikov Vasiliy \u003csegooon@gmail.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Dave Chinner \u003cdavid@fromorbit.com\u003e\n"
    },
    {
      "commit": "aea1b9532143218f8599ecedbbd6bfbf812385e1",
      "tree": "3b6aa49dffcf982119999578324926a2dd955264",
      "parents": [
        "4a7edddcb5b14ddb5962e6906b6fd6b500d7a361"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Tue Jul 20 17:54:12 2010 +1000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Jul 26 13:16:49 2010 -0500"
      },
      "message": "xfs: use GFP_NOFS for page cache allocation\n\nAvoid a lockdep warning by preventing page cache allocation from\nrecursing back into the filesystem during memory reclaim.\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\nSigned-off-by: Dave Chinner \u003cdavid@fromorbit.com\u003e\n"
    },
    {
      "commit": "4a7edddcb5b14ddb5962e6906b6fd6b500d7a361",
      "tree": "e62253cc40f36bfa631f0dd316a16ac987d11dd4",
      "parents": [
        "438697064aaa2f64e0fcc6586582a3e7ec36005b"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Tue Jul 20 17:53:59 2010 +1000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Jul 26 13:16:49 2010 -0500"
      },
      "message": "xfs: fix memory reclaim recursion deadlock on locked inode buffer\n\nCalling into memory reclaim with a locked inode buffer can deadlock\nif memory reclaim tries to lock the inode buffer during inode\nteardown. Convert the relevant memory allocations to use KM_NOFS to\navoid this deadlock condition.\n\nReported-by: Peter Watkins \u003ctreestem@gmail.com\u003e\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\nSigned-off-by: Dave Chinner \u003cdavid@fromorbit.com\u003e\n"
    },
    {
      "commit": "438697064aaa2f64e0fcc6586582a3e7ec36005b",
      "tree": "d17c751af1c917656680d659073541fc954e04bd",
      "parents": [
        "2f11feabb19748c0ffa2eb82d438e8a91b9f6ea0"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Tue Jul 20 17:53:44 2010 +1000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Jul 26 13:16:49 2010 -0500"
      },
      "message": "xfs: fix xfs_trans_add_item() lockdep warnings\n\nxfs_trans_add_item() is called with ip-\u003ei_ilock held, which means it\nis unsafe for memory reclaim to recurse back into the filesystem\n(ilock is required in writeback). Hence the allocation needs to be\nKM_NOFS to avoid recursion.\n\nLockdep report indicating memory allocation being called with the\nip-\u003ei_ilock held is as follows:\n\n[ 1749.866796] \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n[ 1749.867788] [ INFO: inconsistent lock state ]\n[ 1749.868327] 2.6.35-rc3-dgc+ #25\n[ 1749.868741] ---------------------------------\n[ 1749.868741] inconsistent {IN-RECLAIM_FS-W} -\u003e {RECLAIM_FS-ON-W} usage.\n[ 1749.868741] dd/2835 [HC0[0]:SC0[0]:HE1:SE1] takes:\n[ 1749.868741]  (\u0026(\u0026ip-\u003ei_lock)-\u003emr_lock){++++?.}, at: [\u003cffffffff813170fb\u003e] xfs_ilock+0x10b/0x190\n[ 1749.868741] {IN-RECLAIM_FS-W} state was registered at:\n[ 1749.868741]   [\u003cffffffff810b3a97\u003e] __lock_acquire+0x437/0x1450\n[ 1749.868741]   [\u003cffffffff810b4b56\u003e] lock_acquire+0xa6/0x160\n[ 1749.868741]   [\u003cffffffff810a20b5\u003e] down_write_nested+0x65/0xb0\n[ 1749.868741]   [\u003cffffffff813170fb\u003e] xfs_ilock+0x10b/0x190\n[ 1749.868741]   [\u003cffffffff8134e819\u003e] xfs_reclaim_inode+0x99/0x310\n[ 1749.868741]   [\u003cffffffff8134f56b\u003e] xfs_inode_ag_walk+0x8b/0x150\n[ 1749.868741]   [\u003cffffffff8134f6bb\u003e] xfs_inode_ag_iterator+0x8b/0xf0\n[ 1749.868741]   [\u003cffffffff8134f7a8\u003e] xfs_reclaim_inode_shrink+0x88/0x90\n[ 1749.868741]   [\u003cffffffff81119d07\u003e] shrink_slab+0x137/0x1a0\n[ 1749.868741]   [\u003cffffffff8111bbe1\u003e] balance_pgdat+0x421/0x6a0\n[ 1749.868741]   [\u003cffffffff8111bf7d\u003e] kswapd+0x11d/0x320\n[ 1749.868741]   [\u003cffffffff8109ce56\u003e] kthread+0x96/0xa0\n[ 1749.868741]   [\u003cffffffff81035de4\u003e] kernel_thread_helper+0x4/0x10\n[ 1749.868741] irq event stamp: 4234335\n[ 1749.868741] hardirqs last  enabled at (4234335): [\u003cffffffff81147d25\u003e] kmem_cache_free+0x115/0x220\n[ 1749.868741] hardirqs last disabled at (4234334): [\u003cffffffff81147c4d\u003e] kmem_cache_free+0x3d/0x220\n[ 1749.868741] softirqs last  enabled at (4233112): [\u003cffffffff81084dd2\u003e] __do_softirq+0x142/0x260\n[ 1749.868741] softirqs last disabled at (4233095): [\u003cffffffff81035edc\u003e] call_softirq+0x1c/0x50\n[ 1749.868741] \n[ 1749.868741] other info that might help us debug this:\n[ 1749.868741] 2 locks held by dd/2835:\n[ 1749.868741]  #0:  (\u0026(\u0026ip-\u003ei_iolock)-\u003emr_lock#2){+.+.+.}, at: [\u003cffffffff81316edd\u003e] xfs_ilock_nowait+0xed/0x200\n[ 1749.868741]  #1:  (\u0026(\u0026ip-\u003ei_lock)-\u003emr_lock){++++?.}, at: [\u003cffffffff813170fb\u003e] xfs_ilock+0x10b/0x190\n[ 1749.868741] \n[ 1749.868741] stack backtrace:\n[ 1749.868741] Pid: 2835, comm: dd Not tainted 2.6.35-rc3-dgc+ #25\n[ 1749.868741] Call Trace:\n[ 1749.868741]  [\u003cffffffff810b1faa\u003e] print_usage_bug+0x18a/0x190\n[ 1749.868741]  [\u003cffffffff8104264f\u003e] ? save_stack_trace+0x2f/0x50\n[ 1749.868741]  [\u003cffffffff810b2400\u003e] ? check_usage_backwards+0x0/0xf0\n[ 1749.868741]  [\u003cffffffff810b2f11\u003e] mark_lock+0x331/0x400\n[ 1749.868741]  [\u003cffffffff810b3047\u003e] mark_held_locks+0x67/0x90\n[ 1749.868741]  [\u003cffffffff810b3111\u003e] lockdep_trace_alloc+0xa1/0xe0\n[ 1749.868741]  [\u003cffffffff81147419\u003e] kmem_cache_alloc+0x39/0x1e0\n[ 1749.868741]  [\u003cffffffff8133f954\u003e] kmem_zone_alloc+0x94/0xe0\n[ 1749.868741]  [\u003cffffffff8133f9be\u003e] kmem_zone_zalloc+0x1e/0x50\n[ 1749.868741]  [\u003cffffffff81335f02\u003e] xfs_trans_add_item+0x72/0xb0\n[ 1749.868741]  [\u003cffffffff81339e41\u003e] xfs_trans_ijoin+0xa1/0xd0\n[ 1749.868741]  [\u003cffffffff81319f82\u003e] xfs_itruncate_finish+0x312/0x5d0\n[ 1749.868741]  [\u003cffffffff8133cb87\u003e] xfs_free_eofblocks+0x227/0x280\n[ 1749.868741]  [\u003cffffffff8133cd18\u003e] xfs_release+0x138/0x190\n[ 1749.868741]  [\u003cffffffff813464c5\u003e] xfs_file_release+0x15/0x20\n[ 1749.868741]  [\u003cffffffff81150ebf\u003e] fput+0x13f/0x260\n[ 1749.868741]  [\u003cffffffff8114d8c2\u003e] filp_close+0x52/0x80\n[ 1749.868741]  [\u003cffffffff8114d9a9\u003e] sys_close+0xb9/0x120\n[ 1749.868741]  [\u003cffffffff81034ff2\u003e] system_call_fastpath+0x16/0x1b\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\nSigned-off-by: Dave Chinner \u003cdavid@fromorbit.com\u003e\n"
    },
    {
      "commit": "2f11feabb19748c0ffa2eb82d438e8a91b9f6ea0",
      "tree": "02564de802ac344b7c2048ed10438443356bfce1",
      "parents": [
        "ec53d1dbb3ca960e7b552397613358ba1dbd12bd"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Tue Jul 20 17:53:25 2010 +1000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Jul 26 13:16:48 2010 -0500"
      },
      "message": "xfs: simplify and remove xfs_ireclaim\n\nxfs_ireclaim has to get and put te pag structure because it is only\ncalled with the inode to reclaim. The one caller of this function\nalready has a reference on the pag and a pointer to is, so move the\nradix tree delete to the caller and remove xfs_ireclaim completely.\nThis avoids a xfs_perag_get/put on every inode being reclaimed.\n\nThe overhead was noticed in a bug report at:\n\nhttps://bugzilla.kernel.org/show_bug.cgi?id\u003d16348\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\nSigned-off-by: Dave Chinner \u003cdavid@fromorbit.com\u003e\n"
    },
    {
      "commit": "ec53d1dbb3ca960e7b552397613358ba1dbd12bd",
      "tree": "9b04fd4e4f1149ce0b5927c9f9a89d26fa6a3d4a",
      "parents": [
        "a4190f90b4e22bde8b01b0086e00dd95439e2edd"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Tue Jul 20 17:52:59 2010 +1000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Jul 26 13:16:48 2010 -0500"
      },
      "message": "xfs: don\u0027t block on buffer read errors\n\nxfs_buf_read() fails to detect dispatch errors before attempting to\nwait on sychronous IO. If there was an error, it will get stuck\nforever, waiting for an I/O that was never started. Make sure the\nerror is detected correctly.\n\nFurther, such a failure can leave locked pages in the page cache\nwhich will cause a later operation to hang on the page. Ensure that\nwe correctly process pages in the buffers when we get a dispatch\nerror.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Dave Chinner \u003cdavid@fromorbit.com\u003e\n"
    },
    {
      "commit": "a4190f90b4e22bde8b01b0086e00dd95439e2edd",
      "tree": "e92d34f18af6f06c0f637345286579d66c7fc659",
      "parents": [
        "fa17b25e9f95375081b43a741cf1c188682ec588"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Mon Jul 12 06:40:58 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Jul 26 13:16:47 2010 -0500"
      },
      "message": "xfs: move inode shrinker unregister even earlier\n\nI missed Dave Chinner\u0027s second revision of this change, and pushed\nhis first version out to the repository instead.\n\n\tcommit a476c59ebb279d738718edc0e3fb76aab3687114\n\tAuthor: Dave Chinner \u003cdchinner@redhat.com\u003e\n\nThis commit compensates for that by moving a block of code up a bit\nfurther, with a result that matches the the effect of Dave\u0027s second\nversion.\n\nDave\u0027s first version was:\n\tReviewed-by: Eric Sandeen \u003csandeen@redhat.com\u003e\nDave\u0027s second version was:\n\tReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\n\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\nReviewed-by: Eric Sandeen \u003csandeen@redhat.com\u003e\n"
    },
    {
      "commit": "fa17b25e9f95375081b43a741cf1c188682ec588",
      "tree": "6b1aee5edbffdcde5e803295c6c065d4a24fff13",
      "parents": [
        "78558fe8d8326b2395da33456cd9eec57ffc081a"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Sat Jul 03 09:21:17 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Jul 26 13:16:47 2010 -0500"
      },
      "message": "xfs: remove a dmapi leftover\n\nThe open_exec file operation is only added by the external dmapi\npatch.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Alex Elder \u003caelder@sgi.com\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "78558fe8d8326b2395da33456cd9eec57ffc081a",
      "tree": "cd0592501ea68c3ccc5f2372fcc00e51c9e61b9b",
      "parents": [
        "d4f7a5cbd5449a3d2097f601f588886ea7b70dc3"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Mon Jun 28 10:34:57 2010 -0400"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Jul 26 13:16:46 2010 -0500"
      },
      "message": "xfs: writepage always has buffers\n\nThese days we always have buffers thanks to -\u003epage_mkwrite.  And we\nalready have an assert a few lines above tripping in case that was\nnot true due to a bug.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "d4f7a5cbd5449a3d2097f601f588886ea7b70dc3",
      "tree": "79df9adda1c9aa606f55df507db5b328ac58fd59",
      "parents": [
        "651701d71da4dc0ac607f17a638e77906f0d280e"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Mon Jun 28 10:34:44 2010 -0400"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Jul 26 13:16:46 2010 -0500"
      },
      "message": "xfs: allow writeback from kswapd\n\nWe only need disable I/O from direct or memcg reclaim.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "651701d71da4dc0ac607f17a638e77906f0d280e",
      "tree": "13df2162d97f9fdd7bb6e2789740fc6e8225b123",
      "parents": [
        "2727ccc950ae17375b15005403e1c35ba8fec1df"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Mon Jun 28 10:34:34 2010 -0400"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Jul 26 13:16:45 2010 -0500"
      },
      "message": "xfs: remove incorrect log write optimization\n\nWe do need a barrier for the first buffer of a split log write.\nOtherwise we might incorrectly stamp the tail LSN into transactions\nin the first part of the split write, or not flush data I/O before\nupdating the inode size.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "2727ccc950ae17375b15005403e1c35ba8fec1df",
      "tree": "7e405f93bc25589e8506701f73da8344f2856907",
      "parents": [
        "cca28fb83d9e60779bb348edc33a62068e5f04a4"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Fri Jun 25 11:08:40 2010 +1000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Jul 26 13:16:45 2010 -0500"
      },
      "message": "xfs: unregister inode shrinker before freeing filesystem structures\n\nCurrently we don\u0027t remove the XFS mount from the shrinker list until\nlate in the unmount path. By this time, we have already torn down\nthe internals of the filesystem (e.g. the per-ag structures), and\nhence if the shrinker is executed between the teardown and the\nunregistering, the shrinker will get NULL per-ag structure pointers\nand panic trying to dereference them.\n\nFix this by removing the xfs mount from the shrinker list before\ntearing down it\u0027s internal structures.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Eric Sandeen \u003csandeen@redhat.com\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "cca28fb83d9e60779bb348edc33a62068e5f04a4",
      "tree": "182ab465eadfb00ff4e1d0717b6dea127cba18e3",
      "parents": [
        "f2d6761433d69d94e0b39ac44ef0f0f0b0508065"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Thu Jun 24 11:57:09 2010 +1000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Jul 26 13:16:44 2010 -0500"
      },
      "message": "xfs: split xfs_itrace_entry\n\nReplace the xfs_itrace_entry catchall with specific trace points.  For\nmost simple callers we now use the simple inode class, which used to\nbe the iget class, but add more details tracing for namespace events,\nwhich now includes the name of the directory entries manipulated.\n\nRemove the xfs_inactive trace point, which is a duplicate of the clear_inode\none, and the xfs_change_file_space trace point, which is immediately\nfollowed by the more specific alloc/free space trace points.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Dave Chinner \u003cdchinner@redhat.com\u003e\n\n"
    },
    {
      "commit": "f2d6761433d69d94e0b39ac44ef0f0f0b0508065",
      "tree": "12b33cc84c66146b9dc16f8df4884a7e6345f20f",
      "parents": [
        "ef35e9255d4ed12522e836fbcec861e7306d794a"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Thu Jun 24 11:52:50 2010 +1000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Jul 26 13:16:44 2010 -0500"
      },
      "message": "xfs: remove xfs_iput\n\nxfs_iput is just a small wrapper for xfs_iunlock + IRELE.  Having this\nout of line wrapper means the trace events in those two can\u0027t track\ntheir caller properly.  So just remove the wrapper and opencode the\nunlock + rele in the few callers.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Dave Chinner \u003cdchinner@redhat.com\u003e\n\n"
    },
    {
      "commit": "ef35e9255d4ed12522e836fbcec861e7306d794a",
      "tree": "4ae5b2aef3f8dac9dd44490f6952e359239aa117",
      "parents": [
        "d2e078c33c24f97411b0fdd7cd2173e68125e7e3"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Thu Jun 24 11:51:19 2010 +1000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Jul 26 13:16:44 2010 -0500"
      },
      "message": "xfs: remove xfs_iput_new\n\nWe never get an i_mode of 0 or a locked VFS inode until we pass in the\nXFS_IGET_CREATE flag to xfs_iget, which makes xfs_iput_new equivalent to\nxfs_iput for the only caller.  In addition to that xfs_nfs_get_inode\ndoes not even need to lock the inode given that the generation never changes\nfor a life inode, so just pass a 0 lock_flags to xfs_iget and release\nthe inode using IRELE in the error path.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Dave Chinner \u003cdchinner@redhat.com\u003e\n\n"
    },
    {
      "commit": "d2e078c33c24f97411b0fdd7cd2173e68125e7e3",
      "tree": "596dafaa5f9f6336a62350a889926184a93a3850",
      "parents": [
        "807cbbdb438d172b87b380eebc1f1c1a5a3549b2"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Thu Jun 24 11:50:22 2010 +1000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Jul 26 13:16:43 2010 -0500"
      },
      "message": "xfs: some iget tracing cleanups / fixes\n\nThe xfs_iget_alloc/found tracepoints are a bit misnamed and misplaced.\nRename them to xfs_iget_hit/xfs_iget_miss and move them to the beggining\nof the xfs_iget_cache_hit/miss functions.  Add a new xfs_iget_reclaim_fail\ntracepoint for the case where we fail to re-initialize a VFS inode,\nand add a second instance of the xfs_iget_skip tracepoint for the case\nof a failed igrab() call.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Dave Chinner \u003cdchinner@redhat.com\u003e\n\n"
    },
    {
      "commit": "807cbbdb438d172b87b380eebc1f1c1a5a3549b2",
      "tree": "633d0d170c987800ddcdbe94aa91f65f8ee5686e",
      "parents": [
        "64c86149410bc62d9ac27a0594b3402a2aca03d8"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Thu Jun 24 11:49:12 2010 +1000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Jul 26 13:16:43 2010 -0500"
      },
      "message": "xfs: do not use emums for flags used in tracing\n\nThe tracing code can\u0027t print flags defined as enums.  Most flags that\nwe want to print are defines as macros already, but move the few remaining\nones over to make the trace output more useful.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Dave Chinner \u003cdchinner@redhat.com\u003e\n\n"
    },
    {
      "commit": "64c86149410bc62d9ac27a0594b3402a2aca03d8",
      "tree": "58ba57bd091ad80c1c7592bdd7539b10c3e3f6b8",
      "parents": [
        "f2bde9b89b4d67c9bc3b963cb996f449ddcd27a4"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Thu Jun 24 11:45:34 2010 +1000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Jul 26 13:16:42 2010 -0500"
      },
      "message": "xfs: remove explicit xfs_sync_data/xfs_sync_attr calls on umount\n\nOn the final put of a superblock the VFS already calls sync_filesystem\nfor us to write out all data and wait for it.  No need to start another\nasynchronous writeback inside -\u003eput_super.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Dave Chinner \u003cdchinner@redhat.com\u003e\n\n"
    },
    {
      "commit": "f2bde9b89b4d67c9bc3b963cb996f449ddcd27a4",
      "tree": "3f5ce631c4f0057776bdf38fcde1b34b359f3376",
      "parents": [
        "3070451eea1ed8e3bde0573183c7d8ac25fd5e97"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Thu Jun 24 11:44:35 2010 +1000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Jul 26 13:16:42 2010 -0500"
      },
      "message": "xfs: small cleanups for xfs_iomap / __xfs_get_blocks\n\nRemove the flags argument to  __xfs_get_blocks as we can easily derive\nit from the direct argument, and remove the unused BMAPI_MMAP flag.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Dave Chinner \u003cdchinner@redhat.com\u003e\n\n"
    },
    {
      "commit": "3070451eea1ed8e3bde0573183c7d8ac25fd5e97",
      "tree": "667aee111d96e885021e261647fe4ec3cdb1f08a",
      "parents": [
        "7a36c8a98a7dd05756bb147be2ac350325ff5830"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Thu Jun 24 11:42:19 2010 +1000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Jul 26 13:16:42 2010 -0500"
      },
      "message": "xfs: reduce stack usage in xfs_iomap\n\nxfs_iomap passes a xfs_bmbt_irec pointer to xfs_iomap_write_direct and\nxfs_iomap_write_allocate to give them the results of our read-only\nxfs_bmapi query.  Instead of allocating a new xfs_bmbt_irec on stack\nfor the next call to xfs_bmapi re use the one we got passed as it\u0027s not\nused after this point.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Dave Chinner \u003cdchinner@redhat.com\u003e\n\n"
    },
    {
      "commit": "7a36c8a98a7dd05756bb147be2ac350325ff5830",
      "tree": "7a95c3e6090f209aecd0a1d5532ec577862248ca",
      "parents": [
        "20cb52ebd1b5ca6fa8a5d9b6b1392292f5ca8a45"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Thu Jun 24 11:39:25 2010 +1000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Jul 26 13:16:41 2010 -0500"
      },
      "message": "xfs: avoid synchronous transaction in xfs_fs_write_inode\n\nWe already rely on the fact that the sync code will cause a synchronous\nlog force later on (currently via xfs_fs_sync_fs -\u003e xfs_quiesce_data -\u003e\nxfs_sync_data), so no need to do this here.  This allows us to avoid\na lot of synchronous log forces during sync, which pays of especially\nwith delayed logging enabled.   Some compilebench numbers that show\nthis:\n\nxfs (delayed logging, 256k logbufs)\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\nintial create\t\t  25.94 MB/s\t  25.75 MB/s\t  25.64 MB/s\ncreate\t\t\t   8.54 MB/s\t   9.12 MB/s\t   9.15 MB/s\npatch\t\t\t   2.47 MB/s\t   2.47 MB/s\t   3.17 MB/s\ncompile\t\t\t  29.65 MB/s\t  30.51 MB/s\t  27.33 MB/s\nclean\t\t\t  90.92 MB/s\t  98.83 MB/s\t 128.87 MB/s\nread tree\t\t  11.90 MB/s\t  11.84 MB/s\t   8.56 MB/s\nread compiled\t\t  28.75 MB/s\t  29.96 MB/s\t  24.25 MB/s\ndelete tree\t\t8.39 seconds\t8.12 seconds\t8.46 seconds\ndelete compiled\t\t8.35 seconds\t8.44 seconds\t5.11 seconds\nstat tree\t\t6.03 seconds\t5.59 seconds\t5.19 seconds\nstat compiled tree\t9.00 seconds\t9.52 seconds\t8.49 seconds\n\nxfs + write_inode log_force removal\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\nintial create\t\t  25.87 MB/s\t  25.76 MB/s\t  25.87 MB/s\ncreate\t\t\t  15.18 MB/s\t  14.80 MB/s\t  14.94 MB/s\npatch\t\t\t   3.13 MB/s\t   3.14 MB/s\t   3.11 MB/s\ncompile\t\t\t  36.74 MB/s\t  37.17 MB/s\t  36.84 MB/s\nclean\t\t\t 226.02 MB/s\t 222.58 MB/s\t 217.94 MB/s\nread tree\t\t  15.14 MB/s\t  15.02 MB/s\t  15.14 MB/s\nread compiled tree\t  29.30 MB/s\t  29.31 MB/s\t  29.32 MB/s\ndelete tree\t\t6.22 seconds\t6.14 seconds\t6.15 seconds\ndelete compiled tree\t5.75 seconds\t5.92 seconds\t5.81 seconds\nstat tree\t\t4.60 seconds\t4.51 seconds\t4.56 seconds\nstat compiled tree\t4.07 seconds\t3.87 seconds\t3.96 seconds\n\nIn addition to that also remove the delwri inode flush that is unessecary\nnow that bulkstat is always coherent.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Dave Chinner \u003cdchinner@redhat.com\u003e\n\n"
    },
    {
      "commit": "20cb52ebd1b5ca6fa8a5d9b6b1392292f5ca8a45",
      "tree": "c4644ab4b8b12d2c6100fb47c7dfa4c5949107ca",
      "parents": [
        "89f3b363967a958e756a549c8747c1fb9c930c1a"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Thu Jun 24 09:46:01 2010 +1000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Jul 26 13:16:41 2010 -0500"
      },
      "message": "xfs: simplify xfs_vm_writepage\n\nThe writepage implementation in XFS still tries to deal with dirty but\nunmapped buffers which used to caused by writes through shared mmaps.  Since\nthe introduction of -\u003epage_mkwrite these can\u0027t happen anymore, so remove the\ncode dealing with them.\n\nNote that the all_bh variable which causes us to start I/O on all buffers on\nthe pages was controlled by the count of unmapped buffers, which also\nincluded those not actually dirty.  It\u0027s now unconditionally initialized to\n0 but set to 1 for the case of small file size extensions.  It probably can\nbe removed entirely, but that\u0027s left for another patch.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Dave Chinner \u003cdchinner@redhat.com\u003e\n\n"
    },
    {
      "commit": "89f3b363967a958e756a549c8747c1fb9c930c1a",
      "tree": "445282b1c9de68e6b209444317c2fee3b2e5f095",
      "parents": [
        "3d9b02e3c76531687ab5314e0edf266256f13c2d"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Thu Jun 24 09:45:48 2010 +1000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Jul 26 13:16:40 2010 -0500"
      },
      "message": "xfs: simplify xfs_vm_releasepage\n\nCurrently the xfs releasepage implementation has code to deal with converting\ndelayed allocated and unwritten space.  But we never get called for those as\nwe always convert delayed and unwritten space when cleaning a page, or drop\nthe state from the buffers in block_invalidatepage.  We still keep a WARN_ON\non those cases for now, but remove all the case dealing with it, which allows\nto fold xfs_page_state_convert into xfs_vm_writepage and remove the !startio\ncase from the whole writeback path.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Dave Chinner \u003cdchinner@redhat.com\u003e\n"
    },
    {
      "commit": "3d9b02e3c76531687ab5314e0edf266256f13c2d",
      "tree": "f730a4da55eb1536227ebe0f976f878f0e08181b",
      "parents": [
        "b4e9181e772b0c8b9038c5822ead368b96c2b533"
      ],
      "author": {
        "name": "Eric Sandeen",
        "email": "sandeen@sandeen.net",
        "time": "Thu Jun 24 09:45:30 2010 +1000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Jul 26 13:16:40 2010 -0500"
      },
      "message": "xfs: fix corruption case for block size \u003c page size\n\nxfstests 194 first truncats a file back and then extends it again by\ntruncating it to a larger size.  This causes discard_buffer to drop\nthe mapped, but not the uptodate bit and thus creates something that\nxfs_page_state_convert takes for unmapped space created by mmap because\nit doesn\u0027t check for the dirty bit, which also gets cleared by\ndiscard_buffer and checked by other -\u003ewritepage implementations like\nblock_write_full_page.  Handle this kind of buffers early, and unlike\nEric\u0027s first version of the patch simply ASSERT that the buffers is\ndirty, given that the mmap write case can\u0027t happen anymore since the\nintroduction of -\u003epage_mkwrite.  The now dead code dealing with that\nwill be deleted in a follow on patch.\n\nSigned-off-by: Eric Sandeen \u003csandeen@sandeen.net\u003e\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Dave Chinner \u003cdchinner@redhat.com\u003e\n"
    },
    {
      "commit": "b4e9181e772b0c8b9038c5822ead368b96c2b533",
      "tree": "2c6cd32cb72a5c7450fefca3701ebc774e830f1c",
      "parents": [
        "cd8b0bb3c49d0691e9e7b4cf19e21ca63b92c053"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Wed Jun 23 18:11:15 2010 +1000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Jul 26 13:16:39 2010 -0500"
      },
      "message": "xfs: remove unused delta tracking code in xfs_bmapi\n\nThis code was introduced four years ago in commit\n3e57ecf640428c01ba1ed8c8fc538447ada1715b without any review and has\nbeen unused since.  Remove it just as the rest of the code introduced\nin that commit to reduce that stack usage and complexity in this central\npiece of code.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Dave Chinner \u003cdchinner@redhat.com\u003e\n\n"
    },
    {
      "commit": "cd8b0bb3c49d0691e9e7b4cf19e21ca63b92c053",
      "tree": "2cefaf57f221ba8c8939ff31884f82bad4f3894a",
      "parents": [
        "a59f55703c3725b2fa582924f51db62b58be05bb"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Wed Jun 23 18:11:15 2010 +1000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Jul 26 13:16:39 2010 -0500"
      },
      "message": "xfs: remove unused XFS_BMAPI_ flags\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Dave Chinner \u003cdchinner@redhat.com\u003e\n\n"
    },
    {
      "commit": "a59f55703c3725b2fa582924f51db62b58be05bb",
      "tree": "7abe7668bd7d599952a567f97de814f9171807ab",
      "parents": [
        "9134c2332ecb9154860669d778ef2808f06503ec"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Wed Jun 23 18:11:15 2010 +1000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Jul 26 13:16:38 2010 -0500"
      },
      "message": "xfs: remove the unused XFS_TRANS_NOSLEEP/XFS_TRANS_WAIT flags\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Dave Chinner \u003cdchinner@redhat.com\u003e\n\n"
    },
    {
      "commit": "9134c2332ecb9154860669d778ef2808f06503ec",
      "tree": "544fa9e5ffc843b10231573ef25c0b358f9fa6bb",
      "parents": [
        "dbb2f6529feeee8f4de77849edeee2e60c40c805"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Wed Jun 23 18:11:15 2010 +1000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Jul 26 13:16:38 2010 -0500"
      },
      "message": "xfs: remove the unused XFS_LOG_SLEEP and XFS_LOG_NOSLEEP flags\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Dave Chinner \u003cdchinner@redhat.com\u003e\n\n"
    },
    {
      "commit": "dbb2f6529feeee8f4de77849edeee2e60c40c805",
      "tree": "194bd508bb6dd59114750962b7992bbb1fd82a05",
      "parents": [
        "4e0d5f926b80b06234a4ed664d6ae8c54fb08c4b"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Wed Jun 23 18:11:15 2010 +1000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Jul 26 13:16:37 2010 -0500"
      },
      "message": "xfs: kill the unused xlog_debug variable\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Dave Chinner \u003cdchinner@redhat.com\u003e\n\n"
    },
    {
      "commit": "4e0d5f926b80b06234a4ed664d6ae8c54fb08c4b",
      "tree": "6e8412c8e0dec25e5e895acb3e73fc25855800dd",
      "parents": [
        "898621d5a72c6799a9a13fce20443b4b6699899c"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Wed Jun 23 18:11:15 2010 +1000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Jul 26 13:16:36 2010 -0500"
      },
      "message": "xfs: fix the xfs_log_iovec i_addr type\n\nBy making this member a void pointer we can get rid of a lot of pointless\ncasts.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Dave Chinner \u003cdchinner@redhat.com\u003e\n\n"
    },
    {
      "commit": "898621d5a72c6799a9a13fce20443b4b6699899c",
      "tree": "6cd994bd8d24f4f4f6ac5b5b57e0b99ee02d4ba6",
      "parents": [
        "4d16e9246fc3b3cf7bc95609eff66929a39daa06"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Thu Jun 24 11:36:58 2010 +1000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Jul 26 13:16:36 2010 -0500"
      },
      "message": "xfs: simplify inode to transaction joining\n\nCurrently we need to either call IHOLD or xfs_trans_ihold on an inode when\njoining it to a transaction via xfs_trans_ijoin.\n\nThis patches instead makes xfs_trans_ijoin usable on it\u0027s own by doing\nan implicity xfs_trans_ihold, which also allows us to drop the third\nargument.  For the case where we want to hold a reference on the inode\na xfs_trans_ijoin_ref wrapper is added which does the IHOLD and marks\nthe inode for needing an xfs_iput.  In addition to the cleaner interface\nto the caller this also simplifies the implementation.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Dave Chinner \u003cdchinner@redhat.com\u003e\n\n"
    },
    {
      "commit": "4d16e9246fc3b3cf7bc95609eff66929a39daa06",
      "tree": "d3e1cb33c3394b7cb95f390a85acb48c80fd5f54",
      "parents": [
        "ca30b2a7b7ac899ac4da6030ccbebf2f137b8e6d"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Wed Jun 23 18:11:15 2010 +1000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Jul 26 13:16:36 2010 -0500"
      },
      "message": "xfs: simplify buffer pinning\n\nGet rid of the xfs_buf_pin/xfs_buf_unpin/xfs_buf_ispin helpers and opencode\nthem in their only callers, just like we did for the inode pinning a while\nago.  Also remove duplicate trace points - the bufitem tracepoints cover\nall the information that is present in a buffer tracepoint.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Dave Chinner \u003cdchinner@redhat.com\u003e\n\n"
    },
    {
      "commit": "ca30b2a7b7ac899ac4da6030ccbebf2f137b8e6d",
      "tree": "b934c18bb70196aa44c7eb586569692e1b889f82",
      "parents": [
        "7bfa31d8e0f90b65ff23be94fca65ce261b43fc8"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Wed Jun 23 18:11:15 2010 +1000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Jul 26 13:16:35 2010 -0500"
      },
      "message": "xfs: give li_cb callbacks the correct prototype\n\nStop the function pointer casting madness and give all the li_cb instances\ncorrect prototype.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Dave Chinner \u003cdchinner@redhat.com\u003e\n\n"
    },
    {
      "commit": "7bfa31d8e0f90b65ff23be94fca65ce261b43fc8",
      "tree": "dbf7bfd8ce06baca8fd23aeac3c99fa73c07a8bb",
      "parents": [
        "9412e3181c0ef82efc3d8e88d73e583ec10c34e9"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Wed Jun 23 18:11:15 2010 +1000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Jul 26 13:16:35 2010 -0500"
      },
      "message": "xfs: give xfs_item_ops methods the correct prototypes\n\nStop the function pointer casting madness and give all the xfs_item_ops the\ncorrect prototypes.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Dave Chinner \u003cdchinner@redhat.com\u003e\n\n"
    },
    {
      "commit": "9412e3181c0ef82efc3d8e88d73e583ec10c34e9",
      "tree": "10ed24cdebd9922e7cd9414941e5c59e9e5fafab",
      "parents": [
        "e98c414f9a3134fe7efc56ef8f1d394b54bfd40e"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Wed Jun 23 18:11:15 2010 +1000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Jul 26 13:16:34 2010 -0500"
      },
      "message": "xfs: merge iop_unpin_remove into iop_unpin\n\nThe unpin_remove item operation instances always share most of the\nimplementation with the respective unpin implementation.  So instead\nof keeping two different entry points add a remove flag to the unpin\noperation and share the code more easily.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Dave Chinner \u003cdchinner@redhat.com\u003e\n\n"
    },
    {
      "commit": "e98c414f9a3134fe7efc56ef8f1d394b54bfd40e",
      "tree": "b3d4696cfb4875af39041f9ddcd642bd1cd90a29",
      "parents": [
        "3400777ff03a3cd4fdbc6cb15676fc7e7ceefc00"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Wed Jun 23 18:11:15 2010 +1000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Jul 26 13:16:34 2010 -0500"
      },
      "message": "xfs: simplify log item descriptor tracking\n\nCurrently we track log item descriptor belonging to a transaction using a\ncomplex opencoded chunk allocator.  This code has been there since day one\nand seems to work around the lack of an efficient slab allocator.\n\nThis patch replaces it with dynamically allocated log item descriptors\nfrom a dedicated slab pool, linked to the transaction by a linked list.\n\nThis allows to greatly simplify the log item descriptor tracking to the\npoint where it\u0027s just a couple hundred lines in xfs_trans.c instead of\na separate file.  The external API has also been simplified while we\u0027re\nat it - the xfs_trans_add_item and xfs_trans_del_item functions to add/\ndelete items from a transaction have been simplified to the bare minium,\nand the xfs_trans_find_item function is replaced with a direct dereference\nof the li_desc field.  All debug code walking the list of log items in\na transaction is down to a simple list_for_each_entry.\n\nNote that we could easily use a singly linked list here instead of the\ndouble linked list from list.h as the fastpath only does deletion from\nsequential traversal.  But given that we don\u0027t have one available as\na library function yet I use the list.h functions for simplicity.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Dave Chinner \u003cdchinner@redhat.com\u003e\n\n"
    },
    {
      "commit": "3400777ff03a3cd4fdbc6cb15676fc7e7ceefc00",
      "tree": "aac7652d73e481b35389c14b179ce17b5f31d818",
      "parents": [
        "288699fecaffa1ef8f75f92020cbb593a772e487"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Wed Jun 23 18:11:15 2010 +1000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Jul 26 13:16:33 2010 -0500"
      },
      "message": "xfs: remove unneeded #include statements\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Dave Chinner \u003cdavid@fromorbit.com\u003e\n\n"
    },
    {
      "commit": "288699fecaffa1ef8f75f92020cbb593a772e487",
      "tree": "0b8dff3cff671a429739e1b30c8dcfedc40c19a7",
      "parents": [
        "b37fa16e78d6f9790462b3181602a26b5af36260"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Wed Jun 23 18:11:15 2010 +1000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Jul 26 13:16:33 2010 -0500"
      },
      "message": "xfs: drop dmapi hooks\n\nDmapi support was never merged upstream, but we still have a lot of hooks\nbloating XFS for it, all over the fast pathes of the filesystem.\n\nThis patch drops over 700 lines of dmapi overhead.  If we\u0027ll ever get HSM\nsupport in mainline at least the namespace events can be done much saner\nin the VFS instead of the individual filesystem, so it\u0027s not like this\nis much help for future work.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Dave Chinner \u003cdchinner@redhat.com\u003e\n\n"
    },
    {
      "commit": "ade7ce31c22e961dfbe1a6d57fd362c90c187cbd",
      "tree": "96a64a3ae76a182e80db8457e49aa30355b54ae3",
      "parents": [
        "7af9cce8ae467bb2fcf3b0b6be3898835bdb984c"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Fri Jun 04 10:56:01 2010 +0200"
      },
      "committer": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Wed Jul 21 16:01:46 2010 +0200"
      },
      "message": "quota: Clean up the namespace in dqblk_xfs.h\n\nAlmost all identifiers use the FS_* namespace, so rename the missing few\nXFS_* ones to FS_* as well.  Without this some people might get upset\nabout having too many XFS names in generic code.\n\nAcked-by: Steven Whitehouse \u003cswhiteho@redhat.com\u003e\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\n"
    },
    {
      "commit": "16fd5367370099b59d96e30bb7d9de8d419659f2",
      "tree": "a9c12adb84f363ac48a0846de7a9464b1631e464",
      "parents": [
        "70e60ce71516c3a9e882edb70a09f696a05961db"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Tue Jul 20 09:43:39 2010 +1000"
      },
      "committer": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Tue Jul 20 09:43:39 2010 +1000"
      },
      "message": "xfs: track AGs with reclaimable inodes in per-ag radix tree\n\nhttps://bugzilla.kernel.org/show_bug.cgi?id\u003d16348\n\nWhen the filesystem grows to a large number of allocation groups,\nthe summing of recalimable inodes gets expensive. In many cases,\nmost AGs won\u0027t have any reclaimable inodes and so we are wasting CPU\ntime aggregating over these AGs. This is particularly important for\nthe inode shrinker that gets called frequently under memory\npressure.\n\nTo avoid the overhead, track AGs with reclaimable inodes in the\nper-ag radix tree so that we can find all the AGs with reclaimable\ninodes via a simple gang tag lookup. This involves setting the tag\nwhen the first reclaimable inode is tracked in the AG, and removing\nthe tag when the last reclaimable inode is removed from the tree.\nThen the summation process becomes a loop walking the radix tree\nsumming AGs with the reclaim tag set.\n\nThis significantly reduces the overhead of scanning - a 6400 AG\nfilesystea now only uses about 25% of a cpu in kswapd while slab\nreclaim progresses instead of being permanently stuck at 100% CPU\nand making little progress. Clean filesystems filesystems will see\nno overhead and the overhead only increases linearly with the number\nof dirty AGs.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "70e60ce71516c3a9e882edb70a09f696a05961db",
      "tree": "324a400f2d21d071f6c462edbb6efa789125f6f1",
      "parents": [
        "7f8275d0d660c146de6ee3017e1e2e594c49e820"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Tue Jul 20 08:07:02 2010 +1000"
      },
      "committer": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Tue Jul 20 08:07:02 2010 +1000"
      },
      "message": "xfs: convert inode shrinker to per-filesystem contexts\n\nNow the shrinker passes us a context, wire up a shrinker context per\nfilesystem. This allows us to remove the global mount list and the\nlocking problems that introduced. It also means that a shrinker call\ndoes not need to traverse clean filesystems before finding a\nfilesystem with reclaimable inodes.  This significantly reduces\nscanning overhead when lots of filesystems are present.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "7f8275d0d660c146de6ee3017e1e2e594c49e820",
      "tree": "884db927118b44102750b5168ee36ef4b8b5cb4e",
      "parents": [
        "d0c6f6258478e1dba532bf7c28e2cd6e1047d3a4"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Mon Jul 19 14:56:17 2010 +1000"
      },
      "committer": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Mon Jul 19 14:56:17 2010 +1000"
      },
      "message": "mm: add context argument to shrinker callback\n\nThe current shrinker implementation requires the registered callback\nto have global state to work from. This makes it difficult to shrink\ncaches that are not global (e.g. per-filesystem caches). Pass the shrinker\nstructure to the callback so that users can embed the shrinker structure\nin the context the shrinker needs to operate on and get back to it in the\ncallback via container_of().\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "7b6259e7a83647948fa33a736cc832310c8d85aa",
      "tree": "99bb872b179a93f5e32b51f312029abb1237b055",
      "parents": [
        "1920779e67cbf5ea8afef317777c5bf2b8096188"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Thu Jun 24 11:35:17 2010 +1000"
      },
      "committer": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Thu Jun 24 11:35:17 2010 +1000"
      },
      "message": "xfs: remove block number from inode lookup code\n\nThe block number comes from bulkstat based inode lookups to shortcut\nthe mapping calculations. We ar enot able to trust anything from\nbulkstat, so drop the block number as well so that the correct\nlookups and mappings are always done.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "1920779e67cbf5ea8afef317777c5bf2b8096188",
      "tree": "f3450e4075162ef5ec360446c301513a5adf316e",
      "parents": [
        "7124fe0a5b619d65b739477b3b55a20bf805b06d"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Thu Jun 24 11:15:47 2010 +1000"
      },
      "committer": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Thu Jun 24 11:15:47 2010 +1000"
      },
      "message": "xfs: rename XFS_IGET_BULKSTAT to XFS_IGET_UNTRUSTED\n\nInode numbers may come from somewhere external to the filesystem\n(e.g. file handles, bulkstat information) and so are inherently\nuntrusted. Rename the flag we use for these lookups to make it\nobvious we are doing a lookup of an untrusted inode number and need\nto verify it completely before trying to read it from disk.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "7124fe0a5b619d65b739477b3b55a20bf805b06d",
      "tree": "be333ebdcc7df735070dbc1441c1d59682d06132",
      "parents": [
        "7dce11dbac54fce777eea0f5fb25b2694ccd7900"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Thu Jun 24 11:15:33 2010 +1000"
      },
      "committer": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Thu Jun 24 11:15:33 2010 +1000"
      },
      "message": "xfs: validate untrusted inode numbers during lookup\n\nWhen we decode a handle or do a bulkstat lookup, we are using an\ninode number we cannot trust to be valid. If we are deleting inode\nchunks from disk (default noikeep mode), then we cannot trust the on\ndisk inode buffer for any given inode number to correctly reflect\nwhether the inode has been unlinked as the di_mode nor the\ngeneration number may have been updated on disk.\n\nThis is due to the fact that when we delete an inode chunk, we do\nnot write the clusters back to disk when they are removed - instead\nwe mark them stale to avoid them being written back potentially over\nthe top of something that has been subsequently allocated at that\nlocation. The result is that we can have locations of disk that look\nlike they contain valid inodes but in reality do not. Hence we\ncannot simply convert the inode number to a block number and read\nthe location from disk to determine if the inode is valid or not.\n\nAs a result, and XFS_IGET_BULKSTAT lookup needs to actually look the\ninode up in the inode allocation btree to determine if the inode\nnumber is valid or not.\n\nIt should be noted even on ikeep filesystems, there is the\npossibility that blocks on disk may look like valid inode clusters.\ne.g. if there are filesystem images hosted on the filesystem. Hence\neven for ikeep filesystems we really need to validate that the inode\nnumber is valid before issuing the inode buffer read.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "7dce11dbac54fce777eea0f5fb25b2694ccd7900",
      "tree": "90d6d109ca110bcbf47a954a8283ec250be07003",
      "parents": [
        "1817176a86352f65210139d4c794ad2d19fc6b63"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Wed Jun 23 18:11:11 2010 +1000"
      },
      "committer": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Wed Jun 23 18:11:11 2010 +1000"
      },
      "message": "xfs: always use iget in bulkstat\n\nThe non-coherent bulkstat versionsthat look directly at the inode\nbuffers causes various problems with performance optimizations that\nmake increased use of just logging inodes.  This patch makes bulkstat\nalways use iget, which should be fast enough for normal use with the\nradix-tree based inode cache introduced a while ago.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Dave Chinner \u003cdchinner@redhat.com\u003e\n"
    },
    {
      "commit": "1817176a86352f65210139d4c794ad2d19fc6b63",
      "tree": "59ccbcb634d87882fc899b0d21438c4bb86f8632",
      "parents": [
        "7e27d6e778cd87b6f2415515d7127eba53fe5d02"
      ],
      "author": {
        "name": "Dan Rosenberg",
        "email": "dan.j.rosenberg@gmail.com",
        "time": "Thu Jun 24 12:07:47 2010 +1000"
      },
      "committer": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Thu Jun 24 12:07:47 2010 +1000"
      },
      "message": "xfs: prevent swapext from operating on write-only files\n\nThis patch prevents user \"foo\" from using the SWAPEXT ioctl to swap\na write-only file owned by user \"bar\" into a file owned by \"foo\" and\nsubsequently reading it.  It does so by checking that the file\ndescriptors passed to the ioctl are also opened for reading.\n\nSigned-off-by: Dan Rosenberg \u003cdan.j.rosenberg@gmail.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "254c8c2dbf0e06a560a5814eb90cb628adb2de66",
      "tree": "6bcd10add0b85cf43cad8e72b6d4525c5a63b264",
      "parents": [
        "0b5649278e39a068aaf91399941bab1b4a4a3cc2"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Wed Jun 09 10:37:19 2010 +1000"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 08 18:12:44 2010 -0700"
      },
      "message": "xfs: remove nr_to_write writeback windup.\n\nNow that the background flush code has been fixed, we shouldn\u0027t need to\nsilently multiply the wbc-\u003enr_to_write to get good writeback. Remove\nthat code.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "1bf7dbfde8fe7ddaa8e2e1b4e0fc41a9fc6aa7a5",
      "tree": "fdb99e686fa40e79cc53f80dfed58e9b548ed4eb",
      "parents": [
        "ad8456361fa19068cf49b50a4f98e41b73c08e76",
        "f9369729496a0f4c607a4cc1ea4dfeddbbfc505a"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Fri Jun 04 13:22:30 2010 -0500"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Fri Jun 04 13:22:30 2010 -0500"
      },
      "message": "Merge branch \u0027master\u0027 into for-linus\n"
    },
    {
      "commit": "f9369729496a0f4c607a4cc1ea4dfeddbbfc505a",
      "tree": "05d463cd3c40514f09c01553cfd40ea3ea784f37",
      "parents": [
        "070ecdca54dde9577d2697088e74e45568f48efb"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Thu Jun 03 16:22:29 2010 +1000"
      },
      "committer": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Thu Jun 03 16:22:29 2010 +1000"
      },
      "message": "xfs: improve xfs_isilocked\n\nUse rwsem_is_locked to make the assertations for shared locks work.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Dave Chinner \u003cdchinner@redhat.com\u003e\n\n\n"
    },
    {
      "commit": "070ecdca54dde9577d2697088e74e45568f48efb",
      "tree": "6f70d1fd43231866ad6b54e2e5c011700ef3b072",
      "parents": [
        "99a4d54620264a614c89597bc5aaab22ec83f89c"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Thu Jun 03 16:22:29 2010 +1000"
      },
      "committer": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Thu Jun 03 16:22:29 2010 +1000"
      },
      "message": "xfs: skip writeback from reclaim context\n\nAllowing writeback from reclaim context causes massive problems with stack\noverflows as we can call into the writeback code which tends to be a heavy\nstack user both in the generic code and XFS from random contexts that\nperform memory allocations.\n\nFollow the example of btrfs (and in slightly different form ext4) and refuse\nto write out data from reclaim context.  This issue should really be handled\nby the VM so that we can tune better for this case, but until we get it\nsorted out there we have to hack around this in each filesystem with a\ncomplex writeback path.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Dave Chinner \u003cdchinner@redhat.com\u003e\n\n\n"
    },
    {
      "commit": "5b257b4a1f9239624c6b5e669763de04e482c2b3",
      "tree": "4896f326cc9e30c091ad2a370244837613f998ee",
      "parents": [
        "fb3b504adeee942e55393396fea8fdf406acf037"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Thu Jun 03 16:22:29 2010 +1000"
      },
      "committer": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Thu Jun 03 16:22:29 2010 +1000"
      },
      "message": "xfs: fix race in inode cluster freeing failing to stale inodes\n\nWhen an inode cluster is freed, it needs to mark all inodes in memory as\nXFS_ISTALE before marking the buffer as stale. This is eeded because the inodes\nhave a different life cycle to the buffer, and once the buffer is torn down\nduring transaction completion, we must ensure none of the inodes get written\nback (which is what XFS_ISTALE does).\n\nUnfortunately, xfs_ifree_cluster() has some bugs that lead to inodes not being\nmarked with XFS_ISTALE. This shows up when xfs_iflush() is called on these\ninodes either during inode reclaim or tail pushing on the AIL.  The buffer is\nread back, but no longer contains inodes and so triggers assert failures and\nshutdowns. This was reproducable with at run.dbench10 invocation from xfstests.\n\nThere are two main causes of xfs_ifree_cluster() failing. The first is simple -\nit checks in-memory inodes it finds in the per-ag icache to see if they are\nclean without holding the flush lock. if they are clean it skips them\ncompletely. However, If an inode is flushed delwri, it will\nappear clean, but is not guaranteed to be written back until the flush lock has\nbeen dropped. Hence we may have raced on the clean check and the inode may\nactually be dirty. Hence always mark inodes found in memory stale before we\ncheck properly if they are clean.\n\nThe second is more complex, and makes the first problem easier to hit.\nBasically the in-memory inode scan is done with full knowledge it can be racing\nwith inode flushing and AIl tail pushing, which means that inodes that it can\u0027t\nget the flush lock on might not be attached to the buffer after then in-memory\ninode scan due to IO completion occurring. This is actually documented in the\ncode as \"needs better interlocking\". i.e. this is a zero-day bug.\n\nEffectively, the in-memory scan must be done while the inode buffer is locked\nand Io cannot be issued on it while we do the in-memory inode scan. This\nensures that inodes we couldn\u0027t get the flush lock on are guaranteed to be\nattached to the cluster buffer, so we can then catch all in-memory inodes and\nmark them stale.\n\nNow that the inode cluster buffer is locked before the in-memory scan is done,\nthere is no need for the two-phase update of the in-memory inodes, so simplify\nthe code into two loops and remove the allocation of the temporary buffer used\nto hold locked inodes across the phases.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\n\n"
    },
    {
      "commit": "fb3b504adeee942e55393396fea8fdf406acf037",
      "tree": "42486eb1c674ba2d76b719109e21a54a7df7b8fc",
      "parents": [
        "9b98b6f3e1534bba2efcd5b16318945cf2218d99"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Fri May 28 19:03:10 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Fri May 28 15:19:56 2010 -0500"
      },
      "message": "xfs: fix access to upper inodes without inode64\n\nIf a filesystem is mounted without the inode64 mount option we\nshould still be able to access inodes not fitting into 32 bits, just\nnot created new ones.  For this to work we need to make sure the\ninode cache radix tree is initialized for all allocation groups, not\njust those we plan to allocate inodes from.  This patch makes sure\nwe initialize the inode cache radix tree for all allocation groups,\nand also cleans xfs_initialize_perag up a bit to separate the\ninode32 logical from the general perag structure setup.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "9b98b6f3e1534bba2efcd5b16318945cf2218d99",
      "tree": "1b793a3632ec68c2f8a2f24f200325f2235dd1b8",
      "parents": [
        "38e712ab3d28d79725eaade02fe8aba51abac196"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Thu May 27 01:58:13 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Fri May 28 15:19:50 2010 -0500"
      },
      "message": "xfs: fix might_sleep() warning when initialising per-ag tree\n\nThe use of radix_tree_preload() only works if the radix tree was\ninitialised without the __GFP_WAIT flag. The per-ag tree uses\nGFP_NOFS, so does not trigger allocation of new tree nodes from the\npreloaded array. Hence it enters the allocator with a spinlock held\nand triggers the might_sleep() warnings.\n\nReported-by; Chris Mason \u003cchris.mason@oracle.com\u003e\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": "38e712ab3d28d79725eaade02fe8aba51abac196",
      "tree": "e9fb77e11d0be890b86abcbe5fadc02e4761615f",
      "parents": [
        "3bd0946eb157e26240ca858d1a42738b095dc6f3"
      ],
      "author": {
        "name": "Julia Lawall",
        "email": "julia@diku.dk",
        "time": "Wed May 26 15:57:23 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Fri May 28 15:19:41 2010 -0500"
      },
      "message": "fs/xfs/quota: Add missing mutex_unlock\n\nAdd a mutex_unlock missing on the error path.  The use of this lock\nis balanced elsewhere in the file.\n\nThe semantic match that finds this problem is as follows:\n(http://coccinelle.lip6.fr/)\n\n// \u003csmpl\u003e\n@@\nexpression E1;\n@@\n\n* mutex_lock(E1,...);\n  \u003c+... when !\u003d E1\n  if (...) {\n    ... when !\u003d E1\n*   return ...;\n  }\n  ...+\u003e\n* mutex_unlock(E1,...);\n// \u003c/smpl\u003e\n\nSigned-off-by: Julia Lawall \u003cjulia@diku.dk\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "3bd0946eb157e26240ca858d1a42738b095dc6f3",
      "tree": "bc3bdd29874700f5cada5922caf1d39efd4ab138",
      "parents": [
        "f8adb4d574cf8c67f8391367136edc5469258fdc"
      ],
      "author": {
        "name": "Huang Weiyi",
        "email": "weiyi.huang@gmail.com",
        "time": "Tue May 25 22:15:26 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Fri May 28 15:19:36 2010 -0500"
      },
      "message": "xfs: remove duplicated #include\n\nRemove duplicated #include(\u0027s) in\n  fs/xfs/linux-2.6/xfs_quotaops.c\n\nSigned-off-by: Huang Weiyi \u003cweiyi.huang@gmail.com\u003e\nReviewed-by: Dave Chinner \u003cdavid@fromorbit.com\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "f8adb4d574cf8c67f8391367136edc5469258fdc",
      "tree": "0528b7b64336719965c54ae4f47b95747f8f6eff",
      "parents": [
        "292ec4cf3536a5ed8809e8823341b203e497bbaf"
      ],
      "author": {
        "name": "Li Zefan",
        "email": "lizf@cn.fujitsu.com",
        "time": "Mon May 24 08:25:57 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Fri May 28 15:19:31 2010 -0500"
      },
      "message": "xfs: convert more trace events to DEFINE_EVENT\n\nUse DECLARE_EVENT_CLASS, and save ~15K:\n\n   text    data     bss     dec     hex filename\n 171949   43028      48  215025   347f1 fs/xfs/linux-2.6/xfs_trace.o.orig\n 156521   43028      36  199585   30ba1 fs/xfs/linux-2.6/xfs_trace.o\n\nNo change in functionality.\n\nSigned-off-by: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nAcked-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "292ec4cf3536a5ed8809e8823341b203e497bbaf",
      "tree": "abded6956e08f3fc5ccddd4af945739aa049a92f",
      "parents": [
        "07f1a4f5e89cd4e6c79d67d41e8a18c451214ae2"
      ],
      "author": {
        "name": "Huang Weiyi",
        "email": "weiyi.huang@gmail.com",
        "time": "Sat May 22 17:13:20 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Fri May 28 15:19:24 2010 -0500"
      },
      "message": "xfs: xfs_trace.c: remove duplicated #include\n\nRemove duplicated #include(\u0027s) in\n  fs/xfs/linux-2.6/xfs_trace.c\n\nSigned-off-by: Huang Weiyi \u003cweiyi.huang@gmail.com\u003e\nReviewed-by: Dave Chinner \u003cdavid@fromorbit.com\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "07f1a4f5e89cd4e6c79d67d41e8a18c451214ae2",
      "tree": "a4efa89cd8536b6ff6b75713fd5cc342f4da4f62",
      "parents": [
        "fdc07f44c891d3fdee7722a03e3881614a293b3c"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Fri May 21 05:47:59 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Fri May 28 15:19:12 2010 -0500"
      },
      "message": "xfs: Check new inode size is OK before preallocating\n\nThe new xfsqa test 228 tries to preallocate more space than the\nfilesystem contains. it should fail, but instead triggers an assert\nabout lock flags.  The failure is due to the size extension failing\nin vmtruncate() due to rlimit being set. Check this before we start\nthe preallocation to avoid allocating space that will never be used.\n\nAlso the path through xfs_vn_allocate already holds the IO lock, so\nit should not be present in the lock flags when the setattr fails.\nHence the assert needs to take this into account. This will prevent\nother such callers from hitting this incorrect ASSERT.\n\n(Fixed a reference to \"newsize\" to read \"new_size\". -Alex)\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": "fdc07f44c891d3fdee7722a03e3881614a293b3c",
      "tree": "aed7fd2fac1df3d4d01c679c18ce2fdba31025c3",
      "parents": [
        "025101dca4480eff9da948405e872d5115030850"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Mon May 10 17:28:14 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Fri May 28 14:58:36 2010 -0500"
      },
      "message": "xfs: clean up xlog_align\n\nAdd suggested cleanups to commit 29db3370a1369541d58d692fbfb168b8a0bd7f41\nfrom review that didn\u0027t end up being commited.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "025101dca4480eff9da948405e872d5115030850",
      "tree": "a35460cf1a1cce94bb19249328761551c8f1b6b1",
      "parents": [
        "32891b292d6262d1db8e553cf3f4b38a91247b5a"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Tue May 04 13:53:48 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Fri May 28 14:58:30 2010 -0500"
      },
      "message": "xfs: cleanup log reservation calculactions\n\nInstead of having small helper functions calling big macros do the\ncalculations for the log reservations directly in the functions.\nThese are mostly 1:1 from the macros execept that the macros kept\nthe quota calculations in their callers.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "32891b292d6262d1db8e553cf3f4b38a91247b5a",
      "tree": "2110ec573f89b617e8a8dfe891b86a6842601ef2",
      "parents": [
        "657a4cffde065beca7d919e867f61e7d322708b6"
      ],
      "author": {
        "name": "Eric Sandeen",
        "email": "sandeen@sandeen.net",
        "time": "Fri Apr 30 16:43:48 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Fri May 28 14:58:24 2010 -0500"
      },
      "message": "xfs: be more explicit if RT mount fails due to config\n\nRecent testers were slightly confused that a realtime mount failed\ndue to missing CONFIG_XFS_RT; we can make that a little more\nobvious.\n\nV2: drop the else as suggested by Christoph\n\nSigned-off-by: Eric Sandeen \u003csandeen@sandeen.net\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "657a4cffde065beca7d919e867f61e7d322708b6",
      "tree": "c3841761a48175aaab67c4e7293ae4d86b44b393",
      "parents": [
        "ccf7c23fc129e75ef60e6f59f60a485b7a056598"
      ],
      "author": {
        "name": "Eric Sandeen",
        "email": "sandeen@sandeen.net",
        "time": "Fri Apr 30 03:42:49 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Fri May 28 14:58:16 2010 -0500"
      },
      "message": "xfs: replace E2BIG with EFBIG where appropriate\n\nMany places in the xfs code return E2BIG when they really mean\nEFBIG; trying to grow past 16T on a 32 bit machine, for example,\nsays \"Argument list too long\" rather than \"File too large\" which is\nnot particularly helpful.\n\nSome of these don\u0027t make perfect sense as EFBIG either, but still\nbetter than E2BIG IMHO.\n\nSigned-off-by: Eric Sandeen \u003csandeen@sandeen.net\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "7ea8085910ef3dd4f3cad6845aaa2b580d39b115",
      "tree": "d9c1edb5906f943f7d70bfb4b65106e29772d379",
      "parents": [
        "cc967be54710d97c05229b2e5ba2d00df84ddd64"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Wed May 26 17:53:25 2010 +0200"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu May 27 22:05:02 2010 -0400"
      },
      "message": "drop unused dentry argument to -\u003efsync\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    }
  ],
  "next": "88e88374ee4958786397a57f684de6f1fc5e0242"
}
