)]}'
{
  "log": [
    {
      "commit": "c3b2da314834499f34cba94f7053e55f6d6f92d8",
      "tree": "7012b569ee9e0781761a8eb388190979441583c7",
      "parents": [
        "033369d1af1264abc23bea2e174aa47cdd212f6f"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Mon Mar 26 09:59:21 2012 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Jun 01 12:07:25 2012 -0400"
      },
      "message": "fs: introduce inode operation -\u003eupdate_time\n\nBtrfs has to make sure we have space to allocate new blocks in order to modify\nthe inode, so updating time can fail.  We\u0027ve gotten around this by having our\nown file_update_time but this is kind of a pain, and Christoph has indicated he\nwould like to make xfs do something different with atime updates.  So introduce\n-\u003eupdate_time, where we will deal with i_version an a/m/c time updates and\nindicate which changes need to be made.  The normal version just does what it\nhas always done, updates the time and marks the inode dirty, and then\nfilesystems can choose to do something different.\n\nI\u0027ve gone through all of the users of file_update_time and made them check for\nerrors with the exception of the fault code since it\u0027s complicated and I wasn\u0027t\nquite sure what to do there, also Jan is going to be pushing the file time\nupdates into page_mkwrite for those who have it so that should satisfy btrfs and\nmake it not a big deal to check the file_update_time() return code in the\ngeneric fault path. Thanks,\n\nSigned-off-by: Josef Bacik \u003cjosef@redhat.com\u003e\n"
    },
    {
      "commit": "b0b0382bb4904965a9e9fca77ad87514dfda0d1c",
      "tree": "dc46873fa74e0d194e4a2571b16f0767e1919ae8",
      "parents": [
        "6d42e7e9f6d86ed4dfacde75a6cf515068f9749c"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Apr 02 14:34:06 2012 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue May 29 23:28:33 2012 -0400"
      },
      "message": "-\u003eencode_fh() API change\n\npass inode + parent\u0027s inode or NULL instead of dentry + bool saying\nwhether we want the parent or not.\n\nNOTE: that needs ceph fix folded in.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "77ba78776e90e8de541f13b326e284c74286252f",
      "tree": "ea05703a21e255484462b947e5f15ffd781163cd",
      "parents": [
        "c217a2a004d98d09dfceec3a023c563ed800e833"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Apr 02 06:24:04 2012 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue May 29 23:28:32 2012 -0400"
      },
      "message": "xfs: switch to proper __bitwise type for KM_... flags\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "90324cc1b11a211e37eabd8cb863e1a1561d6b1d",
      "tree": "c8b79c6850420a114ca6660c1b44fc486b1ba86d",
      "parents": [
        "fb8b00675eb6462aacab56bca31ed6107bda5314",
        "169ebd90131b2ffca74bb2dbe7eeacd39fb83714"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon May 28 09:54:45 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon May 28 09:54:45 2012 -0700"
      },
      "message": "Merge tag \u0027writeback\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/wfg/linux\n\nPull writeback tree from Wu Fengguang:\n \"Mainly from Jan Kara to avoid iput() in the flusher threads.\"\n\n* tag \u0027writeback\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/wfg/linux:\n  writeback: Avoid iput() from flusher thread\n  vfs: Rename end_writeback() to clear_inode()\n  vfs: Move waiting for inode writeback from end_writeback() to evict_inode()\n  writeback: Refactor writeback_single_inode()\n  writeback: Remove wb-\u003elist_lock from writeback_single_inode()\n  writeback: Separate inode requeueing after writeback\n  writeback: Move I_DIRTY_PAGES handling\n  writeback: Move requeueing when I_SYNC set to writeback_sb_inodes()\n  writeback: Move clearing of I_SYNC into inode_sync_complete()\n  writeback: initialize global_dirty_limit\n  fs: remove 8 bytes of padding from struct writeback_control on 64 bit builds\n  mm: page-writeback.c: local functions should not be exposed globally\n"
    },
    {
      "commit": "14c26c6a05de138a4fd9a0c05ff8e7435a618324",
      "tree": "c916866e4e9ac21d5f3400edf3eb8186ea7740af",
      "parents": [
        "3ba316037470bbf98c8a16c2179c02794fb8862e"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Tue Apr 24 16:33:31 2012 +1000"
      },
      "committer": {
        "name": "Ben Myers",
        "email": "bpm@sgi.com",
        "time": "Mon May 21 10:45:44 2012 -0500"
      },
      "message": "xfs: add trace points for log forces\n\nTo enable easy tracing of the location of log forces and the\nfrequency of them via perf, add a pair of trace points to the log\nforce functions.  This will help debug where excessive log forces\nare being issued from by simple perf commands like:\n\n# ~/perf/perf top -e xfs:xfs_log_force -G -U\n\nWhich gives this sort of output:\n\nEvents: 141  xfs:xfs_log_force\n-  100.00%  [kernel]  [k] xfs_log_force\n   - xfs_log_force\n        87.04% xfsaild\n           kthread\n           kernel_thread_helper\n      - 12.87% xfs_buf_lock\n           _xfs_buf_find\n           xfs_buf_get\n           xfs_trans_get_buf\n           xfs_da_do_buf\n           xfs_da_get_buf\n           xfs_dir2_data_init\n           xfs_dir2_leaf_addname\n           xfs_dir_createname\n           xfs_create\n           xfs_vn_mknod\n           xfs_vn_create\n           vfs_create\n           do_last.isra.41\n           path_openat\n           do_filp_open\n           do_sys_open\n           sys_open\n           system_call_fastpath\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Mark Tinguely \u003ctinguely@sgi.com\u003e\nSigned-off-by: Ben Myers \u003cbpm@sig.com\u003e\n\n"
    },
    {
      "commit": "3ba316037470bbf98c8a16c2179c02794fb8862e",
      "tree": "cd9a68a6f7ecefc76e7e66e21fd936a60a1e2b6f",
      "parents": [
        "ea562ed6e7df5acd9392d993882c39e855099165"
      ],
      "author": {
        "name": "Peter Watkins",
        "email": "treestem@gmail.com",
        "time": "Mon May 07 16:11:37 2012 -0400"
      },
      "committer": {
        "name": "Ben Myers",
        "email": "bpm@sgi.com",
        "time": "Mon May 21 10:45:44 2012 -0500"
      },
      "message": "xfs: fix memory reclaim deadlock on agi buffer\n\nNote xfs_iget can be called while holding a locked agi buffer. If\nit goes into memory reclaim then inode teardown may try to lock the\nsame buffer. Prevent the deadlock by calling radix_tree_preload\nwith GFP_NOFS.\n\nSigned-off-by: Peter Watkins \u003ctreestem@gmail.com\u003e\nReviewed-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nSigned-off-by: Ben Myers \u003cbpm@sgi.com\u003e\n\n"
    },
    {
      "commit": "ea562ed6e7df5acd9392d993882c39e855099165",
      "tree": "0f91e73ae2adba9e0469a7a87abe44c13a880c70",
      "parents": [
        "1307bbd2af67283131728637e9489002adb26f10"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Tue May 08 20:48:53 2012 +1000"
      },
      "committer": {
        "name": "Ben Myers",
        "email": "bpm@sgi.com",
        "time": "Mon May 21 10:45:43 2012 -0500"
      },
      "message": "xfs: fix delalloc quota accounting on failure\n\nxfstest 270 was causing quota reservations way beyond what was sane\n(ten to hundreds of TB) for a 4GB filesystem. There\u0027s a sign problem\nin the error handling path of xfs_bmapi_reserve_delalloc() because\nxfs_trans_unreserve_quota_nblks() simple negates the value passed -\nwhich doesn\u0027t work for an unsigned variable. This causes\nreservations of close to 2^32 block instead of removing a\nreservation of a handful of blocks.\n\nFix the same problem in the other xfs_trans_unreserve_quota_nblks()\ncallers where unsigned integer variables are used, too.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Eric Sandeen \u003csandeen@redhat.com\u003e\nSigned-off-by: Ben Myers \u003cbpm@sgi.com\u003e\n\n"
    },
    {
      "commit": "1307bbd2af67283131728637e9489002adb26f10",
      "tree": "76b3000b2cf8e7d101b8f4b4de20e6255d316b95",
      "parents": [
        "3fe3e6b18216c1247497dfd51c35484338856e1b"
      ],
      "author": {
        "name": "Ben Myers",
        "email": "bpm@sgi.com",
        "time": "Tue May 15 14:26:55 2012 -0500"
      },
      "committer": {
        "name": "Ben Myers",
        "email": "bpm@sgi.com",
        "time": "Tue May 15 14:35:43 2012 -0500"
      },
      "message": "xfs: protect xfs_sync_worker with s_umount semaphore\n\nxfs_sync_worker checks the MS_ACTIVE flag in s_flags to avoid doing\nwork during mount and unmount.  This flag can be cleared by unmount\nafter the xfs_sync_worker checks it but before the work is completed.\nThe has caused crashes in the completion handler for the dummy\ntransaction commited by xfs_sync_worker:\n\nPID: 27544  TASK: ffff88013544e040  CPU: 3   COMMAND: \"kworker/3:0\"\n #0 [ffff88016fdff930] machine_kexec at ffffffff810244e9\n #1 [ffff88016fdff9a0] crash_kexec at ffffffff8108d053\n #2 [ffff88016fdffa70] oops_end at ffffffff813ad1b8\n #3 [ffff88016fdffaa0] no_context at ffffffff8102bd48\n #4 [ffff88016fdffaf0] __bad_area_nosemaphore at ffffffff8102c04d\n #5 [ffff88016fdffb40] bad_area_nosemaphore at ffffffff8102c12e\n #6 [ffff88016fdffb50] do_page_fault at ffffffff813afaee\n #7 [ffff88016fdffc60] page_fault at ffffffff813ac635\n    [exception RIP: xlog_get_lowest_lsn+0x30]\n    RIP: ffffffffa04a9910  RSP: ffff88016fdffd10  RFLAGS: 00010246\n    RAX: ffffc90014e48000  RBX: ffff88014d879980  RCX: ffff88014d879980\n    RDX: ffff8802214ee4c0  RSI: 0000000000000000  RDI: 0000000000000000\n    RBP: ffff88016fdffd10   R8: ffff88014d879a80   R9: 0000000000000000\n    R10: 0000000000000001  R11: 0000000000000000  R12: ffff8802214ee400\n    R13: ffff88014d879980  R14: 0000000000000000  R15: ffff88022fd96605\n    ORIG_RAX: ffffffffffffffff  CS: 0010  SS: 0018\n #8 [ffff88016fdffd18] xlog_state_do_callback at ffffffffa04aa186 [xfs]\n #9 [ffff88016fdffd98] xlog_state_done_syncing at ffffffffa04aa568 [xfs]\n\nProtect xfs_sync_worker by using the s_umount semaphore at the read\nlevel to provide exclusion with unmount while work is progressing.\n\nReviewed-by: Mark Tinguely \u003ctinguely@sgi.com\u003e\nSigned-off-by: Ben Myers \u003cbpm@sgi.com\u003e\n"
    },
    {
      "commit": "3fe3e6b18216c1247497dfd51c35484338856e1b",
      "tree": "4ebbec83f37d2b7bd7d2aaab3800ed5b335b42b9",
      "parents": [
        "e700a06c71dbbc0879a5d15881cca7b772282484"
      ],
      "author": {
        "name": "Jeff Liu",
        "email": "jeff.liu@oracle.com",
        "time": "Thu May 10 21:29:17 2012 +0800"
      },
      "committer": {
        "name": "Ben Myers",
        "email": "bpm@sgi.com",
        "time": "Mon May 14 16:21:05 2012 -0500"
      },
      "message": "xfs: introduce SEEK_DATA/SEEK_HOLE support\n\nThis patch adds lseek(2) SEEK_DATA/SEEK_HOLE functionality to xfs.\n\nSigned-off-by: Jie Liu \u003cjeff.liu@oracle.com\u003e\nReviewed-by: Mark Tinguely \u003ctinguely@sgi.com\u003e\nSigned-off-by: Ben Myers \u003cbpm@sgi.com\u003e\n"
    },
    {
      "commit": "e700a06c71dbbc0879a5d15881cca7b772282484",
      "tree": "fdd09e1d5b44ec203b1da949f1a65ac2fb2428bb",
      "parents": [
        "611c99468c7aa1a5c2bb6d46e7b5d8e53eecfefd"
      ],
      "author": {
        "name": "Ben Myers",
        "email": "bpm@sgi.com",
        "time": "Thu May 10 13:55:33 2012 -0500"
      },
      "committer": {
        "name": "Ben Myers",
        "email": "bpm@sgi.com",
        "time": "Mon May 14 16:21:04 2012 -0500"
      },
      "message": "xfs: make xfs_extent_busy_trim not static\n\nCommit e459df5, \u0027xfs: move busy extent handling to it\u0027s own file\u0027\nmoved some code from xfs_alloc.c into xfs_extent_busy.c for\nconvenience in userspace code merges.  One of the functions moved is\nxfs_extent_busy_trim (formerly xfs_alloc_busy_trim) which is defined\nSTATIC.  Unfortunately this function is still used in xfs_alloc.c, and\nthis results in an undefined symbol in xfs.ko.\n\nMake xfs_extent_busy_trim not static and add its prototype to\nxfs_extent_busy.h.\n\nSigned-off-by: Ben Myers \u003cbpm@sgi.com\u003e\nReviewed-by: Mark Tinguely \u003ctinguely@sgi.com\u003e\n"
    },
    {
      "commit": "611c99468c7aa1a5c2bb6d46e7b5d8e53eecfefd",
      "tree": "809588ac3b7ec796041a435dc512a3f22594be4d",
      "parents": [
        "d4f3512b0891658b6b4d5fc99567242b3fc2d6b7"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Mon Apr 23 15:59:07 2012 +1000"
      },
      "committer": {
        "name": "Ben Myers",
        "email": "bpm@sgi.com",
        "time": "Mon May 14 16:21:03 2012 -0500"
      },
      "message": "xfs: make XBF_MAPPED the default behaviour\n\nRather than specifying XBF_MAPPED for almost all buffers, introduce\nXBF_UNMAPPED for the couple of users that use unmapped buffers.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Mark Tinguely \u003ctinguely@sgi.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Ben Myers \u003cbpm@sgi.com\u003e\n"
    },
    {
      "commit": "d4f3512b0891658b6b4d5fc99567242b3fc2d6b7",
      "tree": "dfe5cd3093ed3d58cd2d9c1934b9821af8b530e3",
      "parents": [
        "12bcb3f7d4371f74bd25372e98e0d2da978e82b2"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Mon Apr 23 15:59:06 2012 +1000"
      },
      "committer": {
        "name": "Ben Myers",
        "email": "bpm@sgi.com",
        "time": "Mon May 14 16:21:02 2012 -0500"
      },
      "message": "xfs: flush outstanding buffers on log mount failure\n\nWhen we fail to mount the log in xfs_mountfs(), we tear down all the\ninfrastructure we have already allocated. However, the process of\nmounting the log may have progressed to the point of reading,\ncaching and modifying buffers in memory. Hence before we can free\nall the infrastructure, we have to flush and remove all the buffers\nfrom memory.\n\nProblem first reported by Eric Sandeen, later a different incarnation\nwas reported by Ben Myers.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Mark Tinguely \u003ctinguely@sgi.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Ben Myers \u003cbpm@sgi.com\u003e\n"
    },
    {
      "commit": "12bcb3f7d4371f74bd25372e98e0d2da978e82b2",
      "tree": "34179626e2d3312bd66a9b14fbb926df1fc45401",
      "parents": [
        "ad1e95c54eb3980ab2b4683fba29ad0ef954ec51"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Mon Apr 23 15:59:05 2012 +1000"
      },
      "committer": {
        "name": "Ben Myers",
        "email": "bpm@sgi.com",
        "time": "Mon May 14 16:21:01 2012 -0500"
      },
      "message": "xfs: Properly exclude IO type flags from buffer flags\n\nRecent event tracing during a debugging session showed that flags\nthat define the IO type for a buffer are leaking into the flags on\nthe buffer incorrectly. Fix the flag exclusion mask in\nxfs_buf_alloc() to avoid problems that may be caused by such\nleakage.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Mark Tinguely \u003ctinguely@sgi.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Ben Myers \u003cbpm@sgi.com\u003e\n"
    },
    {
      "commit": "ad1e95c54eb3980ab2b4683fba29ad0ef954ec51",
      "tree": "1ba9b690080cc003e572c2ef0e99c3af228de17e",
      "parents": [
        "2af51f3a4ef93945d20ff27ab28c5c68b5a21efc"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Mon Apr 23 15:59:04 2012 +1000"
      },
      "committer": {
        "name": "Ben Myers",
        "email": "bpm@sgi.com",
        "time": "Mon May 14 16:21:00 2012 -0500"
      },
      "message": "xfs: clean up xfs_bit.h includes\n\nWith the removal of xfs_rw.h and other changes over time, xfs_bit.h\nis being included in many files that don\u0027t actually need it. Clean\nup the includes as necessary.\n\nAlso move the only-used-once xfs_ialloc_find_free() static inline\nfunction out of a header file that is widely included to reduce\nthe number of needless dependencies on xfs_bit.h.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Mark Tinguely \u003ctinguely@sgi.com\u003e\nSigned-off-by: Ben Myers \u003cbpm@sgi.com\u003e\n"
    },
    {
      "commit": "2af51f3a4ef93945d20ff27ab28c5c68b5a21efc",
      "tree": "b07fb8fefd07abcbd3d14cb8ad724f0060e528e5",
      "parents": [
        "2a0ec1d9ed7f3aa7974fccfbb612fadda2e10bad"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Mon Apr 23 15:59:03 2012 +1000"
      },
      "committer": {
        "name": "Ben Myers",
        "email": "bpm@sgi.com",
        "time": "Mon May 14 16:20:59 2012 -0500"
      },
      "message": "xfs: move xfs_do_force_shutdown() and kill xfs_rw.c\n\nxfs_do_force_shutdown now is the only thing in xfs_rw.c. There is no\nneed to keep it in it\u0027s own file anymore, so move it to xfs_fsops.c\nnext to xfs_fs_goingdown() and kill xfs_rw.c.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Mark Tinguely \u003ctinguely@sgi.com\u003e\nSigned-off-by: Ben Myers \u003cbpm@sgi.com\u003e\n"
    },
    {
      "commit": "2a0ec1d9ed7f3aa7974fccfbb612fadda2e10bad",
      "tree": "df922fdcf44b6b537b00668da1ffba98283727d1",
      "parents": [
        "fd50092c08068b5bc5d170bc17894db584aaf7b2"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Mon Apr 23 15:59:02 2012 +1000"
      },
      "committer": {
        "name": "Ben Myers",
        "email": "bpm@sgi.com",
        "time": "Mon May 14 16:20:58 2012 -0500"
      },
      "message": "xfs: move xfs_get_extsz_hint() and kill xfs_rw.h\n\nThe only thing left in xfs_rw.h is a function prototype for an inode\nfunction.  Move that to xfs_inode.h, and kill xfs_rw.h.\n\nAlso move the function implementing the prototype from xfs_rw.c to\nxfs_inode.c so we only have one function left in xfs_rw.c\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Mark Tinguely \u003ctinguely@sgi.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Ben Myers \u003cbpm@sgi.com\u003e\n"
    },
    {
      "commit": "fd50092c08068b5bc5d170bc17894db584aaf7b2",
      "tree": "0d2abe20735bf44e88727ec074fa55a298dc086d",
      "parents": [
        "4ecbfe637cbcc0f093d1f295ef483f4e31e3987b"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Mon Apr 23 15:59:01 2012 +1000"
      },
      "committer": {
        "name": "Ben Myers",
        "email": "bpm@sgi.com",
        "time": "Mon May 14 16:20:57 2012 -0500"
      },
      "message": "xfs: move xfs_fsb_to_db to xfs_bmap.h\n\nThis is the only remaining useful function in xfs_rw.h, so move it\nto a header file responsible for block mapping functions that the\ncallers already include. Soon we can get rid of xfs_rw.h.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Mark Tinguely \u003ctinguely@sgi.com\u003e\nSigned-off-by: Ben Myers \u003cbpm@sgi.com\u003e\n"
    },
    {
      "commit": "4ecbfe637cbcc0f093d1f295ef483f4e31e3987b",
      "tree": "38faf345e1e43b85105dbfc7f6b3b4e7409f0cfb",
      "parents": [
        "efc27b52594e322d4c94e379489fa3690bf74739"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Sun Apr 29 10:41:10 2012 +0000"
      },
      "committer": {
        "name": "Ben Myers",
        "email": "bpm@sgi.com",
        "time": "Mon May 14 16:20:56 2012 -0500"
      },
      "message": "xfs: clean up busy extent naming\n\nNow that the busy extent tracking has been moved out of the\nallocation files, clean up the namespace it uses to\n\"xfs_extent_busy\" rather than a mix of \"xfs_busy\" and\n\"xfs_alloc_busy\".\n\nSigned-off-by: Dave Chinner\u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Mark Tinguely \u003ctinguely@sgi.com\u003e\nSigned-off-by: Ben Myers \u003cbpm@sgi.com\u003e\n"
    },
    {
      "commit": "efc27b52594e322d4c94e379489fa3690bf74739",
      "tree": "02f154dd6b74b02cc07c2f7bae91d5b4b222b6cd",
      "parents": [
        "60a34607b26b60d6b5c5c928ede7fc84b0f06b85"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Sun Apr 29 10:39:43 2012 +0000"
      },
      "committer": {
        "name": "Ben Myers",
        "email": "bpm@sgi.com",
        "time": "Mon May 14 16:20:55 2012 -0500"
      },
      "message": "xfs: move busy extent handling to it\u0027s own file\n\nTo make it easier to handle userspace code merges, move all the busy\nextent handling out of the allocation code and into it\u0027s own file.\nThe userspace code does not need the busy extent code, so this\nsimplifies the merging of the kernel code into the userspace\nxfsprogs library.\n\nBecause the busy extent code has been almost completely rewritten\nover the past couple of years, also update the copyright on this new\nfile to include the authors that made all those changes.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Mark Tinguely \u003ctinguely@sgi.com\u003e\nSigned-off-by: Ben Myers \u003cbpm@sgi.com\u003e\n"
    },
    {
      "commit": "60a34607b26b60d6b5c5c928ede7fc84b0f06b85",
      "tree": "5f6b7570d81f6d3ed82ca34f1645f14d23ce6893",
      "parents": [
        "bc4010ecb8f4d4316e1a63a879a2715e49d113ad"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Mon Apr 23 15:58:58 2012 +1000"
      },
      "committer": {
        "name": "Ben Myers",
        "email": "bpm@sgi.com",
        "time": "Mon May 14 16:20:54 2012 -0500"
      },
      "message": "xfs: move xfsagino_t to xfs_types.h\n\nUntangle the header file includes a bit by moving the definition of\nxfs_agino_t to xfs_types.h. This removes the dependency that xfs_ag.h has on\nxfs_inum.h, meaning we don\u0027t need to include xfs_inum.h everywhere we include\nxfs_ag.h.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Mark Tinguely \u003ctinguely@sgi.com\u003e\nSigned-off-by: Ben Myers \u003cbpm@sgi.com\u003e\n"
    },
    {
      "commit": "bc4010ecb8f4d4316e1a63a879a2715e49d113ad",
      "tree": "82d3f15ae571a2c46a9e2a2a44511db71a4fb732",
      "parents": [
        "aa5c158ec97bd4014f47a2bc0150fb6b20e6c48b"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Mon Apr 23 15:58:57 2012 +1000"
      },
      "committer": {
        "name": "Ben Myers",
        "email": "bpm@sgi.com",
        "time": "Mon May 14 16:20:53 2012 -0500"
      },
      "message": "xfs: use iolock on XFS_IOC_ALLOCSP calls\n\nfsstress has a particular effective way of stopping debug XFS\nkernels. We keep seeing assert failures due finding delayed\nallocation extents where there should be none. This shows up when\nextracting extent maps and we are holding all the locks we should be\nto prevent races, so this really makes no sense to see these errors.\n\nAfter checking that fsstress does not use mmap, it occurred to me\nthat fsstress uses something that no sane application uses - the\nXFS_IOC_ALLOCSP ioctl interfaces for preallocation. These interfaces\ndo allocation of blocks beyond EOF without using preallocation, and\nthen call setattr to extend and zero the allocated blocks.\n\nTHe problem here is this is a buffered write, and hence the\nallocation is a delayed allocation. Unlike the buffered IO path, the\nallocation and zeroing are not serialised using the IOLOCK. Hence\nthe ALLOCSP operation can race with operations holding the iolock to\nprevent buffered IO operations from occurring.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Mark Tinguely \u003ctinguely@sgi.com\u003e\nSigned-off-by: Ben Myers \u003cbpm@sgi.com\u003e\n"
    },
    {
      "commit": "aa5c158ec97bd4014f47a2bc0150fb6b20e6c48b",
      "tree": "8c79791167a5d659949952ad11a08ce325eb025c",
      "parents": [
        "7ca790a507a9288ebedab90a8e40b9afa8e4e949"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Mon Apr 23 15:58:56 2012 +1000"
      },
      "committer": {
        "name": "Ben Myers",
        "email": "bpm@sgi.com",
        "time": "Mon May 14 16:20:52 2012 -0500"
      },
      "message": "xfs: kill XBF_DONTBLOCK\n\nJust about all callers of xfs_buf_read() and xfs_buf_get() use XBF_DONTBLOCK.\nThis is used to make memory allocation use GFP_NOFS rather than GFP_KERNEL to\navoid recursion through memory reclaim back into the filesystem.\n\nAll the blocking get calls in growfs occur inside a transaction, even though\nthey are no part of the transaction, so all allocation will be GFP_NOFS due to\nthe task flag PF_TRANS being set. The blocking read calls occur during log\nrecovery, so they will probably be unaffected by converting to GFP_NOFS\nallocations.\n\nHence make XBF_DONTBLOCK behaviour always occur for buffers and kill the flag.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Mark Tinguely \u003ctinguely@sgi.com\u003e\nSigned-off-by: Ben Myers \u003cbpm@sgi.com\u003e\n"
    },
    {
      "commit": "7ca790a507a9288ebedab90a8e40b9afa8e4e949",
      "tree": "70ad7655655e3f5e021b3c80f5c102f4399bbd68",
      "parents": [
        "a8acad70731e7d0585f25f33f8a009176f001f70"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Mon Apr 23 15:58:55 2012 +1000"
      },
      "committer": {
        "name": "Ben Myers",
        "email": "bpm@sgi.com",
        "time": "Mon May 14 16:20:51 2012 -0500"
      },
      "message": "xfs: kill xfs_read_buf()\n\nxfs_read_buf() is effectively the same as xfs_trans_read_buf() when called\noutside a transaction context. The error handling is slightly different in that\nxfs_read_buf stales the errored buffer it gets back, but there is probably good\nreason for xfs_trans_read_buf() for doing this.\n\nHence update xfs_trans_read_buf() to the same error handling as xfs_read_buf(),\nand convert all the callers of xfs_read_buf() to use the former function. We can\nthen remove xfs_read_buf().\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Mark Tinguely \u003ctinguely@sgi.com\u003e\nSigned-off-by: Ben Myers \u003cbpm@sgi.com\u003e\n"
    },
    {
      "commit": "a8acad70731e7d0585f25f33f8a009176f001f70",
      "tree": "07a14f8bde89e7947f56df7203530b7713b186ac",
      "parents": [
        "795cac72e902496adac399389f9affe5d1ab821a"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Mon Apr 23 15:58:54 2012 +1000"
      },
      "committer": {
        "name": "Ben Myers",
        "email": "bpm@sgi.com",
        "time": "Mon May 14 16:20:50 2012 -0500"
      },
      "message": "xfs: kill XBF_LOCK\n\nBuffers are always returned locked from the lookup routines. Hence\nwe don\u0027t need to tell the lookup routines to return locked buffers,\non to try and lock them. Remove XBF_LOCK from all the callers and\nfrom internal buffer cache usage.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Mark Tinguely \u003ctinguely@sgi.com\u003e\nSigned-off-by: Ben Myers \u003cbpm@sgi.com\u003e\n"
    },
    {
      "commit": "795cac72e902496adac399389f9affe5d1ab821a",
      "tree": "120f20faeb98e4f01a9fa1eb6eab26392b3a5e75",
      "parents": [
        "aa0e8833b05cbd9d34d6a1ddaf23a74a58d76a03"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Mon Apr 23 15:58:53 2012 +1000"
      },
      "committer": {
        "name": "Ben Myers",
        "email": "bpm@sgi.com",
        "time": "Mon May 14 16:20:49 2012 -0500"
      },
      "message": "xfs: kill xfs_buf_btoc\n\nxfs_buf_btoc and friends are simple macros that do basic block\nto page index conversion and vice versa. These aren\u0027t widely used,\nand we use open coded masking and shifting everywhere else. Hence\nremove the macros and open code the work they do.\n\nAlso, use of PAGE_CACHE_{SIZE|SHIFT|MASK} for these macros is now\nincorrect - we are using pages directly and not the page cache, so\nuse PAGE_{SIZE|MASK|SHIFT} instead.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Mark Tinguely \u003ctinguely@sgi.com\u003e\nSigned-off-by: Ben Myers \u003cbpm@sgi.com\u003e\n"
    },
    {
      "commit": "aa0e8833b05cbd9d34d6a1ddaf23a74a58d76a03",
      "tree": "72592f1fec3df30dea526f793416b56b8d133234",
      "parents": [
        "4e94b71b7068b4bd9c615301197e09dbf0c3b770"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Mon Apr 23 15:58:52 2012 +1000"
      },
      "committer": {
        "name": "Ben Myers",
        "email": "bpm@sgi.com",
        "time": "Mon May 14 16:20:48 2012 -0500"
      },
      "message": "xfs: use blocks for storing the desired IO size\n\nNow that we pass block counts everywhere, and index buffers by block\nnumber and length in units of blocks, convert the desired IO size\ninto block counts rather than bytes. Convert the code to use block\ncounts, and those that need byte counts get converted at the time of\nuse.\n\nRename the b_desired_count variable to something closer to it\u0027s\npurpose - b_io_length - as it is only used to specify the length of\nan IO for a subset of the buffer.  The only time this is used is for\nlog IO - both writing iclogs and during log recovery. In all other\ncases, the b_io_length matches b_length, and hence a lot of code\nconfuses the two. e.g. the buf item code uses the io count\nexclusively when it should be using the buffer length. Fix these\napprpriately as they are found.\n\nAlso, remove the XFS_BUF_{SET_}COUNT() macros that are just wrappers\naround the desired IO length. They only serve to make the code\nshouty loud, don\u0027t actually add any real value, and are often used\nincorrectly.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Mark Tinguely \u003ctinguely@sgi.com\u003e\nSigned-off-by: Ben Myers \u003cbpm@sgi.com\u003e\n"
    },
    {
      "commit": "4e94b71b7068b4bd9c615301197e09dbf0c3b770",
      "tree": "fc441ec17202a749a6b1a3d5b70ba37101b595da",
      "parents": [
        "de1cbee46269a3b707eb99b37f33afdd4cfaaea4"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Mon Apr 23 15:58:51 2012 +1000"
      },
      "committer": {
        "name": "Ben Myers",
        "email": "bpm@sgi.com",
        "time": "Mon May 14 16:20:47 2012 -0500"
      },
      "message": "xfs: use blocks for counting length of buffers\n\nNow that we pass block counts everywhere, and index buffers by block\nnumber, track the length of the buffer in units of blocks rather\nthan bytes. Convert the code to use block counts, and those that\nneed byte counts get converted at the time of use.\n\nAlso, remove the XFS_BUF_{SET_}SIZE() macros that are just wrappers\naround the buffer length. They only serve to make the code shouty\nloud and don\u0027t actually add any real value.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Mark Tinguely \u003ctinguely@sgi.com\u003e\nSigned-off-by: Ben Myers \u003cbpm@sgi.com\u003e\n"
    },
    {
      "commit": "de1cbee46269a3b707eb99b37f33afdd4cfaaea4",
      "tree": "9dcf9e5336c6be32f7f8f37a93b79159b2cff94f",
      "parents": [
        "e70b73f84f474cc594a39bd8ff083974e6d69aea"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Mon Apr 23 15:58:50 2012 +1000"
      },
      "committer": {
        "name": "Ben Myers",
        "email": "bpm@sgi.com",
        "time": "Mon May 14 16:20:46 2012 -0500"
      },
      "message": "xfs: kill b_file_offset\n\nSeeing as we pass block numbers around everywhere in the buffer\ncache now, it makes no sense to index everything by byte offset.\nReplace all the byte offset indexing with block number based\nindexing, and replace all uses of the byte offset with direct\nconversion from the block index.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Mark Tinguely \u003ctinguely@sgi.com\u003e\nSigned-off-by: Ben Myers \u003cbpm@sgi.com\u003e\n"
    },
    {
      "commit": "e70b73f84f474cc594a39bd8ff083974e6d69aea",
      "tree": "0d365698ca2b6542aab8ca92c8e1f23b9c43da55",
      "parents": [
        "bf813cdddfb3a5bc88e1612e8f62a12367871213"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Mon Apr 23 15:58:49 2012 +1000"
      },
      "committer": {
        "name": "Ben Myers",
        "email": "bpm@sgi.com",
        "time": "Mon May 14 16:20:45 2012 -0500"
      },
      "message": "xfs: clean up buffer get/read call API\n\nThe xfs_buf_get/read API is not consistent in the units it uses, and\ndoes not use appropriate or consistent units/types for the\nvariables.\n\nConvert the API to use disk addresses and block counts for all\nbuffer get and read calls. Use consistent naming for all the\nfunctions and their declarations, and convert the internal functions\nto use disk addresses and block counts to avoid need to convert them\nfrom one type to another and back again.\n\nFix all the callers to use disk addresses and block counts. In many\ncases, this removes an additional conversion from the function call\nas the callers already have a block count.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Mark Tinguely \u003ctinguely@sgi.com\u003e\nSigned-off-by: Ben Myers \u003cbpm@sgi.com\u003e\n"
    },
    {
      "commit": "bf813cdddfb3a5bc88e1612e8f62a12367871213",
      "tree": "29480a169d165ff695bebb65d5a63b74eb6f9c96",
      "parents": [
        "ead360c50d33772f45943792893a58865adf3638"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Mon Apr 23 15:58:48 2012 +1000"
      },
      "committer": {
        "name": "Ben Myers",
        "email": "bpm@sgi.com",
        "time": "Mon May 14 16:20:44 2012 -0500"
      },
      "message": "xfs: use kmem_zone_zalloc for buffers\n\nTo replace the alloc/memset pair.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Mark Tinguely \u003ctinguely@sgi.com\u003e\nSigned-off-by: Ben Myers \u003cbpm@sgi.com\u003e\n"
    },
    {
      "commit": "ead360c50d33772f45943792893a58865adf3638",
      "tree": "08f737048596c1460c93428b7884f5bdc4732579",
      "parents": [
        "0e95f19ad983e72a9cb93a67b3290b58f0467b36"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Mon Apr 23 15:58:47 2012 +1000"
      },
      "committer": {
        "name": "Ben Myers",
        "email": "bpm@sgi.com",
        "time": "Mon May 14 16:20:43 2012 -0500"
      },
      "message": "xfs: fix incorrect b_offset initialisation\n\nBecause we no longer use the page cache for buffering, there is no\ndirect block number to page offset relationship anymore.\nxfs_buf_get_pages is still setting up b_offset as if there was some\nrelationship, and that is leading to incorrectly setting up\n*uncached* buffers that don\u0027t overwrite b_offset once they\u0027ve had\npages allocated.\n\nFor cached buffers, the first block of the buffer is always at offset\nzero into the allocated memory. This is true for sub-page sized\nbuffers, as well as for multiple-page buffers.\n\nFor uncached buffers, b_offset is only non-zero when we are\nassociating specific memory to the buffers, and that is set\ncorrectly by the code setting up the buffer.\n\nHence remove the setting of b_offset in xfs_buf_get_pages, because\nit is now always the wrong thing to do.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Mark Tinguely \u003ctinguely@sgi.com\u003e\nSigned-off-by: Ben Myers \u003cbpm@sgi.com\u003e\n"
    },
    {
      "commit": "0e95f19ad983e72a9cb93a67b3290b58f0467b36",
      "tree": "2b3117e20f1e739d5cb560b1b1b32f3fdc8e3ee5",
      "parents": [
        "fe2429b0966a7ec42b5fe3bf96f0f10de0a3b536"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Mon Apr 23 15:58:46 2012 +1000"
      },
      "committer": {
        "name": "Ben Myers",
        "email": "bpm@sgi.com",
        "time": "Mon May 14 16:20:42 2012 -0500"
      },
      "message": "xfs: check for buffer errors before waiting\n\nIf we call xfs_buf_iowait() on a buffer that failed dispatch due to\nan IO error, it will wait forever for an Io that does not exist.\nThis is hndled in xfs_buf_read, but there is other code that calls\nxfs_buf_iowait directly that doesn\u0027t.\n\nRather than make the call sites have to handle checking for dispatch\nerrors and then checking for completion errors, make\nxfs_buf_iowait() check for dispatch errors on the buffer before\nwaiting. This means we handle both dispatch and completion errors\nwith one set of error handling at the caller sites.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Mark Tinguely \u003ctinguely@sgi.com\u003e\nSigned-off-by: Ben Myers \u003cbpm@sgi.com\u003e\n"
    },
    {
      "commit": "fe2429b0966a7ec42b5fe3bf96f0f10de0a3b536",
      "tree": "c19792c758706dd75773319c0c2506878243586c",
      "parents": [
        "aff3a9edb7080f69f07fe76a8bd089b3dfa4cb5d"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Mon Apr 23 15:58:45 2012 +1000"
      },
      "committer": {
        "name": "Ben Myers",
        "email": "bpm@sgi.com",
        "time": "Mon May 14 16:20:41 2012 -0500"
      },
      "message": "xfs: fix buffer lookup race on allocation failure\n\nWhen memory allocation fails to add the page array or tht epages to\na buffer during xfs_buf_get(), the buffer is left in the cache in a\npartially initialised state. There is enough state left for the next\nlookup on that buffer to find the buffer, and for the buffer to then\nbe used without finishing the initialisation.  As a result, when an\nattempt to do IO on the buffer occurs, it fails with EIO because\nthere are no pages attached to the buffer.\n\nWe cannot remove the buffer from the cache immediately and free it,\nbecause there may already be a racing lookup that is blocked on the\nbuffer lock. Hence the moment we unlock the buffer to then free it,\nthe other user is woken and we have a use-after-free situation.\n\nTo avoid this race condition altogether, allocate the pages for the\nbuffer before we insert it into the cache.  This then means that we\ndon\u0027t have an allocation  failure case to deal after the buffer is\nalready present in the cache, and hence avoid the problem\naltogether.  In most cases we won\u0027t have racing inserts for the same\nbuffer, and so won\u0027t increase the memory pressure allocation before\ninsertion may entail.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Mark Tinguely \u003ctinguely@sgi.com\u003e\nSigned-off-by: Ben Myers \u003cbpm@sgi.com\u003e\n"
    },
    {
      "commit": "aff3a9edb7080f69f07fe76a8bd089b3dfa4cb5d",
      "tree": "3e9d10622601f309b9981223af9622a1ff54e39e",
      "parents": [
        "3ed9116e8a3e9c0870b2076340b3da9b8f900f3b"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Mon Apr 23 15:58:44 2012 +1000"
      },
      "committer": {
        "name": "Ben Myers",
        "email": "bpm@sgi.com",
        "time": "Mon May 14 16:20:40 2012 -0500"
      },
      "message": "xfs: Use preallocation for inodes with extsz hints\n\nxfstest 229 exposes a problem with buffered IO, delayed allocation\nand extent size hints. That is when we do delayed allocation during\nbuffered IO, we reserve space for the extent size hint alignment and\nallocate the physical space to align the extent, but we do not zero\nthe regions of the extent that aren\u0027t written by the write(2)\nsyscall. The result is that we expose stale data in unwritten\nregions of the extent size hints.\n\nThere are two ways to fix this. The first is to detect that we are\ndoing unaligned writes, check if there is already a mapping or data\nover the extent size hint range, and if not zero the page cache\nfirst before then doing the real write. This can be very expensive\nfor large extent size hints, especially if the subsequent writes\nfill then entire extent size before the data is written to disk.\n\nThe second, and simpler way, is simply to turn off delayed\nallocation when the extent size hint is set and use preallocation\ninstead. This results in unwritten extents being laid down on disk\nand so only the written portions will be converted. This matches the\nbehaviour for direct IO, and will also work for the real time\ndevice. The disadvantage of this approach is that for small extent\nsize hints we can get file fragmentation, but in general extent size\nhints are fairly large (e.g. stripe width sized) so this isn\u0027t a big\ndeal.\n\nImplement the second approach as it is simple and effective.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Mark Tinguely \u003ctinguely@sgi.com\u003e\nSigned-off-by: Ben Myers \u003cbpm@sgi.com\u003e\n"
    },
    {
      "commit": "3ed9116e8a3e9c0870b2076340b3da9b8f900f3b",
      "tree": "158b4ea878a46464f0f3c3e5f4ca943a6b5c67c5",
      "parents": [
        "58e20770646932fe9b758c94e8c278ea9ec93878"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Sun Apr 29 22:43:19 2012 +1000"
      },
      "committer": {
        "name": "Ben Myers",
        "email": "bpm@sgi.com",
        "time": "Mon May 14 16:20:39 2012 -0500"
      },
      "message": "xfs: limit specualtive delalloc to maxioffset\n\nSpeculative delayed allocation beyond EOF near the maximum supported\nfile offset can result in creating delalloc extents beyond\nmp-\u003em_maxioffset (8EB). These can never be trimmed during\nxfs_free_eof_blocks() because they are beyond mp-\u003em_maxioffset, and\nthat results in assert failures in xfs_fs_destroy_inode() due to\ndelalloc blocks still being present. xfstests 071 exposes this\nproblem.\n\nLimit speculative delalloc to mp-\u003em_maxioffset to avoid this\nproblem.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nSigned-off-by: Ben Myers \u003cbpm@sgi.com\u003e\n"
    },
    {
      "commit": "58e20770646932fe9b758c94e8c278ea9ec93878",
      "tree": "fbb2ef5941ee428c4739c68d5616b082e09790db",
      "parents": [
        "81158e0cecdf53b1f6d88a514c6c20e0ee18ec7b"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Sun Apr 29 21:16:17 2012 +1000"
      },
      "committer": {
        "name": "Ben Myers",
        "email": "bpm@sgi.com",
        "time": "Mon May 14 16:20:38 2012 -0500"
      },
      "message": "xfs: don\u0027t assert on delalloc regions beyond EOF\n\nWhen we are doing speculative delayed allocation beyond EOF,\nconversion of the region allocated beyond EOF is dependent on the\nlargest free space extent available. If the largest free extent is\nsmaller than the delalloc range, then after allocation we leave\na delalloc extent that starts beyond EOF. This extent cannot *ever*\nbe converted by flushing data, and so will remain there until either\nthe EOF moves into the extent or it is truncated away.\n\nHence if xfs_getbmap() runs on such an inode and is asked to return\nextents beyond EOF, it will assert fail on this extent even though\nthere is nothing xfs_getbmap() can do to convert it to a real\nextent. Hence we should simply report these delalloc extents rather\nthan assert that there should be none.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nSigned-off-by: Ben Myers \u003cbpm@sgi.com\u003e\n"
    },
    {
      "commit": "81158e0cecdf53b1f6d88a514c6c20e0ee18ec7b",
      "tree": "245eea9725a044314335625b265d29ac3b3fa729",
      "parents": [
        "d3bc815afb549eecb3679a4b2f0df216e34df998"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Fri Apr 27 19:45:22 2012 +1000"
      },
      "committer": {
        "name": "Ben Myers",
        "email": "bpm@sgi.com",
        "time": "Mon May 14 16:20:37 2012 -0500"
      },
      "message": "xfs: prevent needless mount warning causing test failures\n\nOften mounting small filesystem with small logs will emit a warning\nsuch as:\n\nXFS (vdb): Invalid block length (0x2000) for buffer\n\nduring log recovery. This causes tests to randomly fail because this\noutput causes the clean filesystem checks on test completion to\nthink the filesystem is inconsistent.\n\nThe cause of the error is simply that log recovery is asking for a\nbuffer size that is larger than the log when zeroing the tail. This\nis because the buffer size is rounded up, and if the right head and\ntail conditions exist then the buffer size can be larger than the log.\nLimit the variable size xlog_get_bp() callers to requesting buffers\nsmaller than the log.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nSigned-off-by: Ben Myers \u003cbpm@sgi.com\u003e\n"
    },
    {
      "commit": "d3bc815afb549eecb3679a4b2f0df216e34df998",
      "tree": "afff60431458ae8100fe06f64c0930da1e20d19e",
      "parents": [
        "6ffc4db5de61d36e969a26bc94509c59246c81f8"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Fri Apr 27 19:45:21 2012 +1000"
      },
      "committer": {
        "name": "Ben Myers",
        "email": "bpm@sgi.com",
        "time": "Mon May 14 16:20:36 2012 -0500"
      },
      "message": "xfs: punch new delalloc blocks out of failed writes inside EOF.\n\nWhen a partial write inside EOF fails, it can leave delayed\nallocation blocks lying around because they don\u0027t get punched back\nout. This leads to assert failures like:\n\nXFS: Assertion failed: XFS_FORCED_SHUTDOWN(ip-\u003ei_mount) || ip-\u003ei_delayed_blks \u003d\u003d 0, file: fs/xfs/xfs_super.c, line: 847\n\nwhen evicting inodes from the cache. This can be trivially triggered\nby xfstests 083, which takes between 5 and 15 executions on a 512\nbyte block size filesystem to trip over this. Debugging shows a\nfailed write due to ENOSPC calling xfs_vm_write_failed such as:\n\n[ 5012.329024] ino 0xa0026: vwf to 0x17000, sze 0x1c85ae\n\nand no action is taken on it. This leaves behind a delayed\nallocation extent that has no page covering it and no data in it:\n\n[ 5015.867162] ino 0xa0026: blks: 0x83 delay blocks 0x1, size 0x2538c0\n[ 5015.868293] ext 0: off 0x4a, fsb 0x50306, len 0x1\n[ 5015.869095] ext 1: off 0x4b, fsb 0x7899, len 0x6b\n[ 5015.869900] ext 2: off 0xb6, fsb 0xffffffffe0008, len 0x1\n                                    ^^^^^^^^^^^^^^^\n[ 5015.871027] ext 3: off 0x36e, fsb 0x7a27, len 0xd\n[ 5015.872206] ext 4: off 0x4cf, fsb 0x7a1d, len 0xa\n\nSo the delayed allocation extent is one block long at offset\n0x16c00. Tracing shows that a bigger write:\n\nxfs_file_buffered_write: size 0x1c85ae offset 0x959d count 0x1ca3f ioflags\n\nallocates the block, and then fails with ENOSPC trying to allocate\nthe last block on the page, leading to a failed write with stale\ndelalloc blocks on it.\n\nBecause we\u0027ve had an ENOSPC when trying to allocate 0x16e00, it\nmeans that we are never goinge to call -\u003ewrite_end on the page and\nso the allocated new buffer will not get marked dirty or have the\nbuffer_new state cleared. In other works, what the above write is\nsupposed to end up with is this mapping for the page:\n\n    +------+------+------+------+------+------+------+------+\n      UMA    UMA    UMA    UMA    UMA    UMA    UND    FAIL\n\nwhere:  U \u003d uptodate\n        M \u003d mapped\n        N \u003d new\n        A \u003d allocated\n        D \u003d delalloc\n        FAIL \u003d block we ENOSPC\u0027d on.\n\nand the key point being the buffer_new() state for the newly\nallocated delayed allocation block. Except it doesn\u0027t - we\u0027re not\nmarking buffers new correctly.\n\nThat buffer_new() problem goes back to the xfs_iomap removal days,\nwhere xfs_iomap() used to return a \"new\" status for any map with\nnewly allocated blocks, so that __xfs_get_blocks() could call\nset_buffer_new() on it. We still have the \"new\" variable and the\ncheck for it in the set_buffer_new() logic - except we never set it\nnow!\n\nHence that newly allocated delalloc block doesn\u0027t have the new flag\nset on it, so when the write fails we cannot tell which blocks we\nare supposed to punch out. WHy do we need the buffer_new flag? Well,\nthat\u0027s because we can have this case:\n\n    +------+------+------+------+------+------+------+------+\n      UMD    UMD    UMD    UMD    UMD    UMD    UND    FAIL\n\nwhere all the UMD buffers contain valid data from a previously\nsuccessful write() system call. We only want to punch the UND buffer\nbecause that\u0027s the only one that we added in this write and it was\nonly this write that failed.\n\nThat implies that even the old buffer_new() logic was wrong -\nbecause it would result in all those UMD buffers on the page having\nset_buffer_new() called on them even though they aren\u0027t new. Hence\nwe shoul donly be calling set_buffer_new() for delalloc buffers that\nwere allocated (i.e. were a hole before xfs_iomap_write_delay() was\ncalled).\n\nSo, fix this set_buffer_new logic according to how we need it to\nwork for handling failed writes correctly. Also, restore the new\nbuffer logic handling for blocks allocated via\nxfs_iomap_write_direct(), because it should still set the buffer_new\nflag appropriately for newly allocated blocks, too.\n\nSO, now we have the buffer_new() being set appropriately in\n__xfs_get_blocks(), we can detect the exact delalloc ranges that\nwe allocated in a failed write, and hence can now do a walk of the\nbuffers on a page to find them.\n\nExcept, it\u0027s not that easy. When block_write_begin() fails, it\nunlocks and releases the page that we just had an error on, so we\ncan\u0027t use that page to handle errors anymore. We have to get access\nto the page while it is still locked to walk the buffers. Hence we\nhave to open code block_write_begin() in xfs_vm_write_begin() to be\nable to insert xfs_vm_write_failed() is the right place.\n\nWith that, we can pass the page and write range to\nxfs_vm_write_failed() and walk the buffers on the page, looking for\ndelalloc buffers that are either new or beyond EOF and punch them\nout. Handling buffers beyond EOF ensures we still handle the\nexisting case that xfs_vm_write_failed() handles.\n\nOf special note is the truncate_pagecache() handling - that only\nshould be done for pages outside EOF - pages within EOF can still\ncontain valid, dirty data so we must not punch them out of the\ncache.\n\nThat just leaves the xfs_vm_write_end() failure handling.\nThe only failure case here is that we didn\u0027t copy the entire range,\nand generic_write_end() handles that by zeroing the region of the\npage that wasn\u0027t copied, we don\u0027t have to punch out blocks within\nthe file because they are guaranteed to contain zeros. Hence we only\nhave to handle the existing \"beyond EOF\" case and don\u0027t need access\nto the buffers on the page. Hence it remains largely unchanged.\n\nNote that xfs_getbmap() can still trip over delalloc blocks beyond\nEOF that are left there by speculative delayed allocation. Hence\nthis bug fix does not solve all known issues with bmap vs delalloc,\nbut it does fix all the the known accidental occurances of the\nproblem.\n\nSigned-off-by: Dave Chinner \u003cdavid@fromorbit.com\u003e\nSigned-off-by: Ben Myers \u003cbpm@sgi.com\u003e\n"
    },
    {
      "commit": "6ffc4db5de61d36e969a26bc94509c59246c81f8",
      "tree": "44f5850d4892f017d15b3ac0a0c9bd1f35cacc8d",
      "parents": [
        "4c2d542f2e786537db33b613d5199dc6d69a96da"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Mon Apr 23 15:58:43 2012 +1000"
      },
      "committer": {
        "name": "Ben Myers",
        "email": "bpm@sgi.com",
        "time": "Mon May 14 16:20:35 2012 -0500"
      },
      "message": "xfs: page type check in writeback only checks last buffer\n\nxfs_is_delayed_page() checks to see if a page has buffers matching\nthe given IO type passed in. It does so by walking the buffer heads\non the page and checking if the state flags match the IO type.\n\nHowever, the \"acceptable\" variable that is calculated is overwritten\nevery time a new buffer is checked. Hence if the first buffer on the\npage is of the right type, this state is lost if the second buffer\nis not of the correct type. This means that xfs_aops_discard_page()\nmay not discard delalloc regions when it is supposed to, and\nxfs_convert_page() may not cluster IO as efficiently as possible.\n\nThis problem only occurs on filesystems with a block size smaller\nthan page size.\n\nAlso, rename xfs_is_delayed_page() to xfs_check_page_type() to\nbetter describe what it is doing - it is not delalloc specific\nanymore.\n\nThe problem was first noticed by Peter Watkins.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Mark Tinguely \u003ctinguely@sgi.com\u003e\nSigned-off-by: Ben Myers \u003cbpm@sgi.com\u003e\n"
    },
    {
      "commit": "4c2d542f2e786537db33b613d5199dc6d69a96da",
      "tree": "eeca27ca63e519981e8d4f2ab1bcf8230f5e598e",
      "parents": [
        "04913fdd91f342e537005ef1233f98068b925a7f"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Mon Apr 23 17:54:32 2012 +1000"
      },
      "committer": {
        "name": "Ben Myers",
        "email": "bpm@sgi.com",
        "time": "Mon May 14 16:20:34 2012 -0500"
      },
      "message": "xfs: Do background CIL flushes via a workqueue\n\nDoing background CIL flushes adds significant latency to whatever\nasync transaction that triggers it. To avoid blocking async\ntransactions on things like waiting for log buffer IO to complete,\nmove the CIL push off into a workqueue.  By moving the push work\ninto a workqueue, we remove all the latency that the commit adds\nfrom the foreground transaction commit path. This also means that\nsingle threaded workloads won\u0027t do the CIL push procssing, leaving\nthem more CPU to do more async transactions.\n\nTo do this, we need to keep track of the sequence number we have\npushed work for. This avoids having many transaction commits\nattempting to schedule work for the same sequence, and ensures that\nwe only ever have one push (background or forced) in progress at a\ntime. It also means that we don\u0027t need to take the CIL lock in write\nmode to check for potential background push races, which reduces\nlock contention.\n\nTo avoid potential issues with \"smart\" IO schedulers, don\u0027t use the\nworkqueue for log force triggered flushes. Instead, do them directly\nso that the log IO is done directly by the process issuing the log\nforce and so doesn\u0027t get stuck on IO elevator queue idling\nincorrectly delaying the log IO from the workqueue.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Mark Tinguely \u003ctinguely@sgi.com\u003e\nSigned-off-by: Ben Myers \u003cbpm@sgi.com\u003e\n"
    },
    {
      "commit": "04913fdd91f342e537005ef1233f98068b925a7f",
      "tree": "b8eaacda9302290fb1833d47bf6c7be5813a80cb",
      "parents": [
        "a8569171ba26344a4c0308fc0da8f41795408ebc"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Mon Apr 23 15:58:41 2012 +1000"
      },
      "committer": {
        "name": "Ben Myers",
        "email": "bpm@sgi.com",
        "time": "Mon May 14 16:20:33 2012 -0500"
      },
      "message": "xfs: pass shutdown method into xfs_trans_ail_delete_bulk\n\nxfs_trans_ail_delete_bulk() can be called from different contexts so\nif the item is not in the AIL we need different shutdown for each\ncontext.  Pass in the shutdown method needed so the correct action\ncan be taken.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Mark Tinguely \u003ctinguely@sgi.com\u003e\nSigned-off-by: Ben Myers \u003cbpm@sgi.com\u003e\n"
    },
    {
      "commit": "a8569171ba26344a4c0308fc0da8f41795408ebc",
      "tree": "656554debcb093203dbfca498c0893c3b02b6e5e",
      "parents": [
        "43ff2122e6492bcc88b065c433453dce88223b30"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Mon Apr 23 15:58:40 2012 +1000"
      },
      "committer": {
        "name": "Ben Myers",
        "email": "bpm@sgi.com",
        "time": "Mon May 14 16:20:32 2012 -0500"
      },
      "message": "xfs: remove some obsolete comments in xfs_trans_ail.c\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Mark Tinguely \u003ctinguely@sgi.com\u003e\nSigned-off-by: Ben Myers \u003cbpm@sgi.com\u003e\n"
    },
    {
      "commit": "43ff2122e6492bcc88b065c433453dce88223b30",
      "tree": "0f762cfb753edd73402b8830e0927d9efba30c61",
      "parents": [
        "960c60af8b9481595e68875e79b2602e73169c29"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Mon Apr 23 15:58:39 2012 +1000"
      },
      "committer": {
        "name": "Ben Myers",
        "email": "bpm@sgi.com",
        "time": "Mon May 14 16:20:31 2012 -0500"
      },
      "message": "xfs: on-stack delayed write buffer lists\n\nQueue delwri buffers on a local on-stack list instead of a per-buftarg one,\nand write back the buffers per-process instead of by waking up xfsbufd.\n\nThis is now easily doable given that we have very few places left that write\ndelwri buffers:\n\n - log recovery:\n\tOnly done at mount time, and already forcing out the buffers\n\tsynchronously using xfs_flush_buftarg\n\n - quotacheck:\n\tSame story.\n\n - dquot reclaim:\n\tWrites out dirty dquots on the LRU under memory pressure.  We might\n\twant to look into doing more of this via xfsaild, but it\u0027s already\n\tmore optimal than the synchronous inode reclaim that writes each\n\tbuffer synchronously.\n\n - xfsaild:\n\tThis is the main beneficiary of the change.  By keeping a local list\n\tof buffers to write we reduce latency of writing out buffers, and\n\tmore importably we can remove all the delwri list promotions which\n\twere hitting the buffer cache hard under sustained metadata loads.\n\nThe implementation is very straight forward - xfs_buf_delwri_queue now gets\na new list_head pointer that it adds the delwri buffers to, and all callers\nneed to eventually submit the list using xfs_buf_delwi_submit or\nxfs_buf_delwi_submit_nowait.  Buffers that already are on a delwri list are\nskipped in xfs_buf_delwri_queue, assuming they already are on another delwri\nlist.  The biggest change to pass down the buffer list was done to the AIL\npushing. Now that we operate on buffers the trylock, push and pushbuf log\nitem methods are merged into a single push routine, which tries to lock the\nitem, and if possible add the buffer that needs writeback to the buffer list.\nThis leads to much simpler code than the previous split but requires the\nindividual IOP_PUSH instances to unlock and reacquire the AIL around calls\nto blocking routines.\n\nGiven that xfsailds now also handle writing out buffers, the conditions for\nlog forcing and the sleep times needed some small changes.  The most\nimportant one is that we consider an AIL busy as long we still have buffers\nto push, and the other one is that we do increment the pushed LSN for\nbuffers that are under flushing at this moment, but still count them towards\nthe stuck items for restart purposes.  Without this we could hammer on stuck\nitems without ever forcing the log and not make progress under heavy random\ndelete workloads on fast flash storage devices.\n\n[ Dave Chinner:\n\t- rebase on previous patches.\n\t- improved comments for XBF_DELWRI_Q handling\n\t- fix XBF_ASYNC handling in queue submission (test 106 failure)\n\t- rename delwri submit function buffer list parameters for clarity\n\t- xfs_efd_item_push() should return XFS_ITEM_PINNED ]\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Mark Tinguely \u003ctinguely@sgi.com\u003e\nSigned-off-by: Ben Myers \u003cbpm@sgi.com\u003e\n"
    },
    {
      "commit": "960c60af8b9481595e68875e79b2602e73169c29",
      "tree": "26756622c5a0c63ead727621602cc1670604c0a3",
      "parents": [
        "fe7257fd4b8ae9a3e354d9edb61890973e373ef0"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Mon Apr 23 15:58:38 2012 +1000"
      },
      "committer": {
        "name": "Ben Myers",
        "email": "bpm@sgi.com",
        "time": "Mon May 14 16:20:30 2012 -0500"
      },
      "message": "xfs: do not add buffers to the delwri queue until pushed\n\nInstead of adding buffers to the delwri list as soon as they are logged,\neven if they can\u0027t be written until commited because they are pinned\ndefer adding them to the delwri list until xfsaild pushes them.  This\nmakes the code more similar to other log items and prepares for writing\nbuffers directly from xfsaild.\n\nThe complication here is that we need to fail buffers that were added\nbut not logged yet in xfs_buf_item_unpin, borrowing code from\nxfs_bioerror.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Mark Tinguely \u003ctinguely@sgi.com\u003e\nSigned-off-by: Ben Myers \u003cbpm@sgi.com\u003e\n"
    },
    {
      "commit": "fe7257fd4b8ae9a3e354d9edb61890973e373ef0",
      "tree": "471b9ecc1cb21207cb95291d1ec5b81c393b060f",
      "parents": [
        "4c46819a8097a75d3b378c5e56d2bcf47bb7408d"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Mon Apr 23 15:58:37 2012 +1000"
      },
      "committer": {
        "name": "Ben Myers",
        "email": "bpm@sgi.com",
        "time": "Mon May 14 16:20:29 2012 -0500"
      },
      "message": "xfs: do not write the buffer from xfs_qm_dqflush\n\nInstead of writing the buffer directly from inside xfs_qm_dqflush return it\nto the caller and let the caller decide what to do with the buffer.  Also\nremove the pincount check in xfs_qm_dqflush that all non-blocking callers\nalready implement and the now unused flags parameter and the XFS_DQ_IS_DIRTY\ncheck that all callers already perform.\n\n[ Dave Chinner: fixed build error cause by missing \u0027{\u0027. ]\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Mark Tinguely \u003ctinguely@sgi.com\u003e\nSigned-off-by: Ben Myers \u003cbpm@sgi.com\u003e\n"
    },
    {
      "commit": "4c46819a8097a75d3b378c5e56d2bcf47bb7408d",
      "tree": "031f84bd94f044218d43ef3d11f90df0480513c6",
      "parents": [
        "8a48088f6439249019b5e17f6391e710656879d9"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Mon Apr 23 15:58:36 2012 +1000"
      },
      "committer": {
        "name": "Ben Myers",
        "email": "bpm@sgi.com",
        "time": "Mon May 14 16:20:28 2012 -0500"
      },
      "message": "xfs: do not write the buffer from xfs_iflush\n\nInstead of writing the buffer directly from inside xfs_iflush return it to\nthe caller and let the caller decide what to do with the buffer.  Also\nremove the pincount check in xfs_iflush that all non-blocking callers already\nimplement and the now unused flags parameter.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Mark Tinguely \u003ctinguely@sgi.com\u003e\nSigned-off-by: Ben Myers \u003cbpm@sgi.com\u003e\n"
    },
    {
      "commit": "8a48088f6439249019b5e17f6391e710656879d9",
      "tree": "b898076f1f2245dc435fa8e64b1ddac2b8424c7e",
      "parents": [
        "211e4d434bd737be38aabad0247ce3da9964370e"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Mon Apr 23 15:58:35 2012 +1000"
      },
      "committer": {
        "name": "Ben Myers",
        "email": "bpm@sgi.com",
        "time": "Mon May 14 16:20:28 2012 -0500"
      },
      "message": "xfs: don\u0027t flush inodes from background inode reclaim\n\nWe already flush dirty inodes throug the AIL regularly, there is no reason\nto have second thread compete with it and disturb the I/O pattern.  We still\ndo write inodes when doing a synchronous reclaim from the shrinker or during\nunmount for now.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Mark Tinguely \u003ctinguely@sgi.com\u003e\nSigned-off-by: Ben Myers \u003cbpm@sgi.com\u003e\n"
    },
    {
      "commit": "211e4d434bd737be38aabad0247ce3da9964370e",
      "tree": "6fb654a566507d302ff5672c2e66fb775ca3c6cd",
      "parents": [
        "1c30462542bac8abffb4823638b6b1659c1cfcf5"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Mon Apr 23 15:58:34 2012 +1000"
      },
      "committer": {
        "name": "Ben Myers",
        "email": "bpm@sgi.com",
        "time": "Mon May 14 16:20:27 2012 -0500"
      },
      "message": "xfs: implement freezing by emptying the AIL\n\nNow that we write back all metadata either synchronously or through\nthe AIL we can simply implement metadata freezing in terms of\nemptying the AIL.\n\nThe implementation for this is fairly simply and straight-forward:\nA new routine is added that asks the xfsaild to push the AIL to the\nend and waits for it to complete and send a wakeup. The routine will\nthen loop if the AIL is not actually empty, and continue to do so\nuntil the AIL is compeltely empty.\n\nWe keep an inode reclaim pass in the freeze process to avoid having\nmemory pressure have to reclaim inodes that require dirtying the\nfilesystem to be reclaimed after the freeze has completed. This\nmeans we can also treat unmount in the exact same way as freeze.\n\nAs an upside we can now remove the radix tree based inode writeback\nand xfs_unmountfs_writesb.\n\n[ Dave Chinner:\n\t- Cleaned up commit message.\n\t- Added inode reclaim passes back into freeze.\n\t- Cleaned up wakeup mechanism to avoid the use of a new\n\t  sleep counter variable. ]\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Mark Tinguely \u003ctinguely@sgi.com\u003e\nSigned-off-by: Ben Myers \u003cbpm@sgi.com\u003e\n"
    },
    {
      "commit": "1c30462542bac8abffb4823638b6b1659c1cfcf5",
      "tree": "b86f1fc14eb0f41e224833128ecc81163227d044",
      "parents": [
        "32ce90a4b79155a155de2b284d8b69023e5e8fea"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Mon Apr 23 15:58:33 2012 +1000"
      },
      "committer": {
        "name": "Ben Myers",
        "email": "bpm@sgi.com",
        "time": "Mon May 14 16:20:26 2012 -0500"
      },
      "message": "xfs: allow assigning the tail lsn with the AIL lock held\n\nProvide a variant of xlog_assign_tail_lsn that has the AIL lock already\nheld.  By doing so we do an additional atomic_read + atomic_set under\nthe lock, which comes down to two instructions.\n\nSwitch xfs_trans_ail_update_bulk and xfs_trans_ail_delete_bulk to the\nnew version to reduce the number of lock roundtrips, and prepare for\na new addition that would require a third lock roundtrip in\nxfs_trans_ail_delete_bulk.  This addition is also the reason for\nslightly rearranging the conditionals and relying on xfs_log_space_wake\nfor checking that the filesystem has been shut down internally.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Mark Tinguely \u003ctinguely@sgi.com\u003e\nSigned-off-by: Ben Myers \u003cbpm@sgi.com\u003e\n"
    },
    {
      "commit": "32ce90a4b79155a155de2b284d8b69023e5e8fea",
      "tree": "1280a85dea9061a8089a39fccc8a5ce0fc222e62",
      "parents": [
        "dea9609527a55b65638a6323894269334dfe6ec5"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Mon Apr 23 15:58:32 2012 +1000"
      },
      "committer": {
        "name": "Ben Myers",
        "email": "bpm@sgi.com",
        "time": "Mon May 14 16:20:25 2012 -0500"
      },
      "message": "xfs: remove log item from AIL in xfs_iflush after a shutdown\n\nIf a filesystem has been forced shutdown we are never going to write inodes\nto disk, which means the inode items will stay in the AIL until we free\nthe inode. Currently that is not a problem, but a pending change requires us\nto empty the AIL before shutting down the filesystem. In that case leaving\nthe inode in the AIL is lethal. Make sure to remove the log item from the AIL\nto allow emptying the AIL on shutdown filesystems.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Mark Tinguely \u003ctinguely@sgi.com\u003e\nSigned-off-by: Ben Myers \u003cbpm@sgi.com\u003e\n"
    },
    {
      "commit": "dea9609527a55b65638a6323894269334dfe6ec5",
      "tree": "841b86d16eee04480852e40414701e61bed6f966",
      "parents": [
        "7582df516c93046b8d2111a780c69de77f9882fb"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Mon Apr 23 15:58:31 2012 +1000"
      },
      "committer": {
        "name": "Ben Myers",
        "email": "bpm@sgi.com",
        "time": "Mon May 14 16:20:24 2012 -0500"
      },
      "message": "xfs: remove log item from AIL in xfs_qm_dqflush after a shutdown\n\nIf a filesystem has been forced shutdown we are never going to write dquots\nto disk, which means the dquot items will stay in the AIL forever.\nCurrently that is not a problem, but a pending chance requires us to\nempty the AIL before shutting down the filesystem, in which case this\nbehaviour is lethal.  Make sure to remove the log item from the AIL\nto allow emptying the AIL on shutdown filesystems.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Mark Tinguely \u003ctinguely@sgi.com\u003e\nSigned-off-by: Ben Myers \u003cbpm@sgi.com\u003e\n"
    },
    {
      "commit": "7582df516c93046b8d2111a780c69de77f9882fb",
      "tree": "1ba200ed20ee7da46337c0ad8c3a685ac81b29a4",
      "parents": [
        "01c84d2dc1311fb76ea217dadfd5b3a5f3cab563"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shli@kernel.org",
        "time": "Tue Apr 24 21:23:46 2012 +0800"
      },
      "committer": {
        "name": "Ben Myers",
        "email": "bpm@sgi.com",
        "time": "Mon May 14 16:20:23 2012 -0500"
      },
      "message": "xfs: using GFP_NOFS for blkdev_issue_flush\n\nIssuing a block device flush request in transaction context using GFP_KERNEL\ndirectly can cause deadlocks due to memory reclaim recursion. Use GFP_NOFS to\navoid recursion from reclaim context.\n\nSigned-off-by: Shaohua Li \u003cshli@fusionio.com\u003e\nReviewed-by: Mark Tinguely \u003ctinguely@sgi.com\u003e\nSigned-off-by: Ben Myers \u003cbpm@sgi.com\u003e\n"
    },
    {
      "commit": "01c84d2dc1311fb76ea217dadfd5b3a5f3cab563",
      "tree": "16eac03113dc645ec525e57757270de4c0cb2874",
      "parents": [
        "507630b29f13a3d8689895618b12015308402e22"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Thu Apr 26 09:23:09 2012 +1000"
      },
      "committer": {
        "name": "Ben Myers",
        "email": "bpm@sgi.com",
        "time": "Mon May 14 16:20:22 2012 -0500"
      },
      "message": "xfs: punch all delalloc blocks beyond EOF on write failure.\n\nI\u0027ve been seeing regular ASSERT failures in xfstests when running\nfsstress based tests over the past month. xfs_getbmap() has been\nfailing this test:\n\nXFS: Assertion failed: ((iflags \u0026 BMV_IF_DELALLOC) !\u003d 0) ||\n(map[i].br_startblock !\u003d DELAYSTARTBLOCK), file: fs/xfs/xfs_bmap.c,\nline: 5650\n\nwhere it is encountering a delayed allocation extent after writing\nall the dirty data to disk and then walking the extent map\natomically by holding the XFS_IOLOCK_SHARED to prevent new delayed\nallocation extents from being created.\n\nTest 083 on a 512 byte block size filesystem was used to reproduce\nthe problem, because it only had a 5s run timeand would usually fail\nevery 3-4 runs. This test is exercising ENOSPC behaviour by running\nfsstress on a nearly full filesystem. The following trace extract\nshows the final few events on the inode that tripped the assert:\n\n xfs_ilock:             flags ILOCK_EXCL caller xfs_setfilesize\n xfs_setfilesize:       isize 0x180000 disize 0x12d400 offset 0x17e200 count 7680\n\nfile size updated to 0x180000 by IO completion\n\n xfs_ilock:             flags ILOCK_EXCL caller xfs_iomap_write_delay\n xfs_iext_insert:       state  idx 3 offset 3072 block 4503599627239432 count 1 flag 0 caller xfs_bmap_add_extent_hole_delay\n xfs_get_blocks_alloc:  size 0x180000 offset 0x180000 count 512 type  startoff 0xc00 startblock -1 blockcount 0x1\n xfs_ilock:             flags ILOCK_EXCL caller __xfs_get_blocks\n\ndelalloc write, adding a single block at offset 0x180000\n\n xfs_delalloc_enospc:   isize 0x180000 disize 0x180000 offset 0x180200 count 512\n\nENOSPC trying to allocate a dellalloc block at offset 0x180200\n\n xfs_ilock:             flags ILOCK_EXCL caller xfs_iomap_write_delay\n xfs_get_blocks_alloc:  size 0x180000 offset 0x180200 count 512 type  startoff 0xc00 startblock -1 blockcount 0x2\n\nAnd succeeding on retry after flushing dirty inodes.\n\n xfs_ilock:             flags ILOCK_EXCL caller __xfs_get_blocks\n xfs_delalloc_enospc:   isize 0x180000 disize 0x180000 offset 0x180400 count 512\n\nENOSPC trying to allocate a dellalloc block at offset 0x180400\n\n xfs_ilock:             flags ILOCK_EXCL caller xfs_iomap_write_delay\n xfs_delalloc_enospc:   isize 0x180000 disize 0x180000 offset 0x180400 count 512\n\nAnd failing the retry, giving a real ENOSPC error.\n\n xfs_ilock:             flags ILOCK_EXCL caller xfs_vm_write_failed\n                                                ^^^^^^^^^^^^^^^^^^^\nThe smoking gun - the write being failed and cleaning up delalloc\nblocks beyond EOF allocated by the failed write.\n\n xfs_getattr:\n xfs_ilock:             flags IOLOCK_SHARED caller xfs_getbmap\n xfs_ilock:             flags ILOCK_SHARED caller xfs_ilock_map_shared\n\nAnd that\u0027s where we died almost immediately afterwards.\nxfs_bmapi_read() found delalloc extent beyond current file in memory\nfile size. Some debug I added to xfs_getbmap() showed the state just\nbefore the assert failure:\n\n ino 0x80e48: off 0xc00, fsb 0xffffffffffffffff, len 0x1, size 0x180000\n start_fsb 0x106, end_fsb 0x638\n ino flags 0x2 nex 0xd bmvcnt 0x555, len 0x3c58a6f23c0bf1, start 0xc00\n ext 0: off 0x1fc, fsb 0x24782, len 0x254\n ext 1: off 0x450, fsb 0x40851, len 0x30\n ext 2: off 0x480, fsb 0xd99, len 0x1b8\n ext 3: off 0x92f, fsb 0x4099a, len 0x3b\n ext 4: off 0x96d, fsb 0x41844, len 0x98\n ext 5: off 0xbf1, fsb 0x408ab, len 0xf\n\nwhich shows that we found a single delalloc block beyond EOF (first\nline of output) when we were returning the map for a length\nsomewhere around 10^16 bytes long (second line), and the on-disk\nextents showed they didn\u0027t go past EOF (last lines).\n\nFurther debug added to xfs_vm_write_failed() showed this happened\nwhen punching out delalloc blocks beyond the end of the file after\nthe failed write:\n\n[  132.606693] ino 0x80e48: vwf to 0x181000, sze 0x180000\n[  132.609573] start_fsb 0xc01, end_fsb 0xc08\n\nIt punched the range 0xc01 -\u003e 0xc08, but the range we really need to\npunch is 0xc00 -\u003e 0xc07 (8 blocks from 0xc00) as this testing was\nrun on a 512 byte block size filesystem (8 blocks per page).\nthe punch from is 0xc00. So end_fsb is correct, but start_fsb is\nwrong as we punch from start_fsb for (end_fsb - start_fsb) blocks.\nHence we are not punching the delalloc block beyond EOF in the case.\n\nThe fix is simple - it\u0027s a silly off-by-one mistake in calculating\nthe range. It\u0027s especially silly because the macro used to calculate\nthe start_fsb already takes into account the case where the inode\nsize is an exact multiple of the filesystem block size...\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Eric Sandeen \u003csandeen@redhat.com\u003e\nSigned-off-by: Ben Myers \u003cbpm@sgi.com\u003e\n"
    },
    {
      "commit": "507630b29f13a3d8689895618b12015308402e22",
      "tree": "c090f5d2592d6f453ab7dd0f2f61da2a7482e59a",
      "parents": [
        "193aec10504e4c24521449c46317282141fb36e8"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Tue Mar 27 10:34:50 2012 -0400"
      },
      "committer": {
        "name": "Ben Myers",
        "email": "bpm@sgi.com",
        "time": "Mon May 14 16:20:21 2012 -0500"
      },
      "message": "xfs: use shared ilock mode for direct IO writes by default\n\nFor the direct IO write path, we only really need the ilock to be taken in\nexclusive mode during IO submission if we need to do extent allocation\ninstead of all the time.\n\nChange the block mapping code to take the ilock in shared mode for the\ninitial block mapping, and only retake it exclusively when we actually\nhave to perform extent allocations.  We were already dropping the ilock\nfor the transaction allocation, so this doesn\u0027t introduce new race windows.\n\nBased on an earlier patch from Dave Chinner.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Mark Tinguely \u003ctinguely@sgi.com\u003e\nSigned-off-by: Ben Myers \u003cbpm@sgi.com\u003e\n"
    },
    {
      "commit": "193aec10504e4c24521449c46317282141fb36e8",
      "tree": "ab68802be2bc151911732a78c3acd84604164b20",
      "parents": [
        "f38996f5768713fb60e1d2de66c097367d54bb6a"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Tue Mar 27 10:34:49 2012 -0400"
      },
      "committer": {
        "name": "Ben Myers",
        "email": "bpm@sgi.com",
        "time": "Mon May 14 16:20:20 2012 -0500"
      },
      "message": "xfs: push the ilock into xfs_zero_eof\n\nInstead of calling xfs_zero_eof with the ilock held only take it internally\nfor the minimall required critical section around xfs_bmapi_read.  This\nalso requires changing the calling convention for xfs_zero_last_block\nslightly.  The actual zeroing operation is still serialized by the iolock,\nwhich must be taken exclusively over the call to xfs_zero_eof.\n\nWe could in fact use a shared lock for the xfs_bmapi_read calls as long as\nthe extent list has been read in, but given that we already hold the iolock\nexclusively there is little reason to micro optimize this further.\n\nReviewed-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Mark Tinguely \u003ctinguely@sgi.com\u003e\nSigned-off-by: Ben Myers \u003cbpm@sgi.com\u003e\n"
    },
    {
      "commit": "f38996f5768713fb60e1d2de66c097367d54bb6a",
      "tree": "42135e66d1a3e90aede209d491dec9304e36d703",
      "parents": [
        "467f78992a0743e0e71729e4faa20b67b0f25289"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Tue Mar 27 10:34:48 2012 -0400"
      },
      "committer": {
        "name": "Ben Myers",
        "email": "bpm@sgi.com",
        "time": "Mon May 14 16:20:18 2012 -0500"
      },
      "message": "xfs: reduce ilock hold times in xfs_setattr_size\n\nWe do not need the ilock for most checks done in the beginning of\nxfs_setattr_size.  Replace the long critical section before starting the\ntransaction with a smaller one around xfs_zero_eof and an optional one\ninside xfs_qm_dqattach that isn\u0027t entered unless using quotas.  While\nthis isn\u0027t a big optimization for xfs_setattr_size itself it will allow\npushing the ilock into xfs_zero_eof itself later.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "467f78992a0743e0e71729e4faa20b67b0f25289",
      "tree": "2757c82c33b643105a8c0b42a12f61b96d6e2a19",
      "parents": [
        "b4d05e3019692fc5a8c573fbce60de2d48c5b7a1"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Tue Mar 27 10:34:47 2012 -0400"
      },
      "committer": {
        "name": "Ben Myers",
        "email": "bpm@sgi.com",
        "time": "Mon May 14 16:20:17 2012 -0500"
      },
      "message": "xfs: reduce ilock hold times in xfs_file_aio_write_checks\n\nWe do not need the ilock for generic_write_checks and the i_size_read,\nwhich are protected by i_mutex and/or iolock, so reduce the ilock\ncritical section to just the call to xfs_zero_eof.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Mark Tinguely \u003ctinguely@sgi.com\u003e\nSigned-off-by: Ben Myers \u003cbpm@sgi.com\u003e\n"
    },
    {
      "commit": "b4d05e3019692fc5a8c573fbce60de2d48c5b7a1",
      "tree": "df2c46061cc44055771475056962bc4c45a7b758",
      "parents": [
        "8a00ebe4cfc90eda9ecb575ba97e22021cd8cf70"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Tue Mar 27 10:34:46 2012 -0400"
      },
      "committer": {
        "name": "Ben Myers",
        "email": "bpm@sgi.com",
        "time": "Mon May 14 16:20:15 2012 -0500"
      },
      "message": "xfs: avoid taking the ilock unnessecarily in xfs_qm_dqattach\n\nCheck if we actually need to attach a dquot before taking the ilock in\nxfs_qm_dqattach.  This avoid superflous lock roundtrips for the common cases\nof quota support compiled in but not activated on a filesystem and an\ninode that already has the dquots attached.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Mark Tinguely \u003ctinguely@sgi.com\u003e\nReviewed-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nSigned-off-by: Ben Myers \u003cbpm@sgi.com\u003e\n"
    },
    {
      "commit": "dbd5768f87ff6fb0a4fe09c4d7b6c4a24de99430",
      "tree": "42ea94ea733538f797aa745945fc43c4d1b89217",
      "parents": [
        "7994e6f7254354e03028a11f98a27bd67dace9f1"
      ],
      "author": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Thu May 03 14:48:02 2012 +0200"
      },
      "committer": {
        "name": "Fengguang Wu",
        "email": "fengguang.wu@intel.com",
        "time": "Sun May 06 13:43:41 2012 +0800"
      },
      "message": "vfs: Rename end_writeback() to clear_inode()\n\nAfter we moved inode_sync_wait() from end_writeback() it doesn\u0027t make sense\nto call the function end_writeback() anymore. Rename it to clear_inode()\nwhich well says what the function really does - set I_CLEAR flag.\n\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\nSigned-off-by: Fengguang Wu \u003cfengguang.wu@intel.com\u003e\n"
    },
    {
      "commit": "8a00ebe4cfc90eda9ecb575ba97e22021cd8cf70",
      "tree": "06e97168b62fb7acdf44f6610c1e6ea268822f3d",
      "parents": [
        "da5bf95e3cdca348327c82568c2860229c0daaa2"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Fri Apr 13 12:10:44 2012 +0000"
      },
      "committer": {
        "name": "Ben Myers",
        "email": "bpm@sgi.com",
        "time": "Tue Apr 17 11:19:47 2012 -0500"
      },
      "message": "xfs: Ensure inode reclaim can run during quotacheck\n\nBecause the mount process can run a quotacheck and consume lots of\ninodes, we need to be able to run periodic inode reclaim during the\nmount process. This will prevent running the system out of memory\nduring quota checks.\n\nThis essentially reverts 2bcf6e97, but that is safe to do now that\nthe quota sync code that was causing problems during long quotacheck\nexecutions is now gone.\n\nThe reclaim work is currently protected from running during the\nunmount process by a check against MS_ACTIVE. Unfortunately, this\nalso means that the reclaim work cannot run during mount.  The\nunmount process should stop the reclaim cleanly before freeing\nanything that the reclaim work depends on, so there is no need to\nhave this guard in place.\n\nAlso, the inode reclaim work is demand driven, so there is no need\nto start it immediately during mount. It will be started the moment\nan inode is queued for reclaim, so qutoacheck will trigger it just\nfine.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Mark Tinguely \u003ctinguely@sgi.com\u003e\nSigned-off-by: Ben Myers \u003cbpm@sgi.com\u003e\n\n"
    },
    {
      "commit": "da5bf95e3cdca348327c82568c2860229c0daaa2",
      "tree": "2489e495921c4bcdd16246feeeeaef5ade6924c5",
      "parents": [
        "18caa67ad41212e6f82a675c40f461ffb45f098e"
      ],
      "author": {
        "name": "Jie Liu",
        "email": "jeff.liu@oracle.com",
        "time": "Thu Apr 12 03:59:57 2012 +0000"
      },
      "committer": {
        "name": "Ben Myers",
        "email": "bpm@sgi.com",
        "time": "Mon Apr 16 16:32:20 2012 -0500"
      },
      "message": "xfs: don\u0027t fill statvfs with project quota for a directory if it was not enabled.\n\nCheck if the project quota is running or not before performing\nxfs_qm_statvfs(), just return if not.  Otherwise the ASSERT\nXFS_IS_QUOTA_RUNNING in xfs_qm_dqget will be popped.\n\nSigned-off-by: Jie Liu \u003cjeff.liu@oracle.com\u003e\nSigned-off-by: Ben Myers \u003cbpm@sgi.com\u003e\n\n"
    },
    {
      "commit": "0195c00244dc2e9f522475868fa278c473ba7339",
      "tree": "f97ca98ae64ede2c33ad3de05ed7bbfa4f4495ed",
      "parents": [
        "f21ce8f8447c8be8847dadcfdbcc76b0d7365fa5",
        "141124c02059eee9dbc5c86ea797b1ca888e77f7"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 28 15:58:21 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 28 15:58:21 2012 -0700"
      },
      "message": "Merge tag \u0027split-asm_system_h-for-linus-20120328\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/dhowells/linux-asm_system\n\nPull \"Disintegrate and delete asm/system.h\" from David Howells:\n \"Here are a bunch of patches to disintegrate asm/system.h into a set of\n  separate bits to relieve the problem of circular inclusion\n  dependencies.\n\n  I\u0027ve built all the working defconfigs from all the arches that I can\n  and made sure that they don\u0027t break.\n\n  The reason for these patches is that I recently encountered a circular\n  dependency problem that came about when I produced some patches to\n  optimise get_order() by rewriting it to use ilog2().\n\n  This uses bitops - and on the SH arch asm/bitops.h drags in\n  asm-generic/get_order.h by a circuituous route involving asm/system.h.\n\n  The main difficulty seems to be asm/system.h.  It holds a number of\n  low level bits with no/few dependencies that are commonly used (eg.\n  memory barriers) and a number of bits with more dependencies that\n  aren\u0027t used in many places (eg.  switch_to()).\n\n  These patches break asm/system.h up into the following core pieces:\n\n    (1) asm/barrier.h\n\n        Move memory barriers here.  This already done for MIPS and Alpha.\n\n    (2) asm/switch_to.h\n\n        Move switch_to() and related stuff here.\n\n    (3) asm/exec.h\n\n        Move arch_align_stack() here.  Other process execution related bits\n        could perhaps go here from asm/processor.h.\n\n    (4) asm/cmpxchg.h\n\n        Move xchg() and cmpxchg() here as they\u0027re full word atomic ops and\n        frequently used by atomic_xchg() and atomic_cmpxchg().\n\n    (5) asm/bug.h\n\n        Move die() and related bits.\n\n    (6) asm/auxvec.h\n\n        Move AT_VECTOR_SIZE_ARCH here.\n\n  Other arch headers are created as needed on a per-arch basis.\"\n\nFixed up some conflicts from other header file cleanups and moving code\naround that has happened in the meantime, so David\u0027s testing is somewhat\nweakened by that.  We\u0027ll find out anything that got broken and fix it..\n\n* tag \u0027split-asm_system_h-for-linus-20120328\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/dhowells/linux-asm_system: (38 commits)\n  Delete all instances of asm/system.h\n  Remove all #inclusions of asm/system.h\n  Add #includes needed to permit the removal of asm/system.h\n  Move all declarations of free_initmem() to linux/mm.h\n  Disintegrate asm/system.h for OpenRISC\n  Split arch_align_stack() out from asm-generic/system.h\n  Split the switch_to() wrapper out of asm-generic/system.h\n  Move the asm-generic/system.h xchg() implementation to asm-generic/cmpxchg.h\n  Create asm-generic/barrier.h\n  Make asm-generic/cmpxchg.h #include asm-generic/cmpxchg-local.h\n  Disintegrate asm/system.h for Xtensa\n  Disintegrate asm/system.h for Unicore32 [based on ver #3, changed by gxt]\n  Disintegrate asm/system.h for Tile\n  Disintegrate asm/system.h for Sparc\n  Disintegrate asm/system.h for SH\n  Disintegrate asm/system.h for Score\n  Disintegrate asm/system.h for S390\n  Disintegrate asm/system.h for PowerPC\n  Disintegrate asm/system.h for PA-RISC\n  Disintegrate asm/system.h for MN10300\n  ...\n"
    },
    {
      "commit": "f21ce8f8447c8be8847dadcfdbcc76b0d7365fa5",
      "tree": "fb51d60060453aef9e776c7d3a31588609d34d76",
      "parents": [
        "0c9aac08261512d70d7d4817bd222abca8b6bdd6",
        "5a5881cdeec2c019b5c9a307800218ee029f7f61"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 28 15:23:52 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 28 15:23:52 2012 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://oss.sgi.com/xfs/xfs\n\nPull XFS update (part 2) from Ben Myers:\n \"Fixes for tracing of xfs_name strings, flag handling in\n  open_by_handle, a log space hang with freeze/unfreeze, fstrim offset\n  calculations, a section mismatch with xfs_qm_exit, an oops in\n  xlog_recover_process_iunlinks, and a deadlock in xfs_rtfree_extent.\n\n  There are also additional trace points for attributes, and the\n  addition of a workqueue for allocation to work around kernel stack\n  size limitations.\"\n\n* \u0027for-linus\u0027 of git://oss.sgi.com/xfs/xfs:\n  xfs: add lots of attribute trace points\n  xfs: Fix oops on IO error during xlog_recover_process_iunlinks()\n  xfs: fix fstrim offset calculations\n  xfs: Account log unmount transaction correctly\n  xfs: don\u0027t cache inodes read through bulkstat\n  xfs: trace xfs_name strings correctly\n  xfs: introduce an allocation workqueue\n  xfs: Fix open flag handling in open_by_handle code\n  xfs: fix deadlock in xfs_rtfree_extent\n  fs: xfs: fix section mismatch in linux-next\n"
    },
    {
      "commit": "9ffc93f203c18a70623f21950f1dd473c9ec48cd",
      "tree": "1eb3536ae183b0bfbf7f5152a6fe4f430ae881c2",
      "parents": [
        "96f951edb1f1bdbbc99b0cd458f9808bb83d58ae"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Wed Mar 28 18:30:03 2012 +0100"
      },
      "committer": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Wed Mar 28 18:30:03 2012 +0100"
      },
      "message": "Remove all #inclusions of asm/system.h\n\nRemove all #inclusions of asm/system.h preparatory to splitting and killing\nit.  Performed with the following command:\n\nperl -p -i -e \u0027s!^#\\s*include\\s*\u003casm/system[.]h\u003e.*\\n!!\u0027 `grep -Irl \u0027^#\\s*include\\s*\u003casm/system[.]h\u003e\u0027 *`\n\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\n"
    },
    {
      "commit": "5a5881cdeec2c019b5c9a307800218ee029f7f61",
      "tree": "67ae565f9e243a1eaa986457ca869e776fb76fac",
      "parents": [
        "d97d32edcd732110758799ae60af725e5110b3dc"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Thu Mar 22 05:15:13 2012 +0000"
      },
      "committer": {
        "name": "Ben Myers",
        "email": "bpm@sgi.com",
        "time": "Tue Mar 27 17:18:21 2012 -0500"
      },
      "message": "xfs: add lots of attribute trace points\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nSigned-off-by: Ben Myers \u003cbpm@sgi.com\u003e\n"
    },
    {
      "commit": "d97d32edcd732110758799ae60af725e5110b3dc",
      "tree": "b49bc097b289d123003695dcd1301cda5f091f4b",
      "parents": [
        "a66d636385d621e98a915233250356c394a437de"
      ],
      "author": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Thu Mar 15 09:34:02 2012 +0000"
      },
      "committer": {
        "name": "Ben Myers",
        "email": "bpm@sgi.com",
        "time": "Tue Mar 27 16:34:10 2012 -0500"
      },
      "message": "xfs: Fix oops on IO error during xlog_recover_process_iunlinks()\n\nWhen an IO error happens during inode deletion run from\nxlog_recover_process_iunlinks() filesystem gets shutdown. Thus any subsequent\nattempt to read buffers fails. Code in xlog_recover_process_iunlinks() does not\ncount with the fact that read of a buffer which was read a while ago can\nreally fail which results in the oops on\n  agi \u003d XFS_BUF_TO_AGI(agibp);\n\nFix the problem by cleaning up the buffer handling in\nxlog_recover_process_iunlinks() as suggested by Dave Chinner. We release buffer\nlock but keep buffer reference to AG buffer. That is enough for buffer to stay\npinned in memory and we don\u0027t have to call xfs_read_agi() all the time.\n\nCC: stable@kernel.org\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\nReviewed-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nSigned-off-by: Ben Myers \u003cbpm@sgi.com\u003e\n"
    },
    {
      "commit": "a66d636385d621e98a915233250356c394a437de",
      "tree": "9dda534c10fed016503f77a5f7ce893f9c4db7f7",
      "parents": [
        "3948659e30808fbaa7673bbe89de2ae9769e20a7"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Thu Mar 22 05:15:12 2012 +0000"
      },
      "committer": {
        "name": "Ben Myers",
        "email": "bpm@sgi.com",
        "time": "Tue Mar 27 16:07:03 2012 -0500"
      },
      "message": "xfs: fix fstrim offset calculations\n\nxfs_ioc_fstrim() doesn\u0027t treat the incoming offset and length\ncorrectly. It treats them as a filesystem block address, rather than\na disk address. This is wrong because the range passed in is a\nlinear representation, while the filesystem block address notation\nis a sparse representation. Hence we cannot convert the range direct\nto filesystem block units and then use that for calculating the\nrange to trim.\n\nWhile this sounds dangerous, the problem is limited to calculating\nwhat AGs need to be trimmed. The code that calcuates the actual\nranges to trim gets the right result (i.e. only ever discards free\nspace), even though it uses the wrong ranges to limit what is\ntrimmed. Hence this is not a bug that endangers user data.\n\nFix this by treating the range as a disk address range and use the\nappropriate functions to convert the range into the desired formats\nfor calculations.\n\nFurther, fix the first free extent lookup (the longest) to actually\nfind the largest free extent. Currently this lookup uses a \u003c\u003d\nlookup, which results in finding the extent to the left of the\nlargest because we can never get an exact match on the largest\nextent. This is due to the fact that while we know it\u0027s size, we\ndon\u0027t know it\u0027s location and so the exact match fails and we move\none record to the left to get the next largest extent. Instead, use\na \u003e\u003d search so that the lookup returns the largest extent regardless\nof the fact we don\u0027t get an exact match on it.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Ben Myers \u003cbpm@sgi.com\u003e\n"
    },
    {
      "commit": "3948659e30808fbaa7673bbe89de2ae9769e20a7",
      "tree": "06ff528be9bd33a4f2579fb05514460b7fa1ec8a",
      "parents": [
        "5132ba8f2b7705fb6b06fa6ad3d009233c816b67"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Thu Mar 22 05:15:11 2012 +0000"
      },
      "committer": {
        "name": "Ben Myers",
        "email": "bpm@sgi.com",
        "time": "Mon Mar 26 17:47:24 2012 -0500"
      },
      "message": "xfs: Account log unmount transaction correctly\n\nThere have been a few reports of this warning appearing recently:\n\nXFS (dm-4): xlog_space_left: head behind tail\n tail_cycle \u003d 129, tail_bytes \u003d 20163072\n GH   cycle \u003d 129, GH   bytes \u003d 20162880\n\nThe common cause appears to be lots of freeze and unfreeze cycles,\nand the output from the warnings indicates that we are leaking\naround 8 bytes of log space per freeze/unfreeze cycle.\n\nWhen we freeze the filesystem, we write an unmount record and that\nuses xlog_write directly - a special type of transaction,\neffectively. What it doesn\u0027t do, however, is correctly account for\nthe log space it uses. The unmount record writes an 8 byte structure\nwith a special magic number into the log, and the space this\nconsumes is not accounted for in the log ticket tracking the\noperation. Hence we leak 8 bytes every unmount record that is\nwritten.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Ben Myers \u003cbpm@sgi.com\u003e\n"
    },
    {
      "commit": "5132ba8f2b7705fb6b06fa6ad3d009233c816b67",
      "tree": "e552a365b600af005abec13f3a1deb1f57bae3b9",
      "parents": [
        "f616137519feb17b849894fcbe634a021d3fa7db"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Thu Mar 22 05:15:10 2012 +0000"
      },
      "committer": {
        "name": "Ben Myers",
        "email": "bpm@sgi.com",
        "time": "Mon Mar 26 17:19:08 2012 -0500"
      },
      "message": "xfs: don\u0027t cache inodes read through bulkstat\n\nWhen we read inodes via bulkstat, we generally only read them once\nand then throw them away - they never get used again. If we retain\nthem in cache, then it simply causes the working set of inodes and\nother cached items to be reclaimed just so the inode cache can grow.\n\nAvoid this problem by marking inodes read by bulkstat not to be\ncached and check this flag in .drop_inode to determine whether the\ninode should be added to the VFS LRU or not. If the inode lookup\nhits an already cached inode, then don\u0027t set the flag. If the inode\nlookup hits an inode marked with no cache flag, remove the flag and\nallow it to be cached once the current reference goes away.\n\nInodes marked as not cached will get cleaned up by the background\ninode reclaim or via memory pressure, so they will still generate\nsome short term cache pressure. They will, however, be reclaimed\nmuch sooner and in preference to cache hot inodes.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Ben Myers \u003cbpm@sgi.com\u003e\n"
    },
    {
      "commit": "f616137519feb17b849894fcbe634a021d3fa7db",
      "tree": "efa0007b9141ee85f65980e3731bb02f18dcb4bc",
      "parents": [
        "c999a223c2f0d31c64ef7379814cea1378b2b800"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Tue Feb 28 11:01:40 2012 +0000"
      },
      "committer": {
        "name": "Ben Myers",
        "email": "bpm@sgi.com",
        "time": "Mon Mar 26 13:58:48 2012 -0500"
      },
      "message": "xfs: trace xfs_name strings correctly\n\nStrings store in an xfs_name structure are often not NUL terminated,\nprint them using the correct printf specifiers that make use of the\nstring length store in the xfs_name structure.\n\nReported-by: Brian Candler \u003cB.Candler@pobox.com\u003e\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Ben Myers \u003cbpm@sgi.com\u003e\n\n"
    },
    {
      "commit": "49d99a2f9c4d033cc3965958a1397b1fad573dd3",
      "tree": "cda1849d49d40d2f25773e86605c55bc6745cf1f",
      "parents": [
        "1c3ddfe5ab886c4dc0443535e95ad8e41c41d0e5",
        "f074211f6041305b645669464343d504f4e6a290"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Mar 23 09:19:22 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Mar 23 09:19:22 2012 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://oss.sgi.com/xfs/xfs\n\nPull XFS updates from Ben Myers:\n \"Scalability improvements for dquots, log grant code cleanups, plus\n  bugfixes and cleanups large and small\"\n\nFix up various trivial conflicts that were due to some of the earlier\npatches already having been integrated into v3.3 as bugfixes, and then\nthere were development patches on top of those.  Easily merged by just\ntaking the newer version from the pulled branch.\n\n* \u0027for-linus\u0027 of git://oss.sgi.com/xfs/xfs: (45 commits)\n  xfs: fallback to vmalloc for large buffers in xfs_getbmap\n  xfs: fallback to vmalloc for large buffers in xfs_attrmulti_attr_get\n  xfs: remove remaining scraps of struct xfs_iomap\n  xfs: fix inode lookup race\n  xfs: clean up minor sparse warnings\n  xfs: remove the global xfs_Gqm structure\n  xfs: remove the per-filesystem list of dquots\n  xfs: use per-filesystem radix trees for dquot lookup\n  xfs: per-filesystem dquot LRU lists\n  xfs: use common code for quota statistics\n  xfs: reimplement fdatasync support\n  xfs: split in-core and on-disk inode log item fields\n  xfs: make xfs_inode_item_size idempotent\n  xfs: log timestamp updates\n  xfs: log file size updates at I/O completion time\n  xfs: log file size updates as part of unwritten extent conversion\n  xfs: do not require an ioend for new EOF calculation\n  xfs: use per-filesystem I/O completion workqueues\n  quota: make Q_XQUOTASYNC a noop\n  xfs: include reservations in quota reporting\n  ...\n"
    },
    {
      "commit": "c999a223c2f0d31c64ef7379814cea1378b2b800",
      "tree": "ed699c3c98075bbfc4aed0ab22bd174e65e575a8",
      "parents": [
        "1a1d772433d42aaff7315b3468fef5951604f5c6"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Thu Mar 22 05:15:07 2012 +0000"
      },
      "committer": {
        "name": "Ben Myers",
        "email": "bpm@sgi.com",
        "time": "Thu Mar 22 16:12:24 2012 -0500"
      },
      "message": "xfs: introduce an allocation workqueue\n\nWe currently have significant issues with the amount of stack that\nallocation in XFS uses, especially in the writeback path. We can\neasily consume 4k of stack between mapping the page, manipulating\nthe bmap btree and allocating blocks from the free list. Not to\nmention btree block readahead and other functionality that issues IO\nin the allocation path.\n\nAs a result, we can no longer fit allocation in the writeback path\nin the stack space provided on x86_64. To alleviate this problem,\nintroduce an allocation workqueue and move all allocations to a\nseperate context. This can be easily added as an interposing layer\ninto xfs_alloc_vextent(), which takes a single argument structure\nand does not return until the allocation is complete or has failed.\n\nTo do this, add a work structure and a completion to the allocation\nargs structure. This allows xfs_alloc_vextent to queue the args onto\nthe workqueue and wait for it to be completed by the worker. This\ncan be done completely transparently to the caller.\n\nThe worker function needs to ensure that it sets and clears the\nPF_TRANS flag appropriately as it is being run in an active\ntransaction context. Work can also be queued in a memory reclaim\ncontext, so a rescuer is needed for the workqueue.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Ben Myers \u003cbpm@sgi.com\u003e\n"
    },
    {
      "commit": "1a1d772433d42aaff7315b3468fef5951604f5c6",
      "tree": "0f2b7e5ccf4e0a99fde158d95d1225ed81a2b34e",
      "parents": [
        "5575acc7807595687288b3bbac15103f2a5462e1"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Thu Mar 22 05:15:06 2012 +0000"
      },
      "committer": {
        "name": "Ben Myers",
        "email": "bpm@sgi.com",
        "time": "Thu Mar 22 15:56:52 2012 -0500"
      },
      "message": "xfs: Fix open flag handling in open_by_handle code\n\nSparse identified some unsafe handling of open flags in the xfs open\nby handle ioctl code. Update the code to use the correct access\nmacros to ensure that we handle the open flags correctly.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Mark Tinguely \u003ctinguely@sgi.com\u003e\nSigned-off-by: Ben Myers \u003cbpm@sgi.com\u003e\n"
    },
    {
      "commit": "5575acc7807595687288b3bbac15103f2a5462e1",
      "tree": "1a47a34756e1c0023e2df8f3b1d9e10de568601a",
      "parents": [
        "1c2ccc66bcef992bec7bad6d52cade66d632d7fb"
      ],
      "author": {
        "name": "Kamal Dasu",
        "email": "kdasu.kdev@gmail.com",
        "time": "Thu Feb 23 00:41:39 2012 +0000"
      },
      "committer": {
        "name": "Ben Myers",
        "email": "bpm@sgi.com",
        "time": "Thu Mar 22 15:31:06 2012 -0500"
      },
      "message": "xfs: fix deadlock in xfs_rtfree_extent\n\nTo fix the deadlock caused by repeatedly calling xfs_rtfree_extent\n\n - removed xfs_ilock() and xfs_trans_ijoin() from xfs_rtfree_extent(),\n   instead added asserts that the inode is locked and has an inode_item\n   attached to it.\n - in xfs_bunmapi() when dealing with an inode with the rt flag\n   call xfs_ilock() and xfs_trans_ijoin() so that the\n   reference count is bumped on the inode and attached it to the\n   transaction before calling into xfs_bmap_del_extent, similar to\n   what we do in xfs_bmap_rtalloc.\n\nSigned-off-by: Kamal Dasu \u003ckdasu.kdev@gmail.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@infradead.org\u003e\nSigned-off-by: Ben Myers \u003cbpm@sgi.com\u003e\n"
    },
    {
      "commit": "1c2ccc66bcef992bec7bad6d52cade66d632d7fb",
      "tree": "621a3e4d527d18bc6bfb2667baf29f5a9607706a",
      "parents": [
        "f074211f6041305b645669464343d504f4e6a290"
      ],
      "author": {
        "name": "Gerard Snitselaar",
        "email": "dev@snitselaar.org",
        "time": "Fri Mar 16 18:36:18 2012 +0000"
      },
      "committer": {
        "name": "Ben Myers",
        "email": "bpm@sgi.com",
        "time": "Thu Mar 22 13:48:55 2012 -0500"
      },
      "message": "fs: xfs: fix section mismatch in linux-next\n\nxfs_qm_exit() is called in init_xfs_fs().\n\nSigned-off-by: Gerard Snitselaar \u003cdev@snitselaar.org\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Ben Myers \u003cbpm@sgi.com\u003e\n\n"
    },
    {
      "commit": "48fde701aff662559b38d9a609574068f22d00fe",
      "tree": "aa6b203dc671b51d58575b65eb08310ff8309b60",
      "parents": [
        "6b4231e2f92adbcf96fb2a3fa751d7ca0a61b21f"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sun Jan 08 22:15:13 2012 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Mar 20 21:29:35 2012 -0400"
      },
      "message": "switch open-coded instances of d_make_root() to new helper\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "8de52778798fe39660a8d6b26f290e0c93202761",
      "tree": "56384beb7863c1f338f2b66b509bf58eea5a99c2",
      "parents": [
        "c16fa4f2ad19908a47c63d8fa436a1178438c7e7"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Feb 06 12:45:27 2012 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Mar 20 21:29:32 2012 -0400"
      },
      "message": "vfs: check i_nlink limits in vfs_{mkdir,rename_dir,link}\n\nNew field of struct super_block - -\u003es_max_links.  Maximal allowed\nvalue of -\u003ei_nlink or 0; in the latter case all checks still need\nto be done in -\u003elink/-\u003emkdir/-\u003erename instances.  Note that this\nlimit applies both to directoris and to non-directories.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "f074211f6041305b645669464343d504f4e6a290",
      "tree": "2fd1678c72b47683e25f69e247dfecaec79e477b",
      "parents": [
        "ad650f5b27bc9858360b42aaa0d9204d16115316"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Wed Mar 07 04:50:22 2012 +0000"
      },
      "committer": {
        "name": "Ben Myers",
        "email": "bpm@sgi.com",
        "time": "Thu Mar 15 14:54:23 2012 -0500"
      },
      "message": "xfs: fallback to vmalloc for large buffers in xfs_getbmap\n\nxfs_getbmap uses for a large buffer for extents, which is kmalloc\u0027d.\nThis can fail after the system has been running for some time as it\nis a high order allocation. Add a fallback to vmalloc so that it\ndoesn\u0027t require contiguous memory and so won\u0027t randomly fail on\nfiles with large extent lists.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Mark Tinguely \u003ctinguely@sgi.com\u003e\nSigned-off-by: Ben Myers \u003cbpm@sgi.com\u003e\n\n"
    },
    {
      "commit": "ad650f5b27bc9858360b42aaa0d9204d16115316",
      "tree": "9f21fe0fe1589c7cbcbc422f7d4ffcc4cf57bb74",
      "parents": [
        "6eb2466036358078aed9a65d702cbc97baf0ce65"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Wed Mar 07 04:50:21 2012 +0000"
      },
      "committer": {
        "name": "Ben Myers",
        "email": "bpm@sgi.com",
        "time": "Thu Mar 15 14:14:33 2012 -0500"
      },
      "message": "xfs: fallback to vmalloc for large buffers in xfs_attrmulti_attr_get\n\nxfsdump uses for a large buffer for extended attributes, which has a\nkmalloc\u0027d shadow buffer in the kernel. This can fail after the\nsystem has been running for some time as it is a high order\nallocation. Add a fallback to vmalloc so that it doesn\u0027t require\ncontiguous memory and so won\u0027t randomly fail while xfsdump is\nrunning.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Mark Tinguely \u003ctinguely@sgi.com\u003e\nSigned-off-by: Ben Myers \u003cbpm@sgi.com\u003e\n\n"
    },
    {
      "commit": "6eb2466036358078aed9a65d702cbc97baf0ce65",
      "tree": "5b1e68b8cf0afdc6007c3fd976ba55484a8e42ba",
      "parents": [
        "f30d500f809eca67a21704347ab14bb35877b5ee"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Wed Mar 07 04:50:24 2012 +0000"
      },
      "committer": {
        "name": "Ben Myers",
        "email": "bpm@sgi.com",
        "time": "Thu Mar 15 13:40:16 2012 -0500"
      },
      "message": "xfs: remove remaining scraps of struct xfs_iomap\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Mark Tinguely \u003ctinguely@sgi.com\u003e\nSigned-off-by: Ben Myers \u003cbpm@sgi.com\u003e\n"
    },
    {
      "commit": "f30d500f809eca67a21704347ab14bb35877b5ee",
      "tree": "0e4c8267a9087f0c70994346443221d3efb6f321",
      "parents": [
        "8d2a5e6ee37f205b3d76c223d4f3f88ba1d06220"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Wed Mar 07 04:50:25 2012 +0000"
      },
      "committer": {
        "name": "Ben Myers",
        "email": "bpm@sgi.com",
        "time": "Thu Mar 15 13:16:42 2012 -0500"
      },
      "message": "xfs: fix inode lookup race\n\nWhen we get concurrent lookups of the same inode that is not in the\nper-AG inode cache, there is a race condition that triggers warnings\nin unlock_new_inode() indicating that we are initialising an inode\nthat isn\u0027t in a the correct state for a new inode.\n\nWhen we do an inode lookup via a file handle or a bulkstat, we don\u0027t\nserialise lookups at a higher level through the dentry cache (i.e.\npathless lookup), and so we can get concurrent lookups of the same\ninode.\n\nThe race condition is between the insertion of the inode into the\ncache in the case of a cache miss and a concurrently lookup:\n\nThread 1\t\t\tThread 2\nxfs_iget()\n  xfs_iget_cache_miss()\n    xfs_iread()\n    lock radix tree\n    radix_tree_insert()\n\t\t\t\trcu_read_lock\n\t\t\t\tradix_tree_lookup\n\t\t\t\tlock inode flags\n\t\t\t\tXFS_INEW not set\n\t\t\t\tigrab()\n\t\t\t\tunlock inode flags\n\t\t\t\trcu_read_unlock\n\t\t\t\tuse uninitialised inode\n\t\t\t\t.....\n    lock inode flags\n    set XFS_INEW\n    unlock inode flags\n    unlock radix tree\n  xfs_setup_inode()\n    inode flags \u003d I_NEW\n    unlock_new_inode()\n      WARNING as inode flags !\u003d I_NEW\n\nThis can lead to inode corruption, inode list corruption, etc, and\nis generally a bad thing to occur.\n\nFix this by setting XFS_INEW before inserting the inode into the\nradix tree. This will ensure any concurrent lookup will find the new\ninode with XFS_INEW set and that forces the lookup to wait until the\nXFS_INEW flag is removed before allowing the lookup to succeed.\n\ncc: \u003cstable@vger.kernel.org\u003e # for 3.0.x, 3.2.x\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Ben Myers \u003cbpm@sgi.com\u003e\n"
    },
    {
      "commit": "8d2a5e6ee37f205b3d76c223d4f3f88ba1d06220",
      "tree": "0d571ac88b5e10499eb552885a45b1f5409d19f5",
      "parents": [
        "a05931ceb0160deadbd7798d60d01b17f2d81b09"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Wed Mar 07 04:50:19 2012 +0000"
      },
      "committer": {
        "name": "Ben Myers",
        "email": "bpm@sgi.com",
        "time": "Wed Mar 14 13:21:17 2012 -0500"
      },
      "message": "xfs: clean up minor sparse warnings\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Ben Myers \u003cbpm@sgi.com\u003e\n"
    },
    {
      "commit": "a05931ceb0160deadbd7798d60d01b17f2d81b09",
      "tree": "ca56811415e970149cc99b8b7f6ec9a4677d6025",
      "parents": [
        "b84a3a96751f93071c1863f2962273973c8b8f5e"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Tue Mar 13 08:52:37 2012 +0000"
      },
      "committer": {
        "name": "Ben Myers",
        "email": "bpm@sgi.com",
        "time": "Wed Mar 14 12:06:32 2012 -0500"
      },
      "message": "xfs: remove the global xfs_Gqm structure\n\nIf we initialize the slab caches for the quota code when XFS is loaded there\nis no need for a global and reference counted quota manager structure.  Drop\nall this overhead and also fix the error handling during quota initialization.\n\nReviewed-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Ben Myers \u003cbpm@sgi.com\u003e\n\n"
    },
    {
      "commit": "b84a3a96751f93071c1863f2962273973c8b8f5e",
      "tree": "26409cbc65a9b4457e6c52e90879361fc42d2386",
      "parents": [
        "9f920f116426806bfa34c1422742e1bf7b7a2b4b"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Wed Mar 14 11:53:34 2012 -0500"
      },
      "committer": {
        "name": "Ben Myers",
        "email": "bpm@sgi.com",
        "time": "Wed Mar 14 11:53:34 2012 -0500"
      },
      "message": "xfs: remove the per-filesystem list of dquots\n\nInstead of keeping a separate per-filesystem list of dquots we can walk\nthe radix tree for the two places where we need to iterate all quota\nstructures.\n\nReviewed-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Ben Myers \u003cbpm@sgi.com\u003e\n\n"
    },
    {
      "commit": "9f920f116426806bfa34c1422742e1bf7b7a2b4b",
      "tree": "3ec0a4f006dc10ed56e5bec1b605f5ecbb3a3275",
      "parents": [
        "f8739c3ce2ac9a01515b56026b6a066c0808234b"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Tue Mar 13 08:52:35 2012 +0000"
      },
      "committer": {
        "name": "Ben Myers",
        "email": "bpm@sgi.com",
        "time": "Wed Mar 14 11:09:06 2012 -0500"
      },
      "message": "xfs: use per-filesystem radix trees for dquot lookup\n\nReplace the global hash tables for looking up in-memory dquot structures\nwith per-filesystem radix trees to allow scaling to a large number of\nin-memory dquot structures.\n\nReviewed-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Ben Myers \u003cbpm@sgi.com\u003e\n\n"
    },
    {
      "commit": "f8739c3ce2ac9a01515b56026b6a066c0808234b",
      "tree": "c3f7b877b5be6e12c62028de7da46fef3e537dc7",
      "parents": [
        "48776fd22344ad80adcbac0abc9c0da60c6481d2"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Tue Mar 13 08:52:34 2012 +0000"
      },
      "committer": {
        "name": "Ben Myers",
        "email": "bpm@sgi.com",
        "time": "Wed Mar 14 11:09:06 2012 -0500"
      },
      "message": "xfs: per-filesystem dquot LRU lists\n\nReplace the global dquot lru lists with a per-filesystem one.\n\nNote that the shrinker isn\u0027t wire up to the per-superblock VFS shrinker\ninfrastructure as would have problems summing up and splitting the counts\nfor inodes and dquots.  I don\u0027t think this is a major problem as the quota\ncache isn\u0027t as interwinded with the inode cache as the dentry cache is,\nbecause an inode that is dropped from the cache will generally release\na dquot reference, but most of the time it won\u0027t be the last one.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nSigned-off-by: Ben Myers \u003cbpm@sgi.com\u003e\n\n"
    },
    {
      "commit": "48776fd22344ad80adcbac0abc9c0da60c6481d2",
      "tree": "8ab09fce19aab58e0e451d16c98ff7d1e84dcc53",
      "parents": [
        "8f639ddea0c4978ae9b4e46ea041c9e5afe0ee8d"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Tue Mar 13 08:52:33 2012 +0000"
      },
      "committer": {
        "name": "Ben Myers",
        "email": "bpm@sgi.com",
        "time": "Wed Mar 14 11:09:06 2012 -0500"
      },
      "message": "xfs: use common code for quota statistics\n\nSwitch the quota code over to use the generic XFS statistics infrastructure.\nWhile the legacy /proc/fs/xfs/xqm and /proc/fs/xfs/xqmstats interfaces are\npreserved for now the statistics that still have a meaning with the current\ncode are now also available from /proc/fs/xfs/stats.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nSigned-off-by: Ben Myers \u003cbpm@sgi.com\u003e\n\n"
    },
    {
      "commit": "8f639ddea0c4978ae9b4e46ea041c9e5afe0ee8d",
      "tree": "d2b90c868fd3ad818317e3fff8448d6940afb3d5",
      "parents": [
        "f5d8d5c4bf29c9f7754d9cbe5e27c785106ba872"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Wed Feb 29 09:53:55 2012 +0000"
      },
      "committer": {
        "name": "Ben Myers",
        "email": "bpm@sgi.com",
        "time": "Tue Mar 13 17:18:14 2012 -0500"
      },
      "message": "xfs: reimplement fdatasync support\n\nAdd an in-memory only flag to say we logged timestamps only, and use it to\ncheck if fdatasync can optimize away the log force.\n\nReviewed-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Mark Tinguely \u003ctinguely@sgi.com\u003e\nSigned-off-by: Ben Myers \u003cbpm@sgi.com\u003e\n\n"
    },
    {
      "commit": "f5d8d5c4bf29c9f7754d9cbe5e27c785106ba872",
      "tree": "edb30eef42b3a26e5e9c33448e85a812971cbc30",
      "parents": [
        "339a5f5dd9d3ac3d68a594d81507e1eab77ed223"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Wed Feb 29 09:53:54 2012 +0000"
      },
      "committer": {
        "name": "Ben Myers",
        "email": "bpm@sgi.com",
        "time": "Tue Mar 13 17:08:17 2012 -0500"
      },
      "message": "xfs: split in-core and on-disk inode log item fields\n\nAdd a new ili_fields member to the inode log item to isolate the in-memory\nflags from the ones that actually go to the log.  This will allow tracking\ntimestamp-only updates for fdatasync and O_DSYNC in the next patch and\nprepares for divorcing the on-disk log format from the in-memory log item\na little further down the road.\n\nReviewed-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Mark Tinguely \u003ctinguely@sgi.com\u003e\nSigned-off-by: Ben Myers \u003cbpm@sgi.com\u003e\n\n"
    },
    {
      "commit": "339a5f5dd9d3ac3d68a594d81507e1eab77ed223",
      "tree": "53419a7d43830e399ca7eaaa15488d68423bbd80",
      "parents": [
        "8a9c9980f24f6d86e0ec0150ed35fba45d0c9f88"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Wed Feb 29 09:53:53 2012 +0000"
      },
      "committer": {
        "name": "Ben Myers",
        "email": "bpm@sgi.com",
        "time": "Tue Mar 13 17:05:08 2012 -0500"
      },
      "message": "xfs: make xfs_inode_item_size idempotent\n\nMove all code messing with the inode log item flags into xfs_inode_item_format\nto make sure xfs_inode_item_size really only calculates the the number of\nvectors, but doesn\u0027t modify any state of the inode item.\n\nReviewed-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Mark Tinguely \u003ctinguely@sgi.com\u003e\nSigned-off-by: Ben Myers \u003cbpm@sgi.com\u003e\n\n"
    },
    {
      "commit": "8a9c9980f24f6d86e0ec0150ed35fba45d0c9f88",
      "tree": "df976343a603bad7e6bdc20db31c64f752312434",
      "parents": [
        "281627df3eb55e1b729b9bb06fff5ff112929646"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Wed Feb 29 09:53:52 2012 +0000"
      },
      "committer": {
        "name": "Ben Myers",
        "email": "bpm@sgi.com",
        "time": "Tue Mar 13 17:01:15 2012 -0500"
      },
      "message": "xfs: log timestamp updates\n\nTimestamps on regular files are the last metadata that XFS does not update\ntransactionally.  Now that we use the delaylog mode exclusively and made\nthe log scode scale extremly well there is no need to bypass that code for\ntimestamp updates.  Logging all updates allows to drop a lot of code, and\nwill allow for further performance improvements later on.\n\nNote that this patch drops optimized handling of fdatasync - it will be\nadded back in a separate commit.\n\nReviewed-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Mark Tinguely \u003ctinguely@sgi.com\u003e\nSigned-off-by: Ben Myers \u003cbpm@sgi.com\u003e\n\n"
    },
    {
      "commit": "281627df3eb55e1b729b9bb06fff5ff112929646",
      "tree": "ffb2d00056f661073f62fa42693970a4485b87b9",
      "parents": [
        "84803fb78237014cbbc86c0f012b273a199f4691"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Tue Mar 13 08:41:05 2012 +0000"
      },
      "committer": {
        "name": "Ben Myers",
        "email": "bpm@sgi.com",
        "time": "Tue Mar 13 16:30:49 2012 -0500"
      },
      "message": "xfs: log file size updates at I/O completion time\n\nDo not use unlogged metadata updates and the VFS dirty bit for updating\nthe file size after writeback.  In addition to causing various problems\nwith updates getting delayed for far too long this also drags in the\nunscalable VFS dirty tracking, and is one of the few remaining unlogged\nmetadata updates.\n\nReviewed-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Mark Tinguely \u003ctinguely@sgi.com\u003e\nSigned-off-by: Ben Myers \u003cbpm@sgi.com\u003e\n\n"
    },
    {
      "commit": "84803fb78237014cbbc86c0f012b273a199f4691",
      "tree": "5910f6bae119115d006f65dca3d8e698ed83fb42",
      "parents": [
        "6923e686f19cb7017fc9777a10e06c2e2b2a2936"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Wed Feb 29 09:53:50 2012 +0000"
      },
      "committer": {
        "name": "Ben Myers",
        "email": "bpm@sgi.com",
        "time": "Mon Mar 05 11:53:16 2012 -0600"
      },
      "message": "xfs: log file size updates as part of unwritten extent conversion\n\nIf we convert and unwritten extent past the current i_size log the size update\nas part of the extent manipulation transactions instead of doing an unlogged\nmetadata update later.\n\nReviewed-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Mark Tinguely \u003ctinguely@sgi.com\u003e\nSigned-off-by: Ben Myers \u003cbpm@sgi.com\u003e\n\n"
    },
    {
      "commit": "6923e686f19cb7017fc9777a10e06c2e2b2a2936",
      "tree": "14398306804485fd7c0f04538d76f042f5cec6d9",
      "parents": [
        "aa6bf01d391935a8929333bc2e243084ea0c58db"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Wed Feb 29 09:53:49 2012 +0000"
      },
      "committer": {
        "name": "Ben Myers",
        "email": "bpm@sgi.com",
        "time": "Mon Mar 05 11:19:26 2012 -0600"
      },
      "message": "xfs: do not require an ioend for new EOF calculation\n\nReplace xfs_ioend_new_eof with a new inline xfs_new_eof helper that\ndoesn\u0027t require and ioend, and is available also outside of xfs_aops.c.\n\nAlso make the code a bit more clear by using a normal if statement\ninstead of a slightly misleading MIN().\n\nReviewed-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Mark Tinguely \u003ctinguely@sgi.com\u003e\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Ben Myers \u003cbpm@sgi.com\u003e\n\n"
    },
    {
      "commit": "aa6bf01d391935a8929333bc2e243084ea0c58db",
      "tree": "686c204328f00ae91466267a9f1e85c3c8d767cb",
      "parents": [
        "4b217ed9e30f94b6e8e5e262020ef0ceab6113af"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Wed Feb 29 09:53:48 2012 +0000"
      },
      "committer": {
        "name": "Ben Myers",
        "email": "bpm@sgi.com",
        "time": "Mon Mar 05 11:07:42 2012 -0600"
      },
      "message": "xfs: use per-filesystem I/O completion workqueues\n\nThe new concurrency managed workqueues are cheap enough that we can create\nper-filesystem instead of global workqueues.  This allows us to remove the\ntrylock or defer scheme on the ilock, which is not helpful once we have\noutstanding log reservations until finishing a size update.\n\nAlso allow the default concurrency on this workqueues so that I/O completions\nblocking on the ilock for one inode do not block process for another inode.\n\nReviewed-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Mark Tinguely \u003ctinguely@sgi.com\u003e\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Ben Myers \u003cbpm@sgi.com\u003e\n\n"
    },
    {
      "commit": "89605011915aec5c6194e53a9f02631d68aea6bc",
      "tree": "9c8745156d1fbefcf28cf0cf5114ed4c4ef63f4c",
      "parents": [
        "18535a7e019e6fb9cdcefd43007bc72a67bf99ee"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Mon Feb 20 02:28:17 2012 +0000"
      },
      "committer": {
        "name": "Ben Myers",
        "email": "bpm@sgi.com",
        "time": "Wed Feb 29 14:09:06 2012 -0600"
      },
      "message": "xfs: include reservations in quota reporting\n\nReport all quota usage including the currently pending reservations.  This\navoids the need to flush delalloc space before gathering quota information,\nand matches quota enforcement, which already takes the reservations into\naccount.\n\nThis fixes xfstests 270.\n\nReviewed-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Ben Myers \u003cbpm@sgi.com\u003e\n\n"
    },
    {
      "commit": "18535a7e019e6fb9cdcefd43007bc72a67bf99ee",
      "tree": "4ba178dbe89f1af932f1b447981490216448d08f",
      "parents": [
        "ad637a10f444fc66b1f6d4a28fe30d4c61ed0161"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Mon Feb 20 02:28:16 2012 +0000"
      },
      "committer": {
        "name": "Ben Myers",
        "email": "bpm@sgi.com",
        "time": "Wed Feb 29 11:57:36 2012 -0600"
      },
      "message": "xfs: merge xfs_qm_export_dquot into xfs_qm_scall_getquota\n\nThe is no good reason to have these two separate, and for the next change\nwe would need the full struct xfs_dquot in xfs_qm_export_dquot, so better\njust fold the code now instead of changing it spuriously.\n\nReviewed-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Ben Myers \u003cbpm@sgi.com\u003e\n\n"
    },
    {
      "commit": "ad637a10f444fc66b1f6d4a28fe30d4c61ed0161",
      "tree": "c4512d9553696d9d5e36e40a909c3f7dabdcb1fb",
      "parents": [
        "9006fb91cfdf22812923f0536c7531c429c1aeab"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu Feb 16 22:01:00 2012 +0000"
      },
      "committer": {
        "name": "Ben Myers",
        "email": "bpm@sgi.com",
        "time": "Sat Feb 25 13:55:49 2012 -0600"
      },
      "message": "xfs: only take the ILOCK in xfs_reclaim_inode()\n\nAt the end of xfs_reclaim_inode(), the inode is locked in order to\nwe wait for a possible concurrent lookup to complete before the\ninode is freed.  This synchronization step was taking both the ILOCK\nand the IOLOCK, but the latter was causing lockdep to produce\nreports of the possibility of deadlock.\n\nIt turns out that there\u0027s no need to acquire the IOLOCK at this\npoint anyway.  It may have been required in some earlier version of\nthe code, but there should be no need to take the IOLOCK in\nxfs_iget(), so there\u0027s no (longer) any need to get it here for\nsynchronization.  Add an assertion in xfs_iget() as a reminder\nof this assumption.\n\nDave Chinner diagnosed this on IRC, and Christoph Hellwig suggested\nno longer including the IOLOCK.  I just put together the patch.\n\nSigned-off-by: Alex Elder \u003celder@dreamhost.com\u003e\nReviewed-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Ben Myers \u003cbpm@sgi.com\u003e\n\n"
    },
    {
      "commit": "9006fb91cfdf22812923f0536c7531c429c1aeab",
      "tree": "36b37fe3df405a57e8ede3d2a40ea6c307f40ae9",
      "parents": [
        "42ceedb3caffe67c4ec0dfbb78ce410832d429b9"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Mon Feb 20 02:31:31 2012 +0000"
      },
      "committer": {
        "name": "Ben Myers",
        "email": "bpm@sgi.com",
        "time": "Wed Feb 22 22:37:04 2012 -0600"
      },
      "message": "xfs: split and cleanup xfs_log_reserve\n\nSplit the log regrant case out of xfs_log_reserve into a separate function,\nand merge xlog_grant_log_space and xlog_regrant_write_log_space into their\nrespective callers.  Also replace the XFS_LOG_PERM_RESERV flag, which easily\ngot misused before the previous cleanups with a simple boolean parameter.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Mark Tinguely \u003ctinguely@sgi.com\u003e\nReviewed-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nSigned-off-by: Ben Myers \u003cbpm@sgi.com\u003e\n\n"
    },
    {
      "commit": "42ceedb3caffe67c4ec0dfbb78ce410832d429b9",
      "tree": "ce067cc4db352f49391215b6904c7c8ebfbdbc8d",
      "parents": [
        "e179840d74606ab1935c83fe5ad9d93c95ddc956"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Mon Feb 20 02:31:30 2012 +0000"
      },
      "committer": {
        "name": "Ben Myers",
        "email": "bpm@sgi.com",
        "time": "Wed Feb 22 22:34:03 2012 -0600"
      },
      "message": "xfs: share code for grant head availability checks\n\nReviewed-by: Mark Tinguely \u003ctinguely@sgi.com\u003e\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nSigned-off-by: Ben Myers \u003cbpm@sgi.com\u003e\n\n"
    }
  ],
  "next": "e179840d74606ab1935c83fe5ad9d93c95ddc956"
}
