)]}'
{
  "log": [
    {
      "commit": "cf78859f520f8275318f47d7864f4459d940cb6b",
      "tree": "43568b265a89800274b782c9c0506c486525e4cb",
      "parents": [
        "8c34482c17d8fd07966328c7b1cfc35ee290bd1c"
      ],
      "author": {
        "name": "Geert Uytterhoeven",
        "email": "geert@linux-m68k.org",
        "time": "Mon Jan 17 21:21:14 2011 +0100"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jan 17 12:39:07 2011 -0800"
      },
      "message": "xfs: Do not name variables \"panic\"\n\nOn platforms that call panic() inside their BUG() macro (m68k/sun3, and\nall platforms that don\u0027t set HAVE_ARCH_BUG), compilation fails with:\n\n| fs/xfs/support/debug.c: In function ‘xfs_cmn_err’:\n| fs/xfs/support/debug.c:92: error: called object ‘panic’ is not a function\n\nas the local variable \"panic\" conflicts with the \"panic()\" function.\nRename the local variable to resolve this.\n\nSigned-off-by: Geert Uytterhoeven \u003cgeert@linux-m68k.org\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "2fe17c1075836b66678ed2a305fd09b6773883aa",
      "tree": "eb5287be8138686682eef9622872cfc7657e0664",
      "parents": [
        "64c23e86873ee410554d6d1c76b60da47025e96f"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Fri Jan 14 13:07:43 2011 +0100"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Jan 17 02:25:31 2011 -0500"
      },
      "message": "fallocate should be a file operation\n\nCurrently all filesystems except XFS implement fallocate asynchronously,\nwhile XFS forced a commit.  Both of these are suboptimal - in case of O_SYNC\nI/O we really want our allocation on disk, especially for the !KEEP_SIZE\ncase where we actually grow the file with user-visible zeroes.  On the\nother hand always commiting the transaction is a bad idea for fast-path\nuses of fallocate like for example in recent Samba versions.   Given\nthat block allocation is a data plane operation anyway change it from\nan inode operation to a file operation so that we have the file structure\navailable that lets us check for O_SYNC.\n\nThis also includes moving the code around for a few of the filesystems,\nand remove the already unnedded S_ISDIR checks given that we only wire\nup fallocate for regular files.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "64c23e86873ee410554d6d1c76b60da47025e96f",
      "tree": "b30c5ff8782ebfdec6956d7834f796731fd3a1d4",
      "parents": [
        "eb745dbccce56f1bbe3f80b95ad2a325145171c2"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Fri Jan 14 13:07:30 2011 +0100"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Jan 17 02:25:30 2011 -0500"
      },
      "message": "make the feature checks in -\u003efallocate future proof\n\nInstead of various home grown checks that might need updates for new\nflags just check for any bit outside the mask of the features supported\nby the filesystem.  This makes the check future proof for any newly\nadded flag.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "7cb3920a6529df7f54487abe973b903b8239e901",
      "tree": "d36da0fe62adfa3e2e46a485e0bdb06019b2e560",
      "parents": [
        "ad56cbf0fa6c09350c738ec59a3361f2e4ab4bc7",
        "73efe4a4ddf8eb2b1cc7039e8a66a23a424961af"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jan 14 15:24:17 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jan 14 15:24:17 2011 -0800"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://oss.sgi.com/xfs/xfs\n\n* \u0027for-linus\u0027 of git://oss.sgi.com/xfs/xfs:\n  xfs: prevent NMI timeouts in cmn_err\n  xfs: Add log level to assertion printk\n  xfs: fix an assignment within an ASSERT()\n  xfs: fix error handling for synchronous writes\n  xfs: add FITRIM support\n  xfs: ensure log covering transactions are synchronous\n  xfs: serialise unaligned direct IOs\n  xfs: factor common write setup code\n  xfs: split buffered IO write path from xfs_file_aio_write\n  xfs: split direct IO write path from xfs_file_aio_write\n  xfs: introduce xfs_rw_lock() helpers for locking the inode\n  xfs: factor post-write newsize updates\n  xfs: factor common post-write isize handling code\n  xfs: ensure sync write errors are returned\n"
    },
    {
      "commit": "275220f0fcff1adf28a717076e00f575edf05fda",
      "tree": "d249bccc80c64443dab211639050c4fb14332648",
      "parents": [
        "fe3c560b8a22cb28e54fe8950abef38e88d75831",
        "81c5e2ae33c4b19e53966b427e33646bf6811830"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 10:45:01 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 10:45:01 2011 -0800"
      },
      "message": "Merge branch \u0027for-2.6.38/core\u0027 of git://git.kernel.dk/linux-2.6-block\n\n* \u0027for-2.6.38/core\u0027 of git://git.kernel.dk/linux-2.6-block: (43 commits)\n  block: ensure that completion error gets properly traced\n  blktrace: add missing probe argument to block_bio_complete\n  block cfq: don\u0027t use atomic_t for cfq_group\n  block cfq: don\u0027t use atomic_t for cfq_queue\n  block: trace event block fix unassigned field\n  block: add internal hd part table references\n  block: fix accounting bug on cross partition merges\n  kref: add kref_test_and_get\n  bio-integrity: mark kintegrityd_wq highpri and CPU intensive\n  block: make kblockd_workqueue smarter\n  Revert \"sd: implement sd_check_events()\"\n  block: Clean up exit_io_context() source code.\n  Fix compile warnings due to missing removal of a \u0027ret\u0027 variable\n  fs/block: type signature of major_to_index(int) to major_to_index(unsigned)\n  block: convert !IS_ERR(p) \u0026\u0026 p to !IS_ERR_NOR_NULL(p)\n  cfq-iosched: don\u0027t check cfqg in choose_service_tree()\n  fs/splice: Pull buf-\u003eops-\u003econfirm() from splice_from_pipe actors\n  cdrom: export cdrom_check_events()\n  sd: implement sd_check_events()\n  sr: implement sr_check_events()\n  ...\n"
    },
    {
      "commit": "b2034d474b7e1e8578bd5c2977024b51693269d9",
      "tree": "e43969bf7c2ba89884c2580f56978826f1014520",
      "parents": [
        "27d189c02ba25851973c8582e419c0bded9f7e5b",
        "924241575a85249b9d410e38f5b2fcad9035e45c"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 10:27:28 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 10:27:28 2011 -0800"
      },
      "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: (41 commits)\n  fs: add documentation on fallocate hole punching\n  Gfs2: fail if we try to use hole punch\n  Btrfs: fail if we try to use hole punch\n  Ext4: fail if we try to use hole punch\n  Ocfs2: handle hole punching via fallocate properly\n  XFS: handle hole punching via fallocate properly\n  fs: add hole punching to fallocate\n  vfs: pass struct file to do_truncate on O_TRUNC opens (try #2)\n  fix signedness mess in rw_verify_area() on 64bit architectures\n  fs: fix kernel-doc for dcache::prepend_path\n  fs: fix kernel-doc for dcache::d_validate\n  sanitize ecryptfs -\u003emount()\n  switch afs\n  move internal-only parts of ncpfs headers to fs/ncpfs\n  switch ncpfs\n  switch 9p\n  pass default dentry_operations to mount_pseudo()\n  switch hostfs\n  switch affs\n  switch configfs\n  ...\n"
    },
    {
      "commit": "008d23e4852d78bb2618f2035f8b2110b6a6b968",
      "tree": "81c88f744f6f3fc84132527c1ddc0b4da410c5e2",
      "parents": [
        "8f685fbda43deccd130d192c9fcef1444649eaca",
        "bfc672dcf323877228682aff79dff8ecd9f30ff8"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 10:05:56 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 10:05:56 2011 -0800"
      },
      "message": "Merge branch \u0027for-next\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial\n\n* \u0027for-next\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial: (43 commits)\n  Documentation/trace/events.txt: Remove obsolete sched_signal_send.\n  writeback: fix global_dirty_limits comment runtime -\u003e real-time\n  ppc: fix comment typo singal -\u003e signal\n  drivers: fix comment typo diable -\u003e disable.\n  m68k: fix comment typo diable -\u003e disable.\n  wireless: comment typo fix diable -\u003e disable.\n  media: comment typo fix diable -\u003e disable.\n  remove doc for obsolete dynamic-printk kernel-parameter\n  remove extraneous \u0027is\u0027 from Documentation/iostats.txt\n  Fix spelling milisec -\u003e ms in snd_ps3 module parameter description\n  Fix spelling mistakes in comments\n  Revert conflicting V4L changes\n  i7core_edac: fix typos in comments\n  mm/rmap.c: fix comment\n  sound, ca0106: Fix assignment to \u0027channel\u0027.\n  hrtimer: fix a typo in comment\n  init/Kconfig: fix typo\n  anon_inodes: fix wrong function name in comment\n  fix comment typos concerning \"consistent\"\n  poll: fix a typo in comment\n  ...\n\nFix up trivial conflicts in:\n - drivers/net/wireless/iwlwifi/iwl-core.c (moved to iwl-legacy.c)\n - fs/ext4/ext4.h\n\nAlso fix missed \u0027diabled\u0027 typo in drivers/net/bnx2x/bnx2x.h while at it.\n"
    },
    {
      "commit": "c25d246715b87ad37e69e7abd1a0fed781423fa2",
      "tree": "18c13bcaa9e125a362d7d0ff24787d859d8d9b64",
      "parents": [
        "79124f18b335172e1916075c633745e12dae1dac"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Wed Nov 17 20:46:16 2010 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Jan 12 20:16:43 2011 -0500"
      },
      "message": "XFS: handle hole punching via fallocate properly\n\nThis patch simply allows XFS to handle the hole punching flag in fallocate\nproperly.  I\u0027ve tested this with a little program that does a bunch of random\nhole punching with FL_KEEP_SIZE and without it to make sure it does the right\nthing.  Thanks,\n\nSigned-off-by: Josef Bacik \u003cjosef@redhat.com\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "73efe4a4ddf8eb2b1cc7039e8a66a23a424961af",
      "tree": "1c3eed2bed48cf62a476cf0b34e66211ae29d00f",
      "parents": [
        "65a84a0f7567ea244e5246e642920260cfc2744a"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Wed Jan 12 00:35:42 2011 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Wed Jan 12 08:46:41 2011 -0600"
      },
      "message": "xfs: prevent NMI timeouts in cmn_err\n\nWe currently have a global error message buffer in cmn_err that is\nprotected by a spin lock that disables interrupts.  Recently there\nhave been reports of NMI timeouts occurring when the console is\nbeing flooded by SCSI error reports due to cmn_err() getting stuck\ntrying to print to the console while holding this lock (i.e. with\ninterrupts disabled). The NMI watchdog is seeing this CPU as\nnon-responding and so is triggering a panic.  While the trigger for\nthe reported case is SCSI errors, pretty much anything that spams\nthe kernel log could cause this to occur.\n\nRealistically the only reason that we have the intemediate message\nbuffer is to prepend the correct kernel log level prefix to the log\nmessage. The only reason we have the lock is to protect the global\nmessage buffer and the only reason the message buffer is global is\nto keep it off the stack. Hence if we can avoid needing a global\nmessage buffer we avoid needing the lock, and we can do this with a\nsmall amount of cleanup and some preprocessor tricks:\n\n\t1. clean up xfs_cmn_err() panic mask functionality to avoid\n\t   needing debug code in xfs_cmn_err()\n\t2. remove the couple of \"!\" message prefixes that still exist that\n\t   the existing cmn_err() code steps over.\n\t3. redefine CE_* levels directly to KERN_*\n\t4. redefine cmn_err() and friends to use printk() directly\n\t   via variable argument length macros.\n\nBy doing this, we can completely remove the cmn_err() code and the\nlock that is causing the problems, and rely solely on printk()\nserialisation to ensure that we don\u0027t get garbled messages.\n\nA series of followup patches is really needed to clean up all the\ncmn_err() calls and related messages properly, but that results in a\nseries that is not easily back portable to enterprise kernels. Hence\nthis initial fix is only to address the direct problem in the lowest\nimpact way possible.\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": "65a84a0f7567ea244e5246e642920260cfc2744a",
      "tree": "97217a12f1a35073fcb45521f402b36e56565fa5",
      "parents": [
        "1884bd8354c9aec4ca501dc4773c13ad2a09af7b"
      ],
      "author": {
        "name": "Anton Blanchard",
        "email": "anton@samba.org",
        "time": "Fri Jan 07 03:30:41 2011 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Tue Jan 11 22:29:46 2011 -0600"
      },
      "message": "xfs: Add log level to assertion printk\n\nI received a ppc64 bug report involving xfs but the assertion was\nfiltered out by the console log level. Use KERN_CRIT to ensure it\nmakes it out.\n\nSigned-off-by: Anton Blanchard \u003canton@samba.org\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "1884bd8354c9aec4ca501dc4773c13ad2a09af7b",
      "tree": "0afc35e48782f4bd444ca36ececd555e2a82c333",
      "parents": [
        "bfc60177f8ab509bc225becbb58f7e53a0e33e81"
      ],
      "author": {
        "name": "Jesper Juhl",
        "email": "jj@chaosbits.net",
        "time": "Sat Dec 25 20:14:53 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Tue Jan 11 22:29:13 2011 -0600"
      },
      "message": "xfs: fix an assignment within an ASSERT()\n\nIn fs/xfs/xfs_trans.c::xfs_trans_unreserve_and_mod_sb() at the out:\nlabel we have this:\n\tASSERT(error \u003d 0);\nI believe a comparison was intended, not an assignment. If I\u0027m\nright, the patch below fixes that up.\n\nSigned-off-by: Jesper Juhl \u003cjj@chaosbits.net\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "bfc60177f8ab509bc225becbb58f7e53a0e33e81",
      "tree": "d5475852558efd0e06c698f4d64926581134b0fb",
      "parents": [
        "a46db60834883c1c8c665d7fcc7b4ab66f5966fc"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Fri Jan 07 13:02:23 2011 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Tue Jan 11 20:28:42 2011 -0600"
      },
      "message": "xfs: fix error handling for synchronous writes\n\nIf we get an IO error on a synchronous superblock write, we attach an\nerror release function to it so that when the last reference goes away\nthe release function is called and the buffer is invalidated and\nunlocked. The buffer is left locked until the release function is\ncalled so that other concurrent users of the buffer will be locked out\nuntil the buffer error is fully processed.\n\nUnfortunately, for the superblock buffer the filesyetm itself holds a\nreference to the buffer which prevents the reference count from\ndropping to zero and the release function being called. As a result,\nonce an IO error occurs on a sync write, the buffer will never be\nunlocked and all future attempts to lock the buffer will hang.\n\nTo make matters worse, this problems is not unique to such buffers;\nif there is a concurrent _xfs_buf_find() running, the lookup will grab\na reference to the buffer and then wait on the buffer lock, preventing\nthe reference count from ever falling to zero and hence unlocking the\nbuffer.\n\nAs such, the whole b_relse function implementation is broken because it\ncannot rely on the buffer reference count falling to zero to unlock the\nerrored buffer. The synchronous write error path is the only path that\nuses this callback - it is used to ensure that the synchronous waiter\ngets the buffer error before the error state is cleared from the buffer\nby the release function.\n\nGiven that the only sychronous buffer writes now go through xfs_bwrite\nand the error path in question can only occur for a write of a dirty,\nlogged buffer, we can move most of the b_relse processing to happen\ninline in xfs_buf_iodone_callbacks, just like a normal I/O completion.\nIn addition to that we make sure the error is not cleared in\nxfs_buf_iodone_callbacks, so that xfs_bwrite can reliably check it.\nGiven that xfs_bwrite keeps the buffer locked until it has waited for\nit and checked the error this allows to reliably propagate the error\nto the caller, and make sure that the buffer is reliably unlocked.\n\nGiven that xfs_buf_iodone_callbacks was the only instance of the\nb_relse callback we can remove it entirely.\n\nBased on earlier patches by Dave Chinner and Ajeet Yadav.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nReported-by: Ajeet Yadav \u003cajeet.yadav.77@gmail.com\u003e\nReviewed-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "a46db60834883c1c8c665d7fcc7b4ab66f5966fc",
      "tree": "962f134a2c7f771cdafdae4ff6caa9e36693dce5",
      "parents": [
        "c58efdb442bb49dea1d148f207560c41918c1bf4"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Fri Jan 07 13:02:04 2011 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Tue Jan 11 20:28:29 2011 -0600"
      },
      "message": "xfs: add FITRIM support\n\nAllow manual discards from userspace using the FITRIM ioctl.  This is not\nintended to be run during normal workloads, as the freepsace btree walks\ncan cause large performance degradation.\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": "c58efdb442bb49dea1d148f207560c41918c1bf4",
      "tree": "d6e117ae65ff7ff921600ef936a7bbb4e3130010",
      "parents": [
        "eda77982729b7170bdc9e8855f0682edf322d277"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Tue Jan 04 04:49:29 2011 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Tue Jan 11 20:28:17 2011 -0600"
      },
      "message": "xfs: ensure log covering transactions are synchronous\n\nTo ensure the log is covered and the filesystem idles correctly, we\nneed to ensure that dummy transactions hit the disk and do not stay\npinned in memory.  If the superblock is pinned in memory, it can\u0027t\nbe flushed so the log covering cannot make progress. The result is\ndependent on timing - more oftent han not we continue to issues a\nlog covering transaction every 36s rather than idling after ~90s.\n\nFix this by making the log covering transaction synchronous. To\navoid additional log force from xfssyncd, make the log covering\ntransaction take the place of the existing log force in the xfssyncd\nbackground sync process.\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": "92f1c008ae79e32b83c0607d184b194f302bb3ee",
      "tree": "070980c581ca39a050a1b86a50fe4c52437cdba1",
      "parents": [
        "e54be894eae10eca9892e965cc9532f5d5a11767",
        "d0eb2f38b250b7d6c993adf81b0e4ded0565497e"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Jan 10 21:35:55 2011 -0600"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Jan 10 21:35:55 2011 -0600"
      },
      "message": "Merge branch \u0027master\u0027 into for-linus-merged\n\nThis merge pulls the XFS master branch into the latest Linus master.\nThis results in a merge conflict whose best fix is not obvious.\nI manually fixed the conflict, in \"fs/xfs/xfs_iget.c\".\n\nDave Chinner had done work that resulted in RCU freeing of inodes\nseparate from what Nick Piggin had done, and their results differed\nslightly in xfs_inode_free().  The fix updates Nick\u0027s call_rcu()\nwith the use of VFS_I(), while incorporating needed updates to some\nXFS inode fields implemented in Dave\u0027s series.  Dave\u0027s RCU callback\nfunction has also been removed.\n\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "eda77982729b7170bdc9e8855f0682edf322d277",
      "tree": "09ed733da9142ba979d6440add49f05772da11a4",
      "parents": [
        "4d8d15812fd9bc96d0da11467d23e0373feae933"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Tue Jan 11 10:22:40 2011 +1100"
      },
      "committer": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Tue Jan 11 10:22:40 2011 +1100"
      },
      "message": "xfs: serialise unaligned direct IOs\n\nWhen two concurrent unaligned, non-overlapping direct IOs are issued\nto the same block, the direct Io layer will race to zero the block.\nThe result is that one of the concurrent IOs will overwrite data\nwritten by the other IO with zeros. This is demonstrated by the\nxfsqa test 240.\n\nTo avoid this problem, serialise all unaligned direct IOs to an\ninode with a big hammer. We need a big hammer approach as we need to\nserialise AIO as well, so we can\u0027t just block writes on locks.\nHence, the big hammer is calling xfs_ioend_wait() while holding out\nother unaligned direct IOs from starting.\n\nWe don\u0027t bother trying to serialised aligned vs unaligned IOs as\nthey are overlapping IO and the result of concurrent overlapping IOs\nis undefined - the result of either IO is a valid result so we let\nthem race. Hence we only penalise unaligned IO, which already has a\nmajor overhead compared to aligned IO so this isn\u0027t a major problem.\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": "4d8d15812fd9bc96d0da11467d23e0373feae933",
      "tree": "8f81ae552502cd13259f289cfee110a89579ea59",
      "parents": [
        "637bbc75d9fda57c7bc77ce5ee37e29a77a0520d"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Tue Jan 11 10:23:42 2011 +1100"
      },
      "committer": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Tue Jan 11 10:23:42 2011 +1100"
      },
      "message": "xfs: factor common write setup code\n\nThe buffered IO and direct IO write paths share a common set of\nchecks and limiting code prior to issuing the write. Factor that\ninto a common helper function.\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": "637bbc75d9fda57c7bc77ce5ee37e29a77a0520d",
      "tree": "285e82a7afdf7b5e1468f17288e122f7ec269ac7",
      "parents": [
        "f0d26e860b6c496464c5c8165d7df08dabde01fa"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Tue Jan 11 10:17:30 2011 +1100"
      },
      "committer": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Tue Jan 11 10:17:30 2011 +1100"
      },
      "message": "xfs: split buffered IO write path from xfs_file_aio_write\n\nComplete the split of the different write IO paths by splitting the\nbuffered IO write path out of xfs_file_aio_write(). This makes the\ndifferent mechanisms of the write patchs easier to follow.\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\n"
    },
    {
      "commit": "f0d26e860b6c496464c5c8165d7df08dabde01fa",
      "tree": "af6fe7630ff41ff6621e7d192d8d7333e1c65ac8",
      "parents": [
        "487f84f3f80bc6f00c59725e822653d3ec174b85"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Tue Jan 11 10:15:36 2011 +1100"
      },
      "committer": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Tue Jan 11 10:15:36 2011 +1100"
      },
      "message": "xfs: split direct IO write path from xfs_file_aio_write\n\nThe current xfs_file_aio_write code is a mess of locking shenanigans\nto handle the different locking requirements of buffered and direct\nIO. Start to clean this up by disentangling the direct IO path from\nthe mess.\n\nThis also removes the failed direct IO fallback path to buffered IO.\nXFS handles all direct IO cases without needing to fall back to\nbuffered IO, so we can safely remove this unused path. This greatly\nsimplifies the logic and locking needed in the write path.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "487f84f3f80bc6f00c59725e822653d3ec174b85",
      "tree": "d84117b479269b0a96a3041f67006d25b44300c3",
      "parents": [
        "4c5cfd1b4157fb75d43b44a147c2feba6422fc4f"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Wed Jan 12 11:37:10 2011 +1100"
      },
      "committer": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Wed Jan 12 11:37:10 2011 +1100"
      },
      "message": "xfs: introduce xfs_rw_lock() helpers for locking the inode\n\nWe need to obtain the i_mutex, i_iolock and i_ilock during the read\nand write paths. Add a set of wrapper functions to neatly\nencapsulate the lock ordering and shared/exclusive semantics to make\nthe locking easier to follow and get right.\n\nNote that this changes some of the exclusive locking serialisation in\nthat serialisation will occur against the i_mutex instead of the\nXFS_IOLOCK_EXCL. This does not change any behaviour, and it is\narguably more efficient to use the mutex for such serialisation than\nthe rw_sem.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "4c5cfd1b4157fb75d43b44a147c2feba6422fc4f",
      "tree": "d6511239f2bf9d56bb89f36c6da9ac3957f76cff",
      "parents": [
        "edafb6da9aa725e4de5fe758fe81644b6167f9a2"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Tue Jan 11 10:14:16 2011 +1100"
      },
      "committer": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Tue Jan 11 10:14:16 2011 +1100"
      },
      "message": "xfs: factor post-write newsize updates\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": "edafb6da9aa725e4de5fe758fe81644b6167f9a2",
      "tree": "f79f7b2de496daf757c89528309e3a17b0636c6a",
      "parents": [
        "a363f0c2030cb9781e7e458f4a9e354b6c43d7ce"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Tue Jan 11 10:14:06 2011 +1100"
      },
      "committer": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Tue Jan 11 10:14:06 2011 +1100"
      },
      "message": "xfs: factor common post-write isize handling code\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": "a363f0c2030cb9781e7e458f4a9e354b6c43d7ce",
      "tree": "7152662c40e6754194c6810c7331c87cdc338cb6",
      "parents": [
        "d0eb2f38b250b7d6c993adf81b0e4ded0565497e"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Tue Jan 11 10:13:53 2011 +1100"
      },
      "committer": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Tue Jan 11 10:13:53 2011 +1100"
      },
      "message": "xfs: ensure sync write errors are returned\n\nxfs_file_aio_write() only returns the error from synchronous\nflushing of the data and inode if error \u003d\u003d 0. At the point where\nerror is being checked, it is guaranteed to be \u003e 0. Therefore any\nerrors returned by the data or fsync flush will never be returned.\nFix the checks so we overwrite the current error once and only if an\nerror really occurred.\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": "23d69b09b78c4876e134f104a3814c30747c53f1",
      "tree": "40744de4f4126c21027ce537264524095e0e7979",
      "parents": [
        "e744070fd4ff9d3114277e52d77afa21579adce2",
        "569ff2de2e1c8ac67c8df3a7367d46d0d9460a35"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jan 07 16:58:04 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jan 07 16:58:04 2011 -0800"
      },
      "message": "Merge branch \u0027for-2.6.38\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq\n\n* \u0027for-2.6.38\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq: (33 commits)\n  usb: don\u0027t use flush_scheduled_work()\n  speedtch: don\u0027t abuse struct delayed_work\n  media/video: don\u0027t use flush_scheduled_work()\n  media/video: explicitly flush request_module work\n  ioc4: use static work_struct for ioc4_load_modules()\n  init: don\u0027t call flush_scheduled_work() from do_initcalls()\n  s390: don\u0027t use flush_scheduled_work()\n  rtc: don\u0027t use flush_scheduled_work()\n  mmc: update workqueue usages\n  mfd: update workqueue usages\n  dvb: don\u0027t use flush_scheduled_work()\n  leds-wm8350: don\u0027t use flush_scheduled_work()\n  mISDN: don\u0027t use flush_scheduled_work()\n  macintosh/ams: don\u0027t use flush_scheduled_work()\n  vmwgfx: don\u0027t use flush_scheduled_work()\n  tpm: don\u0027t use flush_scheduled_work()\n  sonypi: don\u0027t use flush_scheduled_work()\n  hvsi: don\u0027t use flush_scheduled_work()\n  xen: don\u0027t use flush_scheduled_work()\n  gdrom: don\u0027t use flush_scheduled_work()\n  ...\n\nFixed up trivial conflict in drivers/media/video/bt8xx/bttv-input.c\nas per Tejun.\n"
    },
    {
      "commit": "880566e17c4fce0d998d92610d32fcb9506aa6dd",
      "tree": "74b8adcfea568bd6c99dd73412aedcff3a0e496d",
      "parents": [
        "258a5aa8dfc6294f5f7df892023ee4d3e57c9841"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:02 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:30 2011 +1100"
      },
      "message": "xfs: provide simple rcu-walk ACL implementation\n\nThis simple implementation just checks for no ACLs on the inode, and\nif so, then the rcu-walk may proceed, otherwise fail it.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "b74c79e99389cd79b31fcc08f82c24e492e63c7e",
      "tree": "763c6b412517306670bc625e90035f2d16bb739f",
      "parents": [
        "34286d6662308d82aed891852d04c7c3a2649b16"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:49:58 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:29 2011 +1100"
      },
      "message": "fs: provide rcu-walk aware permission i_ops\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "fa0d7e3de6d6fc5004ad9dea0dd6b286af8f03e9",
      "tree": "203e0f73883e4c26b5597e36042386a1237dab35",
      "parents": [
        "77812a1ef139d84270d27faacc0630c887411013"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:49:49 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:26 2011 +1100"
      },
      "message": "fs: icache RCU free inodes\n\nRCU free the struct inode. This will allow:\n\n- Subsequent store-free path walking patch. The inode must be consulted for\n  permissions when walking, so an RCU inode reference is a must.\n- sb_inode_list_lock to be moved inside i_lock because sb list walkers who want\n  to take i_lock no longer need to take sb_inode_list_lock to walk the list in\n  the first place. This will simplify and optimize locking.\n- Could remove some nested trylock loops in dcache code\n- Could potentially simplify things a bit in VM land. Do not need to take the\n  page lock to follow page-\u003emapping.\n\nThe downsides of this is the performance cost of using RCU. In a simple\ncreat/unlink microbenchmark, performance drops by about 10% due to inability to\nreuse cache-hot slab objects. As iterations increase and RCU freeing starts\nkicking over, this increases to about 20%.\n\nIn cases where inode lifetimes are longer (ie. many inodes may be allocated\nduring the average life span of a single inode), a lot of this cache reuse is\nnot applicable, so the regression caused by this patch is smaller.\n\nThe cache-hot regression could largely be avoided by using SLAB_DESTROY_BY_RCU,\nhowever this adds some complexity to list walking and store-free path walking,\nso I prefer to implement this at a later date, if it is shown to be a win in\nreal situations. I haven\u0027t found a regression in any non-micro benchmark so I\ndoubt it will be a problem.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "4b7bd364700d9ac8372eff48832062b936d0793b",
      "tree": "0dbf78c95456a0b02d07fcd473281f04a87e266d",
      "parents": [
        "c0d8768af260e2cbb4bf659ae6094a262c86b085",
        "90a8a73c06cc32b609a880d48449d7083327e11a"
      ],
      "author": {
        "name": "Jiri Kosina",
        "email": "jkosina@suse.cz",
        "time": "Wed Dec 22 18:57:02 2010 +0100"
      },
      "committer": {
        "name": "Jiri Kosina",
        "email": "jkosina@suse.cz",
        "time": "Wed Dec 22 18:57:02 2010 +0100"
      },
      "message": "Merge branch \u0027master\u0027 into for-next\n\nConflicts:\n\tMAINTAINERS\n\tarch/arm/mach-omap2/pm24xx.c\n\tdrivers/scsi/bfa/bfa_fcpim.c\n\nNeeded to update to apply fixes for which the old branch was too\noutdated.\n"
    },
    {
      "commit": "d0eb2f38b250b7d6c993adf81b0e4ded0565497e",
      "tree": "660923947f3f7d412bd65c58ba9d2e4c8835320b",
      "parents": [
        "3f16b9850743b702380f098ab5e0308cd6af1792"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Tue Dec 21 12:29:14 2010 +1100"
      },
      "committer": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Tue Dec 21 12:29:14 2010 +1100"
      },
      "message": "xfs: convert grant head manipulations to lockless algorithm\n\nThe only thing that the grant lock remains to protect is the grant head\nmanipulations when adding or removing space from the log. These calculations\nare already based on atomic variables, so we can already update them safely\nwithout locks. However, the grant head manpulations require atomic multi-step\ncalculations to be executed, which the algorithms currently don\u0027t allow.\n\nTo make these multi-step calculations atomic, convert the algorithms to\ncompare-and-exchange loops on the atomic variables. That is, we sample the old\nvalue, perform the calculation and use atomic64_cmpxchg() to attempt to update\nthe head with the new value. If the head has not changed since we sampled it,\nit will succeed and we are done. Otherwise, we rerun the calculation again from\na new sample of the head.\n\nThis allows us to remove the grant lock from around all the grant head space\nmanipulations, and that effectively removes the grant lock from the log\ncompletely. Hence we can remove the grant lock completely from the log at this\npoint.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "3f16b9850743b702380f098ab5e0308cd6af1792",
      "tree": "6a39db2c6b750fab92e16865383f733e48aa96ed",
      "parents": [
        "c8a09ff8ca2235bccdaea8a52fbd5349646a8ba4"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Tue Dec 21 12:29:01 2010 +1100"
      },
      "committer": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Tue Dec 21 12:29:01 2010 +1100"
      },
      "message": "xfs: introduce new locks for the log grant ticket wait queues\n\nThe log grant ticket wait queues are currently protected by the log\ngrant lock.  However, the queues are functionally independent from\neach other, and operations on them only require serialisation\nagainst other queue operations now that all of the other log\nvariables they use are atomic values.\n\nHence, we can make them independent of the grant lock by introducing\nnew locks just to protect the lists operations. because the lists\nare independent, we can use a lock per list and ensure that reserve\nand write head queuing do not contend.\n\nTo ensure forced shutdowns work correctly in conjunction with the\nnew fast paths, ensure that we check whether the log has been shut\ndown in the grant functions once we hold the relevant spin locks but\nbefore we go to sleep. This is needed to co-ordinate correctly with\nthe wakeups that are issued on the ticket queues so we don\u0027t leave\nany processes sleeping on the queues during a shutdown.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "afe2c511fb2d75f1515081ff1be15bd79cfe722d",
      "tree": "28aa74e9e0c654a95bf3306101e10ac1d16919d1",
      "parents": [
        "2d64672ed38721b7a3815009d79bfb90a1f34a17"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Dec 14 16:21:17 2010 +0100"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Dec 15 10:56:11 2010 +0100"
      },
      "message": "workqueue: convert cancel_rearming_delayed_work[queue]() users to cancel_delayed_work_sync()\n\ncancel_rearming_delayed_work[queue]() has been superceded by\ncancel_delayed_work_sync() quite some time ago.  Convert all the\nin-kernel users.  The conversions are completely equivalent and\ntrivial.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: \"David S. Miller\" \u003cdavem@davemloft.net\u003e\nAcked-by: Greg Kroah-Hartman \u003cgregkh@suse.de\u003e\nAcked-by: Evgeniy Polyakov \u003czbr@ioremap.net\u003e\nCc: Jeff Garzik \u003cjgarzik@pobox.com\u003e\nCc: Benjamin Herrenschmidt \u003cbenh@kernel.crashing.org\u003e\nCc: Mauro Carvalho Chehab \u003cmchehab@infradead.org\u003e\nCc: netdev@vger.kernel.org\nCc: Anton Vorontsov \u003ccbou@mail.ru\u003e\nCc: David Woodhouse \u003cdwmw2@infradead.org\u003e\nCc: \"J. Bruce Fields\" \u003cbfields@fieldses.org\u003e\nCc: Neil Brown \u003cneilb@suse.de\u003e\nCc: Alex Elder \u003caelder@sgi.com\u003e\nCc: xfs-masters@oss.sgi.com\nCc: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nCc: Pekka Enberg \u003cpenberg@cs.helsinki.fi\u003e\nCc: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nCc: netfilter-devel@vger.kernel.org\nCc: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\nCc: linux-nfs@vger.kernel.org\n"
    },
    {
      "commit": "05340d4ab2ec2b6b4962c1c41c6ea8fb550f947b",
      "tree": "9368b1f2e39ef219898bf32a7a2673d85720740d",
      "parents": [
        "c76febef574fd86566bbdf1a73a547a439115c25"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Tue Dec 07 10:16:41 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Thu Dec 09 17:07:02 2010 -0600"
      },
      "message": "xfs: log timestamp changes to the source inode in rename\n\nNow that we don\u0027t mark VFS inodes dirty anymore for internal\ntimestamp changes, but rely on the transaction subsystem to push\nthem out, we need to explicitly log the source inode in rename after\nupdating it\u0027s timestamps to make sure the changes actually get\nforced out by sync/fsync or an AIL push.\n\nWe already account for the fourth inode in the log reservation, as a\nrename of directories needs to update the nlink field, so just\nadding the xfs_trans_log_inode call is enough.\n\nThis fixes the xfsqa 065 regression introduced by:\n\n\t\"xfs: don\u0027t use vfs writeback for pure metadata modifications\"\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "c8a09ff8ca2235bccdaea8a52fbd5349646a8ba4",
      "tree": "a06b4fa59672fd6fa9dd884e1e0bc746adc011b6",
      "parents": [
        "1c3cb9ec07fabf0c0970adc46fd2a1f09c1186dd"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Sat Dec 04 00:02:40 2010 +1100"
      },
      "committer": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Sat Dec 04 00:02:40 2010 +1100"
      },
      "message": "xfs: convert log grant heads to atomic variables\n\nConvert the log grant heads to atomic64_t types in preparation for\nconverting the accounting algorithms to atomic operations. his patch\njust converts the variables; the algorithmic changes are in a\nseparate patch for clarity.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "1c3cb9ec07fabf0c0970adc46fd2a1f09c1186dd",
      "tree": "b8b6bf968f663723b06aa68ec499e49f3cdfbad0",
      "parents": [
        "84f3c683c4d3f36d3c3ed320babd960a332ac458"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Tue Dec 21 12:28:39 2010 +1100"
      },
      "committer": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Tue Dec 21 12:28:39 2010 +1100"
      },
      "message": "xfs: convert l_tail_lsn to an atomic variable.\n\nlog-\u003el_tail_lsn is currently protected by the log grant lock. The\nlock is only needed for serialising readers against writers, so we\ndon\u0027t really need the lock if we make the l_tail_lsn variable an\natomic. Converting the l_tail_lsn variable to an atomic64_t means we\ncan start to peel back the grant lock from various operations.\n\nAlso, provide functions to safely crack an atomic LSN variable into\nit\u0027s component pieces and to recombined the components into an\natomic variable. Use them where appropriate.\n\nThis also removes the need for explicitly holding a spinlock to read\nthe l_tail_lsn on 32 bit platforms.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\n\n\n"
    },
    {
      "commit": "84f3c683c4d3f36d3c3ed320babd960a332ac458",
      "tree": "5884f4e5a04a7a67c634e003bfa590fd2e643fdc",
      "parents": [
        "2ced19cbae5448b720919a494606c62095d4f4db"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Fri Dec 03 22:11:29 2010 +1100"
      },
      "committer": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Fri Dec 03 22:11:29 2010 +1100"
      },
      "message": "xfs: convert l_last_sync_lsn to an atomic variable\n\nlog-\u003el_last_sync_lsn is updated in only one critical spot - log\nbuffer Io completion - and is protected by the grant lock here. This\nrequires the grant lock to be taken for every log buffer IO\ncompletion. Converting the l_last_sync_lsn variable to an atomic64_t\nmeans that we do not need to take the grant lock in log buffer IO\ncompletion to update it.\n\nThis also removes the need for explicitly holding a spinlock to read\nthe l_last_sync_lsn on 32 bit platforms.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "2ced19cbae5448b720919a494606c62095d4f4db",
      "tree": "e011a53041289ed4f9c8e78f6d88cd3454c9c39b",
      "parents": [
        "eb40a87500ac2f6be7eaf8ebb35610e6d0e60e9a"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Tue Dec 21 12:09:20 2010 +1100"
      },
      "committer": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Tue Dec 21 12:09:20 2010 +1100"
      },
      "message": "xfs: make AIL tail pushing independent of the grant lock\n\nThe xlog_grant_push_ail() currently takes the grant lock internally to sample\nthe tail lsn, last sync lsn and the reserve grant head. Most of the callers\nalready hold the grant lock but have to drop it before calling\nxlog_grant_push_ail(). This is a left over from when the AIL tail pushing was\ndone in line and hence xlog_grant_push_ail had to drop the grant lock. AIL push\nis now done in another thread and hence we can safely hold the grant lock over\nthe entire xlog_grant_push_ail call.\n\nPush the grant lock outside of xlog_grant_push_ail() to simplify the locking\nand synchronisation needed for tail pushing.  This will reduce traffic on the\ngrant lock by itself, but this is only one step in preparing for the complete\nremoval of the grant lock.\n\nWhile there, clean up the formatting of xlog_grant_push_ail() to match the\nrest of the XFS code.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "eb40a87500ac2f6be7eaf8ebb35610e6d0e60e9a",
      "tree": "3f04eefbbb1428faf83aae5e9e3c951ae2748aa3",
      "parents": [
        "a69ed03c24d4a336c23b7116127713d5a8c5ac4d"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Tue Dec 21 12:09:01 2010 +1100"
      },
      "committer": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Tue Dec 21 12:09:01 2010 +1100"
      },
      "message": "xfs: use wait queues directly for the log wait queues\n\nThe log grant queues are one of the few places left using sv_t\nconstructs for waiting. Given we are touching this code, we should\nconvert them to plain wait queues. While there, convert all the\nother sv_t users in the log code as well.\n\nSeeing as this removes the last users of the sv_t type, remove the\nheader file defining the wrapper and the fragments that still\nreference it.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "a69ed03c24d4a336c23b7116127713d5a8c5ac4d",
      "tree": "95c73e560b2780abc9125022032e8cc85ec518c7",
      "parents": [
        "663e496a720a3a9fc08ea70b29724e8906b34e43"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Tue Dec 21 12:08:20 2010 +1100"
      },
      "committer": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Tue Dec 21 12:08:20 2010 +1100"
      },
      "message": "xfs: combine grant heads into a single 64 bit integer\n\nPrepare for switching the grant heads to atomic variables by\ncombining the two 32 bit values that make up the grant head into a\nsingle 64 bit variable.  Provide wrapper functions to combine and\nsplit the grant heads appropriately for calculations and use them as\nnecessary.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "663e496a720a3a9fc08ea70b29724e8906b34e43",
      "tree": "76372cb50ea4be7b12fae3d531b49f3a1fb7b57c",
      "parents": [
        "3f336c6fa17c2b3d14b3dd1bd6e64e9cc97b6359"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Tue Dec 21 12:06:05 2010 +1100"
      },
      "committer": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Tue Dec 21 12:06:05 2010 +1100"
      },
      "message": "xfs: rework log grant space calculations\n\nThe log grant space calculations are repeated for both write and\nreserve grant heads. To make it simpler to convert the calculations\ntoa different algorithm, factor them so both the gratn heads use the\nsame calculation functions. Once this is done we can drop the\nwrappers that are used in only a couple of place to update both\ngrant heads at once as they don\u0027t provide any particular value.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "3f336c6fa17c2b3d14b3dd1bd6e64e9cc97b6359",
      "tree": "14bd6f82656ad71586b94b7851a7c748ce86de13",
      "parents": [
        "1054794198e39103cb986618c4c10ec2252b7089"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Tue Dec 21 12:02:52 2010 +1100"
      },
      "committer": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Tue Dec 21 12:02:52 2010 +1100"
      },
      "message": "xfs: fact out common grant head/log tail verification code\n\nFactor repeated debug code out of grant head manipulation functions into a\nseparate function. This removes ifdef DEBUG spagetti from the code and makes\nthe code easier to follow.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "1054794198e39103cb986618c4c10ec2252b7089",
      "tree": "bc1d6a3eece9385bef892c2df7d6dba6f39d3088",
      "parents": [
        "9552e7f2f3dd13a7580e488a7a3582332daad4f5"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Tue Dec 21 12:02:25 2010 +1100"
      },
      "committer": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Tue Dec 21 12:02:25 2010 +1100"
      },
      "message": "xfs: convert log grant ticket queues to list heads\n\nThe grant write and reserve queues use a roll-your-own double linked\nlist, so convert it to a standard list_head structure and convert\nall the list traversals to use list_for_each_entry(). We can also\nget rid of the XLOG_TIC_IN_Q flag as we can use the list_empty()\ncheck to tell if the ticket is in a list or not.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "9552e7f2f3dd13a7580e488a7a3582332daad4f5",
      "tree": "2568a24be0a0b933277e1bc71b849ccfffab6abf",
      "parents": [
        "e60599492990d1b52c70e9ed2f8e062fe11ca937"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Mon Dec 20 12:36:15 2010 +1100"
      },
      "committer": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Mon Dec 20 12:36:15 2010 +1100"
      },
      "message": "xfs: use AIL bulk delete function to implement single delete\n\nWe now have two copies of AIL delete operations that are mostly\nduplicate functionality. The single log item deletes can be\nimplemented via the bulk updates by turning xfs_trans_ail_delete()\ninto a simple wrapper. This removes all the duplicate delete\nfunctionality and associated helpers.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "e60599492990d1b52c70e9ed2f8e062fe11ca937",
      "tree": "cff4380f728123db94f432e46cc4b1028ba61073",
      "parents": [
        "3013683253ad04f67d8cfaa25be708353686b90a"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Mon Dec 20 12:34:26 2010 +1100"
      },
      "committer": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Mon Dec 20 12:34:26 2010 +1100"
      },
      "message": "xfs: use AIL bulk update function to implement single updates\n\nWe now have two copies of AIL insert operations that are mostly\nduplicate functionality. The single log item updates can be\nimplemented via the bulk updates by turning xfs_trans_ail_update()\ninto a simple wrapper. This removes all the duplicate insert\nfunctionality and associated helpers.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "3013683253ad04f67d8cfaa25be708353686b90a",
      "tree": "eadc35b70c0169096a7dbaf4eb9966be7630db04",
      "parents": [
        "c90821a26a8c90ad1e3116393b8a8260ab46bffb"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Mon Dec 20 12:03:17 2010 +1100"
      },
      "committer": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Mon Dec 20 12:03:17 2010 +1100"
      },
      "message": "xfs: remove all the inodes on a buffer from the AIL in bulk\n\nWhen inode buffer IO completes, usually all of the inodes are removed from the\nAIL. This involves processing them one at a time and taking the AIL lock once\nfor every inode. When all CPUs are processing inode IO completions, this causes\nexcessive amount sof contention on the AIL lock.\n\nInstead, change the way we process inode IO completion in the buffer\nIO done callback. Allow the inode IO done callback to walk the list\nof IO done callbacks and pull all the inodes off the buffer in one\ngo and then process them as a batch.\n\nOnce all the inodes for removal are collected, take the AIL lock\nonce and do a bulk removal operation to minimise traffic on the AIL\nlock.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "c90821a26a8c90ad1e3116393b8a8260ab46bffb",
      "tree": "1970fa2af39b277e375c059d0e5654e890c44511",
      "parents": [
        "e677d0f9548e2245ee3c2977661ca8ca165af188"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Fri Dec 03 17:00:52 2010 +1100"
      },
      "committer": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Fri Dec 03 17:00:52 2010 +1100"
      },
      "message": "xfs: consume iodone callback items on buffers as they are processed\n\nTo allow buffer iodone callbacks to consume multiple items off the\ncallback list, first we need to convert the xfs_buf_do_callbacks()\nto consume items and always pull the next item from the head of the\nlist.\n\nThe means the item list walk is never dependent on knowing the\nnext item on the list and hence allows callbacks to remove items\nfrom the list as well. This allows callbacks to do bulk operations\nby scanning the list for identical callbacks, consuming them all\nand then processing them in bulk, negating the need for multiple\ncallbacks of that type.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "e677d0f9548e2245ee3c2977661ca8ca165af188",
      "tree": "28e20df79bcd8c5aa7458c85fd58cf7f5feb4e69",
      "parents": [
        "0e57f6a36f9be03e5abb755f524ee91c4aebe854"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Fri Dec 17 20:08:04 2010 +1100"
      },
      "committer": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Fri Dec 17 20:08:04 2010 +1100"
      },
      "message": "xfs: reduce the number of AIL push wakeups\n\nThe xfaild often tries to rest to wait for congestion to pass of for\nIO to complete, but is regularly woken in tail-pushing situations.\nIn severe cases, the xfsaild is getting woken tens of thousands of\ntimes a second. Reduce the number needless wakeups by only waking\nthe xfsaild if the new target is larger than the old one. Further\nmake short sleeps uninterruptible as they occur when the xfsaild has\ndecided it needs to back off to allow some IO to complete and being\nwoken early is counter-productive.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "0e57f6a36f9be03e5abb755f524ee91c4aebe854",
      "tree": "4de7d393444171525ca8c6b73026493ffa8e1b12",
      "parents": [
        "eb3efa1249b6413be930bdf13d10b6238028a440"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Mon Dec 20 12:02:19 2010 +1100"
      },
      "committer": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Mon Dec 20 12:02:19 2010 +1100"
      },
      "message": "xfs: bulk AIL insertion during transaction commit\n\nWhen inserting items into the AIL from the transaction committed\ncallbacks, we take the AIL lock for every single item that is to be\ninserted. For a CIL checkpoint commit, this can be tens of thousands\nof individual inserts, yet almost all of the items will be inserted\nat the same point in the AIL because they have the same index.\n\nTo reduce the overhead and contention on the AIL lock for such\noperations, introduce a \"bulk insert\" operation which allows a list\nof log items with the same LSN to be inserted in a single operation\nvia a list splice. To do this, we need to pre-sort the log items\nbeing committed into a temporary list for insertion.\n\nThe complexity is that not every log item will end up with the same\nLSN, and not every item is actually inserted into the AIL. Items\nthat don\u0027t match the commit LSN will be inserted and unpinned as per\nthe current one-at-a-time method (relatively rare), while items that\nare not to be inserted will be unpinned and freed immediately. Items\nthat are to be inserted at the given commit lsn are placed in a\ntemporary array and inserted into the AIL in bulk each time the\narray fills up.\n\nAs a result of this, we trade off AIL hold time for a significant\nreduction in traffic. lock_stat output shows that the worst case\nhold time is unchanged, but contention from AIL inserts drops by an\norder of magnitude and the number of lock traversal decreases\nsignificantly.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "eb3efa1249b6413be930bdf13d10b6238028a440",
      "tree": "7b2d8b9d55d5757236ef90389bc6664784607930",
      "parents": [
        "b199c8a4ba11879df87daad496ceee41fdc6aa82"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Fri Dec 03 16:42:57 2010 +1100"
      },
      "committer": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Fri Dec 03 16:42:57 2010 +1100"
      },
      "message": "xfs: clean up xfs_ail_delete()\n\nxfs_ail_delete() has a needlessly complex interface. It returns the log item\nthat was passed in for deletion (which the callers then assert is identical to\nthe one passed in), and callers of xfs_ail_delete() still need to invalidate\ncurrent traversal cursors.\n\nMake xfs_ail_delete() return void, move the cursor invalidation inside it, and\nclean up the callers just to use the log item pointer they passed in.\n\nWhile cleaning up, remove the messy and unnecessary \"/* ARGUSED */\" comments\naround all these functions.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "b199c8a4ba11879df87daad496ceee41fdc6aa82",
      "tree": "8652785ca70788e3cc43272be72f21123adafbe7",
      "parents": [
        "9c5f8414efd5eeed9f498d4170337a3eb126341f"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Mon Dec 20 11:59:49 2010 +1100"
      },
      "committer": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Mon Dec 20 11:59:49 2010 +1100"
      },
      "message": "xfs: Pull EFI/EFD handling out from under the AIL lock\n\nEFI/EFD interactions are protected from races by the AIL lock. They\nare the only type of log items that require the the AIL lock to\nserialise internal state, so they need to be separated from the AIL\nlock before we can do bulk insert operations on the AIL.\n\nTo acheive this, convert the counter of the number of extents in the\nEFI to an atomic so it can be safely manipulated by EFD processing\nwithout locks. Also, convert the EFI state flag manipulations to use\natomic bit operations so no locks are needed to record state\nchanges. Finally, use the state bits to determine when it is safe to\nfree the EFI and clean up the code to do this neatly.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "9c5f8414efd5eeed9f498d4170337a3eb126341f",
      "tree": "5801d0cbd2f37cc72e0b541231c60e281c27d874",
      "parents": [
        "821eb21d97a8b686649c08b7284d0b9f34d0e138"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Mon Dec 20 11:57:24 2010 +1100"
      },
      "committer": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Mon Dec 20 11:57:24 2010 +1100"
      },
      "message": "xfs: fix EFI transaction cancellation.\n\nXFS_EFI_CANCELED has not been set in the code base since\nxfs_efi_cancel() was removed back in 2006 by commit\n065d312e15902976d256ddaf396a7950ec0350a8 (\"[XFS] Remove unused\niop_abort log item operation), and even then xfs_efi_cancel() was\nnever called. I haven\u0027t tracked it back further than that (beyond\ngit history), but it indicates that the handling of EFIs in\ncancelled transactions has been broken for a long time.\n\nBasically, when we get an IOP_UNPIN(lip, 1); call from\nxfs_trans_uncommit() (i.e. remove \u003d\u003d 1), if we don\u0027t free the log\nitem descriptor we leak it. Fix the behviour to be correct and kill\nthe XFS_EFI_CANCELED flag.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "821eb21d97a8b686649c08b7284d0b9f34d0e138",
      "tree": "c1123769b0b12cd8b7a816786881ce2d147d88e5",
      "parents": [
        "430cbeb86fdcbbdabea7d4aa65307de8de425350"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Thu Dec 02 16:31:13 2010 +1100"
      },
      "committer": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Thu Dec 02 16:31:13 2010 +1100"
      },
      "message": "xfs: connect up buffer reclaim priority hooks\n\nNow that the buffer reclaim infrastructure can handle different reclaim\npriorities for different types of buffers, reconnect the hooks in the\nXFS code that has been sitting dormant since it was ported to Linux. This\nshould finally give use reclaim prioritisation that is on a par with the\nfunctionality that Irix provided XFS 15 years ago.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "430cbeb86fdcbbdabea7d4aa65307de8de425350",
      "tree": "5d9e6851942ca74e0e13f9195b9c3f81c3bd7509",
      "parents": [
        "ff57ab21995a8636cfc72efeebb09cc6034d756f"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Thu Dec 02 16:30:55 2010 +1100"
      },
      "committer": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Thu Dec 02 16:30:55 2010 +1100"
      },
      "message": "xfs: add a lru to the XFS buffer cache\n\nIntroduce a per-buftarg LRU for memory reclaim to operate on. This\nis the last piece we need to put in place so that we can fully\ncontrol the buffer lifecycle. This allows XFS to be responsibile for\nmaintaining the working set of buffers under memory pressure instead\nof relying on the VM reclaim not to take pages we need out from\nunderneath us.\n\nThe implementation introduces a b_lru_ref counter into the buffer.\nThis is currently set to 1 whenever the buffer is referenced and so is used to\ndetermine if the buffer should be added to the LRU or not when freed.\nEffectively it allows lazy LRU initialisation of the buffer so we do not need\nto touch the LRU list and locks in xfs_buf_find().\n\nInstead, when the buffer is being released and we drop the last\nreference to it, we check the b_lru_ref count and if it is none zero\nwe re-add the buffer reference and add the inode to the LRU. The\nb_lru_ref counter is decremented by the shrinker, and whenever the\nshrinker comes across a buffer with a zero b_lru_ref counter, if\nreleased the LRU reference on the buffer. In the absence of a lookup\nrace, this will result in the buffer being freed.\n\nThis counting mechanism is used instead of a reference flag so that\nit is simple to re-introduce buffer-type specific reclaim reference\ncounts to prioritise reclaim more effectively. We still have all\nthose hooks in the XFS code, so this will provide the infrastructure\nto re-implement that functionality.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "c76febef574fd86566bbdf1a73a547a439115c25",
      "tree": "bdfb67e30f7c55f54413c2bee79049bbbefff805",
      "parents": [
        "de25c1818c44f580ff556cb9e0f7a1c687ed870b"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Tue Nov 30 15:15:31 2010 +1100"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Wed Dec 01 07:40:20 2010 -0600"
      },
      "message": "xfs: only run xfs_error_test if error injection is active\n\nRecent tests writing lots of small files showed the flusher thread\nbeing CPU bound and taking a long time to do allocations on a debug\nkernel. perf showed this as the prime reason:\n\n             samples  pcnt function                    DSO\n             _______ _____ ___________________________ _________________\n\n           224648.00 36.8% xfs_error_test              [kernel.kallsyms]\n            86045.00 14.1% xfs_btree_check_sblock      [kernel.kallsyms]\n            39778.00  6.5% prandom32                   [kernel.kallsyms]\n            37436.00  6.1% xfs_btree_increment         [kernel.kallsyms]\n            29278.00  4.8% xfs_btree_get_rec           [kernel.kallsyms]\n            27717.00  4.5% random32                    [kernel.kallsyms]\n\nWalking btree blocks during allocation checking them requires each\nblock (a cache hit, so no I/O) call xfs_error_test(), which then\ndoes a random32() call as the first operation.  IOWs, ~50% of the\nCPU is being consumed just testing whether we need to inject an\nerror, even though error injection is not active.\n\nKill this overhead when error injection is not active by adding a\nglobal counter of active error traps and only calling into\nxfs_error_test when fault injection is active.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "de25c1818c44f580ff556cb9e0f7a1c687ed870b",
      "tree": "a8fafd9317cf4841b6004119f6e84ddbece73af3",
      "parents": [
        "309c848002052edbec650075a1eb098b17c17f35"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Tue Nov 30 15:15:46 2010 +1100"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Wed Dec 01 07:40:20 2010 -0600"
      },
      "message": "xfs: avoid moving stale inodes in the AIL\n\nWhen an inode has been marked stale because the cluster is being\nfreed, we don\u0027t want to (re-)insert this inode into the AIL. There\nis a race condition where the cluster buffer may be unpinned before\nthe inode is inserted into the AIL during transaction committed\nprocessing. If the buffer is unpinned before the inode item has been\ncommitted and inserted, then it is possible for the buffer to be\nreleased and hence processthe stale inode callbacks before the inode\nis inserted into the AIL.\n\nIn this case, we then insert a clean, stale inode into the AIL which\nwill never get removed by an IO completion. It will, however, get\nreclaimed and that triggers an assert in xfs_inode_free()\ncomplaining about freeing an inode still in the AIL.\n\nThis race can be avoided by not moving stale inodes forward in the AIL\nduring transaction commit completion processing. This closes the\nrace condition by ensuring we never insert clean stale inodes into\nthe AIL. It is safe to do this because a dirty stale inode, by\ndefinition, must already be in the AIL.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "309c848002052edbec650075a1eb098b17c17f35",
      "tree": "7e3e38c9ebcfa539716298c0f8a0000b45cffd8e",
      "parents": [
        "90810b9e82a36c3c57c1aeb8b2918b242a130b26"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Tue Nov 30 15:16:02 2010 +1100"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Wed Dec 01 07:40:20 2010 -0600"
      },
      "message": "xfs: delayed alloc blocks beyond EOF are valid after writeback\n\nThere is an assumption in the parts of XFS that flushing a dirty\nfile will make all the delayed allocation blocks disappear from an\ninode. That is, that after calling xfs_flush_pages() then\nip-\u003ei_delayed_blks will be zero.\n\nThis is an invalid assumption as we may have specualtive\npreallocation beyond EOF and they are recorded in\nip-\u003ei_delayed_blks. A flush of the dirty pages of an inode will not\nchange the state of these blocks beyond EOF, so a non-zero\ndeeelalloc block count after a flush is valid.\n\nThe bmap code has an invalid ASSERT() that needs to be removed, and\nthe swapext code has a bug in that while it swaps the data forks\naround, it fails to swap the i_delayed_blks counter associated with\nthe fork and hence can get the block accounting wrong.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "90810b9e82a36c3c57c1aeb8b2918b242a130b26",
      "tree": "2fdb8bd75866fc3d61cb7fe2f2cc26f0e6895641",
      "parents": [
        "c726de4409a8d3a03877b1ef4342bfe8a15f5e5e"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Tue Nov 30 15:16:16 2010 +1100"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Wed Dec 01 07:40:20 2010 -0600"
      },
      "message": "xfs: push stale, pinned buffers on trylock failures\n\nAs reported by Nick Piggin, XFS is suffering from long pauses under\nhighly concurrent workloads when hosted on ramdisks. The problem is\nthat an inode buffer is stuck in the pinned state in memory and as a\nresult either the inode buffer or one of the inodes within the\nbuffer is stopping the tail of the log from being moved forward.\n\nThe system remains in this state until a periodic log force issued\nby xfssyncd causes the buffer to be unpinned. The main problem is\nthat these are stale buffers, and are hence held locked until the\ntransaction/checkpoint that marked them state has been committed to\ndisk. When the filesystem gets into this state, only the xfssyncd\ncan cause the async transactions to be committed to disk and hence\nunpin the inode buffer.\n\nThis problem was encountered when scaling the busy extent list, but\nonly the blocking lock interface was fixed to solve the problem.\nExtend the same fix to the buffer trylock operations - if we fail to\nlock a pinned, stale buffer, then force the log immediately so that\nwhen the next attempt to lock it comes around, it will have been\nunpinned.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "c726de4409a8d3a03877b1ef4342bfe8a15f5e5e",
      "tree": "f1212b8f61f6dcdb52206842e8436a45f878a9e9",
      "parents": [
        "e8a7e48bb248a1196484d3f8afa53bded2b24e71"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Tue Nov 30 15:14:39 2010 +1100"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Wed Dec 01 07:40:19 2010 -0600"
      },
      "message": "xfs: fix failed write truncation handling.\n\nSince the move to the new truncate sequence we call xfs_setattr to\ntruncate down excessively instanciated blocks.  As shown by the testcase\nin kernel.org BZ #22452 that doesn\u0027t work too well.  Due to the confusion\nof the internal inode size, and the VFS inode i_size it zeroes data that\nit shouldn\u0027t.\n\nBut full blown truncate seems like overkill here.  We only instanciate\ndelayed allocations in the write path, and given that we never released\nthe iolock we can\u0027t have converted them to real allocations yet either.\n\nThe only nasty case is pre-existing preallocation which we need to skip.\nWe already do this for page discard during writeback, so make the delayed\nallocation block punching a generic function and call it from the failed\nwrite path as well as xfs_aops_discard_page. The callers are\nresponsible for ensuring that partial blocks are not truncated away,\nand that they hold the ilock.\n\nBased on a fix originally from Christoph Hellwig. This version used\nfilesystem blocks as the range unit.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "ff57ab21995a8636cfc72efeebb09cc6034d756f",
      "tree": "675374b134689029d70ca1e0200866cf2f906c44",
      "parents": [
        "1a427ab0c1b205d1bda8da0b77ea9d295ac23c57"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Tue Nov 30 17:27:57 2010 +1100"
      },
      "committer": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Tue Nov 30 17:27:57 2010 +1100"
      },
      "message": "xfs: convert xfsbud shrinker to a per-buftarg shrinker.\n\nBefore we introduce per-buftarg LRU lists, split the shrinker\nimplementation into per-buftarg shrinker callbacks. At the moment\nwe wake all the xfsbufds to run the delayed write queues to free\nthe dirty buffers and make their pages available for reclaim.\nHowever, with an LRU, we want to be able to free clean, unused\nbuffers as well, so we need to separate the xfsbufd from the\nshrinker callbacks.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "1a427ab0c1b205d1bda8da0b77ea9d295ac23c57",
      "tree": "dc0fffd22282d0da29da43b3ebdeed7c3f5fac1d",
      "parents": [
        "1a3e8f3da09c7082d25b512a0ffe569391e4c09a"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Thu Dec 16 17:08:41 2010 +1100"
      },
      "committer": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Thu Dec 16 17:08:41 2010 +1100"
      },
      "message": "xfs: convert pag_ici_lock to a spin lock\n\nnow that we are using RCU protection for the inode cache lookups,\nthe lock is only needed on the modification side. Hence it is not\nnecessary for the lock to be a rwlock as there are no read side\nholders anymore. Convert it to a spin lock to reflect it\u0027s exclusive\nnature.\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": "1a3e8f3da09c7082d25b512a0ffe569391e4c09a",
      "tree": "c717ebe79e1f969f929d1fe6fb044fb59114449f",
      "parents": [
        "d95b7aaf9ab6738bef1ebcc52ab66563085e44ac"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Fri Dec 17 17:29:43 2010 +1100"
      },
      "committer": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Fri Dec 17 17:29:43 2010 +1100"
      },
      "message": "xfs: convert inode cache lookups to use RCU locking\n\nWith delayed logging greatly increasing the sustained parallelism of inode\noperations, the inode cache locking is showing significant read vs write\ncontention when inode reclaim runs at the same time as lookups. There is\nalso a lot more write lock acquistions than there are read locks (4:1 ratio)\nso the read locking is not really buying us much in the way of parallelism.\n\nTo avoid the read vs write contention, change the cache to use RCU locking on\nthe read side. To avoid needing to RCU free every single inode, use the built\nin slab RCU freeing mechanism. This requires us to be able to detect lookups of\nfreed inodes, so enѕure that ever freed inode has an inode number of zero and\nthe XFS_IRECLAIM flag set. We already check the XFS_IRECLAIM flag in cache hit\nlookup path, but also add a check for a zero inode number as well.\n\nWe canthen convert all the read locking lockups to use RCU read side locking\nand hence remove all read side locking.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "d95b7aaf9ab6738bef1ebcc52ab66563085e44ac",
      "tree": "b949bfa2c4588a84f1acf5d84e2fd7b41eab5a2f",
      "parents": [
        "6e857567dbbfe14dd6cc3f7414671b047b1ff5c7"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Thu Dec 16 16:41:39 2010 +1100"
      },
      "committer": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Thu Dec 16 16:41:39 2010 +1100"
      },
      "message": "xfs: rcu free inodes\n\nIntroduce RCU freeing of XFS inodes so that we can convert lookup\ntraversals to use rcu_read_lock() protection. This patch only\nintroduces the RCU freeing to minimise the potential conflicts with\nmainline if this is merged into mainline via a VFS patchset. It\nabuses the i_dentry list for the RCU callback structure because the\nVFS patches make this a union so it is safe to use like this and\nsimplifies and merge issues.\n\nThis patch uses basic RCU freeing rather than SLAB_DESTROY_BY_RCU.\nThe later lookup patches need the same \"found free inode\" protection\nregardless of the RCU freeing method used, so once again the RCU\nfreeing method can be dealt with apprpriately at merge time without\naffecting any other code.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "6e857567dbbfe14dd6cc3f7414671b047b1ff5c7",
      "tree": "dde314cd6a22066e4cd7f3c498f89b00984838d7",
      "parents": [
        "055388a3188f56676c21e92962fc366ac8b5cb72"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Thu Dec 23 12:02:31 2010 +1100"
      },
      "committer": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Thu Dec 23 12:02:31 2010 +1100"
      },
      "message": "xfs: don\u0027t truncate prealloc from frequently accessed inodes\n\nA long standing problem for streaming writeѕ through the NFS server\nhas been that the NFS server opens and closes file descriptors on an\ninode for every write. The result of this behaviour is that the\n-\u003erelease() function is called on every close and that results in\nXFS truncating speculative preallocation beyond the EOF.  This has\nan adverse effect on file layout when multiple files are being\nwritten at the same time - they interleave their extents and can\nresult in severe fragmentation.\n\nTo avoid this problem, keep track of -\u003erelease calls made on a dirty\ninode. For most cases, an inode is only going to be opened once for\nwriting and then closed again during it\u0027s lifetime in cache. Hence\nif there are multiple -\u003erelease calls when the inode is dirty, there\nis a good chance that the inode is being accessed by the NFS server.\nHence set a flag the first time -\u003erelease is called while there are\ndelalloc blocks still outstanding on the inode.\n\nIf this flag is set when -\u003erelease is next called, then do no\ntruncate away the speculative preallocation - leave it there so that\nsubsequent writes do not need to reallocate the delalloc space. This\nwill prevent interleaving of extents of different inodes written\nconcurrently to the same AG.\n\nIf we get this wrong, it is not a big deal as we truncate\nspeculative allocation beyond EOF anyway in xfs_inactive() when the\ninode is thrown out of the cache.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "055388a3188f56676c21e92962fc366ac8b5cb72",
      "tree": "57fb9d649956f311031f574e3f6d8f54146f0f2a",
      "parents": [
        "622d81494fa32343a4b97b607619656c7a4a6d1a"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Tue Jan 04 11:35:03 2011 +1100"
      },
      "committer": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Tue Jan 04 11:35:03 2011 +1100"
      },
      "message": "xfs: dynamic speculative EOF preallocation\n\nCurrently the size of the speculative preallocation during delayed\nallocation is fixed by either the allocsize mount option of a\ndefault size. We are seeing a lot of cases where we need to\nrecommend using the allocsize mount option to prevent fragmentation\nwhen buffered writes land in the same AG.\n\nRather than using a fixed preallocation size by default (up to 64k),\nmake it dynamic by basing it on the current inode size. That way the\nEOF preallocation will increase as the file size increases.  Hence\nfor streaming writes we are much more likely to get large\npreallocations exactly when we need it to reduce fragementation.\n\nFor default settings, the size of the initial extents is determined\nby the number of parallel writers and the amount of memory in the\nmachine. For 4GB RAM and 4 concurrent 32GB file writes:\n\nEXT: FILE-OFFSET           BLOCK-RANGE          AG AG-OFFSET                 TOTAL\n   0: [0..1048575]:         1048672..2097247      0 (1048672..2097247)      1048576\n   1: [1048576..2097151]:   5242976..6291551      0 (5242976..6291551)      1048576\n   2: [2097152..4194303]:   12583008..14680159    0 (12583008..14680159)    2097152\n   3: [4194304..8388607]:   25165920..29360223    0 (25165920..29360223)    4194304\n   4: [8388608..16777215]:  58720352..67108959    0 (58720352..67108959)    8388608\n   5: [16777216..33554423]: 117440584..134217791  0 (117440584..134217791) 16777208\n   6: [33554424..50331511]: 184549056..201326143  0 (184549056..201326143) 16777088\n   7: [50331512..67108599]: 251657408..268434495  0 (251657408..268434495) 16777088\n\nand for 16 concurrent 16GB file writes:\n\n EXT: FILE-OFFSET           BLOCK-RANGE          AG AG-OFFSET                 TOTAL\n   0: [0..262143]:          2490472..2752615      0 (2490472..2752615)       262144\n   1: [262144..524287]:     6291560..6553703      0 (6291560..6553703)       262144\n   2: [524288..1048575]:    13631592..14155879    0 (13631592..14155879)     524288\n   3: [1048576..2097151]:   30408808..31457383    0 (30408808..31457383)    1048576\n   4: [2097152..4194303]:   52428904..54526055    0 (52428904..54526055)    2097152\n   5: [4194304..8388607]:   104857704..109052007  0 (104857704..109052007)  4194304\n   6: [8388608..16777215]:  209715304..218103911  0 (209715304..218103911)  8388608\n   7: [16777216..33554423]: 452984848..469762055  0 (452984848..469762055) 16777208\n\nBecause it is hard to take back specualtive preallocation, cases\nwhere there are large slow growing log files on a nearly full\nfilesystem may cause premature ENOSPC. Hence as the filesystem nears\nfull, the maximum dynamic prealloc size іs reduced according to this\ntable (based on 4k block size):\n\nfreespace       max prealloc size\n  \u003e5%             full extent (8GB)\n  4-5%             2GB (8GB \u003e\u003e 2)\n  3-4%             1GB (8GB \u003e\u003e 3)\n  2-3%           512MB (8GB \u003e\u003e 4)\n  1-2%           256MB (8GB \u003e\u003e 5)\n  \u003c1%            128MB (8GB \u003e\u003e 6)\n\nThis should reduce the amount of space held in speculative\npreallocation for such cases.\n\nThe allocsize mount option turns off the dynamic behaviour and fixes\nthe prealloc size to whatever the mount option specifies. i.e. the\nbehaviour is unchanged.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\n"
    },
    {
      "commit": "622d81494fa32343a4b97b607619656c7a4a6d1a",
      "tree": "b8a004167d57b577c5da563474f8eb32eff83393",
      "parents": [
        "dcfcf20512cb517ac18b9433b676183fa1257911"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Thu Dec 23 11:57:37 2010 +1100"
      },
      "committer": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Thu Dec 23 11:57:37 2010 +1100"
      },
      "message": "xfs: use KM_NOFS for allocations during attribute list operations\n\nWhen listing attributes, we are doiing memory allocations under the\ninode ilock using only KM_SLEEP. This allows memory allocation to\nrecurse back into the filesystem and do writeback, which may the\nilock we already hold on the current inode. THis will deadlock.\nHence use KM_NOFS for such allocations outside of transaction\ncontext to ensure that reclaim recursion does not occur.\n\nReported-by: Nick Piggin \u003cnpiggin@gmail.com\u003e\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "dcfcf20512cb517ac18b9433b676183fa1257911",
      "tree": "fd5551251e63f47dbb804e36cfd4cb3f15f5c322",
      "parents": [
        "489a150f6454e2cd93d9e0ee6d7c5a361844f62a"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Thu Dec 23 11:57:13 2010 +1100"
      },
      "committer": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Thu Dec 23 11:57:13 2010 +1100"
      },
      "message": "xfs: provide a inode iolock lockdep class\n\nThe XFS iolock needs to be re-initialised to a new lock class before\nit enters reclaim to prevent lockdep false positives. Unfortunately,\nthis is not sufficient protection as inodes in the XFS_IRECLAIMABLE\nstate can be recycled and not re-initialised before being reused.\n\nWe need to re-initialise the lock state when transfering out of\nXFS_IRECLAIMABLE state to XFS_INEW, but we need to keep the same\nclass as if the inode was just allocated. Hence we need a specific\nlockdep class variable for the iolock so that both initialisations\nuse the same class.\n\nWhile there, add a specific class for inodes in the reclaim state so\nthat it is easy to tell from lockdep reports what state the inode\nwas in that generated the report.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "489a150f6454e2cd93d9e0ee6d7c5a361844f62a",
      "tree": "18deded59797caaec9f01ef5a3eb66a765bef29f",
      "parents": [
        "9f9baab38dacd11fe6095a1e59f3783a305f7020"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Fri Dec 10 15:04:11 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Thu Dec 16 16:06:15 2010 -0600"
      },
      "message": "xfs: factor duplicate code in xfs_alloc_ag_vextent_near into a helper\n\nAdd a new xfs_alloc_find_best_extent that does a forward/backward\nsearch in the allocation btree.  That code previously was existed\ntwo times in xfs_alloc_ag_vextent_near, once for each search\ndirection.\n\nBased on an earlier patch from Dave Chinner.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "9f9baab38dacd11fe6095a1e59f3783a305f7020",
      "tree": "ea906a3a4be52648b94c8902bd35322421305b30",
      "parents": [
        "ecff71e677c6d469f525dcf31ada709d5858307c"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Fri Dec 10 15:03:57 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Thu Dec 16 16:06:11 2010 -0600"
      },
      "message": "xfs: clean up xfs_alloc_ag_vextent_exact\n\nUse a goto label to consolidate all block not found cases, and add a\ntracepoint for them.  Also clean up a few whitespace issues.\n\nBased on an earlier patch from Dave Chinner.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "ecff71e677c6d469f525dcf31ada709d5858307c",
      "tree": "644ec23fd88da343a16e6272bd64d0d6d27ec2a6",
      "parents": [
        "aeea1b1f81800e362a3aca86d769d02e137a8fa7"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Fri Dec 10 08:42:25 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Thu Dec 16 16:06:07 2010 -0600"
      },
      "message": "xfs: simplify xfs_map_at_offset\n\nMove the buffer locking into the callers as they need to do it\nwether they call xfs_map_at_offset or not.  Remove the b_bdev\nassignment, which is already done by get_blocks.  Remove the\nduplicate extent type asserts in xfs_convert_page just before\ncalling xfs_map_at_offset.\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": "aeea1b1f81800e362a3aca86d769d02e137a8fa7",
      "tree": "f010e3af9ade221ea76c368592c54a07aaa4ca82",
      "parents": [
        "2fa24f92530edaf86c3b5f662464e0d2e3b3e517"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Fri Dec 10 08:42:24 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Thu Dec 16 16:06:03 2010 -0600"
      },
      "message": "xfs: refactor xfs_vm_writepage\n\nAfter the last patches the code for overwrites is the same as for\ndelayed and unwritten extents except that it doesn\u0027t need to call\nxfs_map_at_offset.  Take care of that fact to simplify\nxfs_vm_writepage.\n\nThe buffer loop now first checks the type of buffer and checks/sets\nthe ioend type, or continues to the next buffer if it\u0027s not\ninteresting to us.  Only after that we validate the iomap and\nperform the block mapping if needed, all in common code for the\ncases where we have to do work.\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": "2fa24f92530edaf86c3b5f662464e0d2e3b3e517",
      "tree": "a24ee4610706b63724cc8ae279c52a3ba4467fd9",
      "parents": [
        "ed1e7b7e484dfb64168755613d499f32a97409bd"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Fri Dec 10 08:42:23 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Thu Dec 16 16:06:00 2010 -0600"
      },
      "message": "xfs: remove the all_bh flag from xfs_convert_page\n\nThe all_bh flag is always set when entering the page clustering\nmachinery with a regular written extent, which means the check for\nit is superflous.\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": "ed1e7b7e484dfb64168755613d499f32a97409bd",
      "tree": "8f7a7d3feffd6652f1acf3b868bde6157c81c8b5",
      "parents": [
        "8ff2957d581582890693affc09920108a67cb05d"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Fri Dec 10 08:42:22 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Thu Dec 16 16:05:57 2010 -0600"
      },
      "message": "xfs: remove xfs_probe_cluster\n\nxfs_map_blocks always calls xfs_bmapi with the XFS_BMAPI_ENTIRE\nentire flag, which tells it to not cap the extent at the passed in\nsize, but just treat the size as an minimum to map.  This means\nxfs_probe_cluster is entirely useless as we\u0027ll always get the whole\nextent back anyway.\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": "8ff2957d581582890693affc09920108a67cb05d",
      "tree": "02e20726040eebef830731ecd61cb8a8f7844ade",
      "parents": [
        "a206c817c864583c44e2f418db8e6c7a000fbc38"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Fri Dec 10 08:42:21 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Thu Dec 16 16:05:53 2010 -0600"
      },
      "message": "xfs: simplify xfs_map_blocks\n\nNo need to lock the extent map exclusive when performing an\noverwrite, we know the extent map must already have been loaded by\nget_blocks.  Apply the non-blocking inode semantics to all mapping\ntypes instead of just delayed allocations.  Remove the handling of\nnot yet allocated blocks for the IO_UNWRITTEN case - if an extent is\nmarked as unwritten allocated in the buffer it must already have an\nextent on disk.\n\nAdd asserts to verify all the assumptions above in debug builds.\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": "a206c817c864583c44e2f418db8e6c7a000fbc38",
      "tree": "71c7327482299de93b4183c23d118939e8bd30fc",
      "parents": [
        "405f80429436d38ab4e6b4c0d99861a1f00648fd"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Fri Dec 10 08:42:20 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Thu Dec 16 16:05:51 2010 -0600"
      },
      "message": "xfs: kill xfs_iomap\n\nOpencode the xfs_iomap code in it\u0027s two callers.  The overlap of\npassed flags already was minimal and will be further reduced in the\nnext patch.\n\nAs a side effect the BMAPI_* flags for xfs_bmapi and the IO_* flags\nfor I/O end processing are merged into a single set of flags, which\nshould be a bit more descriptive of the operation we perform.\n\nAlso improve the tracing by giving each caller it\u0027s own type set of\ntracepoints.\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": "405f80429436d38ab4e6b4c0d99861a1f00648fd",
      "tree": "78c8023b267fb5b8ba628997c7bbfabf260eb010",
      "parents": [
        "6ac7248ec5f20cb44a063d7c7191b8e0068b5a28"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Fri Dec 10 08:42:19 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Thu Dec 16 16:05:47 2010 -0600"
      },
      "message": "xfs: cleanup the xfs_iomap_write_* helpers\n\nRemove passing the BMAPI_* flags to these helpers, in\nxfs_iomap_write_direct the check BMAPI_DIRECT was always true, and\nin the xfs_iomap_write_delay path is was never checked at all.\nRemove the nmap return value as we never make use of it.\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": "6ac7248ec5f20cb44a063d7c7191b8e0068b5a28",
      "tree": "26e43646609e98d52d89ae7f4eecbf994b42cf43",
      "parents": [
        "221cb2517e8fc9a1d67c7a8a9c19fc5a916b583f"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Fri Dec 10 08:42:18 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Thu Dec 16 16:05:44 2010 -0600"
      },
      "message": "xfs: a few small tweaks for overwrites in xfs_vm_writepage\n\nDon\u0027t trylock the buffer.  We are the only one ever locking it for a\nregular file address space, and trylock was only copied from the\ngeneric code which did it due to the old buffer based writeout in\njbd.  Also make sure to only write out the buffer if the iomap\nactually is valid, because we wouldn\u0027t have a proper mapping\notherwise.  In practice we will never get an invalid mapping here as\nthe page lock guarantees truncate doesn\u0027t race with us, but better\nbe safe than sorry.  Also make sure we allocate a new ioend when\ncrossing boundaries between mappings, just like we do for delalloc\nand unwritten extents.  Again this currently doesn\u0027t matter as the\nI/O end handler only cares for the boundaries for unwritten extents,\nbut this makes the code fully correct and the same as for\ndelalloc/unwritten extents.\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": "221cb2517e8fc9a1d67c7a8a9c19fc5a916b583f",
      "tree": "891f7a8f1063f862a8c4d76882a0606191813fca",
      "parents": [
        "85da94c6b4666582c38579ccdcd90a5d9b5697ef"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Fri Dec 10 08:42:17 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Thu Dec 16 16:05:40 2010 -0600"
      },
      "message": "xfs: remove some dead bio handling code\n\nWe\u0027ll never have BIO_EOPNOTSUPP set after calling submit_bio as this\ncan only happen for discards, and used to happen for barriers, none\nof which is every submitted by xfs_submit_ioend_bio.  Also remove\nthe loop around bio_alloc as it will never fail due to it\u0027s mempool\nbacking.\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": "85da94c6b4666582c38579ccdcd90a5d9b5697ef",
      "tree": "013edf60a13fd0a551e95bf76a1284209ecd23c2",
      "parents": [
        "c9f71f5fc4390ea3a8087c00d53a799e7e0f0f8e"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Fri Dec 10 08:42:16 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Thu Dec 16 16:05:34 2010 -0600"
      },
      "message": "xfs: improve mapping type check in xfs_vm_writepage\n\nCurrently we only refuse a \"read-only\" mapping for writing out\nunwritten and delayed buffers, and refuse any other for overwrites.\nImprove the checks to require delalloc mappings for delayed buffers,\nand unwritten extent mappings for unwritten extents.\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": "c9f71f5fc4390ea3a8087c00d53a799e7e0f0f8e",
      "tree": "a8d7ffe0a1fe4e547ef0672a0060ce5d2f5f66f0",
      "parents": [
        "d0450948641b2090b5d467ba638bbebd40b20b21"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Wed Dec 01 22:06:24 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Thu Dec 16 16:05:30 2010 -0600"
      },
      "message": "xfs: untangle phase1 vs phase2 recovery helpers\n\nDispatch to a different helper for phase1 vs phase2 in\nxlog_recover_commit_trans instead of doing it in all the\nlow-level functions.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "d0450948641b2090b5d467ba638bbebd40b20b21",
      "tree": "c91ea11d5c6e95901ba5c87e02abf44c8fd2a225",
      "parents": [
        "d5689eaa0ac5588cf459ee32f86d5700dd7d6403"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Wed Dec 01 22:06:23 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Thu Dec 16 16:05:26 2010 -0600"
      },
      "message": "xfs: refactor xlog_recover_commit_trans\n\nMerge the call to xlog_recover_reorder_trans and the loop over the\nrecovery items from xlog_recover_do_trans into xlog_recover_commit_trans,\nand keep the switch statement over the log item types as a separate helper.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "d5689eaa0ac5588cf459ee32f86d5700dd7d6403",
      "tree": "2d637bc35de7f95d10c5c1fc17f57bc7adfb1e41",
      "parents": [
        "e2714bf8d5c8e131a6df6b0ea2269433e9a03a9b"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Wed Dec 01 22:06:22 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Thu Dec 16 16:05:22 2010 -0600"
      },
      "message": "xfs: use struct list_head for the buf cancel table\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "e2714bf8d5c8e131a6df6b0ea2269433e9a03a9b",
      "tree": "2e056b611bcad732b828df1c563f2fa9cca16e11",
      "parents": [
        "576ecb8e2b725726471cc62b12c01e28d33127ba"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Wed Dec 01 22:06:21 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Thu Dec 16 16:05:16 2010 -0600"
      },
      "message": "xfs: remove leftovers of old buffer log items in recovery code\n\nXFS used to support different types of buffer log items long time\nago.  Remove the switch statements checking the log item type in\nvarious buffer recovery helpers that were left over from those days\nand the rather useless xlog_recover_do_buffer_pass2 wrapper.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "576ecb8e2b725726471cc62b12c01e28d33127ba",
      "tree": "4bee2b310019661b147645d0a25f367580e4bca4",
      "parents": [
        "05340d4ab2ec2b6b4962c1c41c6ea8fb550f947b"
      ],
      "author": {
        "name": "Samuel Kvasnica",
        "email": "samuel.kvasnica@ims.co.at",
        "time": "Fri Nov 19 13:38:49 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Thu Dec 16 16:04:55 2010 -0600"
      },
      "message": "xfs: fix exporting with left over 64-bit inodes\n\nWe now support mounting and using filesystems with 64-bit inodes\neven when not mounted with the inode64 option (which now only\ncontrols if we allocate new inodes in that space or not).  Make sure\nwe always use large NFS file handles when exporting a filesystem\nthat may contain 64-bit inodes.  Note that this only affects newly\ngenerated file handles, any outstanding 32-bit file handle is still\naccepted.\n\n[hch: the comment and commit log are mine, the rest is from a patch\n snipplet from Samuel]\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "f30195c50245d8ace628e1978b1daa8df86e7224",
      "tree": "edf4f91c4356c41d50fb07f15cebd1e6442538ad",
      "parents": [
        "d07335e51df0c6dec202d315fc4f1f7e100eec4e",
        "d4d77629953eabd3c14f6fa5746f6b28babfc55f"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sat Nov 27 19:49:18 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sat Nov 27 19:49:18 2010 +0100"
      },
      "message": "Merge branch \u0027cleanup-bd_claim\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tj/misc into for-2.6.38/core\n"
    },
    {
      "commit": "d4d77629953eabd3c14f6fa5746f6b28babfc55f",
      "tree": "38cce0d4764ecb34a9f7f49332959780e28bb786",
      "parents": [
        "75f1dc0d076d1c1168f2115f1941ea627d38bd5a"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sat Nov 13 11:55:18 2010 +0100"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sat Nov 13 11:55:18 2010 +0100"
      },
      "message": "block: clean up blkdev_get() wrappers and their users\n\nAfter recent blkdev_get() modifications, open_by_devnum() and\nopen_bdev_exclusive() are simple wrappers around blkdev_get().\nReplace them with blkdev_get_by_dev() and blkdev_get_by_path().\n\nblkdev_get_by_dev() is identical to open_by_devnum().\nblkdev_get_by_path() is slightly different in that it doesn\u0027t\nautomatically add %FMODE_EXCL to @mode.\n\nAll users are converted.  Most conversions are mechanical and don\u0027t\nintroduce any behavior difference.  There are several exceptions.\n\n* btrfs now sets FMODE_EXCL in btrfs_device-\u003emode, so there\u0027s no\n  reason to OR it explicitly on blkdev_put().\n\n* gfs2, nilfs2 and the generic mount_bdev() now set FMODE_EXCL in\n  sb-\u003es_mode.\n\n* With the above changes, sb-\u003es_mode now always should contain\n  FMODE_EXCL.  WARN_ON_ONCE() added to kill_block_super() to detect\n  errors.\n\nThe new blkdev_get_*() functions are with proper docbook comments.\nWhile at it, add function description to blkdev_get() too.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nCc: Neil Brown \u003cneilb@suse.de\u003e\nCc: Mike Snitzer \u003csnitzer@redhat.com\u003e\nCc: Joern Engel \u003cjoern@lazybastard.org\u003e\nCc: Chris Mason \u003cchris.mason@oracle.com\u003e\nCc: Jan Kara \u003cjack@suse.cz\u003e\nCc: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\nCc: KONISHI Ryusuke \u003ckonishi.ryusuke@lab.ntt.co.jp\u003e\nCc: reiserfs-devel@vger.kernel.org\nCc: xfs-masters@oss.sgi.com\nCc: Alexander Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "e525fd89d380c4a94c0d63913a1dd1a593ed25e7",
      "tree": "d226ef40d3f99e42fcf272ad432585cbd641ebec",
      "parents": [
        "e09b457bdb7e8d23fc54dcef0930ac697d8de895"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sat Nov 13 11:55:17 2010 +0100"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sat Nov 13 11:55:17 2010 +0100"
      },
      "message": "block: make blkdev_get/put() handle exclusive access\n\nOver time, block layer has accumulated a set of APIs dealing with bdev\nopen, close, claim and release.\n\n* blkdev_get/put() are the primary open and close functions.\n\n* bd_claim/release() deal with exclusive open.\n\n* open/close_bdev_exclusive() are combination of open and claim and\n  the other way around, respectively.\n\n* bd_link/unlink_disk_holder() to create and remove holder/slave\n  symlinks.\n\n* open_by_devnum() wraps bdget() + blkdev_get().\n\nThe interface is a bit confusing and the decoupling of open and claim\nmakes it impossible to properly guarantee exclusive access as\nin-kernel open + claim sequence can disturb the existing exclusive\nopen even before the block layer knows the current open if for another\nexclusive access.  Reorganize the interface such that,\n\n* blkdev_get() is extended to include exclusive access management.\n  @holder argument is added and, if is @FMODE_EXCL specified, it will\n  gain exclusive access atomically w.r.t. other exclusive accesses.\n\n* blkdev_put() is similarly extended.  It now takes @mode argument and\n  if @FMODE_EXCL is set, it releases an exclusive access.  Also, when\n  the last exclusive claim is released, the holder/slave symlinks are\n  removed automatically.\n\n* bd_claim/release() and close_bdev_exclusive() are no longer\n  necessary and either made static or removed.\n\n* bd_link_disk_holder() remains the same but bd_unlink_disk_holder()\n  is no longer necessary and removed.\n\n* open_bdev_exclusive() becomes a simple wrapper around lookup_bdev()\n  and blkdev_get().  It also has an unexpected extra bdev_read_only()\n  test which probably should be moved into blkdev_get().\n\n* open_by_devnum() is modified to take @holder argument and pass it to\n  blkdev_get().\n\nMost of bdev open/close operations are unified into blkdev_get/put()\nand most exclusive accesses are tested atomically at the open time (as\nit should).  This cleans up code and removes some, both valid and\ninvalid, but unnecessary all the same, corner cases.\n\nopen_bdev_exclusive() and open_by_devnum() can use further cleanup -\nrename to blkdev_get_by_path() and blkdev_get_by_devt() and drop\nspecial features.  Well, let\u0027s leave them for another day.\n\nMost conversions are straight-forward.  drbd conversion is a bit more\ninvolved as there was some reordering, but the logic should stay the\nsame.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Neil Brown \u003cneilb@suse.de\u003e\nAcked-by: Ryusuke Konishi \u003ckonishi.ryusuke@lab.ntt.co.jp\u003e\nAcked-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nAcked-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nCc: Peter Osterlund \u003cpetero2@telia.com\u003e\nCc: Martin Schwidefsky \u003cschwidefsky@de.ibm.com\u003e\nCc: Heiko Carstens \u003cheiko.carstens@de.ibm.com\u003e\nCc: Jan Kara \u003cjack@suse.cz\u003e\nCc: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nCc: Andreas Dilger \u003cadilger.kernel@dilger.ca\u003e\nCc: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\nCc: Mark Fasheh \u003cmfasheh@suse.com\u003e\nCc: Joel Becker \u003cjoel.becker@oracle.com\u003e\nCc: Alex Elder \u003caelder@sgi.com\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nCc: dm-devel@redhat.com\nCc: drbd-dev@lists.linbit.com\nCc: Leo Chen \u003cleochen@broadcom.com\u003e\nCc: Scott Branden \u003csbranden@broadcom.com\u003e\nCc: Chris Mason \u003cchris.mason@oracle.com\u003e\nCc: Steven Whitehouse \u003cswhiteho@redhat.com\u003e\nCc: Dave Kleikamp \u003cshaggy@linux.vnet.ibm.com\u003e\nCc: Joern Engel \u003cjoern@logfs.org\u003e\nCc: reiserfs-devel@vger.kernel.org\nCc: Alexander Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "ece413f59f257682de4a2e2e42af33b016af53f3",
      "tree": "fe26d60458a4bfbd39e7e319e41c0ceca011914d",
      "parents": [
        "c6f6cd0608b1826ee1797cf57a808416e4bdb806"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Wed Nov 10 21:39:11 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Wed Nov 10 15:51:10 2010 -0600"
      },
      "message": "xfs: remove incorrect assert in xfs_vm_writepage\n\nIn commit 20cb52ebd1b5ca6fa8a5d9b6b1392292f5ca8a45, titled\n\"xfs: simplify xfs_vm_writepage\" I added an assert that any !mapped and\nuptodate buffers are not dirty.  That asserts turns out to trigger a lot\nwhen running fsx on filesystems with small block sizes.  The reason for\nthat is that the assert is simply incorrect.  !mapped and uptodate\njust mean this buffer covers a hole, and whenever we do a set_page_dirty\nwe mark all blocks in the page dirty, no matter if they have data or\nnot.  So remove the assert, and update the comment above the condition\nto match reality.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "c6f6cd0608b1826ee1797cf57a808416e4bdb806",
      "tree": "4c82ec811ef359f71c83f2a68c46498f0b59618b",
      "parents": [
        "5d2bf8a55e03b0e59ed5a4ac2ff7f9ee3ba7e40d"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Sat Nov 06 11:43:08 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Wed Nov 10 12:00:48 2010 -0600"
      },
      "message": "xfs: use hlist_add_fake\n\nXFS does not need it\u0027s inodes to actuall be hashed in the VFS inode\ncache, but we require the inode to be marked hashed for the\nwriteback code to work.\n\nInsted of using insert_inode_hash, which requires a second\ninode_lock roundtrip after the partial merge of the inode\nscalability patches in 2.6.37-rc simply use the new hlist_add_fake\nhelper to mark it hashed without requiring a lock or touching a\nglobal cache line.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "5d2bf8a55e03b0e59ed5a4ac2ff7f9ee3ba7e40d",
      "tree": "fc46c4d8f0504fd64504a30e4590267d1bfed9fe",
      "parents": [
        "785ce41805ea7b6a9b2775ed9f4cf10cd7a90c03"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Sat Nov 06 11:42:56 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Wed Nov 10 12:00:48 2010 -0600"
      },
      "message": "xfs: fix a few compiler warnings with CONFIG_XFS_QUOTA\u003dn\n\nAndi Kleen reported that gcc-4.5 gives lots of warnings for him\ninside the XFS code.  It turned out most of them are due to the\nquota stubs beeing macros, and gcc now complaining about macros\nevaluating to 0 that are not assigned to variables.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "785ce41805ea7b6a9b2775ed9f4cf10cd7a90c03",
      "tree": "8b56f215db003db8984465697cebf2ce9aa119c9",
      "parents": [
        "bfe2741967eaa3434fa9b3d8f24b1422d4540e7d"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Sat Nov 06 11:42:44 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Wed Nov 10 12:00:48 2010 -0600"
      },
      "message": "xfs: tell lockdep about parent iolock usage in filestreams\n\nThe filestreams code may take the iolock on the parent inode while\nholding it on a child.  This is the only place in XFS where we take\nboth the child and parent iolock, so just telling lockdep about it\nis enough.  The lock flag required for that was already added as\npart of the ilock lockdep annotations and unused so far.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "bfe2741967eaa3434fa9b3d8f24b1422d4540e7d",
      "tree": "d012589ede1f1d7e571d7dc75868f445531cccf8",
      "parents": [
        "f83282a8ef799c0bdcb0c32971487087da1bc216"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Mon Nov 08 08:55:05 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Wed Nov 10 12:00:48 2010 -0600"
      },
      "message": "xfs: move delayed write buffer trace\n\nThe delayed write buffer split trace currently issues a trace for\nevery buffer it scans. These buffers are not necessarily queued for\ndelayed write. Indeed, when buffers are pinned, there can be\nthousands of traces of buffers that aren\u0027t actually queued for\ndelayed write and the ones that are are lost in the noise. Move the\ntrace point to record only buffers that are split out for IO to be\nissued on.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "f83282a8ef799c0bdcb0c32971487087da1bc216",
      "tree": "953c706c4c96a85348cc6e1404436411919b6d80",
      "parents": [
        "6762b938eac878a30a90e770ac655874c36bc642"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Mon Nov 08 08:55:04 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Wed Nov 10 12:00:48 2010 -0600"
      },
      "message": "xfs: fix per-ag reference counting in inode reclaim tree walking\n\nThe walk fails to decrement the per-ag reference count when the\nnon-blocking walk fails to obtain the per-ag reclaim lock, leading\nto an assert failure on debug kernels when unmounting a filesystem.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "6762b938eac878a30a90e770ac655874c36bc642",
      "tree": "424b9893aa5494104b8d93de2b9c52fbdce37b75",
      "parents": [
        "5d0af85cd0964bb845b63d5059bb20e8f7731e65"
      ],
      "author": {
        "name": "Kulikov Vasiliy",
        "email": "segooon@gmail.com",
        "time": "Sat Oct 30 14:26:17 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Wed Nov 10 12:00:47 2010 -0600"
      },
      "message": "xfs: xfs_ioctl: fix information leak to userland\n\nal_hreq is copied from userland.  If al_hreq.buflen is not properly aligned\nthen xfs_attr_list will ignore the last bytes of kbuf.  These bytes are\nunitialized.  It leads to leaking of contents of kernel stack memory.\n\nSigned-off-by: Vasiliy Kulikov \u003csegooon@gmail.com\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "5d0af85cd0964bb845b63d5059bb20e8f7731e65",
      "tree": "8c3bb47546b361be20e972cf6069ccd29f38ba41",
      "parents": [
        "f6614b7bb405a9b35dd28baea989a749492c46b2"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Thu Oct 28 21:37:10 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Wed Nov 10 12:00:47 2010 -0600"
      },
      "message": "xfs: remove experimental tag from the delaylog option\n\nWe promised to do this for 2.6.37, and the code looks stable enough to\nkeep that promise.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "b595076a180a56d1bb170e6eceda6eb9d76f4cd3",
      "tree": "bc01ec7283808013e0b8ce7713fd6fc40f810429",
      "parents": [
        "6aaccece1c483f189f76f1282b3984ff4c7ecb0a"
      ],
      "author": {
        "name": "Uwe Kleine-König",
        "email": "u.kleine-koenig@pengutronix.de",
        "time": "Mon Nov 01 15:38:34 2010 -0400"
      },
      "committer": {
        "name": "Jiri Kosina",
        "email": "jkosina@suse.cz",
        "time": "Mon Nov 01 15:38:34 2010 -0400"
      },
      "message": "tree-wide: fix comment/printk typos\n\n\"gadget\", \"through\", \"command\", \"maintain\", \"maintain\", \"controller\", \"address\",\n\"between\", \"initiali[zs]e\", \"instead\", \"function\", \"select\", \"already\",\n\"equal\", \"access\", \"management\", \"hierarchy\", \"registration\", \"interest\",\n\"relative\", \"memory\", \"offset\", \"already\",\n\nSigned-off-by: Uwe Kleine-König \u003cu.kleine-koenig@pengutronix.de\u003e\nSigned-off-by: Jiri Kosina \u003cjkosina@suse.cz\u003e\n"
    },
    {
      "commit": "152a08366671080f27b32e0c411ad620c5f88b57",
      "tree": "d13d16028f74839c678bce355ba8aac75d939fa8",
      "parents": [
        "c96e41e92b4aaf11e1f9775ecf0d1c8cbff829ed"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sun Jul 25 00:46:55 2010 +0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Oct 29 04:16:13 2010 -0400"
      },
      "message": "new helper: mount_bdev()\n\n... and switch of the obvious get_sb_bdev() users to -\u003emount()\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "7d2f280e75f05919314e250cadf361a327ed555c",
      "tree": "47db5a9a0ceaf31adf49c18b663b1e08184f7cff",
      "parents": [
        "e3e1288e86a07cdeb0aee5860a2dff111c6eff79",
        "4408ea41c0ab4b711d4da44dd954fb06dce6c3f8"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Oct 27 20:13:18 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Oct 27 20:13:18 2010 -0700"
      },
      "message": "Merge branch \u0027for_linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs-2.6\n\n* \u0027for_linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs-2.6: (24 commits)\n  quota: Fix possible oops in __dquot_initialize()\n  ext3: Update kernel-doc comments\n  jbd/2: fixed typos\n  ext2: fixed typo.\n  ext3: Fix debug messages in ext3_group_extend()\n  jbd: Convert atomic_inc() to get_bh()\n  ext3: Remove misplaced BUFFER_TRACE() in ext3_truncate()\n  jbd: Fix debug message in do_get_write_access()\n  jbd: Check return value of __getblk()\n  ext3: Use DIV_ROUND_UP() on group desc block counting\n  ext3: Return proper error code on ext3_fill_super()\n  ext3: Remove unnecessary casts on bh-\u003eb_data\n  ext3: Cleanup ext3_setup_super()\n  quota: Fix issuing of warnings from dquot_transfer\n  quota: fix dquot_disable vs dquot_transfer race v2\n  jbd: Convert bitops to buffer fns\n  ext3/jbd: Avoid WARN() messages when failing to write the superblock\n  jbd: Use offset_in_page() instead of manual calculation\n  jbd: Remove unnecessary goto statement\n  jbd: Use printk_ratelimited() in journal_alloc_journal_head()\n  ...\n"
    },
    {
      "commit": "426e1f5cec4821945642230218876b0e89aafab1",
      "tree": "2728ace018d0698886989da586210ef1543a7098",
      "parents": [
        "9e5fca251f44832cb996961048ea977f80faf6ea",
        "63997e98a3be68d7cec806d22bf9b02b2e1daabb"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Oct 26 17:58:44 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Oct 26 17:58:44 2010 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6: (52 commits)\n  split invalidate_inodes()\n  fs: skip I_FREEING inodes in writeback_sb_inodes\n  fs: fold invalidate_list into invalidate_inodes\n  fs: do not drop inode_lock in dispose_list\n  fs: inode split IO and LRU lists\n  fs: switch bdev inode bdi\u0027s correctly\n  fs: fix buffer invalidation in invalidate_list\n  fsnotify: use dget_parent\n  smbfs: use dget_parent\n  exportfs: use dget_parent\n  fs: use RCU read side protection in d_validate\n  fs: clean up dentry lru modification\n  fs: split __shrink_dcache_sb\n  fs: improve DCACHE_REFERENCED usage\n  fs: use percpu counter for nr_dentry and nr_dentry_unused\n  fs: simplify __d_free\n  fs: take dcache_lock inside __d_path\n  fs: do not assign default i_ino in new_inode\n  fs: introduce a per-cpu last_ino allocator\n  new helper: ihold()\n  ...\n"
    },
    {
      "commit": "1b430beee5e388605dfb092b214ef0320f752cf6",
      "tree": "c1b1ece282aab771fd1386a3fe0c6e82cb5c5bfe",
      "parents": [
        "d19d5476f4b9f91d2de92b91588bb118beba6c0d"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Tue Oct 26 14:21:26 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Oct 26 16:52:05 2010 -0700"
      },
      "message": "writeback: remove nonblocking/encountered_congestion references\n\nThis removes more dead code that was somehow missed by commit 0d99519efef\n(writeback: remove unused nonblocking and congestion checks).  There are\nno behavior change except for the removal of two entries from one of the\next4 tracing interface.\n\nThe nonblocking checks in -\u003ewritepages are no longer used because the\nflusher now prefer to block on get_request_wait() than to skip inodes on\nIO congestion.  The latter will lead to more seeky IO.\n\nThe nonblocking checks in -\u003ewritepage are no longer used because it\u0027s\nredundant with the WB_SYNC_NONE check.\n\nWe no long set -\u003enonblocking in VM page out and page migration, because\na) it\u0027s effectively redundant with WB_SYNC_NONE in current code\nb) it\u0027s old semantic of \"Don\u0027t get stuck on request queues\" is mis-behavior:\n   that would skip some dirty inodes on congestion and page out others, which\n   is unfair in terms of LRU age.\n\nInspired by Christoph Hellwig. Thanks!\n\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nCc: Theodore Ts\u0027o \u003ctytso@mit.edu\u003e\nCc: David Howells \u003cdhowells@redhat.com\u003e\nCc: Sage Weil \u003csage@newdream.net\u003e\nCc: Steve French \u003csfrench@samba.org\u003e\nCc: Chris Mason \u003cchris.mason@oracle.com\u003e\nCc: Jens Axboe \u003caxboe@kernel.dk\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "85fe4025c616a7c0ed07bc2fc8c5371b07f3888c",
      "tree": "7a5db7accb6192f2911f2473b4e3191227b914cc",
      "parents": [
        "f991bd2e14210fb93d722cb23e54991de20e8a3d"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Sat Oct 23 11:19:54 2010 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Oct 25 21:26:11 2010 -0400"
      },
      "message": "fs: do not assign default i_ino in new_inode\n\nInstead of always assigning an increasing inode number in new_inode\nmove the call to assign it into those callers that actually need it.\nFor now callers that need it is estimated conservatively, that is\nthe call is added to all filesystems that do not assign an i_ino\nby themselves.  For a few more filesystems we can avoid assigning\nany inode number given that they aren\u0027t user visible, and for others\nit could be done lazily when an inode number is actually needed,\nbut that\u0027s left for later patches.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "7de9c6ee3ecffd99e1628e81a5ea5468f7581a1f",
      "tree": "88787e77ba8a253d0a26aeda4bd5e58532d592e0",
      "parents": [
        "646ec4615cd05972581c9c5342ed7a1e77df17bb"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sat Oct 23 11:11:40 2010 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Oct 25 21:26:11 2010 -0400"
      },
      "message": "new helper: ihold()\n\nClones an existing reference to inode; caller must already hold one.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    }
  ],
  "next": "646ec4615cd05972581c9c5342ed7a1e77df17bb"
}
