)]}'
{
  "log": [
    {
      "commit": "99d03c141b40914b67d63c9d23b8da4386422ed7",
      "tree": "d9c2d4da01f749325fac949d96e35aedea05cfc4",
      "parents": [
        "9d357b0787bb3c91835d5e658c3bda178f9ca419"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jan 13 20:00:02 2011 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Jan 13 20:00:02 2011 +0000"
      },
      "message": "dm: per target unplug callback support\n\nAdd per-target unplug callback support.\n\nCc: linux-raid@vger.kernel.org\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\nSigned-off-by: Jonathan Brassow \u003cjbrassow@redhat.com\u003e\nSigned-off-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "9d357b0787bb3c91835d5e658c3bda178f9ca419",
      "tree": "48f2c3adc8ae06918ef0523f073291990407fa28",
      "parents": [
        "4e2d19e46b507018c6ed15f6c081d8f887ae229c"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jan 13 20:00:01 2011 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Jan 13 20:00:01 2011 +0000"
      },
      "message": "dm: introduce target callbacks and congestion callback\n\nDM currently implements congestion checking by checking on congestion\nin each component device.  For raid456 we need to also check if the\nstripe cache is congested.\n\nAdd per-target congestion checker callback support.\n\nExtending the target_callbacks structure with additional callback\nfunctions allows for establishing multiple callbacks per-target (a\ncallback is also needed for unplug).\n\nCc: linux-raid@vger.kernel.org\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\nSigned-off-by: Jonathan Brassow \u003cjbrassow@redhat.com\u003e\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": "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": "8215d6ec5fee1e76545decea2cd73717efb5cb42",
      "tree": "54ed2c995c3b91417def0ad31368e3094f72bd81",
      "parents": [
        "0f3649a9e305ea22eb196a84a2d7520afcaa6060"
      ],
      "author": {
        "name": "Nikanth Karthikesan",
        "email": "knikanth@novell.com",
        "time": "Sat Mar 06 02:32:27 2010 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Sat Mar 06 02:32:27 2010 +0000"
      },
      "message": "dm table: remove unused dm_get_device range parameters\n\nRemove unused parameters(start and len) of dm_get_device()\nand fix the callers.\n\nSigned-off-by: Nikanth Karthikesan \u003cknikanth@suse.de\u003e\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": "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": "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": "40bea431274c247425e7f5970d796ff7b37a2b22",
      "tree": "cc9791861c01605d2dca28d3eac9182c301a832c",
      "parents": [
        "a963a956225eb0f8c4d3537f428153c30adf54b8"
      ],
      "author": {
        "name": "Mike Snitzer",
        "email": "snitzer@redhat.com",
        "time": "Fri Sep 04 20:40:25 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Fri Sep 04 20:40:25 2009 +0100"
      },
      "message": "dm stripe: expose correct io hints\n\nSet sensible I/O hints for striped DM devices in the topology\ninfrastructure added for 2.6.31 for userspace tools to\nobtain via sysfs.\n\nAdd .io_hints to \u0027struct target_type\u0027 to allow the I/O hints portion\n(io_min and io_opt) of the \u0027struct queue_limits\u0027 to be set by each\ntarget and implement this for dm-stripe.\n\nSigned-off-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "5dea271b6d87bd1d79a59c1d5baac2596a841c37",
      "tree": "c85bcee4f90729927285fc282c6df94bf18d023d",
      "parents": [
        "a732c207d19e899845ae47139708af898daaf9fd"
      ],
      "author": {
        "name": "Mike Snitzer",
        "email": "snitzer@redhat.com",
        "time": "Thu Jul 23 20:30:42 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Jul 23 20:30:42 2009 +0100"
      },
      "message": "dm table: pass correct dev area size to device_area_is_valid\n\nIncorrect device area lengths are being passed to device_area_is_valid().\n\nThe regression appeared in 2.6.31-rc1 through commit\n754c5fc7ebb417b23601a6222a6005cc2e7f2913.\n\nWith the dm-stripe target, the size of the target (ti-\u003elen) was used\ninstead of the stripe_width (ti-\u003elen/#stripes).  An example of a\nconsequent incorrect error message is:\n\n  device-mapper: table: 254:0: sdb too small for target\n\nSigned-off-by: Mike Snitzer \u003csnitzer@redhat.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": "af4874e03ed82f050d5872d8c39ce64bf16b5c38",
      "tree": "38aa5dee43b4bb7a369995d4f38dee992cb051e0",
      "parents": [
        "1197764e403d97231eb6da2b1e16f511a7fd3101"
      ],
      "author": {
        "name": "Mike Snitzer",
        "email": "snitzer@redhat.com",
        "time": "Mon Jun 22 10:12:33 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Mon Jun 22 10:12:33 2009 +0100"
      },
      "message": "dm target:s introduce iterate devices fn\n\nAdd .iterate_devices to \u0027struct target_type\u0027 to allow a function to be\ncalled for all devices in a DM target.  Implemented it for all targets\nexcept those in dm-snap.c (origin and snapshot).\n\n(The raid1 version number jumps to 1.12 because we originally reserved\n1.1 to 1.11 for \u0027block_on_error\u0027 but ended up using \u0027handle_errors\u0027\ninstead.)\n\nSigned-off-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\nCc: martin.petersen@oracle.com\n"
    },
    {
      "commit": "5ab97588fb266187b88d1ad893251c94388f18ba",
      "tree": "0dfd693fb3a31e22353e5640db8c17c989b5c65d",
      "parents": [
        "be6d4305db093ad1cc623f7dd3d2470b7bd73fa4"
      ],
      "author": {
        "name": "Mike Snitzer",
        "email": "snitzer@redhat.com",
        "time": "Mon Jun 22 10:12:32 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Mon Jun 22 10:12:32 2009 +0100"
      },
      "message": "dm table: replace struct io_restrictions with struct queue_limits\n\nUse blk_stack_limits() to stack block limits (including topology) rather\nthan duplicate the equivalent within Device Mapper.\n\nSigned-off-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\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": "e1defc4ff0cf57aca6c5e3ff99fa503f5943c1f1",
      "tree": "d60d15a082171c58ac811d547d51a9c3119f23e3",
      "parents": [
        "9bd7de51ee8537094656149eaf45338cadb7d7d4"
      ],
      "author": {
        "name": "Martin K. Petersen",
        "email": "martin.petersen@oracle.com",
        "time": "Fri May 22 17:17:49 2009 -0400"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri May 22 23:22:54 2009 +0200"
      },
      "message": "block: Do away with the notion of hardsect_size\n\nUntil now we have had a 1:1 mapping between storage device physical\nblock size and the logical block sized used when addressing the device.\nWith SATA 4KB drives coming out that will no longer be the case.  The\nsector size will be 4KB but the logical block size will remain\n512-bytes.  Hence we need to distinguish between the physical block size\nand the logical ditto.\n\nThis patch renames hardsect_size to logical_block_size.\n\nSigned-off-by: Martin K. Petersen \u003cmartin.petersen@oracle.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "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": "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": "7d76345da6ed3927c9cbf5d3f7a7021e8bba7374",
      "tree": "d0b470dd1a55dfffb27ffa012e4a5afebd133495",
      "parents": [
        "8fbf26ad5b16ad3a826ca7fe3e86700420abed1f"
      ],
      "author": {
        "name": "Kiyoshi Ueda",
        "email": "k-ueda@ct.jp.nec.com",
        "time": "Tue Jan 06 03:05:07 2009 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Jan 06 03:05:07 2009 +0000"
      },
      "message": "dm request: extend target interface\n\nThis patch adds the following target interfaces for request-based dm.\n\n  map_rq    : for mapping a request\n\n  rq_end_io : for finishing a request\n\n  busy      : for avoiding performance regression from bio-based dm.\n              Target can tell dm core not to map requests now, and\n              that may help requests in the block layer queue to be\n              bigger by I/O merging.\n              In bio-based dm, this behavior is done by device\n              drivers managing the block layer queue.\n              But in request-based dm, dm core has to do that\n              since dm core manages the block layer queue.\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": "10d3bd09a3c25df114f74f7f86e1b58d070bef32",
      "tree": "a44e2fe5ccc5950b87a1d31849e5f0ac24fdcc16",
      "parents": [
        "d460c65a6a9ec9e0d284864ec3a9a2d1b73f0e43"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Tue Jan 06 03:04:58 2009 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Jan 06 03:04:58 2009 +0000"
      },
      "message": "dm: consolidate target deregistration error handling\n\nChange dm_unregister_target to return void and use BUG() for error\nreporting.\n\ndm_unregister_target can only fail because of programming bug in the\ntarget driver. It can\u0027t fail because of user\u0027s behavior or disk errors.\n\nThis patch changes unregister_target to return void and use BUG if\nsomeone tries to unregister non-registered target or unregister target\nthat is in use.\n\nThis patch removes code duplication (testing of error codes in all dm\ntargets) and reports bugs in just one place, in dm_unregister_target. In\nsome target drivers, these return codes were ignored, which could lead\nto a situation where bugs could be missed.\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "22484856402bfa1ff3defe47f6029ab0418240d9",
      "tree": "140c67bf59674da350a7b51765d6ff7eb101b597",
      "parents": [
        "5ed487bc2c44ca4e9668ef9cb54c830e2a9fac47",
        "56b26add02b4bdea81d5e0ebda60db1fe3311ad4"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Oct 23 10:23:07 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Oct 23 10:23:07 2008 -0700"
      },
      "message": "Merge git://git.kernel.org/pub/scm/linux/kernel/git/viro/bdev\n\n* git://git.kernel.org/pub/scm/linux/kernel/git/viro/bdev: (66 commits)\n  [PATCH] kill the rest of struct file propagation in block ioctls\n  [PATCH] get rid of struct file use in blkdev_ioctl() BLKBSZSET\n  [PATCH] get rid of blkdev_locked_ioctl()\n  [PATCH] get rid of blkdev_driver_ioctl()\n  [PATCH] sanitize blkdev_get() and friends\n  [PATCH] remember mode of reiserfs journal\n  [PATCH] propagate mode through swsusp_close()\n  [PATCH] propagate mode through open_bdev_excl/close_bdev_excl\n  [PATCH] pass fmode_t to blkdev_put()\n  [PATCH] kill the unused bsize on the send side of /dev/loop\n  [PATCH] trim file propagation in block/compat_ioctl.c\n  [PATCH] end of methods switch: remove the old ones\n  [PATCH] switch sr\n  [PATCH] switch sd\n  [PATCH] switch ide-scsi\n  [PATCH] switch tape_block\n  [PATCH] switch dcssblk\n  [PATCH] switch dasd\n  [PATCH] switch mtd_blkdevs\n  [PATCH] switch mmc\n  ...\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": "647b3d0084158c47b1aea8f34d13cab9cd0a5b49",
      "tree": "c36d61d8c85c4e0e6160153ab99a6e7568b44a70",
      "parents": [
        "1bddd9e6453ef1c7bc5b6f4ddbf7d31f4aee7a44"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Aug 28 22:15:59 2007 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Oct 21 07:47:18 2008 -0400"
      },
      "message": "[PATCH] lose unused arguments in dm ioctl callbacks\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "aeb5d727062a0238a2f96c9c380fbd2be4640c6f",
      "tree": "51dae8a071fcf42e4431a66d37c5b843c8e99cf6",
      "parents": [
        "2515ddc6db8eb49a79f0fe5e67ff09ac7c81eab4"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Sep 02 15:28:45 2008 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Oct 21 07:47:06 2008 -0400"
      },
      "message": "[PATCH] introduce fmode_t, do annotations\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\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": "f6fccb1213ba3d661baeb2a5eee0a9701dc03e1b",
      "tree": "456671e791f8a61b40e0d622591b902ca1351ae7",
      "parents": [
        "92e868122edf08b9fc06b112e7e0c80ab94c1f93"
      ],
      "author": {
        "name": "Milan Broz",
        "email": "mbroz@redhat.com",
        "time": "Mon Jul 21 12:00:37 2008 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Mon Jul 21 12:00:37 2008 +0100"
      },
      "message": "dm: introduce merge_bvec_fn\n\nIntroduce a bvec merge function for device mapper devices\nfor dynamic size restrictions.\n\nThis code ensures the requested biovec lies within a single\ntarget and then calls a target-specific function to check\nagainst any constraints imposed by underlying devices.\n\nSigned-off-by: Milan Broz \u003cmbroz@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "735643ee6cc5249bfac07fcad0946a5e7aff4423",
      "tree": "e725df246f4a3cf88b6b42a28d859ab969acf81c",
      "parents": [
        "71cc2c2152170b8166f59abb0604dc62073aeb92"
      ],
      "author": {
        "name": "Robert P. J. Day",
        "email": "rpjday@crashcourse.ca",
        "time": "Wed Apr 30 00:55:12 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Apr 30 08:29:54 2008 -0700"
      },
      "message": "Remove \"#ifdef __KERNEL__\" checks from unexported headers\n\nRemove the \"#ifdef __KERNEL__\" tests from unexported header files in\nlinux/include whose entire contents are wrapped in that preprocessor\ntest.\n\nSigned-off-by: Robert P. J. Day \u003crpjday@crashcourse.ca\u003e\nCc: David Woodhouse \u003cdwmw2@infradead.org\u003e\nCc: Sam Ravnborg \u003csam@ravnborg.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "4fdfe401e9d7e30029972d568c667234c0c1d828",
      "tree": "e9e8f45ceccda2e73008da8f404302b056a059b3",
      "parents": [
        "e8488d08586e6df7fab3db7881631bb13619311b"
      ],
      "author": {
        "name": "Adrian Bunk",
        "email": "bunk@kernel.org",
        "time": "Thu Apr 24 22:10:56 2008 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Fri Apr 25 13:27:00 2008 +0100"
      },
      "message": "dm table: remove unused dm_create_error_table\n\ndm_create_error_table() was added in kernel 2.6.18 and never used...\n\nSigned-off-by: Adrian Bunk \u003cbunk@kernel.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": "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": "4f41b09f86e0e3b48194b2ad0356391bf6d47e40",
      "tree": "49e28b85c4fabcd464ebf3e0f7431ca92406a8a2",
      "parents": [
        "afb24528f9012e5c6361ca9a9128c7c089c1cc7c"
      ],
      "author": {
        "name": "Vasily Averin",
        "email": "vvs@sw.ru",
        "time": "Fri Feb 08 02:10:01 2008 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Fri Feb 08 02:10:01 2008 +0000"
      },
      "message": "dm: table remove unused variable\n\nSave some bytes.\n\nSigned-off-by: Vasily Averin \u003cvvs@sw.ru\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "91212507f93778c09d4c1335207b6f4b995f5ad1",
      "tree": "651bc8678413d7d6d6879214264f4bb7f9fb089d",
      "parents": [
        "69267a30bed1fabec658058c63845528a8b813d4"
      ],
      "author": {
        "name": "Neil Brown",
        "email": "neilb@suse.de",
        "time": "Thu Dec 13 14:16:04 2007 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Dec 20 17:32:12 2007 +0000"
      },
      "message": "dm: merge max_hw_sector\n\nMake sure dm honours max_hw_sectors of underlying devices\n\n  We still have no firm testing evidence in support of this patch but\n  believe it may help to resolve some bug reports.  - agk\n\nSigned-off-by: Neil Brown \u003cneilb@suse.de\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "5ec140e600b7d6624c657f008833f0e71bd5ef48",
      "tree": "44691c88d767418a57797e84253a4633825c0c98",
      "parents": [
        "6f5d8aa6382eef2b26032c88656270bdae7f0c42"
      ],
      "author": {
        "name": "Vasily Averin",
        "email": "vvs@sw.ru",
        "time": "Wed Oct 31 08:33:24 2007 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@carl.home.kernel.dk",
        "time": "Fri Nov 02 08:47:25 2007 +0100"
      },
      "message": "dm: bounce_pfn limit added\n\nDevice mapper uses its own bounce_pfn that may differ from one on underlying\ndevice. In that way dm can build incorrect requests that contain sg elements\ngreater than underlying device is able to handle.\n\nThis is the cause of slab corruption in i2o layer, occurred on i386 arch when\nvery long direct IO requests are addressed to dm-over-i2o device.\n\nSigned-off-by: Vasily Averin \u003cvvs@sw.ru\u003e\nCc: \u003cstable@kernel.org\u003e\nCc: Alasdair G Kergon \u003cagk@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "7a8c3d3b92883798e4ead21dd48c16db0ec0ff6f",
      "tree": "21a25dc6bd6afa11430e1ab8d997a4b1c0b960f0",
      "parents": [
        "51e5b2bd34ded40ef48cade8a6a8f1baa0b4275e"
      ],
      "author": {
        "name": "Mike Anderson",
        "email": "andmike@linux.vnet.ibm.com",
        "time": "Fri Oct 19 22:48:01 2007 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Sat Oct 20 02:01:26 2007 +0100"
      },
      "message": "dm: uevent generate events\n\nThis patch adds support for the dm_path_event dm_send_event functions which\ncreate and send udev events.\n\nSigned-off-by: Mike Anderson \u003candmike@linux.vnet.ibm.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "96a1f7dba6e464155c0d1dc69c6c2efa96b644ac",
      "tree": "8051a11c07624c9e5f9b049273462c307c447624",
      "parents": [
        "aa5617c55357d86c9082ba1d66fa9795370c9954"
      ],
      "author": {
        "name": "Mike Anderson",
        "email": "andmike@linux.vnet.ibm.com",
        "time": "Fri Oct 19 22:47:59 2007 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Sat Oct 20 02:01:23 2007 +0100"
      },
      "message": "dm: export name and uuid\n\nThis patch adds a function to obtain a copy of a mapped device\u0027s name and uuid.\n\nSigned-off-by: Mike Anderson \u003candmike@linux.vnet.ibm.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\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": "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": "999d816851c3e080412a19558f111d01852d2f04",
      "tree": "8b75a8e97d6fa7c41e81169e9b2ba5f7806e23a9",
      "parents": [
        "3cb4021453a69585e458ec2177677c0c1300dccf"
      ],
      "author": {
        "name": "Bryn Reeves",
        "email": "breeves@redhat.com",
        "time": "Tue Oct 03 01:15:43 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Tue Oct 03 08:04:16 2006 -0700"
      },
      "message": "[PATCH] dm table: add target flush\n\nThis patch adds support for a per-target dm_flush_fn method.  This is needed\nto allow dm-loop to invalidate page cache mappings in response to BLKFLSBUF\nioctl commands.\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": "3cb4021453a69585e458ec2177677c0c1300dccf",
      "tree": "cc2394e0eb52d6bed2fbc523641499714d6159c4",
      "parents": [
        "9faf400f7e51e56ec76b2fc481c3191c01cb3a57"
      ],
      "author": {
        "name": "Bryn Reeves",
        "email": "breeves@redhat.com",
        "time": "Tue Oct 03 01:15:42 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Tue Oct 03 08:04:16 2006 -0700"
      },
      "message": "[PATCH] dm: extract device limit setting\n\nSeparate the setting of device I/O limits from dm_get_device().  dm-loop will\nuse this.\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": "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": "aa129a2247b164173d45da8ad43cca5de9211403",
      "tree": "8adecb4d15d49b0a1fd4b459a24dff22a961d71c",
      "parents": [
        "70abac6e4f4bfb05a8198e22225f9e066239c7a2"
      ],
      "author": {
        "name": "Milan Broz",
        "email": "mbroz@redhat.com",
        "time": "Tue Oct 03 01:15:15 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Tue Oct 03 08:04:13 2006 -0700"
      },
      "message": "[PATCH] dm: support ioctls on mapped devices\n\nExtend the core device-mapper infrastructure to accept arbitrary ioctls on a\nmapped device provided that it has exactly one target and it is capable of\nsupporting ioctls.\n\n[We can\u0027t use unlocked_ioctl because we need \u0027inode\u0027: \u0027file\u0027 might be NULL.\nIs it worth changing this?]\n\nSigned-off-by: Milan Broz \u003cmbroz@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n\nArnd Bergmann \u003carnd@arndb.de\u003e wrote:\n\n\u003e Am Wednesday 21 June 2006 21:31 schrieb Alasdair G Kergon:\n\u003e \u003e static struct block_device_operations dm_blk_dops \u003d {\n\u003e \u003e .open \u003d dm_blk_open,\n\u003e \u003e .release \u003d dm_blk_close,\n\u003e \u003e +.ioctl \u003d dm_blk_ioctl,\n\u003e \u003e .getgeo \u003d dm_blk_getgeo,\n\u003e \u003e .owner \u003d THIS_MODULE\n\u003e\n\u003e I guess this also needs a -\u003ecompat_ioctl method, otherwise it won\u0027t\n\u003e work for ioctl numbers that have a compat_ioctl implementation in the\n\u003e low-level device driver.\n\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": "c2ade42dd35466d90aa6fc7cc717f396e165492f",
      "tree": "245baeabfea43a3b2654adb962e776a877da0059",
      "parents": [
        "17b2f66f2a39a4e4d1ed456f35ee3bb598e41d35"
      ],
      "author": {
        "name": "David Teigland",
        "email": "teigland@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: create error table\n\nAdd a library function dm_create_error_table() to create a table that rejects\nany I/O sent to a device with EIO.\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": "969429b504ae866d3f8b1cafd68a2c099e305093",
      "tree": "538c0a77049450e434cfc890807822491f766113",
      "parents": [
        "4ee218cd67b385759993a6c840ea45f0ee0a8b30"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Mar 27 01:17:49 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Mon Mar 27 08:44:59 2006 -0800"
      },
      "message": "[PATCH] dm: make sure QUEUE_FLAG_CLUSTER is set properly\n\nThis flag should be set for a virtual device iff it is set for all\nunderlying devices.\n\nSigned-off-by: Neil Brown \u003cneilb@suse.de\u003e\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": "3ee247ebce93a526f482d6bc714ce796fa85a81a",
      "tree": "7e796c3a2cb37aa5be802783fae23e8d0636caab",
      "parents": [
        "4aac0a63fe8d418a2b74e43708f59380ba379a3b"
      ],
      "author": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Wed Feb 01 03:04:55 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Wed Feb 01 08:53:11 2006 -0800"
      },
      "message": "[PATCH] dm: dm-table warning fix\n\ndrivers/md/dm-table.c:500: warning: comparison of distinct pointer types lacks a cast\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"
    }
  ]
}
