)]}'
{
  "log": [
    {
      "commit": "052189a2ec956810feefb6a681416c5e6a207646",
      "tree": "52a1fbec2878788c6a2f6565999b97331493bc4c",
      "parents": [
        "dbc883f1570d992ba926a8c9e22140ba473c6cc1"
      ],
      "author": {
        "name": "Kiyoshi Ueda",
        "email": "k-ueda@ct.jp.nec.com",
        "time": "Thu Jan 13 20:00:00 2011 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Jan 13 20:00:00 2011 +0000"
      },
      "message": "dm: remove superfluous irq disablement in dm_request_fn\n\nThis patch changes spin_lock_irq() to spin_lock() in dm_request_fn().\nThis patch is just a clean-up and no functional change.\n\nThe spin_lock_irq() was leftover from the early request-based dm code,\nwhere map_request() used to enable interrupts.\nSince current map_request() never enables interrupts, we can change it\nto spin_lock() to match the prior spin_unlock().\n\nAuditing through the dm and block-layer code called from\nmap_request(), I confirmed all functions save/restore interrupt\nstatus, so no function returning with interrupts enabled.\nAlso I haven\u0027t observed any problem on my test environment which\nuses scsi and lpfc driver after heavy I/O testing with occasional\npath down/up.\n\nAdded BUG_ON() to detect breakage in future.\n\nSigned-off-by: Kiyoshi Ueda \u003ck-ueda@ct.jp.nec.com\u003e\nSigned-off-by: Jun\u0027ichi Nomura \u003cj-nomura@ce.jp.nec.com\u003e\nSigned-off-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "9c4376de98719d2768dd919553843de34bb094a6",
      "tree": "c20b10e9018bb51803c535a38a04ee8b12b6d98a",
      "parents": [
        "4d4d66ab5322fa9b0f51842a76139387a40e1ce9"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Jan 13 19:59:58 2011 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Jan 13 19:59:58 2011 +0000"
      },
      "message": "dm: use non reentrant workqueues if equivalent\n\nkmirrord_wq, kcopyd_work and md-\u003ewq are created per dm instance and\nserve only a single work item from the dm instance, so non-reentrant\nworkqueues would provide the same ordering guarantees as ordered ones\nwhile allowing CPU affinity and use of the workqueues for other\npurposes.  Switch them to non-reentrant workqueues.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "4d4d66ab5322fa9b0f51842a76139387a40e1ce9",
      "tree": "37485e2fa56c38044c496ac5632e8304c5cc25db",
      "parents": [
        "f521f074abe7b3990f5df65482cdc3d851b80665"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Jan 13 19:59:57 2011 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Jan 13 19:59:57 2011 +0000"
      },
      "message": "dm: convert workqueues to alloc_ordered\n\nConvert all create[_singlethread]_work() users to the new\nalloc[_ordered]_workqueue().  This conversion is mechanical and\ndoesn\u0027t introduce any behavior change.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "4a1aeb98297e17f4e0a8cdda919e63bf528b2e5d",
      "tree": "4709346914cbdab86200c59241262d0ea2cbd204",
      "parents": [
        "5fc2ffeabb9ee0fc0e71ff16b49f34f0ed3d05b4"
      ],
      "author": {
        "name": "Milan Broz",
        "email": "mbroz@redhat.com",
        "time": "Thu Jan 13 19:59:48 2011 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Jan 13 19:59:48 2011 +0000"
      },
      "message": "dm: remove dm_mutex after bkl conversion\n\nThis patch replaces dm_mutex with _minor_lock in dm_blk_close()\nand then removes it.\n\nDuring the BKL conversion, commit 6e9624b8caec290d28b4c6d9ec75749df6372b87\n(block: push down BKL into .open and .release) pushed lock_kernel()\ndown into dm_blk_open/close calls.\nCommit 2a48fc0ab24241755dc93bfd4f01d68efab47f5a\n(block: autoconvert trivial BKL users to private mutex) converted it to a\nlocal mutex, but _minor_lock is sufficient.\n\nSigned-off-by: Milan Broz \u003cmbroz@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "c217649bf2d60ac119afd71d938278cffd55962b",
      "tree": "5addf2130d59f9fab614d852ac8fe7724ef78c9f",
      "parents": [
        "581548db3b3c0f6e25b500329eb02e3c72e7acbe"
      ],
      "author": {
        "name": "Mike Snitzer",
        "email": "snitzer@redhat.com",
        "time": "Thu Jan 13 19:53:46 2011 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Jan 13 19:53:46 2011 +0000"
      },
      "message": "dm: dont take i_mutex to change device size\n\nNo longer needlessly hold md-\u003ebdev-\u003ebd_inode-\u003ei_mutex when changing the\nsize of a DM device.  This additional locking is unnecessary because\ni_size_write() is already protected by the existing critical section in\ndm_swap_table().  DM already has a reference on md-\u003ebdev so the\nassociated bd_inode may be changed without lifetime concerns.\n\nA negative side-effect of having held md-\u003ebdev-\u003ebd_inode-\u003ei_mutex was\nthat a concurrent DM device resize and flush (via fsync) would deadlock.\nDropping md-\u003ebdev-\u003ebd_inode-\u003ei_mutex eliminates this potential for\ndeadlock.  The following reproducer no longer deadlocks:\n  https://www.redhat.com/archives/dm-devel/2009-July/msg00284.html\n\nSigned-off-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\nCc: stable@kernel.org\n"
    },
    {
      "commit": "b7908c1035af7652cd613991b54dbff9c8b6bd3a",
      "tree": "91dc24bbb1299ba7f84e22bbaffd28950dd04713",
      "parents": [
        "6c23a9681c0fe7fb7dd331b39dda11926f43746e"
      ],
      "author": {
        "name": "Jeff Moyer",
        "email": "jmoyer@redhat.com",
        "time": "Thu Jan 06 20:41:42 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Jan 07 08:43:55 2011 +0100"
      },
      "message": "block: trace event block fix unassigned field\n\nThe \"error\" field in block_bio_complete is not assigned, leaving the memory area\nuninitialized (keeping garbage data). Pass an additional tracepoint argument to\nthis event to initialize this field.\n\nSigned-off-by: Jeff Moyer \u003cjmoyer@redhat.com\u003e\nSigned-off-by: Mathieu Desnoyers \u003cmathieu.desnoyers@efficios.com\u003e\nCC: Steven Rostedt \u003crostedt@goodmis.org\u003e\nCC: Frederic Weisbecker \u003cfweisbec@gmail.com\u003e\nCC: Ingo Molnar \u003cmingo@elte.hu\u003e\nCC: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nCC: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nCC: Alan.Brunelle@hp.com\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "d07335e51df0c6dec202d315fc4f1f7e100eec4e",
      "tree": "db6ac1db8d87738b9e44497e082d490c14413f5d",
      "parents": [
        "5fbf85639287b6ea287f4f5e5e7e36608f0f60bd"
      ],
      "author": {
        "name": "Mike Snitzer",
        "email": "snitzer@redhat.com",
        "time": "Tue Nov 16 12:52:38 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Nov 16 12:53:39 2010 +0100"
      },
      "message": "block: Rename \"block_remap\" tracepoint to \"block_bio_remap\" to clarify the event.\n\nSigned-off-by: Kiyoshi Ueda \u003ck-ueda@ct.jp.nec.com\u003e\nSigned-off-by: Jun\u0027ichi Nomura \u003cj-nomura@ce.jp.nec.com\u003e\nSigned-off-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "a2887097f25cd38cadfc11d10769e2b349fb5eca",
      "tree": "cd4adcb305365d6ba9acd2c02d4eb9d0125c6f8d",
      "parents": [
        "8abfc6e7a45eb74e51904bbae676fae008b11366",
        "005a1d15f5a6b2bb4ada80349513effbf22b4588"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Oct 22 17:07:18 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Oct 22 17:07:18 2010 -0700"
      },
      "message": "Merge branch \u0027for-2.6.37/barrier\u0027 of git://git.kernel.dk/linux-2.6-block\n\n* \u0027for-2.6.37/barrier\u0027 of git://git.kernel.dk/linux-2.6-block: (46 commits)\n  xen-blkfront: disable barrier/flush write support\n  Added blk-lib.c and blk-barrier.c was renamed to blk-flush.c\n  block: remove BLKDEV_IFL_WAIT\n  aic7xxx_old: removed unused \u0027req\u0027 variable\n  block: remove the BH_Eopnotsupp flag\n  block: remove the BLKDEV_IFL_BARRIER flag\n  block: remove the WRITE_BARRIER flag\n  swap: do not send discards as barriers\n  fat: do not send discards as barriers\n  ext4: do not send discards as barriers\n  jbd2: replace barriers with explicit flush / FUA usage\n  jbd2: Modify ASYNC_COMMIT code to not rely on queue draining on barrier\n  jbd: replace barriers with explicit flush / FUA usage\n  nilfs2: replace barriers with explicit flush / FUA usage\n  reiserfs: replace barriers with explicit flush / FUA usage\n  gfs2: replace barriers with explicit flush / FUA usage\n  btrfs: replace barriers with explicit flush / FUA usage\n  xfs: replace barriers with explicit flush / FUA usage\n  block: pass gfp_mask and flags to sb_issue_discard\n  dm: convey that all flushes are processed as empty\n  ...\n"
    },
    {
      "commit": "2a48fc0ab24241755dc93bfd4f01d68efab47f5a",
      "tree": "fa9ae10ce89b26b7d8ae9ce24bdfda5e3007b763",
      "parents": [
        "613655fa39ff6957754fa8ceb8559980920eb8ee"
      ],
      "author": {
        "name": "Arnd Bergmann",
        "email": "arnd@arndb.de",
        "time": "Wed Jun 02 14:28:52 2010 +0200"
      },
      "committer": {
        "name": "Arnd Bergmann",
        "email": "arnd@arndb.de",
        "time": "Tue Oct 05 15:01:10 2010 +0200"
      },
      "message": "block: autoconvert trivial BKL users to private mutex\n\nThe block device drivers have all gained new lock_kernel\ncalls from a recent pushdown, and some of the drivers\nwere already using the BKL before.\n\nThis turns the BKL into a set of per-driver mutexes.\nStill need to check whether this is safe to do.\n\nfile\u003d$1\nname\u003d$2\nif grep -q lock_kernel ${file} ; then\n    if grep -q \u0027include.*linux.mutex.h\u0027 ${file} ; then\n            sed -i \u0027/include.*\u003clinux\\/smp_lock.h\u003e/d\u0027 ${file}\n    else\n            sed -i \u0027s/include.*\u003clinux\\/smp_lock.h\u003e.*$/include \u003clinux\\/mutex.h\u003e/g\u0027 ${file}\n    fi\n    sed -i ${file} \\\n        -e \"/^#include.*linux.mutex.h/,$ {\n                1,/^\\(static\\|int\\|long\\)/ {\n                     /^\\(static\\|int\\|long\\)/istatic DEFINE_MUTEX(${name}_mutex);\n\n} }\"  \\\n    -e \"s/\\(un\\)*lock_kernel\\\u003e[ ]*()/mutex_\\1lock(\\\u0026${name}_mutex)/g\" \\\n    -e \u0027/[      ]*cycle_kernel_lock();/d\u0027\nelse\n    sed -i -e \u0027/include.*\\\u003csmp_lock.h\\\u003e/d\u0027 ${file}  \\\n                -e \u0027/cycle_kernel_lock()/d\u0027\nfi\n\nSigned-off-by: Arnd Bergmann \u003carnd@arndb.de\u003e\n"
    },
    {
      "commit": "b372d360df6deaf79a58a02fa0cc0d7e0aa3e92f",
      "tree": "e103bc03bae17f7a995ba44825aefd5fc5fdba66",
      "parents": [
        "05447420f99c1c44063c7f00054667c022cc1365"
      ],
      "author": {
        "name": "Mike Snitzer",
        "email": "snitzer@redhat.com",
        "time": "Wed Sep 08 18:07:01 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Sep 10 12:35:38 2010 +0200"
      },
      "message": "dm: convey that all flushes are processed as empty\n\nRename __clone_and_map_flush to __clone_and_map_empty_flush for added\nclarity.\n\nSimplify logic associated with REQ_FLUSH conditionals.\n\nIntroduce a BUG_ON() and add a few more helpful comments to the code\nso that it is clear that all flushes are empty.\n\nCleanup __split_and_process_bio() so that an empty flush isn\u0027t processed\nby a \u0027sector_count\u0027 focused while loop.\n\nSigned-off-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "05447420f99c1c44063c7f00054667c022cc1365",
      "tree": "9d70e7c0037d821784b76d9d7d99c174c73d0576",
      "parents": [
        "6a8736d10cb413be95ea443ba40f25c93f4ef9b2"
      ],
      "author": {
        "name": "Kiyoshi Ueda",
        "email": "k-ueda@ct.jp.nec.com",
        "time": "Wed Sep 08 18:07:01 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Sep 10 12:35:38 2010 +0200"
      },
      "message": "dm: fix locking context in queue_io()\n\nNow queue_io() is called from dec_pending(), which may be called with\ninterrupts disabled, so queue_io() must not enable interrupts\nunconditionally and must save/restore the current interrupts status.\n\nSigned-off-by: Kiyoshi Ueda \u003ck-ueda@ct.jp.nec.com\u003e\nSigned-off-by: Jun\u0027ichi Nomura \u003cj-nomura@ce.jp.nec.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "6a8736d10cb413be95ea443ba40f25c93f4ef9b2",
      "tree": "0b0bb541cfe73fbbd25a1b39585a97fa923270d0",
      "parents": [
        "29e4013de7ad950280e4b220894986866697d419"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Sep 08 18:07:00 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Sep 10 12:35:38 2010 +0200"
      },
      "message": "dm: relax ordering of bio-based flush implementation\n\nUnlike REQ_HARDBARRIER, REQ_FLUSH/FUA doesn\u0027t mandate any ordering\nagainst other bio\u0027s.  This patch relaxes ordering around flushes.\n\n* A flush bio is no longer deferred to workqueue directly.  It\u0027s\n  processed like other bio\u0027s but __split_and_process_bio() uses\n  md-\u003eflush_bio as the clone source.  md-\u003eflush_bio is initialized to\n  empty flush during md initialization and shared for all flushes.\n\n* As a flush bio now travels through the same execution path as other\n  bio\u0027s, there\u0027s no need for dedicated error handling path either.  It\n  can use the same error handling path in dec_pending().  Dedicated\n  error handling removed along with md-\u003eflush_error.\n\n* When dec_pending() detects that a flush has completed, it checks\n  whether the original bio has data.  If so, the bio is queued to the\n  deferred list w/ REQ_FLUSH cleared; otherwise, it\u0027s completed.\n\n* As flush sequencing is handled in the usual issue/completion path,\n  dm_wq_work() no longer needs to handle flushes differently.  Now its\n  only responsibility is re-issuing deferred bio\u0027s the same way as\n  _dm_request() would.  REQ_FLUSH handling logic including\n  process_flush() is dropped.\n\n* There\u0027s no reason for queue_io() and dm_wq_work() write lock\n  dm-\u003eio_lock.  queue_io() now only uses md-\u003edeferred_lock and\n  dm_wq_work() read locks dm-\u003eio_lock.\n\n* bio\u0027s no longer need to be queued on the deferred list while a flush\n  is in progress making DMF_QUEUE_IO_TO_THREAD unncessary.  Drop it.\n\nThis avoids stalling the device during flushes and simplifies the\nimplementation.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "29e4013de7ad950280e4b220894986866697d419",
      "tree": "302e99d146940d043696f3e53b3814e65f99b269",
      "parents": [
        "d87f4c14f27dc82d215108d8392a7d26687148a1"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Sep 08 18:07:00 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Sep 10 12:35:38 2010 +0200"
      },
      "message": "dm: implement REQ_FLUSH/FUA support for request-based dm\n\nThis patch converts request-based dm to support the new REQ_FLUSH/FUA.\n\nThe original request-based flush implementation depended on\nrequest_queue blocking other requests while a barrier sequence is in\nprogress, which is no longer true for the new REQ_FLUSH/FUA.\n\nIn general, request-based dm doesn\u0027t have infrastructure for cloning\none source request to multiple targets, but the original flush\nimplementation had a special mostly independent path which can issue\nflushes to multiple targets and sequence them.  However, the\ncapability isn\u0027t currently in use and adds a lot of complexity.\nMoreoever, it\u0027s unlikely to be useful in its current form as it\ndoesn\u0027t make sense to be able to send out flushes to multiple targets\nwhen write requests can\u0027t be.\n\nThis patch rips out special flush code path and deals handles\nREQ_FLUSH/FUA requests the same way as other requests.  The only\nspecial treatment is that REQ_FLUSH requests use the block address 0\nwhen finding target, which is enough for now.\n\n* added BUG_ON(!dm_target_is_valid(ti)) in dm_request_fn() as\n  suggested by Mike Snitzer\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nTested-by: Kiyoshi Ueda \u003ck-ueda@ct.jp.nec.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "d87f4c14f27dc82d215108d8392a7d26687148a1",
      "tree": "55f2a81f3df5d70fd85c4428089f6fe28540bcf4",
      "parents": [
        "3a2edd0d6ddbd5fa3b389ea6db811285415ce6c8"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Sep 03 11:56:19 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Sep 10 12:35:38 2010 +0200"
      },
      "message": "dm: implement REQ_FLUSH/FUA support for bio-based dm\n\nThis patch converts bio-based dm to support REQ_FLUSH/FUA instead of\nnow deprecated REQ_HARDBARRIER.\n\n* -EOPNOTSUPP handling logic dropped.\n\n* Preflush is handled as before but postflush is dropped and replaced\n  with passing down REQ_FUA to member request_queues.  This replaces\n  one array wide cache flush w/ member specific FUA writes.\n\n* __split_and_process_bio() now calls __clone_and_map_flush() directly\n  for flushes and guarantees all FLUSH bio\u0027s going to targets are zero\n`  length.\n\n* It\u0027s now guaranteed that all FLUSH bio\u0027s which are passed onto dm\n  targets are zero length.  bio_empty_barrier() tests are replaced\n  with REQ_FLUSH tests.\n\n* Empty WRITE_BARRIERs are replaced with WRITE_FLUSHes.\n\n* Dropped unlikely() around REQ_FLUSH tests.  Flushes are not unlikely\n  enough to be marked with unlikely().\n\n* Block layer now filters out REQ_FLUSH/FUA bio\u0027s if the request_queue\n  doesn\u0027t support cache flushing.  Advertise REQ_FLUSH | REQ_FUA\n  capability.\n\n* Request based dm isn\u0027t converted yet.  dm_init_request_based_queue()\n  resets flush support to 0 for now.  To avoid disturbing request\n  based dm code, dm-\u003eflush_error is added for bio based dm while\n  requested based dm continues to use dm-\u003ebarrier_error.\n\nLightly tested linear, stripe, raid1, snap and crypt targets.  Please\nproceed with caution as I\u0027m not familiar with the code base.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: dm-devel@redhat.com\nCc: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "4913efe456c987057e5d36a3f0a55422a9072cae",
      "tree": "295f04a7214e1933df3301dd42c12ff3f282a22c",
      "parents": [
        "6958f145459ca7ad9715024de97445addacb8510"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Sep 03 11:56:16 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Sep 10 12:35:36 2010 +0200"
      },
      "message": "block: deprecate barrier and replace blk_queue_ordered() with blk_queue_flush()\n\nBarrier is deemed too heavy and will soon be replaced by FLUSH/FUA\nrequests.  Deprecate barrier.  All REQ_HARDBARRIERs are failed with\n-EOPNOTSUPP and blk_queue_ordered() is replaced with simpler\nblk_queue_flush().\n\nblk_queue_flush() takes combinations of REQ_FLUSH and FUA.  If a\ndevice has write cache and can flush it, it should set REQ_FLUSH.  If\nthe device can handle FUA writes, it should also set REQ_FUA.\n\nAll blk_queue_ordered() users are converted.\n\n* ORDERED_DRAIN is mapped to 0 which is the default value.\n* ORDERED_DRAIN_FLUSH is mapped to REQ_FLUSH.\n* ORDERED_DRAIN_FLUSH_FUA is mapped to REQ_FLUSH | REQ_FUA.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Boaz Harrosh \u003cbharrosh@panasas.com\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nCc: Nick Piggin \u003cnpiggin@kernel.dk\u003e\nCc: Michael S. Tsirkin \u003cmst@redhat.com\u003e\nCc: Jeremy Fitzhardinge \u003cjeremy@xensource.com\u003e\nCc: Chris Wright \u003cchrisw@sous-sol.org\u003e\nCc: FUJITA Tomonori \u003cfujita.tomonori@lab.ntt.co.jp\u003e\nCc: Geert Uytterhoeven \u003cGeert.Uytterhoeven@sonycom.com\u003e\nCc: David S. Miller \u003cdavem@davemloft.net\u003e\nCc: Alasdair G Kergon \u003cagk@redhat.com\u003e\nCc: Pierre Ossman \u003cdrzeus@drzeus.cx\u003e\nCc: Stefan Weinhuber \u003cwein@de.ibm.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "a79245b3e5669dc203fec63644d988c451fe55d5",
      "tree": "8814720781708a95ac0bd23bb5232aa5ed9337bd",
      "parents": [
        "c96053b767d494d7c30e2be68097ac9defa9403f"
      ],
      "author": {
        "name": "Mike Snitzer",
        "email": "snitzer@redhat.com",
        "time": "Thu Aug 12 04:14:24 2010 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Aug 12 04:14:24 2010 +0100"
      },
      "message": "dm: split discard requests on target boundaries\n\nUpdate __clone_and_map_discard to loop across all targets in a DM\ndevice\u0027s table when it processes a discard bio.  If a discard crosses a\ntarget boundary it must be split accordingly.\n\nUpdate __issue_target_requests and __issue_target_request to allow a\ncloned discard bio to have a custom start sector and size.\n\nSigned-off-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "56a67df766039666f61fb15b079f713e44a735ae",
      "tree": "cfeeb4f0a151b440293da593c723e9982368a58f",
      "parents": [
        "06a426cee9b35505aeb7516a67bd26496ca7ed08"
      ],
      "author": {
        "name": "Mike Snitzer",
        "email": "snitzer@redhat.com",
        "time": "Thu Aug 12 04:14:10 2010 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Aug 12 04:14:10 2010 +0100"
      },
      "message": "dm: factor out max_io_len_target_boundary\n\nSplit max_io_len_target_boundary out of max_io_len so that the discard\nsupport can make use of it without duplicating max_io_len code.\n\nAvoiding max_io_len\u0027s split_io logic enables DM\u0027s discard support to\nsubmit the entire discard request to a target.  But discards must still\nbe split on target boundaries.\n\nSigned-off-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "06a426cee9b35505aeb7516a67bd26496ca7ed08",
      "tree": "008d8d20b667b195dbe7e53a53e5003aec0a0a5f",
      "parents": [
        "5ae89a8720c28caf35c4e53711d77df2856c404e"
      ],
      "author": {
        "name": "Mike Snitzer",
        "email": "snitzer@redhat.com",
        "time": "Thu Aug 12 04:14:09 2010 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Aug 12 04:14:09 2010 +0100"
      },
      "message": "dm: use common __issue_target_request for flush and discard support\n\nRename __flush_target to __issue_target_request now that it is used to\nissue both flush and discard requests.\n\nIntroduce __issue_target_requests as a convenient wrapper to\n__issue_target_request \u0027num_flush_requests\u0027 or \u0027num_discard_requests\u0027\ntimes per target.\n\nSigned-off-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "5ae89a8720c28caf35c4e53711d77df2856c404e",
      "tree": "712ddc158309d7ad77e3c19e70f0ae9fafb94446",
      "parents": [
        "5ebaee6d290279d1df6ce45d6d54de8cfc473273"
      ],
      "author": {
        "name": "Mike Snitzer",
        "email": "snitzer@redhat.com",
        "time": "Thu Aug 12 04:14:08 2010 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Aug 12 04:14:08 2010 +0100"
      },
      "message": "dm: linear support discard\n\nAllow discards to be passed through to linear mappings if at least one\nunderlying device supports it.  Discards will be forwarded only to\ndevices that support them.\n\nA target that supports discards should set num_discard_requests to\nindicate how many times each discard request must be submitted to it.\n\nVerify table\u0027s underlying devices support discards prior to setting the\nassociated DM device as capable of discards (via QUEUE_FLAG_DISCARD).\n\nSigned-off-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nReviewed-by: Joe Thornber \u003cthornber@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "57cba5d3658d9fdc019c6af14a2d80aefa651e56",
      "tree": "4905a162b6785e1a1228b8870d8011cf9035147a",
      "parents": [
        "26803b9f06d365122fae82e7554a66ef8278e0bb"
      ],
      "author": {
        "name": "Mike Snitzer",
        "email": "snitzer@redhat.com",
        "time": "Thu Aug 12 04:14:04 2010 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Aug 12 04:14:04 2010 +0100"
      },
      "message": "dm: rename map_info flush_request to target_request_nr\n\n\u0027target_request_nr\u0027 is a more generic name that reflects the fact that\nit will be used for both flush and discard support.\n\nSigned-off-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "4a0b4ddf261fc89c050fe0a10ec57a61251d7ac0",
      "tree": "23854bb6d42e7cedec9100fcdd63c307ee5d1332",
      "parents": [
        "a5664dad7e1a278d2915c2bf79cf42250e12d7db"
      ],
      "author": {
        "name": "Mike Snitzer",
        "email": "snitzer@redhat.com",
        "time": "Thu Aug 12 04:14:02 2010 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Aug 12 04:14:02 2010 +0100"
      },
      "message": "dm: do not initialise full request queue when bio based\n\nChange bio-based mapped devices no longer to have a fully initialized\nrequest_queue (request_fn, elevator, etc).  This means bio-based DM\ndevices no longer register elevator sysfs attributes (\u0027iosched/\u0027 tree\nor \u0027scheduler\u0027 other than \"none\").\n\nIn contrast, a request-based DM device will continue to have a full\nrequest_queue and will register elevator sysfs attributes.  Therefore\na user can determine a DM device\u0027s type by checking if elevator sysfs\nattributes exist.\n\nFirst allocate a minimalist request_queue structure for a DM device\n(needed for both bio and request-based DM).\n\nInitialization of a full request_queue is deferred until it is known\nthat the DM device is request-based, at the end of the table load\nsequence.\n\nFactor DM device\u0027s request_queue initialization:\n- common to both request-based and bio-based into dm_init_md_queue().\n- specific to request-based into dm_init_request_based_queue().\n\nThe md-\u003etype_lock mutex is used to protect md-\u003equeue, in addition to\nmd-\u003etype, during table_load().\n\nA DM device\u0027s first table_load will establish the immutable md-\u003etype.\nBut md-\u003equeue initialization, based on md-\u003etype, may fail at that time\n(because blk_init_allocated_queue cannot allocate memory).  Therefore\nany subsequent table_load must (re)try dm_setup_md_queue independently of\nestablishing md-\u003etype.\n\nSigned-off-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nAcked-by: Kiyoshi Ueda \u003ck-ueda@ct.jp.nec.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "a5664dad7e1a278d2915c2bf79cf42250e12d7db",
      "tree": "3bdbe17f12376c63ea05100c2597757e01dc95e2",
      "parents": [
        "708e929513502fb050c0a3c3ee267cab5b056ded"
      ],
      "author": {
        "name": "Mike Snitzer",
        "email": "snitzer@redhat.com",
        "time": "Thu Aug 12 04:14:01 2010 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Aug 12 04:14:01 2010 +0100"
      },
      "message": "dm ioctl: make bio or request based device type immutable\n\nDetermine whether a mapped device is bio-based or request-based when\nloading its first (inactive) table and don\u0027t allow that to be changed\nlater.\n\nThis patch performs different device initialisation in each of the two\ncases.  (We don\u0027t think it\u0027s necessary to add code to support changing\nbetween the two types.)\n\nAllowed md-\u003etype transitions:\n  DM_TYPE_NONE to DM_TYPE_BIO_BASED\n  DM_TYPE_NONE to DM_TYPE_REQUEST_BASED\n\nWe now prevent table_load from replacing the inactive table with a\nconflicting type of table even after an explicit table_clear.\n\nIntroduce \u0027type_lock\u0027 into the struct mapped_device to protect md-\u003etype\nand to prepare for the next patch that will change the queue\ninitialization and allocate memory while md-\u003etype_lock is held.\n\nSigned-off-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nAcked-by: Kiyoshi Ueda \u003ck-ueda@ct.jp.nec.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n\n drivers/md/dm-ioctl.c    |   15 +++++++++++++++\n drivers/md/dm.c          |   37 ++++++++++++++++++++++++++++++-------\n drivers/md/dm.h          |    5 +++++\n include/linux/dm-ioctl.h |    4 ++--\n 4 files changed, 52 insertions(+), 9 deletions(-)\n"
    },
    {
      "commit": "708e929513502fb050c0a3c3ee267cab5b056ded",
      "tree": "e7b6845a3d53c5b92350f1755b4e89418f0c351c",
      "parents": [
        "87c961cb747fa55b664b76abfcb9d44c14ae851f"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Thu Aug 12 04:14:00 2010 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Aug 12 04:14:00 2010 +0100"
      },
      "message": "dm: skip second flush on bio unsupported error\n\nWhen processing barriers, skip the second flush if processing the bio\nfailed with -EOPNOTSUPP.  This can happen with discard+barrier requests.\nIf the device doesn\u0027t support discard, there would be two useless\nSYNCHRONIZE CACHE commands.  The first dm_flush cannot be so easily\noptimized out, so we leave it there.\n\nPreviously, -EOPNOTSUPP could be received in dec_pending only with empty\nbarriers and we ignored that error, assuming the device not supporting\ncache flushes has cache always consistent.  With the addition of discard\nbarriers, this -EOPNOTSUPP can also be generated by discards and we\nmust record it in md-\u003ebarrier_error for process_barrier.\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "3f77316de0ec0fd208467fbee8d9edc70e2c73b2",
      "tree": "73a91aa53eefe9537432a344ebf116cc7d106e51",
      "parents": [
        "98f332855effef02aeb738e4d62e9a5b903c52fd"
      ],
      "author": {
        "name": "Kiyoshi Ueda",
        "email": "k-ueda@ct.jp.nec.com",
        "time": "Thu Aug 12 04:13:56 2010 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Aug 12 04:13:56 2010 +0100"
      },
      "message": "dm: separate device deletion from dm_put\n\nThis patch separates the device deletion code from dm_put()\nto make sure the deletion happens in the process context.\n\nBy this patch, device deletion always occurs in an ioctl (process)\ncontext and dm_put() can be called in interrupt context.\nAs a result, the request-based dm\u0027s bad dm_put() usage pointed out\nby Mikulas below disappears.\n    http://marc.info/?l\u003ddm-devel\u0026m\u003d126699981019735\u0026w\u003d2\n\nWithout this patch, I confirmed there is a case to crash the system:\n    dm_put() \u003d\u003e dm_table_destroy() \u003d\u003e vfree() \u003d\u003e BUG_ON(in_interrupt())\n\nSome more backgrounds and details:\nIn request-based dm, a device opener can remove a mapped_device\nwhile the last request is still completing, because bios in the last\nrequest complete first and then the device opener can close and remove\nthe mapped_device before the last request completes:\n  CPU0                                          CPU1\n  \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n  \u003c\u003cINTERRUPT\u003e\u003e\n  blk_end_request_all(clone_rq)\n    blk_update_request(clone_rq)\n      bio_endio(clone_bio) \u003d\u003d end_clone_bio\n        blk_update_request(orig_rq)\n          bio_endio(orig_bio)\n                                                \u003c\u003cI/O completed\u003e\u003e\n                                                dm_blk_close()\n                                                dev_remove()\n                                                  dm_put(md)\n                                                    \u003c\u003cFree md\u003e\u003e\n   blk_finish_request(clone_rq)\n     ....\n     dm_end_request(clone_rq)\n       free_rq_clone(clone_rq)\n       blk_end_request_all(orig_rq)\n       rq_completed(md)\n\nSo request-based dm used dm_get()/dm_put() to hold md for each I/O\nuntil its request completion handling is fully done.\nHowever, the final dm_put() can call the device deletion code which\nmust not be run in interrupt context and may cause kernel panic.\n\nTo solve the problem, this patch moves the device deletion code,\ndm_destroy(), to predetermined places that is actually deleting\nthe mapped_device in ioctl (process) context, and changes dm_put()\njust to decrement the reference count of the mapped_device.\nBy this change, dm_put() can be used in any context and the symmetric\nmodel below is introduced:\n    dm_create():  create a mapped_device\n    dm_destroy(): destroy a mapped_device\n    dm_get():     increment the reference count of a mapped_device\n    dm_put():     decrement the reference count of a mapped_device\n\ndm_destroy() waits for all references of the mapped_device to disappear,\nthen deletes the mapped_device.\n\ndm_destroy() uses active waiting with msleep(1), since deleting\nthe mapped_device isn\u0027t performance-critical task.\nAnd since at this point, nobody opens the mapped_device and no new\nreference will be taken, the pending counts are just for racing\ncompleting activity and will eventually decrease to zero.\n\nFor the unlikely case of the forced module unload, dm_destroy_immediate(),\nwhich doesn\u0027t wait and forcibly deletes the mapped_device, is also\nintroduced and used in dm_hash_remove_all().  Otherwise, \"rmmod -f\"\nmay be stuck and never return.\nAnd now, because the mapped_device is deleted at this point, subsequent\naccesses to the mapped_device may cause NULL pointer references.\n\nCc: stable@kernel.org\nSigned-off-by: Kiyoshi Ueda \u003ck-ueda@ct.jp.nec.com\u003e\nSigned-off-by: Jun\u0027ichi Nomura \u003cj-nomura@ce.jp.nec.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "abdc568b0540bec6d3e0afebac496adef1189b77",
      "tree": "1c88c8de6e90b7f9cbbc788fa9e3fb539f1d231c",
      "parents": [
        "856a6f1dbd8940e72755af145ebcd806408ecedd"
      ],
      "author": {
        "name": "Kiyoshi Ueda",
        "email": "k-ueda@ct.jp.nec.com",
        "time": "Thu Aug 12 04:13:54 2010 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Aug 12 04:13:54 2010 +0100"
      },
      "message": "dm: prevent access to md being deleted\n\nThis patch prevents access to mapped_device which is being deleted.\n\nCurrently, even after a mapped_device has been removed from the hash,\nit could be accessed through idr_find() using minor number.\nThat could cause a race and NULL pointer reference below:\n  CPU0                          CPU1\n  ------------------------------------------------------------------\n  dev_remove(param)\n    down_write(_hash_lock)\n    dm_lock_for_deletion(md)\n      spin_lock(_minor_lock)\n      set_bit(DMF_DELETING)\n      spin_unlock(_minor_lock)\n    __hash_remove(hc)\n    up_write(_hash_lock)\n                                dev_status(param)\n                                  md \u003d find_device(param)\n                                         down_read(_hash_lock)\n                                         __find_device_hash_cell(param)\n                                           dm_get_md(param-\u003edev)\n                                             md \u003d dm_find_md(dev)\n                                                    spin_lock(_minor_lock)\n                                                    md \u003d idr_find(MINOR(dev))\n                                                    spin_unlock(_minor_lock)\n    dm_put(md)\n      free_dev(md)\n                                             dm_get(md)\n                                         up_read(_hash_lock)\n                                  __dev_status(md, param)\n                                  dm_put(md)\n\nThis patch fixes such problems.\n\nSigned-off-by: Kiyoshi Ueda \u003ck-ueda@ct.jp.nec.com\u003e\nSigned-off-by: Jun\u0027ichi Nomura \u003cj-nomura@ce.jp.nec.com\u003e\nCc: stable@kernel.org\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "6e9624b8caec290d28b4c6d9ec75749df6372b87",
      "tree": "47225b544e1da82742795553dc4e8aa70c17afdc",
      "parents": [
        "8a6cfeb6deca3a8fefd639d898b0d163c0b5d368"
      ],
      "author": {
        "name": "Arnd Bergmann",
        "email": "arnd@arndb.de",
        "time": "Sat Aug 07 18:25:34 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sat Aug 07 18:25:34 2010 +0200"
      },
      "message": "block: push down BKL into .open and .release\n\nThe open and release block_device_operations are currently\ncalled with the BKL held. In order to change that, we must\nfirst make sure that all drivers that currently rely\non this have no regressions.\n\nThis blindly pushes the BKL into all .open and .release\noperations for all block drivers to prepare for the\nnext step. The drivers can subsequently replace the BKL\nwith their own locks or remove it completely when it can\nbe shown that it is not needed.\n\nThe functions blkdev_get and blkdev_put are the only\nremaining users of the big kernel lock in the block\nlayer, besides a few uses in the ioctl code, none\nof which need to serialize with blkdev_{get,put}.\n\nMost of these two functions is also under the protection\nof bdev-\u003ebd_mutex, including the actual calls to\n-\u003eopen and -\u003erelease, and the common code does not\naccess any global data structures that need the BKL.\n\nSigned-off-by: Arnd Bergmann \u003carnd@arndb.de\u003e\nAcked-by: Christoph Hellwig \u003chch@infradead.org\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "00fff26539bfe3fad21c164fc4002d9ede056fb0",
      "tree": "4909c8eed03133b1d46f689e465ed1f579b8e282",
      "parents": [
        "afc23068103ccfbf1917eb2a007bc15ab5418cc9"
      ],
      "author": {
        "name": "FUJITA Tomonori",
        "email": "fujita.tomonori@lab.ntt.co.jp",
        "time": "Sat Jul 03 17:45:40 2010 +0900"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sat Aug 07 18:24:15 2010 +0200"
      },
      "message": "block: remove q-\u003eprepare_flush_fn completely\n\nThis removes q-\u003eprepare_flush_fn completely (changes the\nblk_queue_ordered API).\n\nSigned-off-by: FUJITA Tomonori \u003cfujita.tomonori@lab.ntt.co.jp\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "144d6ed551ce430084489b198826c89bac5680dc",
      "tree": "78b59ca5c4487784bfc2a16bcd91c0cb41631f8a",
      "parents": [
        "98d8c8f40ed72d997e50bc107a5cc1a6cee19e76"
      ],
      "author": {
        "name": "FUJITA Tomonori",
        "email": "fujita.tomonori@lab.ntt.co.jp",
        "time": "Sat Jul 03 17:45:37 2010 +0900"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sat Aug 07 18:24:14 2010 +0200"
      },
      "message": "dm: stop using q-\u003eprepare_flush_fn\n\nuse REQ_FLUSH flag instead.\n\nSigned-off-by: FUJITA Tomonori \u003cfujita.tomonori@lab.ntt.co.jp\u003e\nCc: Alasdair G Kergon \u003cagk@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "7b6d91daee5cac6402186ff224c3af39d79f4a0e",
      "tree": "b1518cf0b6c301178e0a320f80610cd5b3aa7625",
      "parents": [
        "33659ebbae262228eef4e0fe990f393d1f0ed941"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Sat Aug 07 18:20:39 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sat Aug 07 18:20:39 2010 +0200"
      },
      "message": "block: unify flags for struct bio and struct request\n\nRemove the current bio flags and reuse the request flags for the bio, too.\nThis allows to more easily trace the type of I/O from the filesystem\ndown to the block driver.  There were two flags in the bio that were\nmissing in the requests:  BIO_RW_UNPLUG and BIO_RW_AHEAD.  Also I\u0027ve\nrenamed two request flags that had a superflous RW in them.\n\nNote that the flags are in bio.h despite having the REQ_ name - as\nblkdev.h includes bio.h that is the only way to go for now.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "33659ebbae262228eef4e0fe990f393d1f0ed941",
      "tree": "fcb537f09359c8dad3a6f6e16dc4319562dc42cc",
      "parents": [
        "7e005f79791dcd58436c88ded4a7f5aed1b82147"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Sat Aug 07 18:17:56 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sat Aug 07 18:17:56 2010 +0200"
      },
      "message": "block: remove wrappers for request type/flags\n\nRemove all the trivial wrappers for the cmd_type and cmd_flags fields in\nstruct requests.  This allows much easier grepping for different request\ntypes instead of unwinding through macros.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "3abf85b5b5851b5f28d3d8a920ebb844edd08352",
      "tree": "b59e5c9322cc116b0ce5dc183d3b8286080c6031",
      "parents": [
        "a97f925a32aad2a37971d7bfb657006acf04e42d"
      ],
      "author": {
        "name": "Peter Rajnoha",
        "email": "prajnoha@redhat.com",
        "time": "Sat Mar 06 02:32:31 2010 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Sat Mar 06 02:32:31 2010 +0000"
      },
      "message": "dm ioctl: introduce flag indicating uevent was generated\n\nSet a new DM_UEVENT_GENERATED_FLAG when returning from ioctls to\nindicate that a uevent was actually generated.  This tells the userspace\ncaller that it may need to wait for the event to be processed.\n\nSigned-off-by: Peter Rajnoha \u003cprajnoha@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "a97f925a32aad2a37971d7bfb657006acf04e42d",
      "tree": "38c74c60f756dd05611138f864340a31f4fc393f",
      "parents": [
        "8215d6ec5fee1e76545decea2cd73717efb5cb42"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Sat Mar 06 02:32:29 2010 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Sat Mar 06 02:32:29 2010 +0000"
      },
      "message": "dm: free dm_io before bio_endio not after\n\nFree the dm_io structure before calling bio_endio() instead of after it,\nto ensure that the io_pool containing it is not referenced after it is\nfreed.\n\nThis partially fixes a problem described here\n  https://www.redhat.com/archives/dm-devel/2010-February/msg00109.html\n\nthread 1:\nbio_endio(bio, io_error);\n/* scheduling happens */\n\t\t\t\t\tthread 2:\n\t\t\t\t\tclose the device\n\t\t\t\t\tremove the device\nthread 1:\nfree_io(md, io);\n\nThread 2, when removing the device, sees non-empty md-\u003eio_pool (because the\nio hasn\u0027t been freed by thread 1 yet) and may crash with BUG in mempool_free.\nThread 1 may also crash, when freeing into a nonexisting mempool.\n\nTo fix this we must make sure that bio_endio() is the last call and\nthe md structure is not accessed afterwards.\n\nThere is another bio_endio in process_barrier, but it is called from the thread\nand the thread is destroyed prior to freeing the mempools, so this call is\nnot affected by the bug.\n\nA similar bug exists with module unloads - the module may be unloaded\nimmediately after bio_endio - but that is more difficult to fix.\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nCc: stable@kernel.org\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "ecdb2e257abc33ae6798d3ccba87bdafa40ef6b6",
      "tree": "497db6a95a9f06270506f6a75354d5df855d5a66",
      "parents": [
        "f7b934c8127deebf4eb56fbe4a4ae0da16b6dbcd"
      ],
      "author": {
        "name": "Kiyoshi Ueda",
        "email": "k-ueda@ct.jp.nec.com",
        "time": "Sat Mar 06 02:29:52 2010 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Sat Mar 06 02:29:52 2010 +0000"
      },
      "message": "dm table: remove dm_get from dm_table_get_md\n\nRemove the dm_get() in dm_table_get_md() because dm_table_get_md() could\nbe called from presuspend/postsuspend, which are called while\nmapped_device is in DMF_FREEING state, where dm_get() is not allowed.\n\nJustification for that is the lifetime of both objects: As far as the\ncurrent dm design/implementation, mapped_device is never freed while\ntargets are doing something, because dm core waits for targets to become\nquiet in dm_put() using presuspend/postsuspend.  So targets should be\nable to touch mapped_device without holding reference count of the\nmapped_device, and we should allow targets to touch mapped_device even\nif it is in DMF_FREEING state.\n\nBackgrounds:\nI\u0027m trying to remove the multipath internal queue, since dm core now has\na generic queue for request-based dm.  In the patch-set, the multipath\ntarget wants to request dm core to start/stop queue.  One of such\nstart/stop requests can happen during postsuspend() while the target\nwaits for pg-init to complete, because the target stops queue when\nstarting pg-init and tries to restart it when completing pg-init.  Since\nqueue belongs to mapped_device, it involves calling dm_table_get_md()\nand dm_put().  On the other hand, postsuspend() is called in dm_put()\nfor mapped_device which is in DMF_FREEING state, and that triggers\nBUG_ON(DMF_FREEING) in the 2nd dm_put().\n\nI had tried to solve this problem by changing only multipath not to\ntouch mapped_device which is in DMF_FREEING state, but I couldn\u0027t and I\ncame up with a question why we need dm_get() in dm_table_get_md().\n\nSigned-off-by: Kiyoshi Ueda \u003ck-ueda@ct.jp.nec.com\u003e\nSigned-off-by: Jun\u0027ichi Nomura \u003cj-nomura@ce.jp.nec.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "9eef87da2a8ea4920e0d913ff977cac064b68ee0",
      "tree": "811eb358ce2fa66517b0cf59501522c17dfbe6bc",
      "parents": [
        "558569aa9d83e016295bac77d900342908d7fd85"
      ],
      "author": {
        "name": "Kiyoshi Ueda",
        "email": "k-ueda@ct.jp.nec.com",
        "time": "Tue Feb 16 18:43:01 2010 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Feb 16 18:43:01 2010 +0000"
      },
      "message": "dm mpath: fix stall when requeueing io\n\nThis patch fixes the problem that system may stall if target\u0027s -\u003emap_rq\nreturns DM_MAPIO_REQUEUE in map_request().\nE.g. stall happens on 1 CPU box when a dm-mpath device with queue_if_no_path\n     bounces between all-paths-down and paths-up on I/O load.\n\nWhen target\u0027s -\u003emap_rq returns DM_MAPIO_REQUEUE, map_request() requeues\nthe request and returns to dm_request_fn().  Then, dm_request_fn()\ndoesn\u0027t exit the I/O dispatching loop and continues processing\nthe requeued request again.\nThis map and requeue loop can be done with interrupt disabled,\nso 1 CPU system can be stalled if this situation happens.\n\nFor example, commands below can stall my 1 CPU box within 1 minute or so:\n  # dmsetup table mp\n  mp: 0 2097152 multipath 1 queue_if_no_path 0 1 1 service-time 0 1 2 8:144 1 1\n  # while true; do dd if\u003d/dev/mapper/mp of\u003d/dev/null bs\u003d1M count\u003d100; done \u0026\n  # while true; do \\\n  \u003e dmsetup message mp 0 \"fail_path 8:144\" \\\n  \u003e dmsetup suspend --noflush mp \\\n  \u003e dmsetup resume mp \\\n  \u003e dmsetup message mp 0 \"reinstate_path 8:144\" \\\n  \u003e done\n\nTo fix the problem above, this patch changes dm_request_fn() to exit\nthe I/O dispatching loop once if a request is requeued in map_request().\n\nSigned-off-by: Kiyoshi Ueda \u003ck-ueda@ct.jp.nec.com\u003e\nSigned-off-by: Jun\u0027ichi Nomura \u003cj-nomura@ce.jp.nec.com\u003e\nCc: stable@kernel.org\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "64dbce580d5a7e89e8de20b91f80c7267cdad91d",
      "tree": "9d8a8bb8afd9d7b856d90abd7c5c35137547d09a",
      "parents": [
        "4f186f8bbfa92bf1a2b39f7a8674348bfdba9437"
      ],
      "author": {
        "name": "Kiyoshi Ueda",
        "email": "k-ueda@ct.jp.nec.com",
        "time": "Thu Dec 10 23:52:27 2009 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Dec 10 23:52:27 2009 +0000"
      },
      "message": "dm: export suspended state to targets\n\nThis patch adds the exported dm_suspended() function so that targets\ncan check whether or not they are suspended.\n\nSigned-off-by: Kiyoshi Ueda \u003ck-ueda@ct.jp.nec.com\u003e\nSigned-off-by: Jun\u0027ichi Nomura \u003cj-nomura@ce.jp.nec.com\u003e\nCc: Mike Anderson \u003candmike@linux.vnet.ibm.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "4f186f8bbfa92bf1a2b39f7a8674348bfdba9437",
      "tree": "9fd65776c0314abf6774f30e542d565e22ae4698",
      "parents": [
        "4d4471cb5c1ec426c0f24818b270dc7b3ad7e655"
      ],
      "author": {
        "name": "Kiyoshi Ueda",
        "email": "k-ueda@ct.jp.nec.com",
        "time": "Thu Dec 10 23:52:26 2009 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Dec 10 23:52:26 2009 +0000"
      },
      "message": "dm: rename dm_suspended to dm_suspended_md\n\nThis patch renames dm_suspended() to dm_suspended_md() and\nkeeps it internal to dm.\nNo functional change.\n\nSigned-off-by: Kiyoshi Ueda \u003ck-ueda@ct.jp.nec.com\u003e\nSigned-off-by: Jun\u0027ichi Nomura \u003cj-nomura@ce.jp.nec.com\u003e\nCc: Mike Anderson \u003candmike@linux.vnet.ibm.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "4d4471cb5c1ec426c0f24818b270dc7b3ad7e655",
      "tree": "37407a97b8a9a96bae462860b1ed5c13da3da24f",
      "parents": [
        "61afef614b013ee1b767cdd10325acae1db1f4d2"
      ],
      "author": {
        "name": "Kiyoshi Ueda",
        "email": "k-ueda@ct.jp.nec.com",
        "time": "Thu Dec 10 23:52:26 2009 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Dec 10 23:52:26 2009 +0000"
      },
      "message": "dm: swap target postsuspend call and setting suspended flag\n\nThis patch moves DMF_SUSPENDED flag set before postsuspend.\nNo one should care about the ordering, because the flag set and\nthe postsuspend are protected by a single lock, md-\u003esuspend_lock,\nand all strict flag-checkers take the lock.\n\nSigned-off-by: Kiyoshi Ueda \u003ck-ueda@ct.jp.nec.com\u003e\nSigned-off-by: Jun\u0027ichi Nomura \u003cj-nomura@ce.jp.nec.com\u003e\nCc: Mike Anderson \u003candmike@linux.vnet.ibm.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "6db4ccd6357f28c9ef7058b3bc48904c4b2ac419",
      "tree": "affd099b88123c0717ec4bbfbb2503c3d7cc91f8",
      "parents": [
        "c1f0c183f6acc6d32c5a1d0249ec68bf783af7b1"
      ],
      "author": {
        "name": "Jun\u0027ichi Nomura",
        "email": "j-nomura@ce.jp.nec.com",
        "time": "Thu Dec 10 23:52:25 2009 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Dec 10 23:52:25 2009 +0000"
      },
      "message": "dm: trace request based remapping\n\nThis patch adds a remapping trace to request-based dm.\nBIO-based dm already has the equivalent tracepoint.\n\nFor example, under this dm stack (linear LV on multipath):\n  # dmsetup ls --tree -o ascii\n  vg-lv0 (253:1)\n   `-mpath0 (253:0)\n      |- (8:160)\n      |- (66:80)\n      |- (65:176)\n      `- (65:160)\n\nTrace of \u0027dd of\u003d/dev/vg/lv0 bs\u003d128k count\u003d1 oflag\u003ddirect\u0027 looks like this:\n\nwithout the patch:\n  dd-6674  [000]   539.727384: block_bio_queue: 253,1 WS 0 + 256 [dd]\n  dd-6674  [000]   539.727392: block_remap: 253,0 WS 384 + 256 \u003c- (253,1) 0\n  dd-6674  [000]   539.727394: block_bio_queue: 253,0 WS 384 + 256 [dd]\n  dd-6674  [000]   539.727405: block_getrq: 253,0 WS 384 + 256 [dd]\n  dd-6674  [000]   539.727409: block_plug: [dd]\n  dd-6674  [000]   539.727410: block_rq_insert: 253,0 W 0 () 384 + 256 [dd]\n  dd-6674  [000]   539.727416: block_rq_issue: 253,0 W 0 () 384 + 256 [dd]\n  dd-6674  [000]   539.727426: block_rq_insert: 65,176 W 0 () 384 + 256 [dd]\n  dd-6674  [000]   539.727427: block_rq_issue: 65,176 W 0 () 384 + 256 [dd]\n  ...\n\nand with the patch: (the line with \u0027**\u0027 is the trace added by this patch)\n  dd-6617  [002]   162.914301: block_bio_queue: 253,1 WS 0 + 256 [dd]\n  dd-6617  [002]   162.914314: block_remap: 253,0 WS 384 + 256 \u003c- (253,1) 0\n  dd-6617  [002]   162.914316: block_bio_queue: 253,0 WS 384 + 256 [dd]\n  dd-6617  [002]   162.914331: block_getrq: 253,0 WS 384 + 256 [dd]\n  dd-6617  [002]   162.914335: block_plug: [dd]\n  dd-6617  [002]   162.914337: block_rq_insert: 253,0 W 0 () 384 + 256 [dd]\n  dd-6617  [002]   162.914347: block_rq_issue: 253,0 W 0 () 384 + 256 [dd]\n**dd-6617  [002]   162.914356: block_rq_remap: 65,176 W 384 + 256 \u003c- (253,0) 384\n  dd-6617  [002]   162.914358: block_rq_insert: 65,176 W 0 () 384 + 256 [dd]\n  dd-6617  [002]   162.914359: block_rq_issue: 65,176 W 0 () 384 + 256 [dd]\n  ...\n\nSigned-off-by: Kiyoshi Ueda \u003ck-ueda@ct.jp.nec.com\u003e\nSigned-off-by: Jun\u0027ichi Nomura \u003cj-nomura@ce.jp.nec.com\u003e\nCc: Jens Axboe \u003cjens.axboe@oracle.com\u003e\nCc: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "042d2a9bcd80fe12d4b0871706aa9dd2231e8238",
      "tree": "69a7b6675e2cd020807729de50cd99747f6470f4",
      "parents": [
        "a794015597a2d9b437470c7692aac77e5fc08cd2"
      ],
      "author": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Dec 10 23:52:24 2009 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Dec 10 23:52:24 2009 +0000"
      },
      "message": "dm: keep old table until after resume succeeded\n\nWhen swapping a new table into place, retain the old table until\nits replacement is in place.\n\nAn old check for an empty table is removed because this is enforced\nin populate_table().\n\n__unbind() becomes redundant when followed by __bind().\n\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "a794015597a2d9b437470c7692aac77e5fc08cd2",
      "tree": "d25dd56edd53f8f1890ed005b5531ccfa07c28ee",
      "parents": [
        "1d0f3ce83200edc5d43723c77c62b09ad6560294"
      ],
      "author": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Dec 10 23:52:23 2009 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Dec 10 23:52:23 2009 +0000"
      },
      "message": "dm: bind new table before destroying old\n\nWhen replacing a mapped device\u0027s table during a \u0027resume\u0027, delay the\ndestruction of the old table until the new one is successfully in place.\n\nThis will make it easier for a later patch to transfer internal state\ninformation from the old table to the new one (something we do not currently\nsupport) while giving us more options for reversion if a later part\nof the operation fails.\n\nDevices are always in the suspended state during dm_swap_table().\nThis patch reinforces the requirement that all I/O must have been\nflushed from the table targets while in this state (including any in\nworkqueues).  In the case of \u0027noflush\u0027 suspending, unprocessed\nI/O should have been \u0027pushed back\u0027 to the dm core prior to this point,\nfor resubmission after the new table is in place.\n\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "432a212c0dd0f4ca386cf37c5b740ac9dbda4479",
      "tree": "0eb05111e9290856c9e7543e5d12e1e3ee0c8ef3",
      "parents": [
        "6df400ab64c68fc4072a13019fc20fd7e3d51303"
      ],
      "author": {
        "name": "Mike Anderson",
        "email": "andmike@linux.vnet.ibm.com",
        "time": "Thu Dec 10 23:52:20 2009 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Dec 10 23:52:20 2009 +0000"
      },
      "message": "dm: add dm_deleting_md function\n\nAdd dm_deleting_md to check whether or not a given mapped\ndevice is currently being deleted.\n\nSigned-off-by: Mike Anderson \u003candmike@linux.vnet.ibm.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "7c6664114b7342a36f14a6836564e865669b3cea",
      "tree": "0f00dcd89bec3ae1e4003b23018a2b1bf5464ff0",
      "parents": [
        "d0bcb8786532b01206f04258eb6b7d4ac858436a"
      ],
      "author": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Dec 10 23:52:19 2009 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Dec 10 23:52:19 2009 +0000"
      },
      "message": "dm: rename dm_get_table to dm_get_live_table\n\nRename dm_get_table to dm_get_live_table.\n\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "d0bcb8786532b01206f04258eb6b7d4ac858436a",
      "tree": "49c27a02ebd5f58072f5d2234609fa0e6816038e",
      "parents": [
        "980691e5f3a1b5ebbb2d34014e028fd7f1c6e4fb"
      ],
      "author": {
        "name": "Kiyoshi Ueda",
        "email": "k-ueda@ct.jp.nec.com",
        "time": "Thu Dec 10 23:52:18 2009 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Dec 10 23:52:18 2009 +0000"
      },
      "message": "dm: add request based barrier support\n\nThis patch adds barrier support for request-based dm.\n\nCORE DESIGN\n\nThe design is basically same as bio-based dm, which emulates barrier\nby mapping empty barrier bios before/after a barrier I/O.\nBut request-based dm has been using struct request_queue for I/O\nqueueing, so the block-layer\u0027s barrier mechanism can be used.\n\no Summary of the block-layer\u0027s behavior (which is depended by dm-core)\n  Request-based dm uses QUEUE_ORDERED_DRAIN_FLUSH ordered mode for\n  I/O barrier.  It means that when an I/O requiring barrier is found\n  in the request_queue, the block-layer makes pre-flush request and\n  post-flush request just before and just after the I/O respectively.\n\n  After the ordered sequence starts, the block-layer waits for all\n  in-flight I/Os to complete, then gives drivers the pre-flush request,\n  the barrier I/O and the post-flush request one by one.\n  It means that the request_queue is stopped automatically by\n  the block-layer until drivers complete each sequence.\n\no dm-core\n  For the barrier I/O, treats it as a normal I/O, so no additional\n  code is needed.\n\n  For the pre/post-flush request, flushes caches by the followings:\n    1. Make the number of empty barrier requests required by target\u0027s\n       num_flush_requests, and map them (dm_rq_barrier()).\n    2. Waits for the mapped barriers to complete (dm_rq_barrier()).\n       If error has occurred, save the error value to md-\u003ebarrier_error\n       (dm_end_request()).\n       (*) Basically, the first reported error is taken.\n           But -EOPNOTSUPP supersedes any error and DM_ENDIO_REQUEUE\n           follows.\n    3. Requeue the pre/post-flush request if the error value is\n       DM_ENDIO_REQUEUE.  Otherwise, completes with the error value\n       (dm_rq_barrier_work()).\n  The pre/post-flush work above is done in the kernel thread (kdmflush)\n  context, since memory allocation which might sleep is needed in\n  dm_rq_barrier() but sleep is not allowed in dm_request_fn(), which is\n  an irq-disabled context.\n  Also, clones of the pre/post-flush request share an original, so\n  such clones can\u0027t be completed using the softirq context.\n  Instead, complete them in the context of underlying device drivers.\n  It should be safe since there is no I/O dispatching during\n  the completion of such clones.\n\n  For suspend, the workqueue of kdmflush needs to be flushed after\n  the request_queue has been stopped.  Otherwise, the next flush work\n  can be kicked even after the suspend completes.\n\nTARGET INTERFACE\n\nNo new interface is added.\nJust use the existing num_flush_requests in struct target_type\nas same as bio-based dm.\n\nSigned-off-by: Kiyoshi Ueda \u003ck-ueda@ct.jp.nec.com\u003e\nSigned-off-by: Jun\u0027ichi Nomura \u003cj-nomura@ce.jp.nec.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "980691e5f3a1b5ebbb2d34014e028fd7f1c6e4fb",
      "tree": "a4d593cf3818a54c41e6a4115cad63128b738c0b",
      "parents": [
        "11a68244e16b0c35e122dd55b4e7c595e0fb67a1"
      ],
      "author": {
        "name": "Kiyoshi Ueda",
        "email": "k-ueda@ct.jp.nec.com",
        "time": "Thu Dec 10 23:52:17 2009 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Dec 10 23:52:17 2009 +0000"
      },
      "message": "dm: move dm_end_request\n\nThis patch moves dm_end_request() to make the next patch more readable.\nNo functional change.\n\nSigned-off-by: Kiyoshi Ueda \u003ck-ueda@ct.jp.nec.com\u003e\nSigned-off-by: Jun\u0027ichi Nomura \u003cj-nomura@ce.jp.nec.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "11a68244e16b0c35e122dd55b4e7c595e0fb67a1",
      "tree": "ac982eb9abf6eca76ae35a9e0900323b54bb3ab9",
      "parents": [
        "b4324feeae304ae39e631a254d238a7d63be004b"
      ],
      "author": {
        "name": "Kiyoshi Ueda",
        "email": "k-ueda@ct.jp.nec.com",
        "time": "Thu Dec 10 23:52:17 2009 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Dec 10 23:52:17 2009 +0000"
      },
      "message": "dm: refactor request based completion functions\n\nThis patch factors out the clone completion code, dm_done(),\nfrom dm_softirq_done() in preparation for a subsequent patch.\nNo functional change.\n\ndm_done() will be used in barrier completion, which can\u0027t use and\ndoesn\u0027t need softirq.  The softirq_done callback needs to get a clone\nfrom an original request but it can\u0027t in the case of barrier, where\nan original request is shared by multiple clones.  On the other hand,\nthe completion of barrier clones doesn\u0027t involve re-submitting requests,\nwhich was the primary reason of the need for softirq.\n\nSigned-off-by: Kiyoshi Ueda \u003ck-ueda@ct.jp.nec.com\u003e\nSigned-off-by: Jun\u0027ichi Nomura \u003cj-nomura@ce.jp.nec.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "b4324feeae304ae39e631a254d238a7d63be004b",
      "tree": "12495362c9301129912a8d706de0f6cdb7de8ccf",
      "parents": [
        "9f518b27cf682dd5155a4c1679d52cd4b5be82f2"
      ],
      "author": {
        "name": "Kiyoshi Ueda",
        "email": "k-ueda@ct.jp.nec.com",
        "time": "Thu Dec 10 23:52:16 2009 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Dec 10 23:52:16 2009 +0000"
      },
      "message": "dm: use md pending for in flight IO counting\n\nThis patch changes the counter for the number of in_flight I/Os\nto md-\u003epending from q-\u003ein_flight in preparation for a later patch.\nNo functional change.\n\nRequest-based dm used q-\u003ein_flight to count the number of in-flight\nclones assuming the counter is always incremented for an in-flight\noriginal request and original:clone is 1:1 relationship.\nHowever, it this no longer true for barrier requests.\nSo use md-\u003epending to count the number of in-flight clones.\n\nSigned-off-by: Kiyoshi Ueda \u003ck-ueda@ct.jp.nec.com\u003e\nSigned-off-by: Jun\u0027ichi Nomura \u003cj-nomura@ce.jp.nec.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "9f518b27cf682dd5155a4c1679d52cd4b5be82f2",
      "tree": "3515037fb33d11065cbc02a8aa8c13ef6a406fa9",
      "parents": [
        "6facdaff229f2b25d0de82be9be99b9f562e72ba"
      ],
      "author": {
        "name": "Kiyoshi Ueda",
        "email": "k-ueda@ct.jp.nec.com",
        "time": "Thu Dec 10 23:52:16 2009 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Dec 10 23:52:16 2009 +0000"
      },
      "message": "dm: simplify request based suspend\n\nThe semantics of bio-based dm were changed recently in the case of\nsuspend with \"--nolockfs\" but without \"--noflush\".\nBefore 2.6.30, I/Os submitted before the suspend invocation were always\nflushed.  From 2.6.30 onwards, I/Os submitted before the suspend\ninvocation might not be flushed.  (For details, see\nhttp://marc.info/?t\u003d123994433400003\u0026r\u003d1\u0026w\u003d2)\n\nThis patch brings the behaviour of request-based dm into line with\nbio-based dm, simplifying the code and preparing for a subsequent patch\nthat will wait for all in_flight I/Os to complete without stopping\nrequest_queue and use dm_wait_for_completion() for it.\n\nThis change in semantics simplifies the suspend code as follows:\n  o Suspend is implemented as stopping request_queue\n    in request-based dm, and all I/Os are queued in the request_queue\n    even after suspend is invoked.\n  o In the old semantics, we had to track whether I/Os were\n    queued before or after the suspend invocation, so a special\n    barrier-like request called \u0027suspend marker\u0027 was introduced.\n  o With the new semantics, we don\u0027t need to flush any I/O\n    so we can remove the marker and the code related to the marker\n    handling and I/O flushing.\n\nAfter removing this codes, the suspend sequence is now:\n  1. Flush all I/Os by lock_fs() if needed.\n  2. Stop dispatching any I/O by stopping the request_queue.\n  3. Wait for all in-flight I/Os to be completed or requeued.\n\nSigned-off-by: Kiyoshi Ueda \u003ck-ueda@ct.jp.nec.com\u003e\nSigned-off-by: Jun\u0027ichi Nomura \u003cj-nomura@ce.jp.nec.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "6facdaff229f2b25d0de82be9be99b9f562e72ba",
      "tree": "4faa8e98b33e804525c7873d160cb0d7014a2a0d",
      "parents": [
        "0888564393a1277ce2d0564d819e1bcff1120343"
      ],
      "author": {
        "name": "Kiyoshi Ueda",
        "email": "k-ueda@ct.jp.nec.com",
        "time": "Thu Dec 10 23:52:15 2009 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Dec 10 23:52:15 2009 +0000"
      },
      "message": "dm: abstract clone_rq\n\nThis patch factors out the request cloning code in dm_prep_fn()\nas clone_rq().  No functional change.\n\nThis patch is a preparation for a later patch in this series which needs to\nmake clones from an original barrier request.\n\nSigned-off-by: Kiyoshi Ueda \u003ck-ueda@ct.jp.nec.com\u003e\nSigned-off-by: Jun\u0027ichi Nomura \u003cj-nomura@ce.jp.nec.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "0888564393a1277ce2d0564d819e1bcff1120343",
      "tree": "cac54095a48b4662ee5a3ff17550693300be2692",
      "parents": [
        "598de40947909e6b948569710383661ecc0ddc8e"
      ],
      "author": {
        "name": "Kiyoshi Ueda",
        "email": "k-ueda@ct.jp.nec.com",
        "time": "Thu Dec 10 23:52:15 2009 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Dec 10 23:52:15 2009 +0000"
      },
      "message": "dm: pass gfp_mask to alloc_rq_tio\n\nThis patch adds the gfp_mask argument to alloc_rq_tio().\nNo functional change.\n\nThis patch is a preparation for a later patch in this series which needs to\nallocate tio (for barrier I/O) with different allocation flag (GFP_NOIO) from\nthe one in the normal I/O code path.\n\nSigned-off-by: Kiyoshi Ueda \u003ck-ueda@ct.jp.nec.com\u003e\nSigned-off-by: Jun\u0027ichi Nomura \u003cj-nomura@ce.jp.nec.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "598de40947909e6b948569710383661ecc0ddc8e",
      "tree": "05d342fb20877b9c8944ba9309f46f62094ef021",
      "parents": [
        "90abb8c4cec8f0aa4ce58790542e3cf13071601a"
      ],
      "author": {
        "name": "Kiyoshi Ueda",
        "email": "k-ueda@ct.jp.nec.com",
        "time": "Thu Dec 10 23:52:14 2009 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Dec 10 23:52:14 2009 +0000"
      },
      "message": "dm: use clone in map_request function\n\nThis patch changes the argument of map_request() to clone request\nfrom original request.  No functional change.\n\nThis patch is a preparation for PATCH 9, which needs to use\nmap_request() for clones sharing an original barrier request.\n\nSigned-off-by: Kiyoshi Ueda \u003ck-ueda@ct.jp.nec.com\u003e\nSigned-off-by: Jun\u0027ichi Nomura \u003cj-nomura@ce.jp.nec.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "90abb8c4cec8f0aa4ce58790542e3cf13071601a",
      "tree": "4233757994b2ff97c29c81d5aae9f4660dcea1b3",
      "parents": [
        "9ca170a3c0cbb0d5251cef6f5a3300fa436ba8ec"
      ],
      "author": {
        "name": "Kiyoshi Ueda",
        "email": "k-ueda@ct.jp.nec.com",
        "time": "Thu Dec 10 23:52:13 2009 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Dec 10 23:52:13 2009 +0000"
      },
      "message": "dm: abstract dm_in_flight function\n\nThis patch adds md_in_flight() to get the number of in_flight I/Os.\nNo functional change.\n\nThis patch is a preparation for a later patch in this series, which\nchanges I/O counter to md-\u003epending from q-\u003ein_flight in request-based dm.\n\nSigned-off-by: Kiyoshi Ueda \u003ck-ueda@ct.jp.nec.com\u003e\nSigned-off-by: Jun\u0027ichi Nomura \u003cj-nomura@ce.jp.nec.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "952b355760c196ec014dd0b6878f85a11496e3da",
      "tree": "0a6907fa6dce2bac8afdc2efea774f19bdbb9a17",
      "parents": [
        "542da317668c35036e8471822a564b609d05af66"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Thu Dec 10 23:51:57 2009 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Dec 10 23:51:57 2009 +0000"
      },
      "message": "dm io: use slab for struct io\n\nAllocate \"struct io\" from a slab.\n\nThis patch changes dm-io, so that \"struct io\" is allocated from a slab cache.\nIt used to be allocated with kmalloc. Allocating from a slab will be needed\nfor the next patch, because it requires a special alignment of \"struct io\"\nand kmalloc cannot meet this alignment.\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "f88fb981183e71daf40bbd84bc8251bbf7b59e19",
      "tree": "b1de0c32afb6a540624a0e53a25ce522a9935202",
      "parents": [
        "03022c54b9725026c0370a810168975c387ad04c"
      ],
      "author": {
        "name": "Kiyoshi Ueda",
        "email": "k-ueda@ct.jp.nec.com",
        "time": "Fri Oct 16 23:18:15 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Fri Oct 16 23:18:15 2009 +0100"
      },
      "message": "dm: dec_pending needs locking to save error value\n\nMultiple instances of dec_pending() can run concurrently so a lock is\nneeded when it saves the first error code.\n\nI have never experienced actual problem without locking and just found\nthis during code inspection while implementing the barrier support\npatch for request-based dm.\n\nThis patch adds the locking.\nI\u0027ve done compile, boot and basic I/O testings.\n\nCc: stable@kernel.org\nSigned-off-by: Kiyoshi Ueda \u003ck-ueda@ct.jp.nec.com\u003e\nSigned-off-by: Jun\u0027ichi Nomura \u003cj-nomura@ce.jp.nec.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "03022c54b9725026c0370a810168975c387ad04c",
      "tree": "3d16ed7e303effca715f0ea78f022252f48e1257",
      "parents": [
        "bca915aae803cf01fde4461fc9c093cf5a86d7fc"
      ],
      "author": {
        "name": "Zdenek Kabelac",
        "email": "zkabelac@redhat.com",
        "time": "Fri Oct 16 23:18:15 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Fri Oct 16 23:18:15 2009 +0100"
      },
      "message": "dm: add missing del_gendisk to alloc_dev error path\n\nAdd missing del_gendisk() to error path when creation of workqueue fails.\nOtherwice there is a resource leak and following warning is shown:\n\nWARNING: at fs/sysfs/dir.c:487 sysfs_add_one+0xc5/0x160()\nsysfs: cannot create duplicate filename \u0027/devices/virtual/block/dm-0\u0027\n\nCc: stable@kernel.org\nSigned-off-by: Zdenek Kabelac \u003czkabelac@redhat.com\u003e\nReviewed-by: Jonathan Brassow \u003cjbrassow@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "316d315bffa4026f28085f6b24ebcebede370ac7",
      "tree": "10b6b057fec2382536371d2e14f9d4c0d6cf9eea",
      "parents": [
        "23e018a1b083ecb4b8bb2fb43d58e7c19b5d7959"
      ],
      "author": {
        "name": "Nikanth Karthikesan",
        "email": "knikanth@suse.de",
        "time": "Tue Oct 06 20:16:55 2009 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Tue Oct 06 20:16:55 2009 +0200"
      },
      "message": "block: Seperate read and write statistics of in_flight requests v2\n\nCommit a9327cac440be4d8333bba975cbbf76045096275 added seperate read\nand write statistics of in_flight requests. And exported the number\nof read and write requests in progress seperately through sysfs.\n\nBut  Corrado Zoccolo \u003cczoccolo@gmail.com\u003e reported getting strange\noutput from \"iostat -kx 2\". Global values for service time and\nutilization were garbage. For interval values, utilization was always\n100%, and service time is higher than normal.\n\nSo this was reverted by commit 0f78ab9899e9d6acb09d5465def618704255963b\n\nThe problem was in part_round_stats_single(), I missed the following:\n        if (now \u003d\u003d part-\u003estamp)\n                return;\n\n-       if (part-\u003ein_flight) {\n+       if (part_in_flight(part)) {\n                __part_stat_add(cpu, part, time_in_queue,\n                                part_in_flight(part) * (now - part-\u003estamp));\n                __part_stat_add(cpu, part, io_ticks, (now - part-\u003estamp));\n\nWith this chunk included, the reported regression gets fixed.\n\nSigned-off-by: Nikanth Karthikesan \u003cknikanth@suse.de\u003e\n\n--\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "0f78ab9899e9d6acb09d5465def618704255963b",
      "tree": "b92832da61ae4f4d712a33ae524c482e979be5ba",
      "parents": [
        "e00c54c36ac2024c3a8a37432e2e2698ff849594"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Sun Oct 04 21:04:38 2009 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Sun Oct 04 21:04:38 2009 +0200"
      },
      "message": "Revert \"Seperate read and write statistics of in_flight requests\"\n\nThis reverts commit a9327cac440be4d8333bba975cbbf76045096275.\n\nCorrado Zoccolo \u003cczoccolo@gmail.com\u003e reports:\n\n\"with 2.6.32-rc1 I started getting the following strange output from\n\"iostat -kx 2\":\nLinux 2.6.31bisect (et2) \t04/10/2009 \t_i686_\t(2 CPU)\n\navg-cpu:  %user   %nice %system %iowait  %steal   %idle\n          10,70    0,00    3,16   15,75    0,00   70,38\n\nDevice:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s\navgrq-sz avgqu-sz   await  svctm  %util\nsda              18,22     0,00    0,67    0,01    14,77     0,02\n43,94     0,01   10,53 39043915,03 2629219,87\nsdb              60,89     9,68   50,79    3,04  1724,43    50,52\n65,95     0,70   13,06 488437,47 2629219,87\n\navg-cpu:  %user   %nice %system %iowait  %steal   %idle\n           2,72    0,00    0,74    0,00    0,00   96,53\n\nDevice:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s\navgrq-sz avgqu-sz   await  svctm  %util\nsda               0,00     0,00    0,00    0,00     0,00     0,00\n0,00     0,00    0,00   0,00 100,00\nsdb               0,00     0,00    0,00    0,00     0,00     0,00\n0,00     0,00    0,00   0,00 100,00\n\navg-cpu:  %user   %nice %system %iowait  %steal   %idle\n           6,68    0,00    0,99    0,00    0,00   92,33\n\nDevice:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s\navgrq-sz avgqu-sz   await  svctm  %util\nsda               0,00     0,00    0,00    0,00     0,00     0,00\n0,00     0,00    0,00   0,00 100,00\nsdb               0,00     0,00    0,00    0,00     0,00     0,00\n0,00     0,00    0,00   0,00 100,00\n\navg-cpu:  %user   %nice %system %iowait  %steal   %idle\n           4,40    0,00    0,73    1,47    0,00   93,40\n\nDevice:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s\navgrq-sz avgqu-sz   await  svctm  %util\nsda               0,00     0,00    0,00    0,00     0,00     0,00\n0,00     0,00    0,00   0,00 100,00\nsdb               0,00     4,00    0,00    3,00     0,00    28,00\n18,67     0,06   19,50 333,33 100,00\n\nGlobal values for service time and utilization are garbage. For\ninterval values, utilization is always 100%, and service time is\nhigher than normal.\n\nI bisected it down to:\n[a9327cac440be4d8333bba975cbbf76045096275] Seperate read and write\nstatistics of in_flight requests\nand verified that reverting just that commit indeed solves the issue\non 2.6.32-rc1.\"\n\nSo until this is debugged, revert the bad commit.\n\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "83d5cde47dedf01b6a4a4331882cbc0a7eea3c2e",
      "tree": "f8ba5e263717d35cd444fcc65898d2ed352af1ae",
      "parents": [
        "7b021967c5e1463936042c8da72b550d3cabe9ac"
      ],
      "author": {
        "name": "Alexey Dobriyan",
        "email": "adobriyan@gmail.com",
        "time": "Mon Sep 21 17:01:13 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Sep 22 07:17:25 2009 -0700"
      },
      "message": "const: make block_device_operations const\n\nSigned-off-by: Alexey Dobriyan \u003cadobriyan@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": "a9327cac440be4d8333bba975cbbf76045096275",
      "tree": "83fd5dc45dc925c5b4eb0264c3add96cfaa4cae6",
      "parents": [
        "18d8217bc441630c3c5ec7416c5a65c69e8a0979"
      ],
      "author": {
        "name": "Nikanth Karthikesan",
        "email": "knikanth@suse.de",
        "time": "Fri Sep 11 09:18:54 2009 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Mon Sep 14 08:24:52 2009 +0200"
      },
      "message": "Seperate read and write statistics of in_flight requests\n\nCurrently, there is a single in_flight counter measuring the number of\nrequests in the request_queue. But some monitoring tools would like to\nknow how many read requests and write requests are in progress. Split the\ncurrent in_flight counter into two seperate counters for read and write.\n\nThis information is exported as a sysfs attribute, as changing the\ncurrently available stat files would break the existing tools.\n\nSigned-off-by: Nikanth Karthikesan \u003cknikanth@suse.de\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "1f98a13f623e0ef666690a18c1250335fc6d7ef1",
      "tree": "15ca2dddffaa18a0d1844957f4f8cc707cbb8117",
      "parents": [
        "e7e503aedb1f4d165081cb8d47a58c38f80f0cb4"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri Sep 11 14:32:04 2009 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri Sep 11 14:33:31 2009 +0200"
      },
      "message": "bio: first step in sanitizing the bio-\u003ebi_rw flag testing\n\nGet rid of any functions that test for these bits and make callers\nuse bio_rw_flagged() directly. Then it is at least directly apparent\nwhat variable and flag they check.\n\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "a77e28c7e1dc1a6a035c7627d4a88ecf3ea09aea",
      "tree": "0d481ef49120eda629409cbac9dbe63ba472f873",
      "parents": [
        "37d0892c5a94e208cf863e3b7bac014edee4346d"
      ],
      "author": {
        "name": "Kiyoshi Ueda",
        "email": "k-ueda@ct.jp.nec.com",
        "time": "Fri Sep 04 20:40:16 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Fri Sep 04 20:40:16 2009 +0100"
      },
      "message": "dm multipath: fix oops when request based io fails when no paths\n\nThe patch posted at http://marc.info/?l\u003ddm-devel\u0026m\u003d124539787228784\u0026w\u003d2\nwhich was merged into cec47e3d4a861e1d942b3a580d0bbef2700d2bb2 (\"dm:\nprepare for request based option\") introduced a regression in\nrequest-based dm.\n\nIf map_request() calls dm_kill_unmapped_request() to complete a cloned\nbio without dispatching it, clone-\u003ebio is still set when\ndm_end_request() is called and the BUG_ON(clone-\u003ebio) is incorrect.\n\nThe patch fixes this bug by freeing bio in dm_end_request() if the clone\nhas bio.  I\u0027ve redone my tests to cover all I/O paths and confirmed\nthere\u0027s no other regression.\n\nHere is the oops I hit in request-based dm when I do I/O to a multipath\ndevice which doesn\u0027t have any active path nor queue_if_no_path setting:\n\n------------[ cut here ]------------\nkernel BUG at /root/2.6.31-rc4.rqdm/drivers/md/dm.c:828!\ninvalid opcode: 0000 [#1] SMP\nlast sysfs file: /sys/devices/system/cpu/cpu3/cache/index2/shared_cpu_map\nCPU 1\nModules linked in: autofs4 sunrpc cpufreq_ondemand acpi_cpufreq dm_mirror dm_region_hash dm_log dm_service_time dm_multipath scsi_dh dm_mod video output sbs sbshc battery ac sg sr_mod e1000e button cdrom serio_raw rtc_cmos rtc_core rtc_lib piix lpfc scsi_transport_fc ata_piix libata megaraid_sas sd_mod scsi_mod crc_t10dif ext3 jbd uhci_hcd ohci_hcd ehci_hcd [last unloaded: microcode]\nPid: 7, comm: ksoftirqd/1 Not tainted 2.6.31-rc4.rqdm #1 Express5800/120Lj [N8100-1417]\nRIP: 0010:[\u003cffffffffa023629d\u003e]  [\u003cffffffffa023629d\u003e] dm_softirq_done+0xbd/0x100 [dm_mod]\nRSP: 0018:ffff8800280a1f08  EFLAGS: 00010282\nRAX: ffffffffa02544e0 RBX: ffff8802aa1111d0 RCX: ffff8802aa1111e0\nRDX: ffff8802ab913e70 RSI: 0000000000000000 RDI: ffff8802ab913e70\nRBP: ffff8800280a1f28 R08: ffffc90005457040 R09: 0000000000000000\nR10: 0000000000000001 R11: 0000000000000000 R12: 00000000fffffffb\nR13: ffff8802ab913e88 R14: ffff8802ab9c1438 R15: 0000000000000100\nFS:  0000000000000000(0000) GS:ffff88002809e000(0000) knlGS:0000000000000000\nCS:  0010 DS: 0018 ES: 0018 CR0: 000000008005003b\nCR2: 0000003d54a98640 CR3: 000000029f0a1000 CR4: 00000000000006e0\nDR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000\nDR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400\nProcess ksoftirqd/1 (pid: 7, threadinfo ffff8802ae50e000, task ffff8802ae4f8040)\nStack:\n ffff8800280a1f38 0000000000000020 ffffffff814f30a0 0000000000000004\n\u003c0\u003e ffff8800280a1f58 ffffffff8116b245 ffff8800280a1f38 ffff8800280a1f38\n\u003c0\u003e ffff8800280a1f58 0000000000000001 ffff8800280a1fa8 ffffffff810477bc\nCall Trace:\n \u003cIRQ\u003e\n [\u003cffffffff8116b245\u003e] blk_done_softirq+0x75/0x90\n [\u003cffffffff810477bc\u003e] __do_softirq+0xcc/0x210\n [\u003cffffffff81047170\u003e] ? ksoftirqd+0x0/0x110\n [\u003cffffffff8100ce7c\u003e] call_softirq+0x1c/0x50\n \u003cEOI\u003e\n [\u003cffffffff8100e785\u003e] do_softirq+0x65/0xa0\n [\u003cffffffff81047170\u003e] ? ksoftirqd+0x0/0x110\n [\u003cffffffff810471e0\u003e] ksoftirqd+0x70/0x110\n [\u003cffffffff81059559\u003e] kthread+0x99/0xb0\n [\u003cffffffff8100cd7a\u003e] child_rip+0xa/0x20\n [\u003cffffffff8100c73c\u003e] ? restore_args+0x0/0x30\n [\u003cffffffff810594c0\u003e] ? kthread+0x0/0xb0\n [\u003cffffffff8100cd70\u003e] ? child_rip+0x0/0x20\nCode: 44 89 e6 48 89 df e8 23 fb f2 e0 be 01 00 00 00 4c 89 f7 e8 f6 fd ff ff 5b 41 5c 41 5d 41 5e c9 c3 4c 89 ef e8 85 fe ff ff eb ed \u003c0f\u003e 0b eb fe 41 8b 85 dc 00 00 00 48 83 bb 10 01 00 00 00 89 83\nRIP  [\u003cffffffffa023629d\u003e] dm_softirq_done+0xbd/0x100 [dm_mod]\n RSP \u003cffff8800280a1f08\u003e\n---[ end trace 16af0a1d8542da55 ]---\n\nSigned-off-by: Kiyoshi Ueda \u003ck-ueda@ct.jp.nec.com\u003e\nSigned-off-by: Jun\u0027ichi Nomura \u003cj-nomura@ce.jp.nec.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "a732c207d19e899845ae47139708af898daaf9fd",
      "tree": "aed98221e373868b4fe0fbba9c4fcf5ac8ede128",
      "parents": [
        "69885683d22d8c05910fd808c01fdce1322739b4"
      ],
      "author": {
        "name": "Mike Snitzer",
        "email": "snitzer@redhat.com",
        "time": "Thu Jul 23 20:30:40 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Jul 23 20:30:40 2009 +0100"
      },
      "message": "dm: remove queue next_ordered workaround for barriers\n\nThis patch removes DM\u0027s bio-based vs request-based conditional setting\nof next_ordered.  For bio-based DM the next_ordered check is no longer a\nconcern (as that check is now in the __make_request path).  For\nrequest-based DM the default of QUEUE_ORDERED_NONE is now appropriate.\n\nbio-based DM was changed to work-around the previously misplaced\nnext_ordered check with this commit:\n99360b4c18f7675b50d283301d46d755affe75fd\n\nrequest-based DM does not yet support barriers but reacted to the above\nbio-based DM change with this commit:\n5d67aa2366ccb8257d103d0b43df855605c3c086\n\nThe above changes are no longer needed given Neil Brown\u0027s recent fix to\nput the next_ordered check in the __make_request path:\ndb64f680ba4b5c56c4be59f0698000df89ff0281\n\nSigned-off-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nCc: Jun\u0027ichi Nomura \u003cj-nomura@ce.jp.nec.com\u003e\nCc: NeilBrown \u003cneilb@suse.de\u003e\nAcked-by: Kiyoshi Ueda \u003ck-ueda@ct.jp.nec.com\u003e\nAcked-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "7878cba9f0037f5599004b03a1260b32d9050360",
      "tree": "bff5e1a47b6e64e45df0428925cc6db8542cad62",
      "parents": [
        "6118b70b3a0b4c583439bb77600194c82f220ce3"
      ],
      "author": {
        "name": "Martin K. Petersen",
        "email": "martin.petersen@oracle.com",
        "time": "Fri Jun 26 15:37:49 2009 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Wed Jul 01 10:56:25 2009 +0200"
      },
      "message": "block: Create bip slabs with embedded integrity vectors\n\nThis patch restores stacking ability to the block layer integrity\ninfrastructure by creating a set of dedicated bip slabs.  Each bip slab\nhas an embedded bio_vec array at the end.  This cuts down on memory\nallocations and also simplifies the code compared to the original bvec\nversion.  Only the largest bip slab is backed by a mempool.  The pool is\ncontained in the bio_set so stacking drivers can ensure forward\nprogress.\n\nSigned-off-by: Martin K. Petersen \u003cmartin.petersen@oracle.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@carl.(none)\u003e\n"
    },
    {
      "commit": "523d9297d43cce3fa6de6474b7674329e98743b1",
      "tree": "b889df9e26458c134a909c9ada51fa961fbf1291",
      "parents": [
        "5d67aa2366ccb8257d103d0b43df855605c3c086"
      ],
      "author": {
        "name": "Kiyoshi Ueda",
        "email": "k-ueda@ct.jp.nec.com",
        "time": "Mon Jun 22 10:12:37 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Mon Jun 22 10:12:37 2009 +0100"
      },
      "message": "dm: disable interrupt when taking map_lock\n\nThis patch disables interrupt when taking map_lock to avoid\nlockdep warnings in request-based dm.\n\nrequest-based dm takes map_lock after taking queue_lock with\ndisabling interrupt:\n  spin_lock_irqsave(queue_lock)\n  q-\u003erequest_fn() \u003d\u003d dm_request_fn()\n    \u003d\u003e dm_get_table()\n         \u003d\u003e read_lock(map_lock)\nwhile queue_lock could be (but isn\u0027t) taken in interrupt context.\n\nSigned-off-by: Kiyoshi Ueda \u003ck-ueda@ct.jp.nec.com\u003e\nSigned-off-by: Jun\u0027ichi Nomura \u003cj-nomura@ce.jp.nec.com\u003e\nAcked-by: Christof Schmitt \u003cchristof.schmitt@de.ibm.com\u003e\nAcked-by: Hannes Reinecke \u003chare@suse.de\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "5d67aa2366ccb8257d103d0b43df855605c3c086",
      "tree": "1d03f2e89ef47773a757f05b17741b8cbe47e882",
      "parents": [
        "e6ee8c0b767540f59e20da3ced282601db8aa502"
      ],
      "author": {
        "name": "Kiyoshi Ueda",
        "email": "k-ueda@ct.jp.nec.com",
        "time": "Mon Jun 22 10:12:36 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Mon Jun 22 10:12:36 2009 +0100"
      },
      "message": "dm: do not set QUEUE_ORDERED_DRAIN if request based\n\nRequest-based dm doesn\u0027t have barrier support yet.\nSo we need to set QUEUE_ORDERED_DRAIN only for bio-based dm.\nSince the device type is decided at the first table loading time,\nthe flag set is deferred until then.\n\nSigned-off-by: Kiyoshi Ueda \u003ck-ueda@ct.jp.nec.com\u003e\nSigned-off-by: Jun\u0027ichi Nomura \u003cj-nomura@ce.jp.nec.com\u003e\nAcked-by: Hannes Reinecke \u003chare@suse.de\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "e6ee8c0b767540f59e20da3ced282601db8aa502",
      "tree": "101cb830994734eb45a4a47cd5988f24da67fa4f",
      "parents": [
        "cec47e3d4a861e1d942b3a580d0bbef2700d2bb2"
      ],
      "author": {
        "name": "Kiyoshi Ueda",
        "email": "k-ueda@ct.jp.nec.com",
        "time": "Mon Jun 22 10:12:36 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Mon Jun 22 10:12:36 2009 +0100"
      },
      "message": "dm: enable request based option\n\nThis patch enables request-based dm.\n\no Request-based dm and bio-based dm coexist, since there are\n  some target drivers which are more fitting to bio-based dm.\n  Also, there are other bio-based devices in the kernel\n  (e.g. md, loop).\n  Since bio-based device can\u0027t receive struct request,\n  there are some limitations on device stacking between\n  bio-based and request-based.\n\n                     type of underlying device\n                   bio-based      request-based\n   ----------------------------------------------\n    bio-based         OK                OK\n    request-based     --                OK\n\n  The device type is recognized by the queue flag in the kernel,\n  so dm follows that.\n\no The type of a dm device is decided at the first table binding time.\n  Once the type of a dm device is decided, the type can\u0027t be changed.\n\no Mempool allocations are deferred to at the table loading time, since\n  mempools for request-based dm are different from those for bio-based\n  dm and needed mempool type is fixed by the type of table.\n\no Currently, request-based dm supports only tables that have a single\n  target.  To support multiple targets, we need to support request\n  splitting or prevent bio/request from spanning multiple targets.\n  The former needs lots of changes in the block layer, and the latter\n  needs that all target drivers support merge() function.\n  Both will take a time.\n\nSigned-off-by: Kiyoshi Ueda \u003ck-ueda@ct.jp.nec.com\u003e\nSigned-off-by: Jun\u0027ichi Nomura \u003cj-nomura@ce.jp.nec.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "cec47e3d4a861e1d942b3a580d0bbef2700d2bb2",
      "tree": "2f92b957d515a5d887fe0147984cda3203c8b8ea",
      "parents": [
        "f5db4af466e2dca0fe822019812d586ca910b00c"
      ],
      "author": {
        "name": "Kiyoshi Ueda",
        "email": "k-ueda@ct.jp.nec.com",
        "time": "Mon Jun 22 10:12:35 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Mon Jun 22 10:12:35 2009 +0100"
      },
      "message": "dm: prepare for request based option\n\nThis patch adds core functions for request-based dm.\n\nWhen struct mapped device (md) is initialized, md-\u003equeue has\nan I/O scheduler and the following functions are used for\nrequest-based dm as the queue functions:\n    make_request_fn: dm_make_request()\n    pref_fn:         dm_prep_fn()\n    request_fn:      dm_request_fn()\n    softirq_done_fn: dm_softirq_done()\n    lld_busy_fn:     dm_lld_busy()\nActual initializations are done in another patch (PATCH 2).\n\nBelow is a brief summary of how request-based dm behaves, including:\n  - making request from bio\n  - cloning, mapping and dispatching request\n  - completing request and bio\n  - suspending md\n  - resuming md\n\n  bio to request\n  \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n  md-\u003equeue-\u003emake_request_fn() (dm_make_request()) calls __make_request()\n  for a bio submitted to the md.\n  Then, the bio is kept in the queue as a new request or merged into\n  another request in the queue if possible.\n\n  Cloning and Mapping\n  \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n  Cloning and mapping are done in md-\u003equeue-\u003erequest_fn() (dm_request_fn()),\n  when requests are dispatched after they are sorted by the I/O scheduler.\n\n  dm_request_fn() checks busy state of underlying devices using\n  target\u0027s busy() function and stops dispatching requests to keep them\n  on the dm device\u0027s queue if busy.\n  It helps better I/O merging, since no merge is done for a request\n  once it is dispatched to underlying devices.\n\n  Actual cloning and mapping are done in dm_prep_fn() and map_request()\n  called from dm_request_fn().\n  dm_prep_fn() clones not only request but also bios of the request\n  so that dm can hold bio completion in error cases and prevent\n  the bio submitter from noticing the error.\n  (See the \"Completion\" section below for details.)\n\n  After the cloning, the clone is mapped by target\u0027s map_rq() function\n    and inserted to underlying device\u0027s queue using\n    blk_insert_cloned_request().\n\n  Completion\n  \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n  Request completion can be hooked by rq-\u003eend_io(), but then, all bios\n  in the request will have been completed even error cases, and the bio\n  submitter will have noticed the error.\n  To prevent the bio completion in error cases, request-based dm clones\n  both bio and request and hooks both bio-\u003ebi_end_io() and rq-\u003eend_io():\n      bio-\u003ebi_end_io(): end_clone_bio()\n      rq-\u003eend_io():     end_clone_request()\n\n  Summary of the request completion flow is below:\n  blk_end_request() for a clone request\n    \u003d\u003e blk_update_request()\n       \u003d\u003e bio-\u003ebi_end_io() \u003d\u003d end_clone_bio() for each clone bio\n          \u003d\u003e Free the clone bio\n          \u003d\u003e Success: Complete the original bio (blk_update_request())\n             Error:   Don\u0027t complete the original bio\n    \u003d\u003e blk_finish_request()\n       \u003d\u003e rq-\u003eend_io() \u003d\u003d end_clone_request()\n          \u003d\u003e blk_complete_request()\n             \u003d\u003e dm_softirq_done()\n                \u003d\u003e Free the clone request\n                \u003d\u003e Success: Complete the original request (blk_end_request())\n                   Error:   Requeue the original request\n\n  end_clone_bio() completes the original request on the size of\n  the original bio in successful cases.\n  Even if all bios in the original request are completed by that\n  completion, the original request must not be completed yet to keep\n  the ordering of request completion for the stacking.\n  So end_clone_bio() uses blk_update_request() instead of\n  blk_end_request().\n  In error cases, end_clone_bio() doesn\u0027t complete the original bio.\n  It just frees the cloned bio and gives over the error handling to\n  end_clone_request().\n\n  end_clone_request(), which is called with queue lock held, completes\n  the clone request and the original request in a softirq context\n  (dm_softirq_done()), which has no queue lock, to avoid a deadlock\n  issue on submission of another request during the completion:\n      - The submitted request may be mapped to the same device\n      - Request submission requires queue lock, but the queue lock\n        has been held by itself and it doesn\u0027t know that\n\n  The clone request has no clone bio when dm_softirq_done() is called.\n  So target drivers can\u0027t resubmit it again even error cases.\n  Instead, they can ask dm core for requeueing and remapping\n  the original request in that cases.\n\n  suspend\n  \u003d\u003d\u003d\u003d\u003d\u003d\u003d\n  Request-based dm uses stopping md-\u003equeue as suspend of the md.\n  For noflush suspend, just stops md-\u003equeue.\n\n  For flush suspend, inserts a marker request to the tail of md-\u003equeue.\n  And dispatches all requests in md-\u003equeue until the marker comes to\n  the front of md-\u003equeue.  Then, stops dispatching request and waits\n  for the all dispatched requests to complete.\n  After that, completes the marker request, stops md-\u003equeue and\n  wake up the waiter on the suspend queue, md-\u003ewait.\n\n  resume\n  \u003d\u003d\u003d\u003d\u003d\u003d\n  Starts md-\u003equeue.\n\nSigned-off-by: Kiyoshi Ueda \u003ck-ueda@ct.jp.nec.com\u003e\nSigned-off-by: Jun\u0027ichi Nomura \u003cj-nomura@ce.jp.nec.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "754c5fc7ebb417b23601a6222a6005cc2e7f2913",
      "tree": "6c31b055fc26ec541d67fc1123ebaa4b7a8eae7a",
      "parents": [
        "18d8594dd93a1ae2fafd591ec026e87d743292bf"
      ],
      "author": {
        "name": "Mike Snitzer",
        "email": "snitzer@redhat.com",
        "time": "Mon Jun 22 10:12:34 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Mon Jun 22 10:12:34 2009 +0100"
      },
      "message": "dm: calculate queue limits during resume not load\n\nCurrently, device-mapper maintains a separate instance of \u0027struct\nqueue_limits\u0027 for each table of each device.  When the configuration of\na device is to be changed, first its table is loaded and this structure\nis populated, then the device is \u0027resumed\u0027 and the calculated\nqueue_limits are applied.\n\nThis places restrictions on how userspace may process related devices,\nwhere it is often advantageous to \u0027load\u0027 tables for several devices\nat once before \u0027resuming\u0027 them together.  As the new queue_limits\nonly take effect after the \u0027resume\u0027, if they are changing and one\ndevice uses another, the latter must be \u0027resumed\u0027 before the former\nmay be \u0027loaded\u0027.\n\nThis patch moves the calculation of these queue_limits out of\nthe \u0027load\u0027 operation into \u0027resume\u0027.  Since we are no longer\npre-calculating this struct, we no longer need to maintain copies\nwithin our dm structs.\n\ndm_set_device_limits() now passes the \u0027start\u0027 of the device\u0027s\ndata area (aka pe_start) as the \u0027offset\u0027 to blk_stack_limits().\n\ninit_valid_queue_limits() is replaced by blk_set_default_limits().\n\nSigned-off-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nCc: martin.petersen@oracle.com\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "60935eb21d3c5bac79618000f38f92c249d153c4",
      "tree": "0fcd78d7d69e23cd062e5214ddf2959d5c74e605",
      "parents": [
        "486d220fe4909b5745c4faa67faddd30a707abe2"
      ],
      "author": {
        "name": "Milan Broz",
        "email": "mbroz@redhat.com",
        "time": "Mon Jun 22 10:12:30 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Mon Jun 22 10:12:30 2009 +0100"
      },
      "message": "dm ioctl: support cookies for udev\n\nAdd support for passing a 32 bit \"cookie\" into the kernel with the\nDM_SUSPEND, DM_DEV_RENAME and DM_DEV_REMOVE ioctls.  The (unsigned)\nvalue of this cookie is returned to userspace alongside the uevents\nissued by these ioctls in the variable DM_COOKIE.\n\nThis means the userspace process issuing these ioctls can be notified\nby udev after udev has completed any actions triggered.\n\nTo minimise the interface extension, we pass the cookie into the\nkernel in the event_nr field which is otherwise unused when calling\nthese ioctls.  Incrementing the version number allows userspace to\ndetermine in advance whether or not the kernel supports the cookie.\nIf the kernel does support this but userspace does not, there should\nbe no impact as the new variable will just get ignored.\n\nSigned-off-by: Milan Broz \u003cmbroz@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "52b1fd5a27c625c78373e024bf570af3c9d44a79",
      "tree": "a802b917b45685255220efaeb7b2b8ee2d04a2d4",
      "parents": [
        "9015df24a8008d7bea2bd3df881783ebe0dcb9af"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Mon Jun 22 10:12:21 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Mon Jun 22 10:12:21 2009 +0100"
      },
      "message": "dm: send empty barriers to targets in dm_flush\n\nPass empty barrier flushes to the targets in dm_flush().\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "9015df24a8008d7bea2bd3df881783ebe0dcb9af",
      "tree": "aff9a824a202525036d5f2dc52ad728dc9a38cbd",
      "parents": [
        "f9ab94cee313746573b2d693bc2afb807ebb0998"
      ],
      "author": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Mon Jun 22 10:12:21 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Mon Jun 22 10:12:21 2009 +0100"
      },
      "message": "dm: initialise tio in alloc_tio\n\nMove repeated dm_target_io initialisation inside alloc_tio().\n\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "f9ab94cee313746573b2d693bc2afb807ebb0998",
      "tree": "150155f364db0f26c7217e1f92d31344aa67a3f0",
      "parents": [
        "27eaa14975d8b53f0bad422e53cdf8e5f6dd44ec"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Mon Jun 22 10:12:20 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Mon Jun 22 10:12:20 2009 +0100"
      },
      "message": "dm: introduce num_flush_requests\n\nIntroduce num_flush_requests for a target to set to say how many flush\ninstructions (empty barriers) it wants to receive.  These are sent by\n__clone_and_map_empty_barrier with map_info-\u003eflush_request going from 0\nto (num_flush_requests - 1).\n\nOld targets without flush support won\u0027t receive any flush requests.\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "27eaa14975d8b53f0bad422e53cdf8e5f6dd44ec",
      "tree": "647587ef410cfe862af501922704871f99ead273",
      "parents": [
        "fdb9572b73abd008b80931c3b1f157dac3888bb9"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Mon Jun 22 10:12:20 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Mon Jun 22 10:12:20 2009 +0100"
      },
      "message": "dm: remove check that prevents mapping empty bios\n\nRemove the check that the size of the cloned bio is not zero because a\nsubsequent patch needs to send zero-sized barriers down this path.\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "fdb9572b73abd008b80931c3b1f157dac3888bb9",
      "tree": "ae84d6ed1c97e77d536d0bcf2e25fa35d5cbfcba",
      "parents": [
        "5aa2781d964e9835c441932110484bc454b5c207"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Mon Jun 22 10:12:19 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Mon Jun 22 10:12:19 2009 +0100"
      },
      "message": "dm: remove EOPNOTSUPP for barriers\n\nIf the underlying device doesn\u0027t support barriers and dm receives a\nbarrier, it waits until all requests on that device drain so it no\nlonger needs to report -EOPNOTSUPP to the caller.\n\nThis patch deals with the confusing situation when moving a volume from\none physical device to another triggers an EOPNOTSUPP on a volume that\ndidn\u0027t report it before.\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "5aa2781d964e9835c441932110484bc454b5c207",
      "tree": "4f771f3e933eaedf67e5f9e8d5fcc10340af80e2",
      "parents": [
        "2761e95fe40ca0d01864310fa4d488d7c5e34e18"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Mon Jun 22 10:12:18 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Mon Jun 22 10:12:18 2009 +0100"
      },
      "message": "dm: store only first barrier error\n\nWith the following patches, more than one error can occur during\nprocessing.  Change md-\u003ebarrier_error so that only the first one is\nrecorded and returned to the caller.\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "2761e95fe40ca0d01864310fa4d488d7c5e34e18",
      "tree": "a49245e8ebb022605c5d1ce04948cf4a7f9a5c3b",
      "parents": [
        "531fe96364f30879753d46c1f52ab839e12d2e5d"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Mon Jun 22 10:12:18 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Mon Jun 22 10:12:18 2009 +0100"
      },
      "message": "dm: process requeue in dm_wq_work\n\nIf barrier request was returned with DM_ENDIO_REQUEUE,\nrequeue it in dm_wq_work instead of dec_pending.\n\nThis allows us to correctly handle a situation when some targets\nare asking for a requeue and other targets signal an error.\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "531fe96364f30879753d46c1f52ab839e12d2e5d",
      "tree": "61a625f68c3105c1525e2eebba0f046a3678eb37",
      "parents": [
        "32a926da5a16c01a8213331e5764472ce2f14a8d"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Mon Jun 22 10:12:17 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Mon Jun 22 10:12:17 2009 +0100"
      },
      "message": "dm: make dm_flush return void\n\nMake dm_flush return void.\n\nThe first error during flush is stored in md-\u003ebarrier_error instead.\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "32a926da5a16c01a8213331e5764472ce2f14a8d",
      "tree": "edac1cef90e4754353a50fb948c4e34b4df8b5bc",
      "parents": [
        "db8fef4fabe4a546ce74f80bff64fd43776e5912"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Mon Jun 22 10:12:17 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Mon Jun 22 10:12:17 2009 +0100"
      },
      "message": "dm: always hold bdev reference\n\nFix a potential deadlock when creating multiple snapshots by holding a\nreference to struct block_device for the whole lifecycle of every dm\ndevice instead of obtaining it independently at each point it is needed.\n\nbdget_disk() was called while the device was being suspended, in\ndm_suspend().  However there could be other devices already suspended,\nfor example when creating additional snapshots of a device. bdget_disk()\ncan wait for IO and allocate memory resulting in waiting for the\nalready-suspended device - deadlock.\n\nThis patch changes the code so that it gets the reference to struct\nblock_device when struct mapped_device is allocated and initialized in\nalloc_dev() where it is always OK to allocate memory or wait for I/O.\nIt drops the reference when it is destroyed in free_dev().  Thus there\nis no call to bdget_disk() while any device is suspended.\n\nPreviously unlock_fs() was called only if bdev was held.  Now it is\ncalled unconditionally, but the superfluous calls are harmless because\nit returns immediately if the filesystem was not previously frozen.\n\nThis patch also now allows the device size to be changed in a\nnoflush suspend because the bdev is held.  This has no adverse effect.\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "db8fef4fabe4a546ce74f80bff64fd43776e5912",
      "tree": "0e3cc2d7aa40783a1036cce6deb227a3a6d6c9e2",
      "parents": [
        "f6bd4eb73cdf2a5bf954e497972842f39cabb7e3"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Mon Jun 22 10:12:15 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Mon Jun 22 10:12:15 2009 +0100"
      },
      "message": "dm: rename suspended_bdev to bdev\n\nRename suspended_bdev to bdev.\n\nThis patch doesn\u0027t change any functionality, just renames the variable.\nIn the next patch, the variable will be used even for non-suspended device.\n\n(Pre-requisite for the per-target barrier support patches.)\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "8cbeb67ad50f7d68e5e83be2cb2284de8f9c03b5",
      "tree": "4fd4a467c06441ad7c07211b386c786062aa2aeb",
      "parents": [
        "53b351f972a882ea8b6cdb19602535f1057c884a"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Mon Jun 22 10:12:14 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Mon Jun 22 10:12:14 2009 +0100"
      },
      "message": "dm: avoid unsupported spanning of md stripe boundaries\n\nA bio that has two or more vector entries, size less than or equal to\npage size, that crosses a stripe boundary of an underlying md device is\naccepted by device mapper (it conforms to all its limits) but not by the\nunderlying device.\n\nThe fix is: If device mapper selects the one-page maximum request size,\nit also needs to set its own q-\u003emerge_bvec_fn to reject any bios with\nmultiple vector entries that span more pages.\n\nThe problem was discovered in the following scenario:\n  * MD - RAID-0\n  * LV on the top of it (raid1, snapshot or striped with chunk\nsize/stripe larger than RAID-0 stripe)\n  * one of the logical volumes is exported to xen domU\n  * inside xen domU it is partitioned, the key point is that the partition\nmust be unaligned on page boundary (fdisk normally aligns the partition to\n63 sectors which will trigger it)\n  * install the system on the partitioned disk in domU\nThis causes I/O failures in dom0.\nReference: https://bugzilla.redhat.com/show_bug.cgi?id\u003d223947\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "4d89b7b4e4726893453d0fb4ddbb5b3e16353994",
      "tree": "f0775811ee4942eadd555d5ddcdbb5ff313290bb",
      "parents": [
        "e094f4f15f5169526c7200b9bde44b900548a81e"
      ],
      "author": {
        "name": "Milan Broz",
        "email": "mbroz@redhat.com",
        "time": "Mon Jun 22 10:12:11 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Mon Jun 22 10:12:11 2009 +0100"
      },
      "message": "dm: sysfs skip output when device is being destroyed\n\nDo not process sysfs attributes when device is being destroyed.\n\nOtherwise code can cause\n  BUG_ON(test_bit(DMF_FREEING, \u0026md-\u003eflags));\nin dm_put() call.\n\nCc: stable@kernel.org\nSigned-off-by: Milan Broz \u003cmbroz@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "e212d6f25084e8e9b02a04ba514d7bb1e4a4924a",
      "tree": "a94638953a7aa7f0bbd6f5d08fa3c649ce0ef8ce",
      "parents": [
        "5ced504b1bd1979378de35c56aa5d3d79fb5033f"
      ],
      "author": {
        "name": "Li Zefan",
        "email": "lizf@cn.fujitsu.com",
        "time": "Tue Jun 16 11:19:36 2009 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Tue Jun 16 11:19:36 2009 +0200"
      },
      "message": "block: remove some includings of blktrace_api.h\n\nWhen porting blktrace to tracepoints, we changed to trace/block.h\nfor trace prober declarations.\n\nSigned-off-by: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "55782138e47d9baf2f7d3a7af9e7cf42adf72c56",
      "tree": "c7ccabae20e27bbeb08b69a358e8b86c98d1d9f3",
      "parents": [
        "f57a8a1911342265e7acdc190333c4e9235a6632"
      ],
      "author": {
        "name": "Li Zefan",
        "email": "lizf@cn.fujitsu.com",
        "time": "Tue Jun 09 13:43:05 2009 +0800"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Tue Jun 09 12:34:23 2009 -0400"
      },
      "message": "tracing/events: convert block trace points to TRACE_EVENT()\n\nTRACE_EVENT is a more generic way to define tracepoints. Doing so adds\nthese new capabilities to this tracepoint:\n\n  - zero-copy and per-cpu splice() tracing\n  - binary tracing without printf overhead\n  - structured logging records exposed under /debug/tracing/events\n  - trace events embedded in function tracer output and other plugins\n  - user-defined, per tracepoint filter expressions\n  ...\n\nCons:\n\n  - no dev_t info for the output of plug, unplug_timer and unplug_io events.\n    no dev_t info for getrq and sleeprq events if bio \u003d\u003d NULL.\n    no dev_t info for rq_abort,...,rq_requeue events if rq-\u003erq_disk \u003d\u003d NULL.\n\n    This is mainly because we can\u0027t get the deivce from a request queue.\n    But this may change in the future.\n\n  - A packet command is converted to a string in TP_assign, not TP_print.\n    While blktrace do the convertion just before output.\n\n    Since pc requests should be rather rare, this is not a big issue.\n\n  - In blktrace, an event can have 2 different print formats, but a TRACE_EVENT\n    has a unique format, which means we have some unused data in a trace entry.\n\n    The overhead is minimized by using __dynamic_array() instead of __array().\n\nI\u0027ve benchmarked the ioctl blktrace vs the splice based TRACE_EVENT tracing:\n\n      dd                   dd + ioctl blktrace       dd + TRACE_EVENT (splice)\n1     7.36s, 42.7 MB/s     7.50s, 42.0 MB/s          7.41s, 42.5 MB/s\n2     7.43s, 42.3 MB/s     7.48s, 42.1 MB/s          7.43s, 42.4 MB/s\n3     7.38s, 42.6 MB/s     7.45s, 42.2 MB/s          7.41s, 42.5 MB/s\n\nSo the overhead of tracing is very small, and no regression when using\nthose trace events vs blktrace.\n\nAnd the binary output of TRACE_EVENT is much smaller than blktrace:\n\n # ls -l -h\n -rw-r--r-- 1 root root 8.8M 06-09 13:24 sda.blktrace.0\n -rw-r--r-- 1 root root 195K 06-09 13:24 sda.blktrace.1\n -rw-r--r-- 1 root root 2.7M 06-09 13:25 trace_splice.out\n\nFollowing are some comparisons between TRACE_EVENT and blktrace:\n\nplug:\n  kjournald-480   [000]   303.084981: block_plug: [kjournald]\n  kjournald-480   [000]   303.084981:   8,0    P   N [kjournald]\n\nunplug_io:\n  kblockd/0-118   [000]   300.052973: block_unplug_io: [kblockd/0] 1\n  kblockd/0-118   [000]   300.052974:   8,0    U   N [kblockd/0] 1\n\nremap:\n  kjournald-480   [000]   303.085042: block_remap: 8,0 W 102736992 + 8 \u003c- (8,8) 33384\n  kjournald-480   [000]   303.085043:   8,0    A   W 102736992 + 8 \u003c- (8,8) 33384\n\nbio_backmerge:\n  kjournald-480   [000]   303.085086: block_bio_backmerge: 8,0 W 102737032 + 8 [kjournald]\n  kjournald-480   [000]   303.085086:   8,0    M   W 102737032 + 8 [kjournald]\n\ngetrq:\n  kjournald-480   [000]   303.084974: block_getrq: 8,0 W 102736984 + 8 [kjournald]\n  kjournald-480   [000]   303.084975:   8,0    G   W 102736984 + 8 [kjournald]\n\n  bash-2066  [001]  1072.953770:   8,0    G   N [bash]\n  bash-2066  [001]  1072.953773: block_getrq: 0,0 N 0 + 0 [bash]\n\nrq_complete:\n  konsole-2065  [001]   300.053184: block_rq_complete: 8,0 W () 103669040 + 16 [0]\n  konsole-2065  [001]   300.053191:   8,0    C   W 103669040 + 16 [0]\n\n  ksoftirqd/1-7   [001]  1072.953811:   8,0    C   N (5a 00 08 00 00 00 00 00 24 00) [0]\n  ksoftirqd/1-7   [001]  1072.953813: block_rq_complete: 0,0 N (5a 00 08 00 00 00 00 00 24 00) 0 + 0 [0]\n\nrq_insert:\n  kjournald-480   [000]   303.084985: block_rq_insert: 8,0 W 0 () 102736984 + 8 [kjournald]\n  kjournald-480   [000]   303.084986:   8,0    I   W 102736984 + 8 [kjournald]\n\nChangelog from v2 -\u003e v3:\n\n- use the newly introduced __dynamic_array().\n\nChangelog from v1 -\u003e v2:\n\n- use __string() instead of __array() to minimize the memory required\n  to store hex dump of rq-\u003ecmd().\n\n- support large pc requests.\n\n- add missing blk_fill_rwbs_rq() in block_rq_requeue TRACE_EVENT.\n\n- some cleanups.\n\nSigned-off-by: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nLKML-Reference: \u003c4A2DF669.5070905@cn.fujitsu.com\u003e\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "44347d947f628060b92449702071bfe1d31dfb75",
      "tree": "c6ed74610d5b3295df4296659f80f5feb94b28cc",
      "parents": [
        "d94fc523f3c35bd8013f04827e94756cbc0212f4",
        "413f81eba35d6ede9289b0c8a920c013a84fac71"
      ],
      "author": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Thu May 07 11:17:13 2009 +0200"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Thu May 07 11:17:34 2009 +0200"
      },
      "message": "Merge branch \u0027linus\u0027 into tracing/core\n\nMerge reason: tracing/core was on a .30-rc1 base and was missing out on\n              on a handful of tracing fixes present in .30-rc5-almost.\n\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "22a7c31a9659deaddafbbcec6562d44141e84474",
      "tree": "0fe1c64e82d673597c78c6ce5f3569d9101b5281",
      "parents": [
        "a42aaa3bbce85ac487ad4fad5db99e8e91b7aac1"
      ],
      "author": {
        "name": "Alan D. Brunelle",
        "email": "Alan.Brunelle@hp.com",
        "time": "Mon May 04 16:35:08 2009 -0400"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Wed May 06 14:13:01 2009 +0200"
      },
      "message": "blktrace: from-sector redundant in trace_block_remap\n\nRemove redundant from-sector parameter: it\u0027s /always/ the bio\u0027s sector\npassed in.\n\n[ Impact: cleanup ]\n\nSigned-off-by: Alan D. Brunelle \u003calan.brunelle@hp.com\u003e\nReviewed-by: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nReviewed-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Jens Axboe \u003cjens.axboe@oracle.com\u003e\nCc: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\nLKML-Reference: \u003c49FF517C.7000503@hp.com\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "8f3d8ba20e67991b531e9c0227dcd1f99271a32c",
      "tree": "337efd46f067ce3b7eeab0c3627b02a7edef4afd",
      "parents": [
        "0882e8dd3aad33eca41696d463bb896e6c8817eb"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Tue Apr 07 19:55:13 2009 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Wed Apr 15 08:28:09 2009 +0200"
      },
      "message": "block: move bio list helpers into bio.h\n\nIt\u0027s used by DM and MD and generally useful, so move the bio list\nhelpers into bio.h.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nAcked-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "af7e466a1acededbc10beaba9eec8531d561c566",
      "tree": "1d1d0655e2fc22e5b440202be4050fd083a66c04",
      "parents": [
        "92c639021ca6e962645114f02e356e7feb131d0b"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Thu Apr 09 00:27:16 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Apr 09 00:27:16 2009 +0100"
      },
      "message": "dm: implement basic barrier support\n\nBarriers are submitted to a worker thread that issues them in-order.\n\nThe thread is modified so that when it sees a barrier request it waits\nfor all pending IO before the request then submits the barrier and\nwaits for it.  (We must wait, otherwise it could be intermixed with\nfollowing requests.)\n\nErrors from the barrier request are recorded in a per-device barrier_error\nvariable. There may be only one barrier request in progress at once.\n\nFor now, the barrier request is converted to a non-barrier request when\nsending it to the underlying device.\n\nThis patch guarantees correct barrier behavior if the underlying device\ndoesn\u0027t perform write-back caching. The same requirement existed before\nbarriers were supported in dm.\n\nBottom layer barrier support (sending barriers by target drivers) and\nhandling devices with write-back caches will be done in further patches.\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "92c639021ca6e962645114f02e356e7feb131d0b",
      "tree": "eee01e9394b09fb3929fd4f3682815e91b87c764",
      "parents": [
        "3b00b2036fac7a7667d0676a0f80eee575b8c32b"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Thu Apr 09 00:27:15 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Apr 09 00:27:15 2009 +0100"
      },
      "message": "dm: remove dm_request loop\n\nRemove queue_io return value and a loop in dm_request.\n\nIO may be submitted to a worker thread with queue_io().  queue_io() sets\nDMF_QUEUE_IO_TO_THREAD so that all further IO is queued for the thread. When\nthe thread finishes its work, it clears DMF_QUEUE_IO_TO_THREAD and from this\npoint on, requests are submitted from dm_request again. This will be used\nfor processing barriers.\n\nRemove the loop in dm_request. queue_io() can submit I/Os to the worker thread\neven if DMF_QUEUE_IO_TO_THREAD was not set.\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "3b00b2036fac7a7667d0676a0f80eee575b8c32b",
      "tree": "cd893a75900ee81550230711ea4a0005a6f2c2ce",
      "parents": [
        "54d9a1b4513b96cbd835ca6866c6a604d194b2ae"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Thu Apr 09 00:27:15 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Apr 09 00:27:15 2009 +0100"
      },
      "message": "dm: rework queueing and suspension\n\nRework shutting down on suspend and document the associated rules.\n\nDrop write lock in __split_and_process_bio to allow more processing\nconcurrency.\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "54d9a1b4513b96cbd835ca6866c6a604d194b2ae",
      "tree": "42813374e137f5ac6d9d7aedfae02a089b6443a6",
      "parents": [
        "1eb787ec183d1267cac95aae632e92dee05ed50a"
      ],
      "author": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Apr 09 00:27:14 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Apr 09 00:27:14 2009 +0100"
      },
      "message": "dm: simplify dm_request loop\n\nRefactor the code in dm_request().\n\nRequire the new DMF_BLOCK_FOR_SUSPEND flag on readahead bios we will\ndiscard so we don\u0027t drop such bios while processing a barrier.\n\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "1eb787ec183d1267cac95aae632e92dee05ed50a",
      "tree": "ad8f50d995afc72fb4751fdd2436ebc40b648b0f",
      "parents": [
        "df12ee996378a5917e9555169fe278ecca0612d4"
      ],
      "author": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Apr 09 00:27:14 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Apr 09 00:27:14 2009 +0100"
      },
      "message": "dm: split DMF_BLOCK_IO flag into two\n\nSplit the DMF_BLOCK_IO flag into two.\n\nDMF_BLOCK_IO_FOR_SUSPEND is set when I/O must be blocked while suspending a\ndevice.  DMF_QUEUE_IO_TO_THREAD is set when I/O must be queued to a\nworker thread for later processing.\n\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "df12ee996378a5917e9555169fe278ecca0612d4",
      "tree": "ea6200205c68aab575b078e3a9e22d9b3466718f",
      "parents": [
        "692d0eb9e02cf81fb387ff891f53840db2f3110a"
      ],
      "author": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Apr 09 00:27:13 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Apr 09 00:27:13 2009 +0100"
      },
      "message": "dm: rearrange dm_wq_work\n\nRefactor dm_wq_work() to make later patch more readable.\n\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "692d0eb9e02cf81fb387ff891f53840db2f3110a",
      "tree": "0e6aa42d81cd47c55de37b55d2ffad419fe57cd0",
      "parents": [
        "9c47008d13add50ec4597a8b9eee200c515282c8"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Thu Apr 09 00:27:13 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Apr 09 00:27:13 2009 +0100"
      },
      "message": "dm: remove limited barrier support\n\nPrepare for full barrier implementation: first remove the restricted support.\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "9c47008d13add50ec4597a8b9eee200c515282c8",
      "tree": "debd8ebb2fef2687d4548a177505ec30bda95503",
      "parents": [
        "577c9c456f0e1371cbade38eaf91ae8e8a308555"
      ],
      "author": {
        "name": "Martin K. Petersen",
        "email": "martin.petersen@oracle.com",
        "time": "Thu Apr 09 00:27:12 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Apr 09 00:27:12 2009 +0100"
      },
      "message": "dm: add integrity support\n\nThis patch provides support for data integrity passthrough in the device\nmapper.\n\n - If one or more component devices support integrity an integrity\n   profile is preallocated for the DM device.\n\n - If all component devices have compatible profiles the DM device is\n   flagged as capable.\n\n - Handle integrity metadata when splitting and cloning bios.\n\nSigned-off-by: Martin K. Petersen \u003cmartin.petersen@oracle.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "99360b4c18f7675b50d283301d46d755affe75fd",
      "tree": "1ad78057b086aa1571cc8dcf2443c819f75ca30a",
      "parents": [
        "b44ebeb017b8a5fe5439e1259708b68cf83a8921"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Thu Apr 02 19:55:39 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Apr 02 19:55:39 2009 +0100"
      },
      "message": "dm: set queue ordered mode\n\nSet queue ordered mode.  It doesn\u0027t really matter what we set here\nbecause we don\u0027t ever put any requests on the queue.  But we need to set\nsomething other than QUEUE_ORDERED_NONE so that __generic_make_request\npasses barrier requests to us.\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "b44ebeb017b8a5fe5439e1259708b68cf83a8921",
      "tree": "ea138d44aa80302002b3e67cd6049a18c2302734",
      "parents": [
        "022c261100e15652d720395b17ce76304fb2f97f"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Thu Apr 02 19:55:39 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Apr 02 19:55:39 2009 +0100"
      },
      "message": "dm: move wait queue declaration\n\nMove wait queue declaration and unplug to dm_wait_for_completion.\n\nThe purpose is to minimize duplicate code in the further patches.\n\nThe patch reorders functions a little bit. It doesn\u0027t change any\nfunctionality. For proper non-deadlock operation, add_wait_queue must\nhappen before set_current_state(interruptible) and before the test for\n!atomic_read(\u0026md-\u003epending).\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "022c261100e15652d720395b17ce76304fb2f97f",
      "tree": "cbab417b11242d4561ba45e60b3838f1672013cb",
      "parents": [
        "401600dfd368305e641d79db16d514f55c084544"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Thu Apr 02 19:55:39 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Apr 02 19:55:39 2009 +0100"
      },
      "message": "dm: merge pushback and deferred bio lists\n\nMerge pushback and deferred lists into one list - use deferred list\nfor both deferred and pushed-back bios.\n\nThis will be needed for proper support of barrier bios: it is impossible to\nsupport ordering correctly with two lists because the requests on both lists\nwill be mixed up.\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "401600dfd368305e641d79db16d514f55c084544",
      "tree": "4e1c3f19c52d2bb7d78ec01689d17659960732ab",
      "parents": [
        "ef2085870ea448b3c19160d899cf4f948da6a384"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Thu Apr 02 19:55:38 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Apr 02 19:55:38 2009 +0100"
      },
      "message": "dm: allow uninterruptible wait for pending io\n\nAllow uninterruptible wait for pending IOs.\n\nAdd argument \"interruptible\" to dm_wait_for_completion that specifies\neither interruptible or uninterruptible waiting.\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "ef2085870ea448b3c19160d899cf4f948da6a384",
      "tree": "f8e6e4bdeecc41d1b0cd8608a7460b0d130f43a8",
      "parents": [
        "f0b9a4502baa18f8a255a2866bb4e0655fb35974"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Thu Apr 02 19:55:38 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Apr 02 19:55:38 2009 +0100"
      },
      "message": "dm: merge __flush_deferred_io into caller\n\nMerge __flush_deferred_io() into the only caller, dm_wq_work().\n\nThere\u0027s no need to have a function that has only one caller.\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "f0b9a4502baa18f8a255a2866bb4e0655fb35974",
      "tree": "28d45275783b68d608d632a84371aa6e625c08f5",
      "parents": [
        "8a53c28db42853591edbe8103e2ce3c4f2917f42"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Thu Apr 02 19:55:38 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Apr 02 19:55:38 2009 +0100"
      },
      "message": "dm: move bio_io_error into __split_and_process_bio\n\nMove the bio_io_error() calls directly into __split_and_process_bio().\n\nThis avoids some code duplication in later patches.\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "8a53c28db42853591edbe8103e2ce3c4f2917f42",
      "tree": "fe09d07b660847c37fa8cd6ee67ee043f4302ba4",
      "parents": [
        "53d5914f288b67ddc4d594d6a09568fe114bb909"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Thu Apr 02 19:55:37 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Apr 02 19:55:37 2009 +0100"
      },
      "message": "dm: rename __split_bio\n\nRename __split_bio() to __split_and_process_bio() because it not only splits\nthe bio to serveral parts, but also submits them to target drivers.\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    }
  ],
  "next": "53d5914f288b67ddc4d594d6a09568fe114bb909"
}
