)]}'
{
  "log": [
    {
      "commit": "1d59d61f606547f0712aa6971f91f71154071c99",
      "tree": "cb2fd4b9ce3e3ee9440d566d43ea350221edfc8e",
      "parents": [
        "2d117403b30cd7301af60d7d54b279a9f566d10d"
      ],
      "author": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Thu May 31 12:22:33 2012 -0400"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu May 31 11:41:36 2012 -0700"
      },
      "message": "NFS: Ensure that setattr and getattr wait for O_DIRECT write completion\n\nUse the same mechanism as the block devices are using, but move the\nhelper functions from fs/direct-io.c into fs/inode.c to remove the\ndependency on CONFIG_BLOCK.\n\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nCc: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nCc: Fred Isaman \u003ciisaman@netapp.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "37fbf4bfb826372c3ca6c09d8a015d1fe9f5e186",
      "tree": "16916e8992768f4bf91152a16cd7b66c0d282314",
      "parents": [
        "bb4c7e9a9908548b458f34afb2fee74dc0d49f90"
      ],
      "author": {
        "name": "Anton Altaparmakov",
        "email": "aia21@cam.ac.uk",
        "time": "Thu Feb 23 23:40:05 2012 +0000"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Feb 23 15:56:21 2012 -0800"
      },
      "message": "Restore direct_io / truncate locking API\n\nWith kernel 3.1, Christoph removed i_alloc_sem and replaced it with\ncalls (namely inode_dio_wait() and inode_dio_done()) which are\nEXPORT_SYMBOL_GPL() thus they cannot be used by non-GPL file systems and\nfurther inode_dio_wait() was pushed from notify_change() into the file\nsystem -\u003esetattr() method but no non-GPL file system can make this call.\n\nThat means non-GPL file systems cannot exist any more unless they do not\nuse any VFS functionality related to reading/writing as far as I can\ntell or at least as long as they want to implement direct i/o.\n\nBoth Linus and Al (and others) have said on LKML that this breakage of\nthe VFS API should not have happened and that the change was simply\nmissed as it was not documented in the change logs of the patches that\ndid those changes.\n\nThis patch changes the two function exports in question to be\nEXPORT_SYMBOL() thus restoring the VFS API as it used to be - accessible\nfor all modules.\n\nChristoph, who introduced the two functions and exported them GPL-only\nis CC-ed on this patch to give him the opportunity to object to the\nsymbols being changed in this manner if he did indeed intend them to be\nGPL-only and does not want them to become available to all modules.\n\nSigned-off-by: Anton Altaparmakov \u003canton@tuxera.com\u003e\nCC: Christoph Hellwig \u003chch@infradead.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "65dd2aa90aa17a26703c28652408192856aa0396",
      "tree": "4ea4635f786fc295d16a459925da67701253df97",
      "parents": [
        "87192a2a49c475cf322cb143e0fa63b0102d8567"
      ],
      "author": {
        "name": "Andi Kleen",
        "email": "ak@linux.intel.com",
        "time": "Thu Jan 12 17:20:35 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:12 2012 -0800"
      },
      "message": "dio: optimize cache misses in the submission path\n\nSome investigation of a transaction processing workload showed that a\nmajor consumer of cycles in __blockdev_direct_IO is the cache miss while\naccessing the block size.  This is because it has to walk the chain from\nblock_dev to gendisk to queue.\n\nThe block size is needed early on to check alignment and sizes.  It\u0027s only\ndone if the check for the inode block size fails.  But the costly block\ndevice state is unconditionally fetched.\n\n- Reorganize the code to only fetch block dev state when actually\n  needed.\n\nThen do a prefetch on the block dev early on in the direct IO path.  This\nis worth it, because there is substantial code run before we actually\ntouch the block dev now.\n\n- I also added some unlikelies to make it clear the compiler that block\n  device fetch code is not normally executed.\n\nThis gave a small, but measurable improvement on a large database\nbenchmark (about 0.3%)\n\n[akpm@linux-foundation.org: coding-style fixes]\n[sfr@canb.auug.org.au: using prefetch requires including prefetch.h]\nSigned-off-by: Andi Kleen \u003cak@linux.intel.com\u003e\nCc: Jeff Moyer \u003cjmoyer@redhat.com\u003e\nCc: Jens Axboe \u003caxboe@kernel.dk\u003e\nCc: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Stephen Rothwell \u003csfr@canb.auug.org.au\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "ae55e1aaa7e2e57e538cb98cf617f511c5dc4f73",
      "tree": "3f3981dd7617c656e7a6ba2f3a83a14637c63221",
      "parents": [
        "45dac90f0ca7d9efeda8f3d416c808c71207bf20"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "boyu.mt@taobao.com",
        "time": "Thu Jan 12 17:20:33 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:12 2012 -0800"
      },
      "message": "fs/direct-io.c: calculate fs_count correctly in get_more_blocks()\n\nIn get_more_blocks(), we use dio_count to calcuate fs_count and do some\ntricky things to increase fs_count if dio_count isn\u0027t aligned.  But\nactually it still has some corner cases that can\u0027t be coverd.  See the\nfollowing example:\n\n\tdio_write foo -s 1024 -w 4096\n\n(direct write 4096 bytes at offset 1024).  The same goes if the offset\nisn\u0027t aligned to fs_blocksize.\n\nIn this case, the old calculation counts fs_count to be 1, but actually we\nwill write into 2 different blocks (if fs_blocksize\u003d4096).  The old code\njust works, since it will call get_block twice (and may have to allocate\nand create extents twice for filesystems like ext4).  So we\u0027d better call\nget_block just once with the proper fs_count.\n\nSigned-off-by: Tao Ma \u003cboyu.mt@taobao.com\u003e\nCc: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\nCc: Christoph Hellwig \u003chch@lst.de\u003e\nCc: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "847cc6371ba820763773e993000410d6d8d23515",
      "tree": "ffc36e702c82fc3d9c371a72e9b0663e5ec16f80",
      "parents": [
        "ba253fbf6d3502c54e1ac8792e7ac8290a1f5b8d"
      ],
      "author": {
        "name": "Andi Kleen",
        "email": "ak@linux.intel.com",
        "time": "Mon Aug 01 21:38:09 2011 -0700"
      },
      "committer": {
        "name": "root",
        "email": "root@serles.lst.de",
        "time": "Fri Oct 28 14:58:58 2011 +0200"
      },
      "message": "direct-io: merge direct_io_walker into __blockdev_direct_IO\n\nThis doesn\u0027t change anything for the compiler, but hch thought it would\nmake the code clearer.\n\nI moved the reference counting into its own little inline.\n\nSigned-off-by: Andi Kleen \u003cak@linux.intel.com\u003e\nAcked-by: Jeff Moyer \u003cjmoyer@redhat.com\u003e\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "ba253fbf6d3502c54e1ac8792e7ac8290a1f5b8d",
      "tree": "08bfd191e714b53ed44ec185f890cc5113e6dafd",
      "parents": [
        "18772641dbe2c89c6122c603f81f6a9574aee556"
      ],
      "author": {
        "name": "Andi Kleen",
        "email": "ak@linux.intel.com",
        "time": "Mon Aug 01 21:38:08 2011 -0700"
      },
      "committer": {
        "name": "root",
        "email": "root@serles.lst.de",
        "time": "Fri Oct 28 14:58:58 2011 +0200"
      },
      "message": "direct-io: inline the complete submission path\n\nAdd inlines to all the submission path functions. While this increases\ncode size it also gives gcc a lot of optimization opportunities\nin this critical hotpath.\n\nIn particular -- together with some other changes -- this\nallows gcc to get rid of the unnecessary clearing of\nsdio at the beginning and optimize the messy parameter passing.\nAny non inlining of a function which takes a sdio parameter\nwould break this optimization because they cannot be done if the\naddress of a structure is taken.\n\nNote that benefits are only seen with CONFIG_OPTIMIZE_INLINING\nand CONFIG_CC_OPTIMIZE_FOR_SIZE both set to off.\n\nThis gives about 2.2% improvement on a large database benchmark\nwith a high IOPS rate.\n\nSigned-off-by: Andi Kleen \u003cak@linux.intel.com\u003e\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "18772641dbe2c89c6122c603f81f6a9574aee556",
      "tree": "54a8b229f2385615df9f9921f743ac64184a3a6f",
      "parents": [
        "6e8267f532a17165ab551ac5fdafcba5333dcca5"
      ],
      "author": {
        "name": "Andi Kleen",
        "email": "ak@linux.intel.com",
        "time": "Mon Aug 01 21:38:07 2011 -0700"
      },
      "committer": {
        "name": "root",
        "email": "root@serles.lst.de",
        "time": "Fri Oct 28 14:58:57 2011 +0200"
      },
      "message": "direct-io: separate map_bh from dio\n\nOnly a single b_private field in the map_bh buffer head is needed after\nthe submission path. Move map_bh separately to avoid storing\nthis information in the long term slab.\n\nThis avoids the weird 104 byte hole in struct dio_submit which also needed\nto be memseted early.\n\nSigned-off-by: Andi Kleen \u003cak@linux.intel.com\u003e\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "6e8267f532a17165ab551ac5fdafcba5333dcca5",
      "tree": "7181c144b28f37d27275f74a538b01f891e149f7",
      "parents": [
        "0dc2bc49be545626a2dc6da133202ffe69ac3fcc"
      ],
      "author": {
        "name": "Andi Kleen",
        "email": "ak@linux.intel.com",
        "time": "Mon Aug 01 21:38:06 2011 -0700"
      },
      "committer": {
        "name": "root",
        "email": "root@serles.lst.de",
        "time": "Fri Oct 28 14:58:57 2011 +0200"
      },
      "message": "direct-io: use a slab cache for struct dio\n\nA direct slab call is slightly faster than kmalloc and can be better cached\nper CPU. It also avoids rounding to the next kmalloc slab.\n\nIn addition this enforces cache line alignment for struct dio to avoid\nany false sharing.\n\nSigned-off-by: Andi Kleen \u003cak@linux.intel.com\u003e\nAcked-by: Jeff Moyer \u003cjmoyer@redhat.com\u003e\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "0dc2bc49be545626a2dc6da133202ffe69ac3fcc",
      "tree": "25a2505be3e0498fea28c193b20dd613f27162e3",
      "parents": [
        "cde1ecb3247f67c167918ea6326159209996fd54"
      ],
      "author": {
        "name": "Andi Kleen",
        "email": "ak@linux.intel.com",
        "time": "Mon Aug 01 21:38:05 2011 -0700"
      },
      "committer": {
        "name": "root",
        "email": "root@serles.lst.de",
        "time": "Fri Oct 28 14:58:56 2011 +0200"
      },
      "message": "direct-io: rearrange fields in dio/dio_submit to avoid holes\n\nFix most problems reported by pahole.\n\nThere is still a weird 104 byte hole after map_bh. I\u0027m not sure what\ncauses this.\n\nSigned-off-by: Andi Kleen \u003cak@linux.intel.com\u003e\nAcked-by: Jeff Moyer \u003cjmoyer@redhat.com\u003e\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "cde1ecb3247f67c167918ea6326159209996fd54",
      "tree": "6759169c8898d0b63cbe338c682b8f2aeefad444",
      "parents": [
        "eb28be2b4c0a0608e54f0a8fc237372c674eb7d0"
      ],
      "author": {
        "name": "Andi Kleen",
        "email": "ak@linux.intel.com",
        "time": "Mon Aug 01 21:38:04 2011 -0700"
      },
      "committer": {
        "name": "root",
        "email": "root@serles.lst.de",
        "time": "Fri Oct 28 14:58:56 2011 +0200"
      },
      "message": "direct-io: fix a wrong comment\n\nThere\u0027s nothing on the stack, even before my changes.\n\nSigned-off-by: Andi Kleen \u003cak@linux.intel.com\u003e\nAcked-by: Jeff Moyer \u003cjmoyer@redhat.com\u003e\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "eb28be2b4c0a0608e54f0a8fc237372c674eb7d0",
      "tree": "679aaf28fc8ed145aff89b6d4e4bb1c7ddee6318",
      "parents": [
        "62a3ddef6181d7d932c565d97552d2f7b9ab4d28"
      ],
      "author": {
        "name": "Andi Kleen",
        "email": "ak@linux.intel.com",
        "time": "Mon Aug 01 21:38:03 2011 -0700"
      },
      "committer": {
        "name": "root",
        "email": "root@serles.lst.de",
        "time": "Fri Oct 28 14:58:56 2011 +0200"
      },
      "message": "direct-io: separate fields only used in the submission path from struct dio\n\nThis large, but largely mechanic, patch moves all fields in struct dio\nthat are only used in the submission path into a separate on stack\ndata structure. This has the advantage that the memory is very likely\ncache hot, which is not guaranteed for memory fresh out of kmalloc.\n\nThis also gives gcc more optimization potential because it can easier\ndetermine that there are no external aliases for these variables.\n\nThe sdio initialization is a initialization now instead of memset.\nThis allows gcc to break sdio into individual fields and optimize\naway unnecessary zeroing (after all the functions are inlined)\n\nSigned-off-by: Andi Kleen \u003cak@linux.intel.com\u003e\nAcked-by: Jeff Moyer \u003cjmoyer@redhat.com\u003e\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "60063497a95e716c9a689af3be2687d261f115b4",
      "tree": "6ce0d68db76982c53df46aee5f29f944ebf2c320",
      "parents": [
        "148817ba092f9f6edd35bad3c6c6b8e8f90fe2ed"
      ],
      "author": {
        "name": "Arun Sharma",
        "email": "asharma@fb.com",
        "time": "Tue Jul 26 16:09:06 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 26 16:49:47 2011 -0700"
      },
      "message": "atomic: use \u003clinux/atomic.h\u003e\n\nThis allows us to move duplicated code in \u003casm/atomic.h\u003e\n(atomic_inc_not_zero() for now) to \u003clinux/atomic.h\u003e\n\nSigned-off-by: Arun Sharma \u003casharma@fb.com\u003e\nReviewed-by: Eric Dumazet \u003ceric.dumazet@gmail.com\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: David Miller \u003cdavem@davemloft.net\u003e\nCc: Eric Dumazet \u003ceric.dumazet@gmail.com\u003e\nAcked-by: Mike Frysinger \u003cvapier@gentoo.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "72c5052ddc3956d847f21c2b8d55c93664a51b2c",
      "tree": "47b381f3f746cdc1612f432bd902278f8901f84a",
      "parents": [
        "aacfc19c626ebd3daa675652457d71019a1f583f"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Fri Jun 24 14:29:48 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Jul 20 20:47:50 2011 -0400"
      },
      "message": "fs: move inode_dio_done to the end_io handler\n\nFor filesystems that delay their end_io processing we should keep our\ni_dio_count until the the processing is done.  Enable this by moving\nthe inode_dio_done call to the end_io handler if one exist.  Note that\nthe actual move to the workqueue for ext4 and XFS is not done in\nthis patch yet, but left to the filesystem maintainers.  At least\nfor XFS it\u0027s not needed yet either as XFS has an internal equivalent\nto i_dio_count.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "df2d6f26586f12a24f3ae5df4e236dc5c08d6eb4",
      "tree": "68c6ec96177f766d3b9ab0a48408271ef2af4d89",
      "parents": [
        "562c72aa57c36b178eacc3500a0215651eca9429"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Fri Jun 24 14:29:46 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Jul 20 20:47:48 2011 -0400"
      },
      "message": "fs: always maintain i_dio_count\n\nMaintain i_dio_count for all filesystems, not just those using DIO_LOCKING.\nThis these filesystems to also protect truncate against direct I/O requests\nby using common code.  Right now the only non-DIO_LOCKING filesystem that\nappears to do so is XFS, which uses an opencoded variant of the i_dio_count\nscheme.\n\nBehaviour doesn\u0027t change for filesystems never calling inode_dio_wait.\nFor ext4 behaviour changes when using the dioread_nonlock option, which\npreviously was missing any protection between truncate and direct I/O reads.\nFor ocfs2 that handcrafted i_dio_count manipulations are replaced with\nthe common code now enable.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "bd5fe6c5eb9c548d7f07fe8f89a150bb6705e8e3",
      "tree": "ef5341c7747f809aec7ae233f6e3ef90af39be5f",
      "parents": [
        "f9b5570d7fdedff32a2e78102bfb54cd1b12b289"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Fri Jun 24 14:29:43 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Jul 20 20:47:46 2011 -0400"
      },
      "message": "fs: kill i_alloc_sem\n\ni_alloc_sem is a rather special rw_semaphore.  It\u0027s the last one that may\nbe released by a non-owner, and it\u0027s write side is always mirrored by\nreal exclusion.  It\u0027s intended use it to wait for all pending direct I/O\nrequests to finish before starting a truncate.\n\nReplace it with a hand-grown construct:\n\n - exclusion for truncates is already guaranteed by i_mutex, so it can\n   simply fall way\n - the reader side is replaced by an i_dio_count member in struct inode\n   that counts the number of pending direct I/O requests.  Truncate can\u0027t\n   proceed as long as it\u0027s non-zero\n - when i_dio_count reaches non-zero we wake up a pending truncate using\n   wake_up_bit on a new bit in i_flags\n - new references to i_dio_count can\u0027t appear while we are waiting for\n   it to read zero because the direct I/O count always needs i_mutex\n   (or an equivalent like XFS\u0027s i_iolock) for starting a new operation.\n\nThis scheme is much simpler, and saves the space of a spinlock_t and a\nstruct list_head in struct inode (typically 160 bits on a non-debug 64-bit\nsystem).\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "f9b5570d7fdedff32a2e78102bfb54cd1b12b289",
      "tree": "0bbe650c809d96b25d746c400e316c3ad71b4097",
      "parents": [
        "9ea7df534ed2a18157434a496a12cf073ca00c52"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Fri Jun 24 14:29:42 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Jul 20 20:47:45 2011 -0400"
      },
      "message": "fs: simplify handling of zero sized reads in __blockdev_direct_IO\n\nReject zero sized reads as soon as we know our I/O length, and don\u0027t\nborther with locks or allocations that might have to be cleaned up\notherwise.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "6c5103890057b1bb781b26b7aae38d33e4c517d8",
      "tree": "e6e57961dcddcb5841acb34956e70b9dc696a880",
      "parents": [
        "3dab04e6978e358ad2307bca563fabd6c5d2c58b",
        "9d2e157d970a73b3f270b631828e03eb452d525e"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Mar 24 10:16:26 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Mar 24 10:16:26 2011 -0700"
      },
      "message": "Merge branch \u0027for-2.6.39/core\u0027 of git://git.kernel.dk/linux-2.6-block\n\n* \u0027for-2.6.39/core\u0027 of git://git.kernel.dk/linux-2.6-block: (65 commits)\n  Documentation/iostats.txt: bit-size reference etc.\n  cfq-iosched: removing unnecessary think time checking\n  cfq-iosched: Don\u0027t clear queue stats when preempt.\n  blk-throttle: Reset group slice when limits are changed\n  blk-cgroup: Only give unaccounted_time under debug\n  cfq-iosched: Don\u0027t set active queue in preempt\n  block: fix non-atomic access to genhd inflight structures\n  block: attempt to merge with existing requests on plug flush\n  block: NULL dereference on error path in __blkdev_get()\n  cfq-iosched: Don\u0027t update group weights when on service tree\n  fs: assign sb-\u003es_bdi to default_backing_dev_info if the bdi is going away\n  block: Require subsystems to explicitly allocate bio_set integrity mempool\n  jbd2: finish conversion from WRITE_SYNC_PLUG to WRITE_SYNC and explicit plugging\n  jbd: finish conversion from WRITE_SYNC_PLUG to WRITE_SYNC and explicit plugging\n  fs: make fsync_buffers_list() plug\n  mm: make generic_writepages() use plugging\n  blk-cgroup: Add unaccounted time to timeslice_used.\n  block: fixup plugging stubs for !CONFIG_BLOCK\n  block: remove obsolete comments for blkdev_issue_zeroout.\n  blktrace: Use rq-\u003ecmd_flags directly in blk_add_trace_rq.\n  ...\n\nFix up conflicts in fs/{aio.c,super.c}\n"
    },
    {
      "commit": "721a9602e6607417c6bc15b18e97a2f35266c690",
      "tree": "4987991e43f35b8b3b685fea0040c5265b578996",
      "parents": [
        "cf15900e1209d5b46ec2d24643adbf561830935f"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Wed Mar 09 11:56:30 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu Mar 10 08:52:27 2011 +0100"
      },
      "message": "block: kill off REQ_UNPLUG\n\nWith the plugging now being explicitly controlled by the\nsubmitter, callers need not pass down unplugging hints\nto the block layer. If they want to unplug, it\u0027s because they\nmanually plugged on their own - in which case, they should just\nunplug at will.\n\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "7eaceaccab5f40bbfda044629a6298616aeaed50",
      "tree": "33954d12f63e25a47eb6d86ef3d3d0a5e62bf752",
      "parents": [
        "73c101011926c5832e6e141682180c4debe2cf45"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu Mar 10 08:52:07 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu Mar 10 08:52:07 2011 +0100"
      },
      "message": "block: remove per-queue plugging\n\nCode has been converted over to the new explicit on-stack plugging,\nand delay users have been converted to use the new API for that.\nSo lets kill off the old plugging along with aops-\u003esync_page().\n\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "0a9d59a2461477bd9ed143c01af9df3f8f00fa81",
      "tree": "df997d1cfb0786427a0df1fbd6f0640fa4248cf4",
      "parents": [
        "a23ce6da9677d245aa0aadc99f4197030350ab54",
        "795abaf1e4e188c4171e3cd3dbb11a9fcacaf505"
      ],
      "author": {
        "name": "Jiri Kosina",
        "email": "jkosina@suse.cz",
        "time": "Tue Feb 15 10:24:31 2011 +0100"
      },
      "committer": {
        "name": "Jiri Kosina",
        "email": "jkosina@suse.cz",
        "time": "Tue Feb 15 10:24:31 2011 +0100"
      },
      "message": "Merge branch \u0027master\u0027 into for-next\n"
    },
    {
      "commit": "20d9600cb407b0b55fef6ee814b60345c6f58264",
      "tree": "a023082339b33c55e8def552abecd441ffe92fb5",
      "parents": [
        "82478fb7bca28e3ca2f3c55c14e690f749dd4dbb"
      ],
      "author": {
        "name": "David Dillow",
        "email": "dillowda@ornl.gov",
        "time": "Thu Jan 20 14:44:22 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 20 17:02:05 2011 -0800"
      },
      "message": "fs/direct-io.c: don\u0027t try to allocate more than BIO_MAX_PAGES in a bio\n\nWhen using devices that support max_segments \u003e BIO_MAX_PAGES (256), direct\nIO tries to allocate a bio with more pages than allowed, which leads to an\noops in dio_bio_alloc().  Clamp the request to the supported maximum, and\nchange dio_bio_alloc() to reflect that bio_alloc() will always return a\nbio when called with __GFP_WAIT and a valid number of vectors.\n\n[akpm@linux-foundation.org: remove redundant BUG_ON()]\nSigned-off-by: David Dillow \u003cdillowda@ornl.gov\u003e\nReviewed-by: Jeff Moyer \u003cjmoyer@redhat.com\u003e\nCc: \u003cstable@kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "f0940cee222790e6e995a23f25c4ffb23f939a24",
      "tree": "8f460d6ed93878c52f18322569be8717ae0b1546",
      "parents": [
        "5a3a7658863f74f28cef53b9336bff7423659801"
      ],
      "author": {
        "name": "Namhyung Kim",
        "email": "namhyung@gmail.com",
        "time": "Tue Jan 11 21:15:03 2011 +0900"
      },
      "committer": {
        "name": "Jiri Kosina",
        "email": "jkosina@suse.cz",
        "time": "Wed Jan 19 15:40:13 2011 +0100"
      },
      "message": "dio: fix typos in comments\n\nSigned-off-by: Namhyung Kim \u003cnamhyung@gmail.com\u003e\nCc: Jiri Kosina \u003ctrivial@kernel.org\u003e\nSigned-off-by: Jiri Kosina \u003cjkosina@suse.cz\u003e\n"
    },
    {
      "commit": "cd1c584f380183aca268d454c14b22d8454eac4f",
      "tree": "7722f634ecfcaead2b76ea8e483f3c6d2bd184c4",
      "parents": [
        "2473238eac95ba6dd2c4ba19cc36aaf01465076b"
      ],
      "author": {
        "name": "Edward Shishkin",
        "email": "edward.shishkin@gmail.com",
        "time": "Tue Oct 26 14:22:28 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Oct 26 16:52:13 2010 -0700"
      },
      "message": "fs/direct-io.c: fix truncation error in dio_complete() return\n\nFix up truncation (ssize_t-\u003eint).  This only matters with \u003e2G\nreads/writes, which the kernel doesn\u0027t permit.\n\nSigned-off-by: Edward Shishkin \u003cedward@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nAcked-by: Jeff Moyer \u003cjmoyer@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "7a801ac6f5067539ceb5fad0fe90ec49fc156e47",
      "tree": "6c2219eccccb3e71f8930993b7460290e787cd12",
      "parents": [
        "4e70598c3b56e6fec551454c495d4d4025834749"
      ],
      "author": {
        "name": "Jeff Moyer",
        "email": "jmoyer@redhat.com",
        "time": "Thu Sep 09 16:37:33 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Sep 09 18:57:22 2010 -0700"
      },
      "message": "O_DIRECT: fix the splitting up of contiguous I/O\n\ncommit c2c6ca4 (direct-io: do not merge logically non-contiguous requests)\nintroduced a bug whereby all O_DIRECT I/Os were submitted a page at a time\nto the block layer.  The problem is that the code expected\ndio-\u003eblock_in_file to correspond to the current page in the dio.  In fact,\nit corresponds to the previous page submitted via submit_page_section.\nThis was purely an oversight, as the dio-\u003ecur_page_fs_offset field was\nintroduced for just this purpose.  This patch simply uses the correct\nvariable when calculating whether there is a mismatch between contiguous\nlogical blocks and contiguous physical blocks (as described in the\ncomments).\n\nI also switched the if conditional following this check to an else if, to\nensure that we never call dio_bio_submit twice for the same dio (in\ntheory, this should not happen, anyway).\n\nI\u0027ve tested this by running blktrace and verifying that a 64KB I/O was\nsubmitted as a single I/O.  I also ran the patched kernel through\nxfstests\u0027 aio tests using xfs, ext4 (with 1k and 4k block sizes) and btrfs\nand verified that there were no regressions as compared to an unpatched\nkernel.\n\nSigned-off-by: Jeff Moyer \u003cjmoyer@redhat.com\u003e\nAcked-by: Josef Bacik \u003cjbacik@redhat.com\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nCc: Chris Mason \u003cchris.mason@oracle.com\u003e\nCc: \u003cstable@kernel.org\u003e\t\t[2.6.35.x]\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "eafdc7d190a944c755a9fe68573c193e6e0217e7",
      "tree": "915c3cc8004706fabf88eae1ab123a3fa0147516",
      "parents": [
        "256249584bda1a9357e2d29987a37f5b2df035f6"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Fri Jun 04 11:29:53 2010 +0200"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Aug 09 16:47:29 2010 -0400"
      },
      "message": "sort out blockdev_direct_IO variants\n\nMove the call to vmtruncate to get rid of accessive blocks to the callers\nin prepearation of the new truncate calling sequence.  This was only done\nfor DIO_LOCKING filesystems, so the __blockdev_direct_IO_newtrunc variant\nwas not needed anyway.  Get rid of blockdev_direct_IO_no_locking and\nits _newtrunc variant while at it as just opencoding the two additional\nparamters is shorted than the name suffix.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "40e2e97316af6e62affab7a392e792494b8d9dde",
      "tree": "981ce3b464467893683d47f52ae5d35fdd32d46a",
      "parents": [
        "696123fca877905696591829c97a2cef11c8d048"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Sun Jul 18 21:17:09 2010 +0000"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "aelder@sgi.com",
        "time": "Mon Jul 26 16:09:02 2010 -0500"
      },
      "message": "direct-io: move aio_complete into -\u003eend_io\n\nFilesystems with unwritten extent support must not complete an AIO request\nuntil the transaction to convert the extent has been commited.  That means\nthe aio_complete calls needs to be moved into the -\u003eend_io callback so\nthat the filesystem can control when to call it exactly.\n\nThis makes a bit of a mess out of dio_complete and the -\u003eend_io callback\nprototype even more complicated.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Jan Kara \u003cjack@suse.cz\u003e\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "7bb46a6734a7e1ad4beaecc11cae7ed3ff81d30f",
      "tree": "e575d9c55e2a6ccc645dcb3ae2564de458b428f2",
      "parents": [
        "7000d3c424e5bb350e502a477fb0e1ed42f8b10e"
      ],
      "author": {
        "name": "npiggin@suse.de",
        "email": "npiggin@suse.de",
        "time": "Thu May 27 01:05:33 2010 +1000"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu May 27 22:15:33 2010 -0400"
      },
      "message": "fs: introduce new truncate sequence\n\nIntroduce a new truncate calling sequence into fs/mm subsystems. Rather than\nsetattr \u003e vmtruncate \u003e truncate, have filesystems call their truncate sequence\nfrom -\u003esetattr if filesystem specific operations are required. vmtruncate is\ndeprecated, and truncate_pagecache and inode_newsize_ok helpers introduced\npreviously should be used.\n\nsimple_setattr is introduced for simple in-ram filesystems to implement\nthe new truncate sequence. Eventually all filesystems should be converted\nto implement a setattr, and the default code in notify_change should go\naway.\n\nsimple_setsize is also introduced to perform just the ATTR_SIZE portion\nof simple_setattr (ie. changing i_size and trimming pagecache).\n\nTo implement the new truncate sequence:\n- filesystem specific manipulations (eg freeing blocks) must be done in\n  the setattr method rather than -\u003etruncate.\n- vmtruncate can not be used by core code to trim blocks past i_size in\n  the event of write failure after allocation, so this must be performed\n  in the fs code.\n- convert usage of helpers block_write_begin, nobh_write_begin,\n  cont_write_begin, and *blockdev_direct_IO* to use _newtrunc postfixed\n  variants. These avoid calling vmtruncate to trim blocks (see previous).\n- inode_setattr should not be used. generic_setattr is a new function\n  to be used to copy simple attributes into the generic inode.\n- make use of the better opportunity to handle errors with the new sequence.\n\nBig problem with the previous calling sequence: the filesystem is not called\nuntil i_size has already changed.  This means it is not allowed to fail the\ncall, and also it does not know what the previous i_size was. Also, generic\ncode calling vmtruncate to truncate allocated blocks in case of error had\nno good way to return a meaningful error (or, for example, atomically handle\nblock deallocation).\n\nCc: Christoph Hellwig \u003chch@lst.de\u003e\nAcked-by: Jan Kara \u003cjack@suse.cz\u003e\nSigned-off-by: Nick Piggin \u003cnpiggin@suse.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "c2c6ca417e2db7a519e6e92c82f4a933d940d076",
      "tree": "4b5f71682270b151e38e9649a40da30564dacfdd",
      "parents": [
        "facd07b07d2a7988f5ce849558838cc953847637"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Sun May 23 11:00:55 2010 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue May 25 10:34:56 2010 -0400"
      },
      "message": "direct-io: do not merge logically non-contiguous requests\n\nBtrfs cannot handle having logically non-contiguous requests submitted.  For\nexample if you have\n\nLogical:  [0-4095][HOLE][8192-12287]\nPhysical: [0-4095]      [4096-8191]\n\nNormally the DIO code would put these into the same BIO\u0027s.  The problem is we\nneed to know exactly what offset is associated with what BIO so we can do our\nchecksumming and unlocking properly, so putting them in the same BIO doesn\u0027t\nwork.  So add another check where we submit the current BIO if the physical\nblocks are not contigous OR the logical blocks are not contiguous.\n\nSigned-off-by: Josef Bacik \u003cjosef@redhat.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "facd07b07d2a7988f5ce849558838cc953847637",
      "tree": "269200329390f450d2bc7f0858a8ed114a418374",
      "parents": [
        "66f998f611897319b555364cefd5d6e88a205866"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Sun May 23 11:00:55 2010 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue May 25 10:34:55 2010 -0400"
      },
      "message": "direct-io: add a hook for the fs to provide its own submit_bio function\n\nBecause BTRFS can do RAID and such, we need our own submit hook so we can setup\nthe bio\u0027s in the correct fashion, and handle checksum errors properly.  So there\nare a few changes here\n\n1) The submit_io hook.  This is straightforward, just call this instead of\nsubmit_bio.\n\n2) Allow the fs to return -ENOTBLK for reads.  Usually this has only worked for\nwrites, since writes can fallback onto buffered IO.  But BTRFS needs the option\nof falling back on buffered IO if it encounters a compressed extent, since we\nneed to read the entire extent in and decompress it.  So if we get -ENOTBLK back\nfrom get_block we\u0027ll return back and fallback on buffered just like the write\ncase.\n\nI\u0027ve tested these changes with fsx and everything seems to work.  Thanks,\n\nSigned-off-by: Josef Bacik \u003cjosef@redhat.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "06777d308f8f9ddb67798d34bf193101a4bdf06c",
      "tree": "defc74a60dc75d8fd2b860a3222de4a2e8ea4006",
      "parents": [
        "718deb6b61e34c200c1f2b706176d9aac334cb2d"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Dec 17 04:52:13 2009 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Dec 17 04:52:13 2009 -0500"
      },
      "message": "dio: fix use-after-free\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "5fe878ae7f82fbf0830dbfaee4c5ca18f3aee442",
      "tree": "7e7ad290cfb30705948d8ebeb46b013afa913f42",
      "parents": [
        "23aee091d804efa8cc732a31c1ae5d625e1ec886"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Tue Dec 15 16:47:50 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Dec 16 07:20:13 2009 -0800"
      },
      "message": "direct-io: cleanup blockdev_direct_IO locking\n\nCurrently the locking in blockdev_direct_IO is a mess, we have three\ndifferent locking types and very confusing checks for some of them.  The\nmost complicated one is DIO_OWN_LOCKING for reads, which happens to not\nactually be used.\n\nThis patch gets rid of the DIO_OWN_LOCKING - as mentioned above the read\ncase is unused anyway, and the write side is almost identical to\nDIO_NO_LOCKING.  The difference is that DIO_NO_LOCKING always sets the\ncreate argument for the get_blocks callback to zero, but we can easily\nmove that to the actual get_blocks callbacks.  There are four users of the\nDIO_NO_LOCKING mode: gfs already ignores the create argument and thus is\nfine with the new version, ocfs2 only errors out if create were ever set,\nand we can remove this dead code now, the block device code only ever uses\ncreate for an error message if we are fully beyond the device which can\nnever happen, and last but not least XFS will need the new behavour for\nwrites.\n\nNow we can replace the lock_type variable with a flags one, where no flag\nmeans the DIO_NO_LOCKING behaviour and DIO_LOCKING is kept as the first\nflag.  Separate out the check for not allowing to fill holes into a\nseparate flag, although for now both flags always get set at the same\ntime.\n\nAlso revamp the documentation of the locking scheme to actually make\nsense.\n\n[akpm@linux-foundation.org: coding-style fixes]\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nCc: Dave Chinner \u003cdavid@fromorbit.com\u003e\nCc: Badari Pulavarty \u003cpbadari@us.ibm.com\u003e\nCc: Jeff Moyer \u003cjmoyer@redhat.com\u003e\nCc: Jens Axboe \u003cjens.axboe@oracle.com\u003e\nCc: Zach Brown \u003czach.brown@oracle.com\u003e\nCc: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nCc: Alex Elder \u003caelder@sgi.com\u003e\nCc: Mark Fasheh \u003cmfasheh@suse.com\u003e\nCc: Joel Becker \u003cjoel.becker@oracle.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "23aee091d804efa8cc732a31c1ae5d625e1ec886",
      "tree": "2ca3456dba4771600ba62822c81f85b61074088a",
      "parents": [
        "fac046ad0b1ee2c4244ebf43a26433ef0ea29ae4"
      ],
      "author": {
        "name": "Jeff Moyer",
        "email": "jmoyer@redhat.com",
        "time": "Tue Dec 15 16:47:49 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Dec 16 07:20:13 2009 -0800"
      },
      "message": "dio: don\u0027t zero out the pages array inside struct dio\n\nIntel reported a performance regression caused by the following commit:\n\ncommit 848c4dd5153c7a0de55470ce99a8e13a63b4703f\nAuthor: Zach Brown \u003czach.brown@oracle.com\u003e\nDate:   Mon Aug 20 17:12:01 2007 -0700\n\n    dio: zero struct dio with kzalloc instead of manually\n\n    This patch uses kzalloc to zero all of struct dio rather than\n    manually trying to track which fields we rely on being zero.  It\n    passed aio+dio stress testing and some bug regression testing on\n    ext3.\n\n    This patch was introduced by Linus in the conversation that lead up\n    to Badari\u0027s minimal fix to manually zero .map_bh.b_state in commit:\n\n      6a648fa72161d1f6468dabd96c5d3c0db04f598a\n\n    It makes the code a bit smaller.  Maybe a couple fewer cachelines to\n    load, if we\u0027re lucky:\n\n       text    data     bss     dec     hex filename\n    3285925  568506 1304616 5159047  4eb887 vmlinux\n    3285797  568506 1304616 5158919  4eb807 vmlinux.patched\n\n    I was unable to measure a stable difference in the number of cpu\n    cycles spent in blockdev_direct_IO() when pushing aio+dio 256K reads\n    at ~340MB/s.\n\n    So the resulting intent of the patch isn\u0027t a performance gain but to\n    avoid exposing ourselves to the risk of finding another field like\n    .map_bh.b_state where we rely on zeroing but don\u0027t enforce it in the\n    code.\n\nZach surmised that zeroing out the page array was what caused most of\nthe problem, and suggested the approach taken in the attached patch for\nresolving the issue.  Intel re-tested with this patch and saw a 0.6%\nperformance gain (the original regression was 0.5%).\n\n[akpm@linux-foundation.org: add comment]\nSigned-off-by: Jeff Moyer \u003cjmoyer@redhat.com\u003e\nAcked-by: Zach Brown \u003czach.brown@oracle.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "d9449ce35a1e8fb58dd2d419f9215562a14ecca0",
      "tree": "322f88901d3e494134354dcd5b7f63fa723145e8",
      "parents": [
        "c16632bab1a17e357cec66920ceb3f0630009360"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Thu Nov 26 09:45:40 2009 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Thu Nov 26 09:46:46 2009 +0100"
      },
      "message": "Fix regression in direct writes performance due to WRITE_ODIRECT flag removal\n\nThere seems to be a regression in direct write path due to following\ncommit in for-2.6.33 branch of block tree.\n\ncommit 1af60fbd759d31f565552fea315c2033947cfbe6\nAuthor: Jeff Moyer \u003cjmoyer@redhat.com\u003e\nDate:   Fri Oct 2 18:56:53 2009 -0400\n\n    block: get rid of the WRITE_ODIRECT flag\n\nMarking direct writes as WRITE_SYNC_PLUG instead of WRITE_ODIRECT, sets\nthe NOIDLE flag in bio and hence in request. This tells CFQ to not expect\nmore request from the queue and not idle on it (despite the fact that\nqueue\u0027s think time is less and it is not seeky).\n\nSo direct writers lose big time when competing with sequential readers.\n\nUsing fio, I have run one direct writer and two sequential readers and\nfollowing are the results with 2.6.32-rc7 kernel and with for-2.6.33\nbranch.\n\nTest\n\u003d\u003d\u003d\u003d\n1 direct writer and 2 sequential reader running simultaneously.\n\n[global]\ndirectory\u003d/mnt/sdc/fio/\nruntime\u003d10\n\n[seqwrite]\nrw\u003dwrite\nsize\u003d4G\ndirect\u003d1\n\n[seqread]\nrw\u003dread\nsize\u003d2G\nnumjobs\u003d2\n\n2.6.32-rc7\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\ndirect writes: aggrb\u003d2,968KB/s\nreaders\t     : aggrb\u003d101MB/s\n\nfor-2.6.33 branch\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\ndirect write: aggrb\u003d19KB/s\nreaders\t      aggrb\u003d137MB/s\n\nThis patch brings back the WRITE_ODIRECT flag, with the difference that we\ndon\u0027t set the BIO_RW_UNPLUG flag so that device is not unplugged after\nsubmission of request and an explicit unplug from submitter is required.\n\nThat way we fix the jeff\u0027s issue of not enough merging taking place in aio\npath as well as make sure direct writes get their fair share.\n\nAfter the fix\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\nfor-2.6.33 + fix\n----------------\ndirect writes: aggrb\u003d2,728KB/s\nreads: aggrb\u003d103MB/s\n\nThanks\nVivek\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "cfb1e33eed48165763edc7a4a067cf5f74898d0b",
      "tree": "d0e0bdd0664615b1f7be6cf770476e16dbcad116",
      "parents": [
        "1af60fbd759d31f565552fea315c2033947cfbe6"
      ],
      "author": {
        "name": "Jeff Moyer",
        "email": "jmoyer@redhat.com",
        "time": "Fri Oct 02 18:57:36 2009 -0400"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Wed Oct 28 09:29:25 2009 +0100"
      },
      "message": "aio: implement request batching\n\nHi,\n\nSome workloads issue batches of small I/O, and the performance is poor\ndue to the call to blk_run_address_space for every single iocb.  Nathan\nRoberts pointed this out, and suggested that by deferring this call\nuntil all I/Os in the iocb array are submitted to the block layer, we\ncan realize some impressive performance gains (up to 30% for sequential\n4k reads in batches of 16).\n\nSigned-off-by: Jeff Moyer \u003cjmoyer@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "1af60fbd759d31f565552fea315c2033947cfbe6",
      "tree": "e973002ee2496a9537526c8aef111f380071a1a0",
      "parents": [
        "1a1238a7dd48e48b3bba8f426a1d61c22c80d6d1"
      ],
      "author": {
        "name": "Jeff Moyer",
        "email": "jmoyer@redhat.com",
        "time": "Fri Oct 02 18:56:53 2009 -0400"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Wed Oct 28 09:29:25 2009 +0100"
      },
      "message": "block: get rid of the WRITE_ODIRECT flag\n\nHi,\n\nThe WRITE_ODIRECT flag is only used in one place, and that code path\nhappens to also call blk_run_address_space.  The introduction of this\nflag, then, could result in the device being unplugged twice for every\nI/O.\n\nFurther, with the batching changes in the next patch, we don\u0027t want an\nO_DIRECT write to imply a queue unplug.\n\nSigned-off-by: Jeff Moyer \u003cjmoyer@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "e1defc4ff0cf57aca6c5e3ff99fa503f5943c1f1",
      "tree": "d60d15a082171c58ac811d547d51a9c3119f23e3",
      "parents": [
        "9bd7de51ee8537094656149eaf45338cadb7d7d4"
      ],
      "author": {
        "name": "Martin K. Petersen",
        "email": "martin.petersen@oracle.com",
        "time": "Fri May 22 17:17:49 2009 -0400"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri May 22 23:22:54 2009 +0200"
      },
      "message": "block: Do away with the notion of hardsect_size\n\nUntil now we have had a 1:1 mapping between storage device physical\nblock size and the logical block sized used when addressing the device.\nWith SATA 4KB drives coming out that will no longer be the case.  The\nsector size will be 4KB but the logical block size will remain\n512-bytes.  Hence we need to distinguish between the physical block size\nand the logical ditto.\n\nThis patch renames hardsect_size to logical_block_size.\n\nSigned-off-by: Martin K. Petersen \u003cmartin.petersen@oracle.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "4d1f9fdb6177a9bdecf26976337dd39abcc8edbc",
      "tree": "55cf4b785995ea84635aa952bfbb6a8be3edacdc",
      "parents": [
        "15afd1cc7b624e1c94fdf824ec5af611050b150c"
      ],
      "author": {
        "name": "Nikanth Karthikesan",
        "email": "knikanth@suse.de",
        "time": "Wed Apr 15 10:35:52 2009 +0530"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Wed Apr 15 12:10:13 2009 +0200"
      },
      "message": "dio: Remove code handling bio_alloc failure with __GFP_WAIT\n\nRemove code handling bio_alloc failure with __GFP_WAIT.\nGFP_KERNEL implies __GFP_WAIT.\n\nSigned-off-by: Nikanth Karthikesan \u003cknikanth@suse.de\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "aeb6fafb8fa53266d70ca7474fcda2bdaf96524a",
      "tree": "ebe8e0c616a9dbfdfe5184b64d0150ea02d3d1b2",
      "parents": [
        "644b2d99b7a8677a56909a7b1fde31677eba4471"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Mon Apr 06 14:48:07 2009 +0200"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Apr 06 08:04:54 2009 -0700"
      },
      "message": "block: Add flag for telling the IO schedulers NOT to anticipate more IO\n\nBy default, CFQ will anticipate more IO from a given io context if the\npreviously completed IO was sync. This used to be fine, since the only\nsync IO was reads and O_DIRECT writes. But with more \"normal\" sync writes\nbeing used now, we don\u0027t want to anticipate for those.\n\nAdd a bio/request flag that informs the IO scheduler that this is a sync\nrequest that we should not idle for. Introduce WRITE_ODIRECT specifically\nfor O_DIRECT writes, and make sure that the other sync writes set this\nflag.\n\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "0f64415d42760379753e6088787ce3fd3e069509",
      "tree": "85c9d3be88e56fb2d62558689744dbdd386cc745",
      "parents": [
        "09f445e7f5107c91be12ed386350de6cd055e0a4"
      ],
      "author": {
        "name": "Dmitri Monakhov",
        "email": "dmonakhov@openvz.org",
        "time": "Tue Jan 06 14:40:04 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jan 06 15:59:06 2009 -0800"
      },
      "message": "fs: truncate blocks outside i_size after O_DIRECT write error\n\nIn case of error extending write may have instantiated a few blocks\noutside i_size.  We need to trim these blocks.  We have to do it\n*regardless* to blocksize.  At least ext2, ext3 and reiserfs interpret\n(i_size \u003c biggest block) condition as error.  Fsck will complain about\nwrong i_size.  Then fsck will fix the error by changing i_size according\nto the biggest block.  This is bad because this blocks contain garbage\nfrom previous write attempt.  And result in data corruption.\n\n####TESTCASE_BEGIN\n$touch /mnt/test/BIG_FILE\n## at this moment /mnt/test/BIG_FILE size and blocks equal to zero\nopen(\"/mnt/test/BIG_FILE\", O_WRONLY|O_CREAT|O_DIRECT, 0666) \u003d 3\nwrite(3, \"aaaaaaaaaaaa\"..., 104857600) \u003d -1 ENOSPC (No space left on device)\n## size and block sould\u0027t be changed because write op failed.\n$stat /mnt/test/BIG_FILE\nFile: `/mnt/test/BIG_FILE\u0027\nSize: 0 Blocks: 110896 IO Block: 1024 regular empty file\n\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c^^^^^^^^^^^^^^^^^^^^^^^^^^^^^file size is less than biggest block idx\nDevice: fe07h/65031d Inode: 14 Links: 1\nAccess: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)\nAccess: 2007-01-24 20:03:38.000000000 +0300\nModify: 2007-01-24 20:03:38.000000000 +0300\nChange: 2007-01-24 20:03:39.000000000 +0300\n\n#fsck.ext3 -f /dev/VG/test\ne2fsck 1.39 (29-May-2006)\nPass 1: Checking inodes, blocks, and sizes\nInode 14, i_size is 0, should be 56556544. Fix\u003cy\u003e? yes\nPass 2: Checking directory structure\n....\n#####TESTCASE_ENDdiff --git a/fs/direct-io.c b/fs/direct-io.c\nindex af0558d..4e88bea 100644\n\n[akpm@linux-foundation.org: use i_size_read()]\nSigned-off-by: Dmitri Monakhov \u003cdmonakhov@openvz.org\u003e\nCc: Zach Brown \u003czach.brown@oracle.com\u003e\nCc: Nick Piggin \u003cnpiggin@suse.de\u003e\nCc: Badari Pulavarty \u003cpbadari@us.ibm.com\u003e\nCc: Chris Mason \u003cchris.mason@oracle.com\u003e\nCc: Dave Chinner \u003cdavid@fromorbit.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "e1f8e87449147ffe5ea3de64a46af7de450ce279",
      "tree": "304e90a6747f5a7586a67305b7225ed4b4dbb53a",
      "parents": [
        "8033fe65a6d6c0e47ba9e3cb2e4e6902f9dfb8dd"
      ],
      "author": {
        "name": "Francois Cami",
        "email": "francois.cami@free.fr",
        "time": "Wed Oct 15 22:01:59 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Oct 16 11:21:32 2008 -0700"
      },
      "message": "Remove Andrew Morton\u0027s old email accounts\n\nPeople can use the real name an an index into MAINTAINERS to find the\ncurrent email address.\n\nSigned-off-by: Francois Cami \u003cfrancois.cami@free.fr\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "f5dd33c494a427b1d1a3b574de5c9e511c888864",
      "tree": "fc6f61ffe488fe044f9e167b31b1c4ecd5f3f54c",
      "parents": [
        "8174c430e445a93016ef18f717fe570214fa38bf"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@suse.de",
        "time": "Fri Jul 25 19:45:25 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Jul 26 12:00:06 2008 -0700"
      },
      "message": "dio: use get_user_pages_fast\n\nUse get_user_pages_fast in the common/generic block and fs direct IO paths.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@suse.de\u003e\nCc: Dave Kleikamp \u003cshaggy@austin.ibm.com\u003e\nCc: Andy Whitcroft \u003capw@shadowen.org\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nCc: Andi Kleen \u003candi@firstfloor.org\u003e\nCc: Dave Kleikamp \u003cshaggy@austin.ibm.com\u003e\nCc: Badari Pulavarty \u003cpbadari@us.ibm.com\u003e\nCc: Zach Brown \u003czach.brown@oracle.com\u003e\nCc: Jens Axboe \u003cjens.axboe@oracle.com\u003e\nReviewed-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "eebd2aa355692afaf9906f62118620f1a1c19dbb",
      "tree": "207eead3a736963c3e50942038c463f2f611ccce",
      "parents": [
        "b98348bdd08dc4ec11828aa98a78edde15c53cfa"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "clameter@sgi.com",
        "time": "Mon Feb 04 22:28:29 2008 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue Feb 05 09:44:13 2008 -0800"
      },
      "message": "Pagecache zeroing: zero_user_segment, zero_user_segments and zero_user\n\nSimplify page cache zeroing of segments of pages through 3 functions\n\nzero_user_segments(page, start1, end1, start2, end2)\n\n        Zeros two segments of the page. It takes the position where to\n        start and end the zeroing which avoids length calculations and\n\tmakes code clearer.\n\nzero_user_segment(page, start, end)\n\n        Same for a single segment.\n\nzero_user(page, start, length)\n\n        Length variant for the case where we know the length.\n\nWe remove the zero_user_page macro. Issues:\n\n1. Its a macro. Inline functions are preferable.\n\n2. The KM_USER0 macro is only defined for HIGHMEM.\n\n   Having to treat this special case everywhere makes the\n   code needlessly complex. The parameter for zeroing is always\n   KM_USER0 except in one single case that we open code.\n\nAvoiding KM_USER0 makes a lot of code not having to be dealing\nwith the special casing for HIGHMEM anymore. Dealing with\nkmap is only necessary for HIGHMEM configurations. In those\nconfigurations we use KM_USER0 like we do for a series of other\nfunctions defined in highmem.h.\n\nSince KM_USER0 is depends on HIGHMEM the existing zero_user_page\nfunction could not be a macro. zero_user_* functions introduced\nhere can be be inline because that constant is not used when these\nfunctions are called.\n\nAlso extract the flushing of the caches to be outside of the kmap.\n\n[akpm@linux-foundation.org: fix nfs and ntfs build]\n[akpm@linux-foundation.org: fix ntfs build some more]\nSigned-off-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nCc: Steven French \u003csfrench@us.ibm.com\u003e\nCc: Michael Halcrow \u003cmhalcrow@us.ibm.com\u003e\nCc: \u003clinux-ext4@vger.kernel.org\u003e\nCc: Steven Whitehouse \u003cswhiteho@redhat.com\u003e\nCc: Trond Myklebust \u003ctrond.myklebust@fys.uio.no\u003e\nCc: \"J. Bruce Fields\" \u003cbfields@fieldses.org\u003e\nCc: Anton Altaparmakov \u003caia21@cantab.net\u003e\nCc: Mark Fasheh \u003cmark.fasheh@oracle.com\u003e\nCc: David Chinner \u003cdgc@sgi.com\u003e\nCc: Michael Halcrow \u003cmhalcrow@us.ibm.com\u003e\nCc: Steven French \u003csfrench@us.ibm.com\u003e\nCc: Steven Whitehouse \u003cswhiteho@redhat.com\u003e\nCc: Trond Myklebust \u003ctrond.myklebust@fys.uio.no\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "557ed1fa2620dc119adb86b34c614e152a629a80",
      "tree": "d00b31a7f197583c2bd8fffa1fd135fbbb5d6abc",
      "parents": [
        "aadb4bc4a1f9108c1d0fbd121827c936c2ed4217"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@suse.de",
        "time": "Tue Oct 16 01:24:40 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue Oct 16 09:42:53 2007 -0700"
      },
      "message": "remove ZERO_PAGE\n\nThe commit b5810039a54e5babf428e9a1e89fc1940fabff11 contains the note\n\n  A last caveat: the ZERO_PAGE is now refcounted and managed with rmap\n  (and thus mapcounted and count towards shared rss).  These writes to\n  the struct page could cause excessive cacheline bouncing on big\n  systems.  There are a number of ways this could be addressed if it is\n  an issue.\n\nAnd indeed this cacheline bouncing has shown up on large SGI systems.\nThere was a situation where an Altix system was essentially livelocked\ntearing down ZERO_PAGE pagetables when an HPC app aborted during startup.\nThis situation can be avoided in userspace, but it does highlight the\npotential scalability problem with refcounting ZERO_PAGE, and corner\ncases where it can really hurt (we don\u0027t want the system to livelock!).\n\nThere are several broad ways to fix this problem:\n1. add back some special casing to avoid refcounting ZERO_PAGE\n2. per-node or per-cpu ZERO_PAGES\n3. remove the ZERO_PAGE completely\n\nI will argue for 3. The others should also fix the problem, but they\nresult in more complex code than does 3, with little or no real benefit\nthat I can see.\n\nWhy? Inserting a ZERO_PAGE for anonymous read faults appears to be a\nfalse optimisation: if an application is performance critical, it would\nnot be doing many read faults of new memory, or at least it could be\nexpected to write to that memory soon afterwards. If cache or memory use\nis critical, it should not be working with a significant number of\nZERO_PAGEs anyway (a more compact representation of zeroes should be\nused).\n\nAs a sanity check -- mesuring on my desktop system, there are never many\nmappings to the ZERO_PAGE (eg. 2 or 3), thus memory usage here should not\nincrease much without it.\n\nWhen running a make -j4 kernel compile on my dual core system, there are\nabout 1,000 mappings to the ZERO_PAGE created per second, but about 1,000\nZERO_PAGE COW faults per second (less than 1 ZERO_PAGE mapping per second\nis torn down without being COWed). So removing ZERO_PAGE will save 1,000\npage faults per second when running kbuild, while keeping it only saves\nless than 1 page clearing operation per second. 1 page clear is cheaper\nthan a thousand faults, presumably, so there isn\u0027t an obvious loss.\n\nNeither the logical argument nor these basic tests give a guarantee of no\nregressions. However, this is a reasonable opportunity to try to remove\nthe ZERO_PAGE from the pagefault path. If it is found to cause regressions,\nwe can reintroduce it and just avoid refcounting it.\n\nThe /dev/zero ZERO_PAGE usage and TLB tricks also get nuked.  I don\u0027t see\nmuch use to them except on benchmarks.  All other users of ZERO_PAGE are\nconverted just to use ZERO_PAGE(0) for simplicity. We can look at\nreplacing them all and maybe ripping out ZERO_PAGE completely when we are\nmore satisfied with this solution.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@suse.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus \"snif\" Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "6712ecf8f648118c3363c142196418f89a510b90",
      "tree": "347d39a7d5a7ed96d3b1afecd28de2a0f98b98c9",
      "parents": [
        "5bb23a688b2de23d7765a1dd439d89c038378978"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Sep 27 12:47:43 2007 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@carl.home.kernel.dk",
        "time": "Wed Oct 10 09:25:57 2007 +0200"
      },
      "message": "Drop \u0027size\u0027 argument from bio_endio and bi_end_io\n\nAs bi_end_io is only called once when the reqeust is complete,\nthe \u0027size\u0027 argument is now redundant.  Remove it.\n\nNow there is no need for bio_endio to subtract the size completed\nfrom bi_size.  So don\u0027t do that either.\n\nWhile we are at it, change bi_end_io to return void.\n\nSigned-off-by: Neil Brown \u003cneilb@suse.de\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "848c4dd5153c7a0de55470ce99a8e13a63b4703f",
      "tree": "4defb21d98037a96a3a90e83eaf85a10b46f0571",
      "parents": [
        "38f061c5714265fa8481cc0b7795aa8fe81b45be"
      ],
      "author": {
        "name": "Zach Brown",
        "email": "zach.brown@oracle.com",
        "time": "Mon Aug 20 17:12:01 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Mon Aug 20 22:50:25 2007 -0700"
      },
      "message": "dio: zero struct dio with kzalloc instead of manually\n\nThis patch uses kzalloc to zero all of struct dio rather than manually\ntrying to track which fields we rely on being zero.  It passed aio+dio\nstress testing and some bug regression testing on ext3.\n\nThis patch was introduced by Linus in the conversation that lead up to\nBadari\u0027s minimal fix to manually zero .map_bh.b_state in commit:\n\n  6a648fa72161d1f6468dabd96c5d3c0db04f598a\n\nIt makes the code a bit smaller.  Maybe a couple fewer cachelines to\nload, if we\u0027re lucky:\n\n   text    data     bss     dec     hex filename\n3285925  568506 1304616 5159047  4eb887 vmlinux\n3285797  568506 1304616 5158919  4eb807 vmlinux.patched\n\nI was unable to measure a stable difference in the number of cpu cycles\nspent in blockdev_direct_IO() when pushing aio+dio 256K reads at\n~340MB/s.\n\nSo the resulting intent of the patch isn\u0027t a performance gain but to\navoid exposing ourselves to the risk of finding another field like\n.map_bh.b_state where we rely on zeroing but don\u0027t enforce it in the\ncode.\n\nSigned-off-by: Zach Brown \u003czach.brown@oracle.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "6a648fa72161d1f6468dabd96c5d3c0db04f598a",
      "tree": "b39d233a05c5373240c31b38ac23802438a7486b",
      "parents": [
        "b291aa7a6564e859af144e1bd14ffa463519b198"
      ],
      "author": {
        "name": "Badari Pulavarty",
        "email": "pbadari@us.ibm.com",
        "time": "Fri Aug 10 13:00:44 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Sat Aug 11 15:47:40 2007 -0700"
      },
      "message": "direct-io: fix error-path crashes\n\nNeed to initialize map_bh.b_state to zero.  Otherwise, in case of a faulty\nuser-buffer its possible to go into dio_zero_block() and submit a page by\nmistake - since it checks for buffer_new().\n\nhttp://marc.info/?l\u003dlinux-kernel\u0026m\u003d118551339032528\u0026w\u003d2\n\nakpm: Linus had a (better) patch to just do a kzalloc() in there, but it got\nlost.  Probably this version is better for -stable anwyay.\n\nSigned-off-by: Badari Pulavarty \u003cpbadari@us.ibm.com\u003e\nAcked-by: Joe Jin \u003cjoe.jin@oracle.com\u003e\nAcked-by: Zach Brown \u003czach.brown@oracle.com\u003e\nCc: gurudas pai \u003cgurudas.pai@oracle.com\u003e\nCc: \u003cstable@kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "fcb82f8835c1d71b4fe5de1d9894f45370f80dab",
      "tree": "cdb5f78ff1d41d511b01a04f3f20f7ea248adb20",
      "parents": [
        "5dcccd8d7eae870d85c3f175fd0823d3da07d0e3"
      ],
      "author": {
        "name": "Zach Brown",
        "email": "zach.brown@oracle.com",
        "time": "Tue Jul 03 15:28:55 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue Jul 03 18:23:23 2007 -0700"
      },
      "message": "dio: remove bogus refcounting BUG_ON\n\nBadari Pulavarty reported a case of this BUG_ON is triggering during\ntesting.  It\u0027s completely bogus and should be removed.\n\nIt\u0027s trying to notice if we left references to the dio hanging around in\nthe sync case.  They should have been dropped as IO completed while this\npath was in dio_await_completion().  This condition will also be\nchecked, via some twisty logic, by the BUG_ON(ret !\u003d -EIOCBQUEUED) a few\nlines lower.  So to start this BUG_ON() is redundant.\n\nMore fatally, it\u0027s dereferencing dio-\u003e after having dropped its\nreference.  It\u0027s only safe to dereference the dio after releasing the\nlock if the final reference was just dropped.  Another CPU might free\nthe dio in bio completion and reuse the memory after this path drops the\ndio lock but before the BUG_ON() is evaluated.\n\nThis patch passed aio+dio regression unit tests and aio-stress on ext3.\n\nSigned-off-by: Zach Brown \u003czach.brown@oracle.com\u003e\nCc: Badari Pulavarty \u003cpbadari@us.ibm.com\u003e\nCc: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "9a9136e270af14da506f66bcafcc506b86a86498",
      "tree": "b4d0a6877d92635134b7a944d0032fbc43227fd2",
      "parents": [
        "3960208f9ca0cf6bdb31c21c59ac0526303f8b34",
        "7bb2acb76e8168ca5d0bde5a5a56585a11b3525a"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Wed May 09 12:54:17 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Wed May 09 12:54:17 2007 -0700"
      },
      "message": "Merge git://git.kernel.org/pub/scm/linux/kernel/git/bunk/trivial\n\n* git://git.kernel.org/pub/scm/linux/kernel/git/bunk/trivial: (25 commits)\n  sound: convert \"sound\" subdirectory to UTF-8\n  MAINTAINERS: Add cxacru website/mailing list\n  include files: convert \"include\" subdirectory to UTF-8\n  general: convert \"kernel\" subdirectory to UTF-8\n  documentation: convert the Documentation directory to UTF-8\n  Convert the toplevel files CREDITS and MAINTAINERS to UTF-8.\n  remove broken URLs from net drivers\u0027 output\n  Magic number prefix consistency change to Documentation/magic-number.txt\n  trivial: s/i_sem /i_mutex/\n  fix file specification in comments\n  drivers/base/platform.c: fix small typo in doc\n  misc doc and kconfig typos\n  Remove obsolete fat_cvf help text\n  Fix occurrences of \"the the \"\n  Fix minor typoes in kernel/module.c\n  Kconfig: Remove reference to external mqueue library\n  Kconfig: A couple of grammatical fixes in arch/i386/Kconfig\n  Correct comments in genrtc.c to refer to correct /proc file.\n  Fix more \"deprecated\" spellos.\n  Fix \"deprecated\" typoes.\n  ...\n\nFix trivial comment conflict in kernel/relay.c.\n"
    },
    {
      "commit": "01f2705daf5a36208e69d7cf95db9c330f843af6",
      "tree": "2d2c7a042c2466ed985f6e0950450c099f02725f",
      "parents": [
        "38a23e311b6cd389b9d8af2ea6c28c8cffbe581c"
      ],
      "author": {
        "name": "Nate Diller",
        "email": "nate.diller@gmail.com",
        "time": "Wed May 09 02:35:07 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Wed May 09 12:30:55 2007 -0700"
      },
      "message": "fs: convert core functions to zero_user_page\n\nIt\u0027s very common for file systems to need to zero part or all of a page,\nthe simplist way is just to use kmap_atomic() and memset().  There\u0027s\nactually a library function in include/linux/highmem.h that does exactly\nthat, but it\u0027s confusingly named memclear_highpage_flush(), which is\ndescriptive of *how* it does the work rather than what the *purpose* is.\nSo this patchset renames the function to zero_user_page(), and calls it\nfrom the various places that currently open code it.\n\nThis first patch introduces the new function call, and converts all the\ncore kernel callsites, both the open-coded ones and the old\nmemclear_highpage_flush() ones.  Following this patch is a series of\nconversions for each file system individually, per AKPM, and finally a\npatch deprecating the old call.  The diffstat below shows the entire\npatchset.\n\n[akpm@linux-foundation.org: fix a few things]\nSigned-off-by: Nate Diller \u003cnate.diller@gmail.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "beb7dd86a101263bf63a78c7c6d4da3849b35bd6",
      "tree": "9afe81ca9e92ab8aacc999ae118b27d547721f11",
      "parents": [
        "3dde6ad8fc3939d345a3768464ecff43c91d511a"
      ],
      "author": {
        "name": "Robert P. J. Day",
        "email": "rpjday@mindspring.com",
        "time": "Wed May 09 07:14:03 2007 +0200"
      },
      "committer": {
        "name": "Adrian Bunk",
        "email": "bunk@stusta.de",
        "time": "Wed May 09 07:14:03 2007 +0200"
      },
      "message": "Fix misspellings collected by members of KJ list.\n\nFix the misspellings of \"propogate\", \"writting\" and (oh, the shame\n:-) \"kenrel\" in the source tree.\n\nSigned-off-by: Robert P. J. Day \u003crpjday@mindspring.com\u003e\nSigned-off-by: Adrian Bunk \u003cbunk@stusta.de\u003e\n"
    },
    {
      "commit": "5eb6c7a2ab413dea1ee6c08dd58263a1c2c2efa3",
      "tree": "f1e2f7994321290f4e6e641894cc21176c16767b",
      "parents": [
        "8459d86aff04fa53c2ab6a6b9f355b3063cc8014"
      ],
      "author": {
        "name": "Zach Brown",
        "email": "zach.brown@oracle.com",
        "time": "Sun Dec 10 02:21:07 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.osdl.org",
        "time": "Sun Dec 10 09:57:21 2006 -0800"
      },
      "message": "[PATCH] dio: lock refcount operations\n\nThe wait_for_more_bios() function name was poorly chosen.  While looking to\nclean it up it I noticed that the dio struct refcounting between the bio\ncompletion and dio submission paths was racey.\n\nThe bio submission path was simply freeing the dio struct if\natomic_dec_and_test() indicated that it dropped the final reference.\n\nThe aio bio completion path was dereferencing its dio struct pointer *after\ndropping its reference* based on the remaining number of references.\n\nThese two paths could race and result in the aio bio completion path\ndereferencing a freed dio, though this was not observed in the wild.\n\nThis moves the refcount under the bio lock so that bio completion can drop\nits reference and decide to wake all in one atomic step.\n\nOnce testing and waking is locked dio_await_one() can test its sleeping\ncondition and mark itself uninterruptible under the lock.  It gets simpler\nand wait_for_more_bios() disappears.\n\nThe addition of the interrupt masking spin lock acquiry in dio_bio_submit()\nlooks alarming.  This lock acquiry existed in that path before the recent\ndio completion patch set.  We shouldn\u0027t expect significant performance\nregression from returning to the behaviour that existed before the\ncompletion clean up work.\n\nThis passed 4k block ext3 O_DIRECT fsx and aio-stress on an SMP machine.\n\nSigned-off-by: Zach Brown \u003czach.brown@oracle.com\u003e\nCc: Badari Pulavarty \u003cpbadari@us.ibm.com\u003e\nCc: Suparna Bhattacharya \u003csuparna@in.ibm.com\u003e\nCc: Jeff Moyer \u003cjmoyer@redhat.com\u003e\nCc: \u003cxfs-masters@oss.sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "8459d86aff04fa53c2ab6a6b9f355b3063cc8014",
      "tree": "c0584c4907f0d63a18998b7cbffdf7900609606b",
      "parents": [
        "20258b2b397031649e4a41922fe803d57017df84"
      ],
      "author": {
        "name": "Zach Brown",
        "email": "zach.brown@oracle.com",
        "time": "Sun Dec 10 02:21:05 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.osdl.org",
        "time": "Sun Dec 10 09:57:21 2006 -0800"
      },
      "message": "[PATCH] dio: only call aio_complete() after returning -EIOCBQUEUED\n\nThe only time it is safe to call aio_complete() is when the -\u003eki_retry\nfunction returns -EIOCBQUEUED to the AIO core.  direct_io_worker() has\nhistorically done this by relying on its caller to translate positive return\ncodes into -EIOCBQUEUED for the aio case.  It did this by trying to keep\nconditionals in sync.  direct_io_worker() knew when finished_one_bio() was\ngoing to call aio_complete().  It would reverse the test and wait and free the\ndio in the cases it thought that finished_one_bio() wasn\u0027t going to.\n\nNot surprisingly, it ended up getting it wrong.  \u0027ret\u0027 could be a negative\nerrno from the submission path but it failed to communicate this to\nfinished_one_bio().  direct_io_worker() would return \u003c 0, it\u0027s callers\nwouldn\u0027t raise -EIOCBQUEUED, and aio_complete() would be called.  In the\nfuture finished_one_bio()\u0027s tests wouldn\u0027t reflect this and aio_complete()\nwould be called for a second time which can manifest as an oops.\n\nThe previous cleanups have whittled the sync and async completion paths down\nto the point where we can collapse them and clearly reassert the invariant\nthat we must only call aio_complete() after returning -EIOCBQUEUED.\ndirect_io_worker() will only return -EIOCBQUEUED when it is not the last to\ndrop the dio refcount and the aio bio completion path will only call\naio_complete() when it is the last to drop the dio refcount.\ndirect_io_worker() can ensure that it is the last to drop the reference count\nby waiting for bios to drain.  It does this for sync ops, of course, and for\npartial dio writes that must fall back to buffered and for aio ops that saw\nerrors during submission.\n\nThis means that operations that end up waiting, even if they were issued as\naio ops, will not call aio_complete() from dio.  Instead we return the return\ncode of the operation and let the aio core call aio_complete().  This is\npurposely done to fix a bug where AIO DIO file extensions would call\naio_complete() before their callers have a chance to update i_size.\n\nNow that direct_io_worker() is explicitly returning -EIOCBQUEUED its callers\nno longer have to translate for it.  XFS needs to be careful not to free\nresources that will be used during AIO completion if -EIOCBQUEUED is returned.\n We maintain the previous behaviour of trying to write fs metadata for O_SYNC\naio+dio writes.\n\nSigned-off-by: Zach Brown \u003czach.brown@oracle.com\u003e\nCc: Badari Pulavarty \u003cpbadari@us.ibm.com\u003e\nCc: Suparna Bhattacharya \u003csuparna@in.ibm.com\u003e\nAcked-by: Jeff Moyer \u003cjmoyer@redhat.com\u003e\nCc: \u003cxfs-masters@oss.sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "20258b2b397031649e4a41922fe803d57017df84",
      "tree": "9c5fc96367b4938474cee2789d3c98c5e37586bf",
      "parents": [
        "0273201e693fd62381f6b1e85b15ffc117d8a46e"
      ],
      "author": {
        "name": "Zach Brown",
        "email": "zach.brown@oracle.com",
        "time": "Sun Dec 10 02:21:01 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.osdl.org",
        "time": "Sun Dec 10 09:57:21 2006 -0800"
      },
      "message": "[PATCH] dio: remove duplicate bio wait code\n\nNow that we have a single refcount and waiting path we can reuse it in the\nasync \u0027should_wait\u0027 path.  It continues to rely on the fragile link between\nthe conditional in dio_complete_aio() which decides to complete the AIO and\nthe conditional in direct_io_worker() which decides to wait and free.\n\nBy waiting before dropping the reference we stop dio_bio_end_aio() from\ncalling dio_complete_aio() which used to wake up the waiter after seeing the\nreference count drop to 0.  We hoist this wake up into dio_bio_end_aio() which\nnow notices when it\u0027s left a single remaining reference that is held by the\nwaiter.\n\nSigned-off-by: Zach Brown \u003czach.brown@oracle.com\u003e\nCc: Badari Pulavarty \u003cpbadari@us.ibm.com\u003e\nCc: Suparna Bhattacharya \u003csuparna@in.ibm.com\u003e\nAcked-by: Jeff Moyer \u003cjmoyer@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "0273201e693fd62381f6b1e85b15ffc117d8a46e",
      "tree": "2dff76f33cbcaf7b7d88187da122d7aa98268b11",
      "parents": [
        "17a7b1d74b1207f8f1af40b5d184989076d08f8b"
      ],
      "author": {
        "name": "Zach Brown",
        "email": "zach.brown@oracle.com",
        "time": "Sun Dec 10 02:20:59 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.osdl.org",
        "time": "Sun Dec 10 09:57:21 2006 -0800"
      },
      "message": "[PATCH] dio: formalize bio counters as a dio reference count\n\nPreviously we had two confusing counts of bio progress.  \u0027bio_count\u0027 was\ndecremented as bios were processed and freed by the dio core.  It was used to\nindicate final completion of the dio operation.  \u0027bios_in_flight\u0027 reflected\nhow many bios were between submit_bio() and bio-\u003eend_io.  It was used by the\nsync path to decide when to wake up and finish completing bios and was ignored\nby the async path.\n\nThis patch collapses the two notions into one notion of a dio reference count.\n bios hold a dio reference when they\u0027re between submit_bio and bio-\u003eend_io.\n\nSince bios_in_flight was only used in the sync path it is now equivalent to\ndio-\u003erefcount - 1 which accounts for direct_io_worker() holding a reference\nfor the duration of the operation.\n\ndio_bio_complete() -\u003e finished_one_bio() was called from the sync path after\nfinding bios on the list that the bio-\u003eend_io function had deposited.\nfinished_one_bio() can not drop the dio reference on behalf of these bios now\nbecause bio-\u003eend_io already has.  The is_async test in finished_one_bio()\nmeant that it never actually did anything other than drop the bio_count for\nsync callers.  So we remove its refcount decrement, don\u0027t call it from\ndio_bio_complete(), and hoist its call up into the async dio_bio_complete()\ncaller after an explicit refcount decrement.  It is renamed dio_complete_aio()\nto reflect the remaining work it actually does.\n\nSigned-off-by: Zach Brown \u003czach.brown@oracle.com\u003e\nCc: Badari Pulavarty \u003cpbadari@us.ibm.com\u003e\nCc: Suparna Bhattacharya \u003csuparna@in.ibm.com\u003e\nAcked-by: Jeff Moyer \u003cjmoyer@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "17a7b1d74b1207f8f1af40b5d184989076d08f8b",
      "tree": "18dceaf00a1ae275fb770c83cec0eae81662352a",
      "parents": [
        "6d544bb4d9019c3a0d7ee4af1e4bbbd61a6e16dc"
      ],
      "author": {
        "name": "Zach Brown",
        "email": "zach.brown@oracle.com",
        "time": "Sun Dec 10 02:20:56 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.osdl.org",
        "time": "Sun Dec 10 09:57:21 2006 -0800"
      },
      "message": "[PATCH] dio: call blk_run_address_space() once per op\n\nWe only need to call blk_run_address_space() once after all the bios for the\ndirect IO op have been submitted.  This removes the chance of calling\nblk_run_address_space() after spurious wake ups as the sync path waits for\nbios to drain.  It\u0027s also one less difference betwen the sync and async paths.\n\nIn the process we remove a redundant dio_bio_submit() that its caller had\nalready performed.\n\nSigned-off-by: Zach Brown \u003czach.brown@oracle.com\u003e\nCc: Badari Pulavarty \u003cpbadari@us.ibm.com\u003e\nCc: Suparna Bhattacharya \u003csuparna@in.ibm.com\u003e\nAcked-by: Jeff Moyer \u003cjmoyer@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "6d544bb4d9019c3a0d7ee4af1e4bbbd61a6e16dc",
      "tree": "cbf528f4270b60527961633c839ef62cfa69ebdf",
      "parents": [
        "1757128438d41670ded8bc3bc735325cc07dc8f9"
      ],
      "author": {
        "name": "Zach Brown",
        "email": "zach.brown@oracle.com",
        "time": "Sun Dec 10 02:20:54 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.osdl.org",
        "time": "Sun Dec 10 09:57:21 2006 -0800"
      },
      "message": "[PATCH] dio: centralize completion in dio_complete()\n\nThere have been a lot of bugs recently due to the way direct_io_worker() tries\nto decide how to finish direct IO operations.  In the worst examples it has\nfailed to call aio_complete() at all (hang) or called it too many times\n(oops).\n\nThis set of patches cleans up the completion phase with the goal of removing\nthe complexity that lead to these bugs.  We end up with one path that\ncalculates the result of the operation after all off the bios have completed.\nWe decide when to generate a result of the operation using that path based on\nthe final release of a refcount on the dio structure.\n\nI tried to progress towards the final state in steps that were relatively easy\nto understand.  Each step should compile but I only tested the final result of\nhaving all the patches applied.\n\nI\u0027ve tested these on low end PC drives with aio-stress, the direct IO tests I\ncould manage to get running in LTP, orasim, and some home-brew functional\ntests.\n\nIn http://lkml.org/lkml/2006/9/21/103 IBM reports success with ext2 and ext3\nrunning DIO LTP tests.  They found that XFS bug which has since been addressed\nin the patch series.\n\nThis patch:\n\nThe mechanics which decide the result of a direct IO operation were duplicated\nin the sync and async paths.\n\nThe async path didn\u0027t check page_errors which can manifest as silently\nreturning success when the final pointer in an operation faults and its\nmatching file region is filled with zeros.\n\nThe sync path and async path differed in whether they passed errors to the\ncaller\u0027s dio-\u003eend_io operation.  The async path was passing errors to it which\ntrips an assertion in XFS, though it is apparently harmless.\n\nThis centralizes the completion phase of dio ops in one place.  AIO will now\nreturn EFAULT consistently and all paths fall back to the previously sync\nbehaviour of passing the number of bytes \u0027transferred\u0027 to the dio-\u003eend_io\ncallback, regardless of errors.\n\ndio_await_completion() doesn\u0027t have to propogate EIO from non-uptodate bios\nnow that it\u0027s being propogated through dio_complete() via dio-\u003eio_error.  This\nlets it return void which simplifies its sole caller.\n\nSigned-off-by: Zach Brown \u003czach.brown@oracle.com\u003e\nCc: Badari Pulavarty \u003cpbadari@us.ibm.com\u003e\nCc: Suparna Bhattacharya \u003csuparna@in.ibm.com\u003e\nAcked-by: Jeff Moyer \u003cjmoyer@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "98c4d57decf97bf8ddfe948a3266aa56b38b1a51",
      "tree": "5cf91db0f18654655bfcfba555a7e58ec2f550c2",
      "parents": [
        "6f88cc2e9c29c181557b477ee396375906acbc90"
      ],
      "author": {
        "name": "Andrew Morton",
        "email": "akpm@osdl.org",
        "time": "Sun Dec 10 02:19:47 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.osdl.org",
        "time": "Sun Dec 10 09:55:41 2006 -0800"
      },
      "message": "[PATCH] io-accounting: direct-io\n\nAccount for direct-io.\n\nCc: Jay Lan \u003cjlan@sgi.com\u003e\nCc: Shailabh Nagar \u003cnagar@watson.ibm.com\u003e\nCc: Balbir Singh \u003cbalbir@in.ibm.com\u003e\nCc: Chris Sturtivant \u003ccsturtiv@sgi.com\u003e\nCc: Tony Ernst \u003ctee@sgi.com\u003e\nCc: Guillaume Thouvenin \u003cguillaume.thouvenin@bull.net\u003e\nCc: David Wright \u003cdaw@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "d8aa905b429700e8b6b6b301a8ac2d4a24f2c19b",
      "tree": "7ba82a5ae7bb63fe45f404424a470c126e59e6da",
      "parents": [
        "2b105ff9cccea5533ad518bb37dc9b43a322f7b1"
      ],
      "author": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Mon Jul 03 00:25:02 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Mon Jul 03 15:27:06 2006 -0700"
      },
      "message": "[PATCH] lockdep: annotate direct io\n\nTeach special (rwsem-in-irq) locking code to the lock validator.  Has no\neffect on non-lockdep kernels.\n\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Arjan van de Ven \u003carjan@linux.intel.com\u003e\nCc: Russell King \u003crmk@arm.linux.org.uk\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "b31dc66a54ad986b6b73bdc49c8efc17cbad1833",
      "tree": "5591383c1cbffe11512da889c971f899333f1a44",
      "parents": [
        "271f18f102c789f59644bb6c53a69da1df72b2f4"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "axboe@suse.de",
        "time": "Tue Jun 13 08:26:10 2006 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@nelson.home.kernel.dk",
        "time": "Fri Jun 23 17:10:39 2006 +0200"
      },
      "message": "[PATCH] Kill PF_SYNCWRITE flag\n\nA process flag to indicate whether we are doing sync io is incredibly\nugly. It also causes performance problems when one does a lot of async\nio and then proceeds to sync it. Part of the io will go out as async,\nand the other part as sync. This causes a disconnect between the\npreviously submitted io and the synced io. For io schedulers such as CFQ,\nthis will cause us lost merges and suboptimal behaviour in scheduling.\n\nRemove PF_SYNCWRITE completely from the fsync/msync paths, and let\nthe O_DIRECT path just directly indicate that the writes are sync\nby using WRITE_SYNC instead.\n\nSigned-off-by: Jens Axboe \u003caxboe@suse.de\u003e\n"
    },
    {
      "commit": "d4569d2e6949a63851032b40c811913d4a6f85f5",
      "tree": "d2a5c38c2fbf7167d742bde9ccb6fca0cb12c686",
      "parents": [
        "9e77c485f7037e4817bb53c78d15d5403981ae8b"
      ],
      "author": {
        "name": "Eric Sesterhenn",
        "email": "snakebyte@gmx.de",
        "time": "Sat Apr 01 01:10:13 2006 +0200"
      },
      "committer": {
        "name": "Adrian Bunk",
        "email": "bunk@stusta.de",
        "time": "Sat Apr 01 01:10:13 2006 +0200"
      },
      "message": "BUG_ON() Conversion in fs/direct-io.c\n\nthis changes if() BUG(); constructs to BUG_ON() which is\ncleaner and can better optimized away\n\nSigned-off-by: Eric Sesterhenn \u003csnakebyte@gmx.de\u003e\nSigned-off-by: Adrian Bunk \u003cbunk@stusta.de\u003e\n"
    },
    {
      "commit": "3c674e74238cb2484169e3f84f687c66887086b6",
      "tree": "07964918e0948a42bf787b37fc970c4b137fce53",
      "parents": [
        "e0edd5962bd83d319aaa50b39580dc30299a7fe3"
      ],
      "author": {
        "name": "Nathan Scott",
        "email": "nathans@sgi.com",
        "time": "Wed Mar 29 09:26:15 2006 +1000"
      },
      "committer": {
        "name": "Nathan Scott",
        "email": "nathans@sgi.com",
        "time": "Wed Mar 29 09:26:15 2006 +1000"
      },
      "message": "Fixes a regression from the recent \"remove -\u003eget_blocks() support\"\nchange.  inode-\u003ei_blkbits should be used when making a get_block_t\nrequest of a filesystem instead of dio-\u003eblkbits, as that does not\nindicate the filesystem block size all the time (depends on request\nalignment - see start of __blockdev_direct_IO).\n\nSigned-off-by: Nathan Scott \u003cnathans@sgi.com\u003e\nAcked-by: Badari Pulavarty \u003cpbadari@us.ibm.com\u003e\n"
    },
    {
      "commit": "1d8fa7a2b9a39d18727acc5c468e870df606c852",
      "tree": "41537fe9ea5478f3243e3301184dc13980f8201f",
      "parents": [
        "fa30bd058b746c0e2318a77ff8b4977faa924c2c"
      ],
      "author": {
        "name": "Badari Pulavarty",
        "email": "pbadari@us.ibm.com",
        "time": "Sun Mar 26 01:38:02 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sun Mar 26 08:57:01 2006 -0800"
      },
      "message": "[PATCH] remove -\u003eget_blocks() support\n\nNow that get_block() can handle mapping multiple disk blocks, no need to have\n-\u003eget_blocks().  This patch removes fs specific -\u003eget_blocks() added for DIO\nand makes it users use get_block() instead.\n\nSigned-off-by: Badari Pulavarty \u003cpbadari@us.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "174e27c607cfa3ebb92934d28c0fdfcf5ce6c3af",
      "tree": "1bc8f1804dc0917f1a86b2d32c701883932d81fe",
      "parents": [
        "0e6b3e5e97e2e8a25bcfc528dad94edf5220dfeb"
      ],
      "author": {
        "name": "Chen, Kenneth W",
        "email": "kenneth.w.chen@intel.com",
        "time": "Sat Mar 25 03:08:16 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sat Mar 25 08:23:00 2006 -0800"
      },
      "message": "[PATCH] direct-io: bug fix in dio handling write error\n\nThere is a bug in direct-io on propagating write error up to the higher I/O\nlayer.  When performing an async ODIRECT write to a block device, if a\ndevice error occurred (like media error or disk is pulled), the error code\nis only propagated from device driver to the DIO layer.  The error code\nstops at finished_one_bio().  The aysnc write, however, is supposedly have\na corresponding AIO event with appropriate return code (in this case -EIO).\n Application which waits on the async write event, will hang forever since\nsuch AIO event is lost forever (if such app did not use the timeout option\nin io_getevents call.  Regardless, an AIO event is lost).\n\nThe discovery of above bug leads to another discovery of potential race\nwindow with dio-\u003eresult.  The fundamental problem is that dio-\u003eresult is\noverloaded with dual use: an indicator of fall back path for partial dio\nwrite, and an error indicator used in the I/O completion path.  In the\nevent of device error, the setting of -EIO to dio-\u003eresult clashes with\nvalue used to track partial write that activates the fall back path.\n\nIt was also pointed out that it is impossible to use dio-\u003eresult to track\npartial write and at the same time to track error returned from device\ndriver.  Because direct_io_work can only determines whether it is a partial\nwrite at the end of io submission and in mid stream of those io submission,\na return code could be coming back from the driver.  Thus messing up all\nthe subsequent logic.\n\nProposed fix is to separating out error code returned by the IO completion\npath from partial IO submit tracking.  A new variable is added to dio\nstructure specifically to track io error returned in the completion path.\n\nSigned-off-by: Ken Chen \u003ckenneth.w.chen@intel.com\u003e\nAcked-by: Zach Brown \u003czach.brown@oracle.com\u003e\nAcked-by: Suparna Bhattacharya \u003csuparna@in.ibm.com\u003e\nCc: Badari Pulavarty \u003cpbadari@us.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "3fb962bde48c413bfa419ec4413037e87955dcb6",
      "tree": "ccce49b3fbdd8a3f38bbfd07a397092a3ae483b5",
      "parents": [
        "3759fa9c55923f719ae944a3f8fbb029b36f759d"
      ],
      "author": {
        "name": "Nathan Scott",
        "email": "nathans@bruce",
        "time": "Wed Mar 15 15:14:45 2006 +1100"
      },
      "committer": {
        "name": "Nathan Scott",
        "email": "nathans@bruce",
        "time": "Wed Mar 15 15:14:45 2006 +1100"
      },
      "message": "Fix a direct I/O locking issue revealed by the new mutex code.\nAffects only XFS (i.e. DIO_OWN_LOCKING case) - currently it is\nnot possible to get i_mutex locking correct when using DIO_OWN\ndirect I/O locking in a filesystem due to indeterminism in the\npossible return code/lock/unlock combinations.  This can cause\na direct read to attempt a double i_mutex unlock inside XFS.\n\nWe\u0027re now ensuring __blockdev_direct_IO always exits with the\ninode i_mutex (still) held for a direct reader.\n\nTested with the three different locking modes (via direct block\ndevice access, ext3 and XFS) - both reading and writing; cannot\nfind any regressions resulting from this change, and it clearly\nfixes the mutex_unlock warning originally reported here:\nhttp://marc.theaimsgroup.com/?l\u003dlinux-kernel\u0026m\u003d114189068126253\u0026w\u003d2\n\nSigned-off-by: Nathan Scott \u003cnathans@sgi.com\u003e\nAcked-by: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "35dc8161d0a6fa5e654bcb3d6240acc9ecb0a259",
      "tree": "0c688ffc3adc127f5cf9f35ff93e6072e1f42438",
      "parents": [
        "835417967c10b6dfaffdffddba59196196e5d431"
      ],
      "author": {
        "name": "Jeff Moyer",
        "email": "jmoyer@redhat.com",
        "time": "Fri Feb 03 03:04:27 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Fri Feb 03 08:32:07 2006 -0800"
      },
      "message": "[PATCH] fix O_DIRECT read of last block in a sparse file\n\nCurrently, if you open a file O_DIRECT, truncate it to a size that is not a\nmultiple of the disk block size, and then try to read the last block in the\nfile, the read will return 0.  The problem is in do_direct_IO, here:\n\n        /* Handle holes */\n        if (!buffer_mapped(map_bh)) {\n                char *kaddr;\n\n\t\t...\n\n                if (dio-\u003eblock_in_file \u003e\u003d\n                        i_size_read(dio-\u003einode)\u003e\u003eblkbits) {\n                        /* We hit eof */\n                        page_cache_release(page);\n                        goto out;\n                }\n\nWe shift off any remaining bytes in the final block of the I/O, resulting\nin a 0-sized read.  I\u0027ve attached a patch that fixes this.  I\u0027m not happy\nabout how ugly the math is getting, so suggestions are more than welcome.\n\nI\u0027ve tested this with a simple program that performs the steps outlined for\nreproducing the problem above.  Without the patch, we get a 0-sized result\nfrom read.  With the patch, we get the correct return value from the short\nread.\n\nSigned-off-by: Jeff Moyer \u003cjmoyer@redhat.com\u003e\nCc: Badari Pulavarty \u003cpbadari@us.ibm.com\u003e\nCc: Suparna Bhattacharya \u003csuparna@in.ibm.com\u003e\nCc: Mingming Cao \u003ccmm@us.ibm.com\u003e\nCc: Joel Becker \u003cJoel.Becker@oracle.com\u003e\nCc: \"Chen, Kenneth W\" \u003ckenneth.w.chen@intel.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "1b1dcc1b57a49136f118a0f16367256ff9994a69",
      "tree": "b0b36d4f41d28c9d6514fb309d33c1a084d6309b",
      "parents": [
        "794ee1baee1c26be40410233e6c20bceb2b03c08"
      ],
      "author": {
        "name": "Jes Sorensen",
        "email": "jes@sgi.com",
        "time": "Mon Jan 09 15:59:24 2006 -0800"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@hera.kernel.org",
        "time": "Mon Jan 09 15:59:24 2006 -0800"
      },
      "message": "[PATCH] mutex subsystem, semaphore to mutex: VFS, -\u003ei_sem\n\nThis patch converts the inode semaphore to a mutex. I have tested it on\nXFS and compiled as much as one can consider on an ia64. Anyway your\nluck with it might be different.\n\nModified-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n\n(finished the conversion)\n\nSigned-off-by: Jes Sorensen \u003cjes@sgi.com\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "b5810039a54e5babf428e9a1e89fc1940fabff11",
      "tree": "835836cb527ec9bd525f93eb7e016f3dfb8c8ae2",
      "parents": [
        "f9c98d0287de42221c624482fd4f8d485c98ab22"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "nickpiggin@yahoo.com.au",
        "time": "Sat Oct 29 18:16:12 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sat Oct 29 21:40:39 2005 -0700"
      },
      "message": "[PATCH] core remove PageReserved\n\nRemove PageReserved() calls from core code by tightening VM_RESERVED\nhandling in mm/ to cover PageReserved functionality.\n\nPageReserved special casing is removed from get_page and put_page.\n\nAll setting and clearing of PageReserved is retained, and it is now flagged\nin the page_alloc checks to help ensure we don\u0027t introduce any refcount\nbased freeing of Reserved pages.\n\nMAP_PRIVATE, PROT_WRITE of VM_RESERVED regions is tentatively being\ndeprecated.  We never completely handled it correctly anyway, and is be\nreintroduced in future if required (Hugh has a proof of concept).\n\nOnce PageReserved() calls are removed from kernel/power/swsusp.c, and all\narch/ and driver code, the Set and Clear calls, and the PG_reserved bit can\nbe trivially removed.\n\nLast real user of PageReserved is swsusp, which uses PageReserved to\ndetermine whether a struct page points to valid memory or not.  This still\nneeds to be addressed (a generic page_is_ram() should work).\n\nA last caveat: the ZERO_PAGE is now refcounted and managed with rmap (and\nthus mapcounted and count towards shared rss).  These writes to the struct\npage could cause excessive cacheline bouncing on big systems.  There are a\nnumber of ways this could be addressed if it is an issue.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@suse.de\u003e\n\nRefcount bug fix for filemap_xip.c\n\nSigned-off-by: Carsten Otte \u003ccotte@de.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "92198f7eaa5df3479341dd8fa20c2c81aa3b1e25",
      "tree": "b2b7f8c73b94b4179d5002eaaa30f683b6dc5132",
      "parents": [
        "16c29b67fb3bbacfc2a71f9e5f7d85728ef45efa"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Thu Jun 23 22:00:59 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@ppc970.osdl.org",
        "time": "Fri Jun 24 00:05:19 2005 -0700"
      },
      "message": "[PATCH] pass iocb to dio_iodone_t\n\nXFS will have to look at iocb-\u003eprivate to fix aio+dio.  No other filesystem\nis using the blockdev_direct_IO* end_io callback.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "29504ff3be784372c4e2f7e31681a3e0292c4d9a",
      "tree": "449f6598e10a1930d113fd7bbe3aa6ca37341d10",
      "parents": [
        "1f08ad02379530e1c970d3d104343b9907b4d1b4"
      ],
      "author": {
        "name": "Daniel McNeil",
        "email": "daniel@osdl.org",
        "time": "Sat Apr 16 15:25:50 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@ppc970.osdl.org",
        "time": "Sat Apr 16 15:25:50 2005 -0700"
      },
      "message": "[PATCH] Direct IO async short read fix\n\nThe direct I/O code is mapping the read request to the file system block.  If\nthe file size was not on a block boundary, the result would show the the read\nreading past EOF.  This was only happening for the AIO case.  The non-AIO case\ntruncates the result to match file size (in direct_io_worker).  This patch\ndoes the same thing for the AIO case, it truncates the result to match the\nfile size if the read reads past EOF.\n\nWhen I/O completes the result can be truncated to match the file size\nwithout using i_size_read(), thus the aio result now matches the number of\nbytes read to the end of file.\n\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "1da177e4c3f41524e886b7f1b8a0c1fc7321cac2",
      "tree": "0bba044c4ce775e45a88a51686b5d9f90697ea9d",
      "parents": [],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@ppc970.osdl.org",
        "time": "Sat Apr 16 15:20:36 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@ppc970.osdl.org",
        "time": "Sat Apr 16 15:20:36 2005 -0700"
      },
      "message": "Linux-2.6.12-rc2\n\nInitial git repository build. I\u0027m not bothering with the full history,\neven though we have it. We can create a separate \"historical\" git\narchive of that later if we want to, and in the meantime it\u0027s about\n3.2GB when imported into git - space that would just make the early\ngit days unnecessarily complicated, when we don\u0027t have a lot of good\ninfrastructure for it.\n\nLet it rip!\n"
    }
  ]
}
