)]}'
{
  "log": [
    {
      "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": "26803b9f06d365122fae82e7554a66ef8278e0bb",
      "tree": "83f77be2b09bbaa6d97105509d54955b2eec7147",
      "parents": [
        "b1d5552838334c600b068c9c8cc18638e5a8cb47"
      ],
      "author": {
        "name": "Will Drewry",
        "email": "wad@chromium.org",
        "time": "Thu Aug 12 04:14:03 2010 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Aug 12 04:14:03 2010 +0100"
      },
      "message": "dm ioctl: refactor dm_table_complete\n\nThis change unifies the various checks and finalization that occurs on a\ntable prior to use.  By doing so, it allows table construction without\ntraversing the dm-ioctl interface.\n\nSigned-off-by: Will Drewry \u003cwad@chromium.org\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": "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": "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": "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": "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": "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": "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": "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": "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": "45194e4f89fbdd97a2b7d2698c05f0b00c19e820",
      "tree": "70d35747228b84c1d7b7d76c5e18f72b16f412a3",
      "parents": [
        "570b9d968bf9b16974252ef7cbce73fa6dac34f3"
      ],
      "author": {
        "name": "Cheng Renquan",
        "email": "crquan@gmail.com",
        "time": "Thu Apr 02 19:55:28 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Apr 02 19:55:28 2009 +0100"
      },
      "message": "dm target: remove struct tt_internal\n\nThe tt_internal is really just a list_head to manage registered target_type\nin a double linked list,\n\nHere embed the list_head into target_type directly,\n1. to avoid kmalloc/kfree;\n2. then tt_internal is really unneeded;\n\nCc: stable@kernel.org\nSigned-off-by: Cheng Renquan \u003ccrquan@gmail.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\nReviewed-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "784aae735d9b0bba3f8b9faef4c8b30df3bf0128",
      "tree": "7e2e956c395b27f63569d7a6adc1098f116cc3a4",
      "parents": [
        "d58168763f74d1edbc296d7038c60efe6493fdd4"
      ],
      "author": {
        "name": "Milan Broz",
        "email": "mbroz@redhat.com",
        "time": "Tue Jan 06 03:05:12 2009 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Jan 06 03:05:12 2009 +0000"
      },
      "message": "dm: add name and uuid to sysfs\n\nImplement simple read-only sysfs entry for device-mapper block device.\n\nThis patch adds a simple sysfs directory named \"dm\" under block device\nproperties and implements\n\t- name attribute (string containing mapped device name)\n\t- uuid attribute (string containing UUID, or empty string if not set)\n\nThe kobject is embedded in mapped_device struct, so no additional\nmemory allocation is needed for initializing sysfs entry.\n\nDuring the processing of sysfs attribute we need to lock mapped device\nwhich is done by a new function dm_get_from_kobj, which returns the md\nassociated with kobject and increases the usage count.\n\nEach \u0027show attribute\u0027 function is responsible for its own locking.\n\nSigned-off-by: Milan Broz \u003cmbroz@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "d58168763f74d1edbc296d7038c60efe6493fdd4",
      "tree": "03866d641211fe16961a5b8aab6d9132bf07d9c8",
      "parents": [
        "ab4c1424882be9cd70b89abf2b484add355712fa"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Tue Jan 06 03:05:10 2009 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Jan 06 03:05:10 2009 +0000"
      },
      "message": "dm table: rework reference counting\n\nRework table reference counting.\n\nThe existing code uses a reference counter. When the last reference is\ndropped and the counter reaches zero, the table destructor is called.\nTable reference counters are acquired/released from upcalls from other\nkernel code (dm_any_congested, dm_merge_bvec, dm_unplug_all).\nIf the reference counter reaches zero in one of the upcalls, the table\ndestructor is called from almost random kernel code.\n\nThis leads to various problems:\n* dm_any_congested being called under a spinlock, which calls the\n  destructor, which calls some sleeping function.\n* the destructor attempting to take a lock that is already taken by the\n  same process.\n* stale reference from some other kernel code keeps the table\n  constructed, which keeps some devices open, even after successful\n  return from \"dmsetup remove\". This can confuse lvm and prevent closing\n  of underlying devices or reusing device minor numbers.\n\nThe patch changes reference counting so that the table destructor can be\ncalled only at predetermined places.\n\nThe table has always exactly one reference from either mapped_device-\u003emap\nor hash_cell-\u003enew_map. After this patch, this reference is not counted\nin table-\u003eholders.  A pair of dm_create_table/dm_destroy_table functions\nis used for table creation/destruction.\n\nTemporary references from the other code increase table-\u003eholders. A pair\nof dm_table_get/dm_table_put functions is used to manipulate it.\n\nWhen the table is about to be destroyed, we wait for table-\u003eholders to\nreach 0. Then, we call the table destructor.  We use active waiting with\nmsleep(1), because the situation happens rarely (to one user in 5 years)\nand removing the device isn\u0027t performance-critical task: the user doesn\u0027t\ncare if it takes one tick more or not.\n\nThis way, the destructor is called only at specific points\n(dm_table_destroy function) and the above problems associated with lazy\ndestruction can\u0027t happen.\n\nFinally remove the temporary protection added to dm_any_congested().\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "ab4c1424882be9cd70b89abf2b484add355712fa",
      "tree": "8baed3606be67900df9f02e42fcdb091b78c5def",
      "parents": [
        "7d76345da6ed3927c9cbf5d3f7a7021e8bba7374"
      ],
      "author": {
        "name": "Andi Kleen",
        "email": "ak@suse.de",
        "time": "Tue Jan 06 03:05:09 2009 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Jan 06 03:05:09 2009 +0000"
      },
      "message": "dm: support barriers on simple devices\n\nImplement barrier support for single device DM devices\n\nThis patch implements barrier support in DM for the common case of dm linear\njust remapping a single underlying device. In this case we can safely\npass the barrier through because there can be no reordering between\ndevices.\n\n NB. Any DM device might cease to support barriers if it gets\n     reconfigured so code must continue to allow for a possible\n     -EOPNOTSUPP on every barrier bio submitted.  - agk\n\nSigned-off-by: Andi Kleen \u003cak@suse.de\u003e\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "d63a5ce3c0d25c96bdadc78792e5b48b846e899d",
      "tree": "ac46375b47f784dff17d1e657d5115b45ad86844",
      "parents": [
        "7acedc5b98a2fcff64f00c21110aae7d3ac2f7df"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Tue Oct 21 17:44:57 2008 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Oct 21 17:44:57 2008 +0100"
      },
      "message": "dm: publish array_too_big\n\nMove array_too_big to include/linux/device-mapper.h because it is\nused by targets.\n\nRemove the test from dm-raid1 as the number of mirror legs is limited\nsuch that it can never fail.  (Even for stripes it seems rather\nunlikely.)\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "54160904260fa764ba6e2dc738770be30fdf9553",
      "tree": "5f286d4d4c199772b4fc2fea48dfd10c5ef0ecf9",
      "parents": [
        "ea0ec640940c2ae3a8d71af3249fccf06a9997a3"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Fri Oct 10 13:37:12 2008 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Fri Oct 10 13:37:12 2008 +0100"
      },
      "message": "dm: publish dm_vcalloc\n\nPublish dm_vcalloc in include/linux/device-mapper.h because this function is\nused by targets.\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "ea0ec640940c2ae3a8d71af3249fccf06a9997a3",
      "tree": "1ee9b5f228d1ab415d1853eed6508e2f2b85ef5e",
      "parents": [
        "89343da077ad564ed130c46e5ea6a79388410fa5"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Fri Oct 10 13:37:11 2008 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Fri Oct 10 13:37:11 2008 +0100"
      },
      "message": "dm: publish dm_table_unplug_all\n\nPublish dm_table_unplug_all in include/linux/device-mapper.h because this\nfunction is used by targets.\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "89343da077ad564ed130c46e5ea6a79388410fa5",
      "tree": "63fc3da552cc025d86656172697fcd88782a1091",
      "parents": [
        "82b1519b345d61dcfae526e3fcb08128f39f9bcc"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Fri Oct 10 13:37:10 2008 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Fri Oct 10 13:37:10 2008 +0100"
      },
      "message": "dm: publish dm_get_mapinfo\n\nPublish dm_get_mapinfo in include/linux/device-mapper.h because this function\nis used by targets.\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "82b1519b345d61dcfae526e3fcb08128f39f9bcc",
      "tree": "240bc646da63557ed7fa81fa3c17d05b95853f45",
      "parents": [
        "933f01d43326fb12a978a8e0bb062c28a2de4d5a"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Fri Oct 10 13:37:09 2008 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Fri Oct 10 13:37:09 2008 +0100"
      },
      "message": "dm: export struct dm_dev\n\nSplit struct dm_dev in two and publish the part that other targets need in\ninclude/linux/device-mapper.h.\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "c8da2f8dd86d70559ec4e50251f6a755b42bd5b4",
      "tree": "1991d27441d08a727160d75d7b2723b5514b19e1",
      "parents": [
        "371b2e348b7731a548b0a7432ca2ba32e90dd16f"
      ],
      "author": {
        "name": "Adrian Bunk",
        "email": "bunk@kernel.org",
        "time": "Mon Jul 21 12:00:27 2008 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Mon Jul 21 12:00:27 2008 +0100"
      },
      "message": "dm log: make dm_dirty_log init and exit static\n\ndm_dirty_log_{init,exit}() can now become static.\n\nSigned-off-by: Adrian Bunk \u003cbunk@kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "0da336e5fab75c712ba8c67f3135d5a20528465f",
      "tree": "8907bfc6db07ba73979df23d99424984aa02d3d7",
      "parents": [
        "945fa4d283a3a472186c11028f6fea1e77a91d14"
      ],
      "author": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Apr 24 21:43:52 2008 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Fri Apr 25 13:26:53 2008 +0100"
      },
      "message": "dm: expose macros\n\nMake dm.h macros and inlines available in include/linux/device-mapper.h\n\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "945fa4d283a3a472186c11028f6fea1e77a91d14",
      "tree": "99af5b3623665680417a61a43f5effcfbeba903b",
      "parents": [
        "08d8757a4d52d21d825b9170af36f2696d1da1a8"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Thu Apr 24 21:43:49 2008 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Fri Apr 25 13:26:52 2008 +0100"
      },
      "message": "dm kcopyd: remove redundant client counting\n\nRemove client counting code that is no longer needed.\n\nInitialization and destruction is made globally from dm_init and dm_exit and is\nnot based on client counts. Initialization allocates only one empty slab cache,\nso there is no negative impact from performing the initialization always,\nregardless of whether some client uses kcopyd or not.\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "416cd17b1982217bca3dc41b9f00b0b38fdaadad",
      "tree": "dcb73db9876f5b973ad26b47449083b98efad1b6",
      "parents": [
        "eb69aca5d3370b81450d68edeebc2bb9a3eb9689"
      ],
      "author": {
        "name": "Heinz Mauelshagen",
        "email": "hjm@redhat.com",
        "time": "Thu Apr 24 21:43:35 2008 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Fri Apr 25 13:26:46 2008 +0100"
      },
      "message": "dm log: clean interface\n\nClean up the dm-log interface to prepare for publishing it in include/linux.\n\nSigned-off-by: Heinz Mauelshagen \u003chjm@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "69267a30bed1fabec658058c63845528a8b813d4",
      "tree": "d6c527bc0d456089f1eaf0998fe39ef899b8c1fc",
      "parents": [
        "adfe47702c4726b3e045f9f83178def02833be4c"
      ],
      "author": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Dec 13 14:15:57 2007 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Dec 20 17:32:11 2007 +0000"
      },
      "message": "dm: trigger change uevent on rename\n\nInsert a missing KOBJ_CHANGE notification when a device is renamed.\n\nCc: Scott James Remnant \u003cscott@ubuntu.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "512875bd9661368da6f993205a61213b79ba1df0",
      "tree": "7a2e010060b6233cd02e2e36b62f5dcaa96c2c36",
      "parents": [
        "fbdcf18df73758b2e187ab94678b30cd5f6ff9f9"
      ],
      "author": {
        "name": "Jun\u0027ichi Nomura",
        "email": "j-nomura@ce.jp.nec.com",
        "time": "Thu Dec 13 14:15:25 2007 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Dec 20 17:32:08 2007 +0000"
      },
      "message": "dm: table detect io beyond device\n\nThis patch fixes a panic on shrinking a DM device if there is\noutstanding I/O to the part of the device that is being removed.\n(Normally this doesn\u0027t happen - a filesystem would be resized first,\nfor example.)\n\nThe bug is that __clone_and_map() assumes dm_table_find_target()\nalways returns a valid pointer.  It may fail if a bio arrives from the\nblock layer but its target sector is no longer included in the DM\nbtree.\n\nThis patch appends an empty entry to table-\u003etargets[] which will\nbe returned by a lookup beyond the end of the device.\n\nAfter calling dm_table_find_target(), __clone_and_map() and target_message()\ncheck for this condition using\ndm_target_is_valid().\n\nSample test script to trigger oops:\n"
    },
    {
      "commit": "fd5d806266935179deda1502101624832eacd01f",
      "tree": "b0d01c2ed7d754f2a6daef6c77d108a81d8a470e",
      "parents": [
        "bf2de6f5a4faf0197268f18d08969b003b87b6e8"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Tue Oct 16 11:05:02 2007 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Tue Oct 16 11:05:02 2007 +0200"
      },
      "message": "block: convert blkdev_issue_flush() to use empty barriers\n\nThen we can get rid of -\u003eissue_flush_fn() and all the driver private\nimplementations of that.\n\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "d0d444c7d48c14d59f665887c758fde248f1cb37",
      "tree": "8175cb71399e3f4048a7cf4a2859f43d2ee29852",
      "parents": [
        "07a83c47cfc00ba5f0f090ccddd3a0703be0eec9"
      ],
      "author": {
        "name": "Jonathan Brassow",
        "email": "jbrassow@redhat.com",
        "time": "Thu Jul 12 17:28:42 2007 +0100"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Thu Jul 12 15:01:08 2007 -0700"
      },
      "message": "dm: add ratelimit logging macros\n\nAdd ratelimit extension to dm logging macros.\n\nSigned-off-by: Jonathan Brassow \u003cjbrassow@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "2e93ccc1933d08d32d9bde3784c3823e67b9b030",
      "tree": "1e8ad6a6444fc0a568e35f19628c89cdef9ad512",
      "parents": [
        "81fdb096dbcedcc3b94c7e47b59362b5214891e2"
      ],
      "author": {
        "name": "Kiyoshi Ueda",
        "email": "k-ueda@ct.jp.nec.com",
        "time": "Fri Dec 08 02:41:09 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.osdl.org",
        "time": "Fri Dec 08 08:29:09 2006 -0800"
      },
      "message": "[PATCH] dm: suspend: add noflush pushback\n\nIn device-mapper I/O is sometimes queued within targets for later processing.\nFor example the multipath target can be configured to store I/O when no paths\nare available instead of returning it -EIO.\n\nThis patch allows the device-mapper core to instruct a target to transfer the\ncontents of any such in-target queue back into the core.  This frees up the\nresources used by the target so the core can replace that target with an\nalternative one and then resend the I/O to it.  Without this patch the only\nway to change the target in such circumstances involves returning the I/O with\nan error back to the filesystem/application.  In the multipath case, this\npatch will let us add new paths for existing I/O to try after all the existing\npaths have failed.\n\n    DMF_NOFLUSH_SUSPENDING\n    ----------------------\n\nIf the DM_NOFLUSH_FLAG ioctl option is specified at suspend time, the\nDMF_NOFLUSH_SUSPENDING flag is set in md-\u003eflags during dm_suspend().  It\nis always cleared before dm_suspend() returns.\n\nThe flag must be visible while the target is flushing pending I/Os so it\nis set before presuspend where the flush starts and unset after the wait\nfor md-\u003epending where the flush ends.\n\nTarget drivers can check this flag by calling dm_noflush_suspending().\n\n    DM_MAPIO_REQUEUE / DM_ENDIO_REQUEUE\n    -----------------------------------\n\nA target\u0027s map() function can now return DM_MAPIO_REQUEUE to request the\ndevice mapper core queue the bio.\n\nSimilarly, a target\u0027s end_io() function can return DM_ENDIO_REQUEUE to request\nthe same.  This has been labelled \u0027pushback\u0027.\n\nThe __map_bio() and clone_endio() functions in the core treat these return\nvalues as errors and call dec_pending() to end the I/O.\n\n    dec_pending\n    -----------\n\ndec_pending() saves the pushback request in struct dm_io-\u003eerror.  Once all\nthe split clones have ended, dec_pending() will put the original bio on\nthe md-\u003epushback list.  Note that this supercedes any I/O errors.\n\nIt is possible for the suspend with DM_NOFLUSH_FLAG to be aborted while\nin progress (e.g. by user interrupt).  dec_pending() checks for this and\nreturns -EIO if it happened.\n\n    pushdback list and pushback_lock\n    --------------------------------\n\nThe bio is queued on md-\u003epushback temporarily in dec_pending(), and after\nall pending I/Os return, md-\u003epushback is merged into md-\u003edeferred in\ndm_suspend() for re-issuing at resume time.\n\nmd-\u003epushback_lock protects md-\u003epushback.\nThe lock should be held with irq disabled because dec_pending() can be\ncalled from interrupt context.\n\nQueueing bios to md-\u003epushback in dec_pending() must be done atomically\nwith the check for DMF_NOFLUSH_SUSPENDING flag.  So md-\u003epushback_lock is\nheld when checking the flag.  Otherwise dec_pending() may queue a bio to\nmd-\u003epushback after the interrupted dm_suspend() flushes md-\u003epushback.\nThen the bio would be left in md-\u003epushback.\n\nFlag setting in dm_suspend() can be done without md-\u003epushback_lock because\nthe flag is checked only after presuspend and the set value is already\nmade visible via the target\u0027s presuspend function.\n\nThe flag can be checked without md-\u003epushback_lock (e.g. the first part of\nthe dec_pending() or target drivers), because the flag is checked again\nwith md-\u003epushback_lock held when the bio is really queued to md-\u003epushback\nas described above.  So even if the flag is cleared after the lockless\ncheckings, the bio isn\u0027t left in md-\u003epushback but returned to applications\nwith -EIO.\n\n    Other notes on the current patch\n    --------------------------------\n\n- md-\u003epushback is added to the struct mapped_device instead of using\n  md-\u003edeferred directly because md-\u003eio_lock which protects md-\u003edeferred is\n  rw_semaphore and can\u0027t be used in interrupt context like dec_pending(),\n  and md-\u003eio_lock protects the DMF_BLOCK_IO flag of md-\u003eflags too.\n\n- Don\u0027t issue lock_fs() in dm_suspend() if the DM_NOFLUSH_FLAG\n  ioctl option is specified, because I/Os generated by lock_fs() would be\n  pushed back and never return if there were no valid devices.\n\n- If an error occurs in dm_suspend() after the DMF_NOFLUSH_SUSPENDING\n  flag is set, md-\u003epushback must be flushed because I/Os may be queued to\n  the list already.  (flush_and_out label in dm_suspend())\n\n    Test results\n    ------------\n\nI have tested using multipath target with the next patch.\n\nThe following tests are for regression/compatibility:\n  - I/Os succeed when valid paths exist;\n  - I/Os fail when there are no valid paths and queue_if_no_path is not\n    set;\n  - I/Os are queued in the multipath target when there are no valid paths and\n    queue_if_no_path is set;\n  - The queued I/Os above fail when suspend is issued without the\n    DM_NOFLUSH_FLAG ioctl option.  I/Os spanning 2 multipath targets also\n    fail.\n\nThe following tests are for the normal code path of new pushback feature:\n  - Queued I/Os in the multipath target are flushed from the target\n    but don\u0027t return when suspend is issued with the DM_NOFLUSH_FLAG\n    ioctl option;\n  - The I/Os above are queued in the multipath target again when\n    resume is issued without path recovery;\n  - The I/Os above succeed when resume is issued after path recovery\n    or table load;\n  - Queued I/Os in the multipath target succeed when resume is issued\n    with the DM_NOFLUSH_FLAG ioctl option after table load. I/Os\n    spanning 2 multipath targets also succeed.\n\nThe following tests are for the error paths of the new pushback feature:\n  - When the bdget_disk() fails in dm_suspend(), the\n    DMF_NOFLUSH_SUSPENDING flag is cleared and I/Os already queued to the\n    pushback list are flushed properly.\n  - When suspend with the DM_NOFLUSH_FLAG ioctl option is interrupted,\n      o I/Os which had already been queued to the pushback list\n        at the time don\u0027t return, and are re-issued at resume time;\n      o I/Os which hadn\u0027t been returned at the time return with EIO.\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\nCc: dm-devel@redhat.com\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "81fdb096dbcedcc3b94c7e47b59362b5214891e2",
      "tree": "ce40376d3c16e3105e73d84b0129ab4bfb06dedf",
      "parents": [
        "d2a7ad29a810441e9dacbaddcc2f0c6045390008"
      ],
      "author": {
        "name": "Kiyoshi Ueda",
        "email": "k-ueda@ct.jp.nec.com",
        "time": "Fri Dec 08 02:41:07 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.osdl.org",
        "time": "Fri Dec 08 08:29:09 2006 -0800"
      },
      "message": "[PATCH] dm: ioctl: add noflush suspend\n\nProvide a dm ioctl option to request noflush suspending.  (See next patch for\nwhat this is for.) As the interface is extended, the version number is\nincremented.\n\nOther than accepting the new option through the interface, There is no change\nto existing behaviour.\n\nTest results:\nConfirmed the option is given from user-space correctly.\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\nCc: dm-devel@redhat.com\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "45cbcd798354251b99694086af9d57c99e89bb43",
      "tree": "a9822364a37993b72ffecf356aa040e8fefe6cb5",
      "parents": [
        "a3d77d35be6f416a250c528c3ed5c70013a915e8"
      ],
      "author": {
        "name": "Kiyoshi Ueda",
        "email": "k-ueda@ct.jp.nec.com",
        "time": "Fri Dec 08 02:41:05 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.osdl.org",
        "time": "Fri Dec 08 08:29:09 2006 -0800"
      },
      "message": "[PATCH] dm: map and endio return code clarification\n\nTighten the use of return values from the target map and end_io functions.\nValues of 2 and above are now explictly reserved for future use.  There are no\nexisting targets using such values.\n\nThe patch has no effect on existing behaviour.\n\no Reserve return values of 2 and above from target map functions.\n  Any positive value currently indicates \"mapping complete\", but all\n  existing drivers use the value 1.  We now make that a requirement\n  so we can assign new meaning to higher values in future.\n\n  The new definition of return values from target map functions is:\n      \u003c 0 : error\n      \u003d 0 : The target will handle the io (DM_MAPIO_SUBMITTED).\n      \u003d 1 : Mapping completed (DM_MAPIO_REMAPPED).\n      \u003e 1 : Reserved (undefined).  Previously this was the same as \u0027\u003d 1\u0027.\n\no Reserve return values of 2 and above from target end_io functions\n  for similar reasons.\n  DM_ENDIO_INCOMPLETE is introduced for a return value of 1.\n\nTest results:\n\n  I have tested by using the multipath target.\n\n  I/Os succeed when valid paths exist.\n\n  I/Os are queued in the multipath target when there are no valid paths and\nqueue_if_no_path is set.\n\n  I/Os fail when there are no valid paths and queue_if_no_path is not set.\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\nCc: dm-devel@redhat.com\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "a3d77d35be6f416a250c528c3ed5c70013a915e8",
      "tree": "6aaecdf78b4da52f8a3b3ded2bd320812e3db6df",
      "parents": [
        "74859364633963cb660c4fa518adca9ab1ca4229"
      ],
      "author": {
        "name": "Kiyoshi Ueda",
        "email": "k-ueda@ct.jp.nec.com",
        "time": "Fri Dec 08 02:41:04 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.osdl.org",
        "time": "Fri Dec 08 08:29:09 2006 -0800"
      },
      "message": "[PATCH] dm: suspend: parameter change\n\nChange the interface of dm_suspend() so that we can pass several options\nwithout increasing the number of parameters.  The existing \u0027do_lockfs\u0027 integer\nparameter is replaced by a flag DM_SUSPEND_LOCKFS_FLAG.\n\nThere is no functional change to the code.\n\nTest results:\nI have tested \u0027dmsetup suspend\u0027 command with/without the \u0027--nolockfs\u0027\noption and confirmed the do_lockfs value is correctly set.\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\nCc: dm-devel@redhat.com\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "8757b7764f13e336f3c0eb1f634440d4ee4c3a67",
      "tree": "c91b00ace6ee438a9e447bce311808a698e9d487",
      "parents": [
        "cc1092019ce3d9b3e85a285b41e852ff94a6b590"
      ],
      "author": {
        "name": "Milan Broz",
        "email": "mbroz@redhat.com",
        "time": "Tue Oct 03 01:15:36 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Tue Oct 03 08:04:15 2006 -0700"
      },
      "message": "[PATCH] dm table: add target preresume\n\nThis patch adds a target preresume hook.\n\nIt is called before the targets are resumed and if it returns an error the\nresume gets cancelled.\n\nThe crypt target will use this to indicate that it is unable to process I/O\nbecause no encryption key has been supplied.\n\nSigned-off-by: Milan Broz \u003cmbroz@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "cc1092019ce3d9b3e85a285b41e852ff94a6b590",
      "tree": "c9ca9dca870249b66671335a2152fac7b4ed0cc5",
      "parents": [
        "8560ed6fa8d43537af558514fa48f670b3349f08"
      ],
      "author": {
        "name": "Bryn Reeves",
        "email": "breeves@redhat.com",
        "time": "Tue Oct 03 01:15:35 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Tue Oct 03 08:04:15 2006 -0700"
      },
      "message": "[PATCH] dm: add debug macro\n\nAdd CONFIG_DM_DEBUG and DMDEBUG() macro.\n\nSigned-off-by: Bryn Reeves \u003cbreeves@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "72d9486169a2a8353e022813185ba2f32d7dde69",
      "tree": "2fe6c382feb3f21d829abf543c54be486007557c",
      "parents": [
        "5c6bd75d06db512515a3781aa97e42df2faf0815"
      ],
      "author": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Mon Jun 26 00:27:35 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Mon Jun 26 09:58:36 2006 -0700"
      },
      "message": "[PATCH] dm: improve error message consistency\n\nTidy device-mapper error messages to include context information\nautomatically.\n\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "5c6bd75d06db512515a3781aa97e42df2faf0815",
      "tree": "43d68c6d3174e1ae8a778acd834665c122f8b2a4",
      "parents": [
        "c2ade42dd35466d90aa6fc7cc717f396e165492f"
      ],
      "author": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Mon Jun 26 00:27:34 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Mon Jun 26 09:58:36 2006 -0700"
      },
      "message": "[PATCH] dm: prevent removal if open\n\nIf you misuse the device-mapper interface (or there\u0027s a bug in your userspace\ntools) it\u0027s possible to end up with \u0027unlinked\u0027 mapped devices that cannot be\nremoved until you reboot (along with uninterruptible processes).\n\nThis patch prevents you from removing a device that is still open.\n\nIt introduces dm_lock_for_deletion() which is called when a device is about to\nbe removed to ensure that nothing has it open and nothing further can open it.\n It uses a private open_count for this which also lets us remove one of the\nproblematic bdget_disk() calls elsewhere.\n\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "17b2f66f2a39a4e4d1ed456f35ee3bb598e41d35",
      "tree": "64801e095918f685fa83bface7f8289e33bb9bcd",
      "parents": [
        "2b06cfff12f0f87c4bc4d4c4dd76997e72c360ba"
      ],
      "author": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Mon Jun 26 00:27:33 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Mon Jun 26 09:58:36 2006 -0700"
      },
      "message": "[PATCH] dm: add exports\n\nMove definitions of core device-mapper functions for manipulating mapped\ndevices and their tables to \u003clinux/device-mapper.h\u003e advertising their\navailability for use elsewhere in the kernel.\n\nProtect the contents of device-mapper.h with ifdef __KERNEL__.  And throw\nin a few formatting clean-ups and extra comments.\n\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "2b06cfff12f0f87c4bc4d4c4dd76997e72c360ba",
      "tree": "68e9085593ef64b78a60daec94898e620bf716c3",
      "parents": [
        "814d68629b40e863997fa0eea459be4cc99a06cc"
      ],
      "author": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Mon Jun 26 00:27:32 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Mon Jun 26 09:58:36 2006 -0700"
      },
      "message": "[PATCH] dm: consolidate creation functions\n\nMerge dm_create() and dm_create_with_minor() by introducing the special value\nDM_ANY_MINOR to request the allocation of the next available minor number.\n\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "3ac51e741a46af7a20f55e79d3e3aeaa93c6c544",
      "tree": "cab595a4d9691d7602616337b7862a1a3d692b97",
      "parents": [
        "1134e5ae79bab61c05657ca35a6297cf87202e35"
      ],
      "author": {
        "name": "Darrick J. Wong",
        "email": "djwong@us.ibm.com",
        "time": "Mon Mar 27 01:17:54 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Mon Mar 27 08:44:59 2006 -0800"
      },
      "message": "[PATCH] dm store geometry\n\nAllow drive geometry to be stored with a new DM_DEV_SET_GEOMETRY ioctl.\nDevice-mapper will now respond to HDIO_GETGEO.  If the geometry information is\nnot available, zero will be returned for all of the parameters.\n\nSigned-off-by: Darrick J. Wong \u003cdjwong@us.ibm.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "1134e5ae79bab61c05657ca35a6297cf87202e35",
      "tree": "16d5e9c722fbe17dc343c65b85628c8e6ee36199",
      "parents": [
        "9ade92a9a5b0a3a10efa6551b8c67a9277bf0438"
      ],
      "author": {
        "name": "Mike Anderson",
        "email": "andmike@us.ibm.com",
        "time": "Mon Mar 27 01:17:54 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Mon Mar 27 08:44:59 2006 -0800"
      },
      "message": "[PATCH] dm table: store md\n\nStore an up-pointer to the owning struct mapped_device in every table when it\nis created.\n\nAccess it with:\n  struct mapped_device *dm_table_get_md(struct dm_table *t)\n\nTables linked to md must be destroyed before the md itself.\n\nSigned-off-by: Mike Anderson \u003candmike@us.ibm.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "9ade92a9a5b0a3a10efa6551b8c67a9277bf0438",
      "tree": "976b3d4f8a90d08cf9db1f7afb40423570360d85",
      "parents": [
        "7e51f257e87297a5b6fe6d136a8ef67206aaf3a8"
      ],
      "author": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Mon Mar 27 01:17:53 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Mon Mar 27 08:44:59 2006 -0800"
      },
      "message": "[PATCH] dm: tidy mdptr\n\nChange dm_get_mdptr() to take a struct mapped_device instead of dev_t.\n\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "4ee218cd67b385759993a6c840ea45f0ee0a8b30",
      "tree": "788d33b31e9d008eeb2de2a7f874e45b09695719",
      "parents": [
        "930d332a23682202c07df0276dd665a57755b37d"
      ],
      "author": {
        "name": "Andrew Morton",
        "email": "akpm@osdl.org",
        "time": "Mon Mar 27 01:17:48 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Mon Mar 27 08:44:58 2006 -0800"
      },
      "message": "[PATCH] dm: remove SECTOR_FORMAT\n\nWe don\u0027t know what type sector_t has.  Sometimes it\u0027s unsigned long, sometimes\nit\u0027s unsigned long long.  For example on ppc64 it\u0027s unsigned long with\nCONFIG_LBD\u003dn and on x86_64 it\u0027s unsigned long long with CONFIG_LBD\u003dn.\n\nThe way to handle all of this is to always use unsigned long long and to\nalways typecast the sector_t when printing it.\n\nAcked-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "aa8d7c2fbe619d8c0837296d2eaf4c14cebac198",
      "tree": "88b63e397b0c2dbdf2b8feb3920d565d352412d6",
      "parents": [
        "e39e2e95eb8bd536b61654e8fda1516d0a6a3cd1"
      ],
      "author": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Fri Jan 06 00:20:06 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Fri Jan 06 08:34:01 2006 -0800"
      },
      "message": "[PATCH] device-mapper: make lock_fs optional\n\nDevices only needs syncing when creating snapshots, so make this optional when\nsuspending a device.\n\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "2d5fe68987341a59a3fd97c71695efcabb0c6fd5",
      "tree": "232e06bc54a3a0951222b8cb0f88f8d9b3c5b583",
      "parents": [
        "e6c276159c812ab25f47b7c7b683a5c97c442dd5"
      ],
      "author": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Fri Jan 06 00:20:04 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Fri Jan 06 08:34:00 2006 -0800"
      },
      "message": "[PATCH] device-mapper: scanf sector format change\n\nUse %llu not %Lu in sscanf/printf format strings.\n\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "d229a9589ff3b988d3f999cdcfa350f97a372673",
      "tree": "ea6da350027f02736de7c1b7f350bc915abae39c",
      "parents": [
        "637842cfdbe2b981f7088f7633e630570f58efaf"
      ],
      "author": {
        "name": "David Teigland",
        "email": "teigland@redhat.com",
        "time": "Fri Jan 06 00:20:01 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Fri Jan 06 08:34:00 2006 -0800"
      },
      "message": "[PATCH] device-mapper: add dm_get_md\n\nAdd dm_get_dev() to get a mapped device given its dev_t.\n\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "1da177e4c3f41524e886b7f1b8a0c1fc7321cac2",
      "tree": "0bba044c4ce775e45a88a51686b5d9f90697ea9d",
      "parents": [],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@ppc970.osdl.org",
        "time": "Sat Apr 16 15:20:36 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@ppc970.osdl.org",
        "time": "Sat Apr 16 15:20:36 2005 -0700"
      },
      "message": "Linux-2.6.12-rc2\n\nInitial git repository build. I\u0027m not bothering with the full history,\neven though we have it. We can create a separate \"historical\" git\narchive of that later if we want to, and in the meantime it\u0027s about\n3.2GB when imported into git - space that would just make the early\ngit days unnecessarily complicated, when we don\u0027t have a lot of good\ninfrastructure for it.\n\nLet it rip!\n"
    }
  ]
}
