)]}'
{
  "log": [
    {
      "commit": "7878cba9f0037f5599004b03a1260b32d9050360",
      "tree": "bff5e1a47b6e64e45df0428925cc6db8542cad62",
      "parents": [
        "6118b70b3a0b4c583439bb77600194c82f220ce3"
      ],
      "author": {
        "name": "Martin K. Petersen",
        "email": "martin.petersen@oracle.com",
        "time": "Fri Jun 26 15:37:49 2009 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Wed Jul 01 10:56:25 2009 +0200"
      },
      "message": "block: Create bip slabs with embedded integrity vectors\n\nThis patch restores stacking ability to the block layer integrity\ninfrastructure by creating a set of dedicated bip slabs.  Each bip slab\nhas an embedded bio_vec array at the end.  This cuts down on memory\nallocations and also simplifies the code compared to the original bvec\nversion.  Only the largest bip slab is backed by a mempool.  The pool is\ncontained in the bio_set so stacking drivers can ensure forward\nprogress.\n\nSigned-off-by: Martin K. Petersen \u003cmartin.petersen@oracle.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@carl.(none)\u003e\n"
    },
    {
      "commit": "523d9297d43cce3fa6de6474b7674329e98743b1",
      "tree": "b889df9e26458c134a909c9ada51fa961fbf1291",
      "parents": [
        "5d67aa2366ccb8257d103d0b43df855605c3c086"
      ],
      "author": {
        "name": "Kiyoshi Ueda",
        "email": "k-ueda@ct.jp.nec.com",
        "time": "Mon Jun 22 10:12:37 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Mon Jun 22 10:12:37 2009 +0100"
      },
      "message": "dm: disable interrupt when taking map_lock\n\nThis patch disables interrupt when taking map_lock to avoid\nlockdep warnings in request-based dm.\n\nrequest-based dm takes map_lock after taking queue_lock with\ndisabling interrupt:\n  spin_lock_irqsave(queue_lock)\n  q-\u003erequest_fn() \u003d\u003d dm_request_fn()\n    \u003d\u003e dm_get_table()\n         \u003d\u003e read_lock(map_lock)\nwhile queue_lock could be (but isn\u0027t) taken in interrupt context.\n\nSigned-off-by: Kiyoshi Ueda \u003ck-ueda@ct.jp.nec.com\u003e\nSigned-off-by: Jun\u0027ichi Nomura \u003cj-nomura@ce.jp.nec.com\u003e\nAcked-by: Christof Schmitt \u003cchristof.schmitt@de.ibm.com\u003e\nAcked-by: Hannes Reinecke \u003chare@suse.de\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "5d67aa2366ccb8257d103d0b43df855605c3c086",
      "tree": "1d03f2e89ef47773a757f05b17741b8cbe47e882",
      "parents": [
        "e6ee8c0b767540f59e20da3ced282601db8aa502"
      ],
      "author": {
        "name": "Kiyoshi Ueda",
        "email": "k-ueda@ct.jp.nec.com",
        "time": "Mon Jun 22 10:12:36 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Mon Jun 22 10:12:36 2009 +0100"
      },
      "message": "dm: do not set QUEUE_ORDERED_DRAIN if request based\n\nRequest-based dm doesn\u0027t have barrier support yet.\nSo we need to set QUEUE_ORDERED_DRAIN only for bio-based dm.\nSince the device type is decided at the first table loading time,\nthe flag set is deferred until then.\n\nSigned-off-by: Kiyoshi Ueda \u003ck-ueda@ct.jp.nec.com\u003e\nSigned-off-by: Jun\u0027ichi Nomura \u003cj-nomura@ce.jp.nec.com\u003e\nAcked-by: Hannes Reinecke \u003chare@suse.de\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "e6ee8c0b767540f59e20da3ced282601db8aa502",
      "tree": "101cb830994734eb45a4a47cd5988f24da67fa4f",
      "parents": [
        "cec47e3d4a861e1d942b3a580d0bbef2700d2bb2"
      ],
      "author": {
        "name": "Kiyoshi Ueda",
        "email": "k-ueda@ct.jp.nec.com",
        "time": "Mon Jun 22 10:12:36 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Mon Jun 22 10:12:36 2009 +0100"
      },
      "message": "dm: enable request based option\n\nThis patch enables request-based dm.\n\no Request-based dm and bio-based dm coexist, since there are\n  some target drivers which are more fitting to bio-based dm.\n  Also, there are other bio-based devices in the kernel\n  (e.g. md, loop).\n  Since bio-based device can\u0027t receive struct request,\n  there are some limitations on device stacking between\n  bio-based and request-based.\n\n                     type of underlying device\n                   bio-based      request-based\n   ----------------------------------------------\n    bio-based         OK                OK\n    request-based     --                OK\n\n  The device type is recognized by the queue flag in the kernel,\n  so dm follows that.\n\no The type of a dm device is decided at the first table binding time.\n  Once the type of a dm device is decided, the type can\u0027t be changed.\n\no Mempool allocations are deferred to at the table loading time, since\n  mempools for request-based dm are different from those for bio-based\n  dm and needed mempool type is fixed by the type of table.\n\no Currently, request-based dm supports only tables that have a single\n  target.  To support multiple targets, we need to support request\n  splitting or prevent bio/request from spanning multiple targets.\n  The former needs lots of changes in the block layer, and the latter\n  needs that all target drivers support merge() function.\n  Both will take a time.\n\nSigned-off-by: Kiyoshi Ueda \u003ck-ueda@ct.jp.nec.com\u003e\nSigned-off-by: Jun\u0027ichi Nomura \u003cj-nomura@ce.jp.nec.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "cec47e3d4a861e1d942b3a580d0bbef2700d2bb2",
      "tree": "2f92b957d515a5d887fe0147984cda3203c8b8ea",
      "parents": [
        "f5db4af466e2dca0fe822019812d586ca910b00c"
      ],
      "author": {
        "name": "Kiyoshi Ueda",
        "email": "k-ueda@ct.jp.nec.com",
        "time": "Mon Jun 22 10:12:35 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Mon Jun 22 10:12:35 2009 +0100"
      },
      "message": "dm: prepare for request based option\n\nThis patch adds core functions for request-based dm.\n\nWhen struct mapped device (md) is initialized, md-\u003equeue has\nan I/O scheduler and the following functions are used for\nrequest-based dm as the queue functions:\n    make_request_fn: dm_make_request()\n    pref_fn:         dm_prep_fn()\n    request_fn:      dm_request_fn()\n    softirq_done_fn: dm_softirq_done()\n    lld_busy_fn:     dm_lld_busy()\nActual initializations are done in another patch (PATCH 2).\n\nBelow is a brief summary of how request-based dm behaves, including:\n  - making request from bio\n  - cloning, mapping and dispatching request\n  - completing request and bio\n  - suspending md\n  - resuming md\n\n  bio to request\n  \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n  md-\u003equeue-\u003emake_request_fn() (dm_make_request()) calls __make_request()\n  for a bio submitted to the md.\n  Then, the bio is kept in the queue as a new request or merged into\n  another request in the queue if possible.\n\n  Cloning and Mapping\n  \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n  Cloning and mapping are done in md-\u003equeue-\u003erequest_fn() (dm_request_fn()),\n  when requests are dispatched after they are sorted by the I/O scheduler.\n\n  dm_request_fn() checks busy state of underlying devices using\n  target\u0027s busy() function and stops dispatching requests to keep them\n  on the dm device\u0027s queue if busy.\n  It helps better I/O merging, since no merge is done for a request\n  once it is dispatched to underlying devices.\n\n  Actual cloning and mapping are done in dm_prep_fn() and map_request()\n  called from dm_request_fn().\n  dm_prep_fn() clones not only request but also bios of the request\n  so that dm can hold bio completion in error cases and prevent\n  the bio submitter from noticing the error.\n  (See the \"Completion\" section below for details.)\n\n  After the cloning, the clone is mapped by target\u0027s map_rq() function\n    and inserted to underlying device\u0027s queue using\n    blk_insert_cloned_request().\n\n  Completion\n  \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n  Request completion can be hooked by rq-\u003eend_io(), but then, all bios\n  in the request will have been completed even error cases, and the bio\n  submitter will have noticed the error.\n  To prevent the bio completion in error cases, request-based dm clones\n  both bio and request and hooks both bio-\u003ebi_end_io() and rq-\u003eend_io():\n      bio-\u003ebi_end_io(): end_clone_bio()\n      rq-\u003eend_io():     end_clone_request()\n\n  Summary of the request completion flow is below:\n  blk_end_request() for a clone request\n    \u003d\u003e blk_update_request()\n       \u003d\u003e bio-\u003ebi_end_io() \u003d\u003d end_clone_bio() for each clone bio\n          \u003d\u003e Free the clone bio\n          \u003d\u003e Success: Complete the original bio (blk_update_request())\n             Error:   Don\u0027t complete the original bio\n    \u003d\u003e blk_finish_request()\n       \u003d\u003e rq-\u003eend_io() \u003d\u003d end_clone_request()\n          \u003d\u003e blk_complete_request()\n             \u003d\u003e dm_softirq_done()\n                \u003d\u003e Free the clone request\n                \u003d\u003e Success: Complete the original request (blk_end_request())\n                   Error:   Requeue the original request\n\n  end_clone_bio() completes the original request on the size of\n  the original bio in successful cases.\n  Even if all bios in the original request are completed by that\n  completion, the original request must not be completed yet to keep\n  the ordering of request completion for the stacking.\n  So end_clone_bio() uses blk_update_request() instead of\n  blk_end_request().\n  In error cases, end_clone_bio() doesn\u0027t complete the original bio.\n  It just frees the cloned bio and gives over the error handling to\n  end_clone_request().\n\n  end_clone_request(), which is called with queue lock held, completes\n  the clone request and the original request in a softirq context\n  (dm_softirq_done()), which has no queue lock, to avoid a deadlock\n  issue on submission of another request during the completion:\n      - The submitted request may be mapped to the same device\n      - Request submission requires queue lock, but the queue lock\n        has been held by itself and it doesn\u0027t know that\n\n  The clone request has no clone bio when dm_softirq_done() is called.\n  So target drivers can\u0027t resubmit it again even error cases.\n  Instead, they can ask dm core for requeueing and remapping\n  the original request in that cases.\n\n  suspend\n  \u003d\u003d\u003d\u003d\u003d\u003d\u003d\n  Request-based dm uses stopping md-\u003equeue as suspend of the md.\n  For noflush suspend, just stops md-\u003equeue.\n\n  For flush suspend, inserts a marker request to the tail of md-\u003equeue.\n  And dispatches all requests in md-\u003equeue until the marker comes to\n  the front of md-\u003equeue.  Then, stops dispatching request and waits\n  for the all dispatched requests to complete.\n  After that, completes the marker request, stops md-\u003equeue and\n  wake up the waiter on the suspend queue, md-\u003ewait.\n\n  resume\n  \u003d\u003d\u003d\u003d\u003d\u003d\n  Starts md-\u003equeue.\n\nSigned-off-by: Kiyoshi Ueda \u003ck-ueda@ct.jp.nec.com\u003e\nSigned-off-by: Jun\u0027ichi Nomura \u003cj-nomura@ce.jp.nec.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "754c5fc7ebb417b23601a6222a6005cc2e7f2913",
      "tree": "6c31b055fc26ec541d67fc1123ebaa4b7a8eae7a",
      "parents": [
        "18d8594dd93a1ae2fafd591ec026e87d743292bf"
      ],
      "author": {
        "name": "Mike Snitzer",
        "email": "snitzer@redhat.com",
        "time": "Mon Jun 22 10:12:34 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Mon Jun 22 10:12:34 2009 +0100"
      },
      "message": "dm: calculate queue limits during resume not load\n\nCurrently, device-mapper maintains a separate instance of \u0027struct\nqueue_limits\u0027 for each table of each device.  When the configuration of\na device is to be changed, first its table is loaded and this structure\nis populated, then the device is \u0027resumed\u0027 and the calculated\nqueue_limits are applied.\n\nThis places restrictions on how userspace may process related devices,\nwhere it is often advantageous to \u0027load\u0027 tables for several devices\nat once before \u0027resuming\u0027 them together.  As the new queue_limits\nonly take effect after the \u0027resume\u0027, if they are changing and one\ndevice uses another, the latter must be \u0027resumed\u0027 before the former\nmay be \u0027loaded\u0027.\n\nThis patch moves the calculation of these queue_limits out of\nthe \u0027load\u0027 operation into \u0027resume\u0027.  Since we are no longer\npre-calculating this struct, we no longer need to maintain copies\nwithin our dm structs.\n\ndm_set_device_limits() now passes the \u0027start\u0027 of the device\u0027s\ndata area (aka pe_start) as the \u0027offset\u0027 to blk_stack_limits().\n\ninit_valid_queue_limits() is replaced by blk_set_default_limits().\n\nSigned-off-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nCc: martin.petersen@oracle.com\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "60935eb21d3c5bac79618000f38f92c249d153c4",
      "tree": "0fcd78d7d69e23cd062e5214ddf2959d5c74e605",
      "parents": [
        "486d220fe4909b5745c4faa67faddd30a707abe2"
      ],
      "author": {
        "name": "Milan Broz",
        "email": "mbroz@redhat.com",
        "time": "Mon Jun 22 10:12:30 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Mon Jun 22 10:12:30 2009 +0100"
      },
      "message": "dm ioctl: support cookies for udev\n\nAdd support for passing a 32 bit \"cookie\" into the kernel with the\nDM_SUSPEND, DM_DEV_RENAME and DM_DEV_REMOVE ioctls.  The (unsigned)\nvalue of this cookie is returned to userspace alongside the uevents\nissued by these ioctls in the variable DM_COOKIE.\n\nThis means the userspace process issuing these ioctls can be notified\nby udev after udev has completed any actions triggered.\n\nTo minimise the interface extension, we pass the cookie into the\nkernel in the event_nr field which is otherwise unused when calling\nthese ioctls.  Incrementing the version number allows userspace to\ndetermine in advance whether or not the kernel supports the cookie.\nIf the kernel does support this but userspace does not, there should\nbe no impact as the new variable will just get ignored.\n\nSigned-off-by: Milan Broz \u003cmbroz@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "52b1fd5a27c625c78373e024bf570af3c9d44a79",
      "tree": "a802b917b45685255220efaeb7b2b8ee2d04a2d4",
      "parents": [
        "9015df24a8008d7bea2bd3df881783ebe0dcb9af"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Mon Jun 22 10:12:21 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Mon Jun 22 10:12:21 2009 +0100"
      },
      "message": "dm: send empty barriers to targets in dm_flush\n\nPass empty barrier flushes to the targets in dm_flush().\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "9015df24a8008d7bea2bd3df881783ebe0dcb9af",
      "tree": "aff9a824a202525036d5f2dc52ad728dc9a38cbd",
      "parents": [
        "f9ab94cee313746573b2d693bc2afb807ebb0998"
      ],
      "author": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Mon Jun 22 10:12:21 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Mon Jun 22 10:12:21 2009 +0100"
      },
      "message": "dm: initialise tio in alloc_tio\n\nMove repeated dm_target_io initialisation inside alloc_tio().\n\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "f9ab94cee313746573b2d693bc2afb807ebb0998",
      "tree": "150155f364db0f26c7217e1f92d31344aa67a3f0",
      "parents": [
        "27eaa14975d8b53f0bad422e53cdf8e5f6dd44ec"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Mon Jun 22 10:12:20 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Mon Jun 22 10:12:20 2009 +0100"
      },
      "message": "dm: introduce num_flush_requests\n\nIntroduce num_flush_requests for a target to set to say how many flush\ninstructions (empty barriers) it wants to receive.  These are sent by\n__clone_and_map_empty_barrier with map_info-\u003eflush_request going from 0\nto (num_flush_requests - 1).\n\nOld targets without flush support won\u0027t receive any flush requests.\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "27eaa14975d8b53f0bad422e53cdf8e5f6dd44ec",
      "tree": "647587ef410cfe862af501922704871f99ead273",
      "parents": [
        "fdb9572b73abd008b80931c3b1f157dac3888bb9"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Mon Jun 22 10:12:20 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Mon Jun 22 10:12:20 2009 +0100"
      },
      "message": "dm: remove check that prevents mapping empty bios\n\nRemove the check that the size of the cloned bio is not zero because a\nsubsequent patch needs to send zero-sized barriers down this path.\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "fdb9572b73abd008b80931c3b1f157dac3888bb9",
      "tree": "ae84d6ed1c97e77d536d0bcf2e25fa35d5cbfcba",
      "parents": [
        "5aa2781d964e9835c441932110484bc454b5c207"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Mon Jun 22 10:12:19 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Mon Jun 22 10:12:19 2009 +0100"
      },
      "message": "dm: remove EOPNOTSUPP for barriers\n\nIf the underlying device doesn\u0027t support barriers and dm receives a\nbarrier, it waits until all requests on that device drain so it no\nlonger needs to report -EOPNOTSUPP to the caller.\n\nThis patch deals with the confusing situation when moving a volume from\none physical device to another triggers an EOPNOTSUPP on a volume that\ndidn\u0027t report it before.\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "5aa2781d964e9835c441932110484bc454b5c207",
      "tree": "4f771f3e933eaedf67e5f9e8d5fcc10340af80e2",
      "parents": [
        "2761e95fe40ca0d01864310fa4d488d7c5e34e18"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Mon Jun 22 10:12:18 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Mon Jun 22 10:12:18 2009 +0100"
      },
      "message": "dm: store only first barrier error\n\nWith the following patches, more than one error can occur during\nprocessing.  Change md-\u003ebarrier_error so that only the first one is\nrecorded and returned to the caller.\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "2761e95fe40ca0d01864310fa4d488d7c5e34e18",
      "tree": "a49245e8ebb022605c5d1ce04948cf4a7f9a5c3b",
      "parents": [
        "531fe96364f30879753d46c1f52ab839e12d2e5d"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Mon Jun 22 10:12:18 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Mon Jun 22 10:12:18 2009 +0100"
      },
      "message": "dm: process requeue in dm_wq_work\n\nIf barrier request was returned with DM_ENDIO_REQUEUE,\nrequeue it in dm_wq_work instead of dec_pending.\n\nThis allows us to correctly handle a situation when some targets\nare asking for a requeue and other targets signal an error.\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "531fe96364f30879753d46c1f52ab839e12d2e5d",
      "tree": "61a625f68c3105c1525e2eebba0f046a3678eb37",
      "parents": [
        "32a926da5a16c01a8213331e5764472ce2f14a8d"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Mon Jun 22 10:12:17 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Mon Jun 22 10:12:17 2009 +0100"
      },
      "message": "dm: make dm_flush return void\n\nMake dm_flush return void.\n\nThe first error during flush is stored in md-\u003ebarrier_error instead.\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "32a926da5a16c01a8213331e5764472ce2f14a8d",
      "tree": "edac1cef90e4754353a50fb948c4e34b4df8b5bc",
      "parents": [
        "db8fef4fabe4a546ce74f80bff64fd43776e5912"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Mon Jun 22 10:12:17 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Mon Jun 22 10:12:17 2009 +0100"
      },
      "message": "dm: always hold bdev reference\n\nFix a potential deadlock when creating multiple snapshots by holding a\nreference to struct block_device for the whole lifecycle of every dm\ndevice instead of obtaining it independently at each point it is needed.\n\nbdget_disk() was called while the device was being suspended, in\ndm_suspend().  However there could be other devices already suspended,\nfor example when creating additional snapshots of a device. bdget_disk()\ncan wait for IO and allocate memory resulting in waiting for the\nalready-suspended device - deadlock.\n\nThis patch changes the code so that it gets the reference to struct\nblock_device when struct mapped_device is allocated and initialized in\nalloc_dev() where it is always OK to allocate memory or wait for I/O.\nIt drops the reference when it is destroyed in free_dev().  Thus there\nis no call to bdget_disk() while any device is suspended.\n\nPreviously unlock_fs() was called only if bdev was held.  Now it is\ncalled unconditionally, but the superfluous calls are harmless because\nit returns immediately if the filesystem was not previously frozen.\n\nThis patch also now allows the device size to be changed in a\nnoflush suspend because the bdev is held.  This has no adverse effect.\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "db8fef4fabe4a546ce74f80bff64fd43776e5912",
      "tree": "0e3cc2d7aa40783a1036cce6deb227a3a6d6c9e2",
      "parents": [
        "f6bd4eb73cdf2a5bf954e497972842f39cabb7e3"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Mon Jun 22 10:12:15 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Mon Jun 22 10:12:15 2009 +0100"
      },
      "message": "dm: rename suspended_bdev to bdev\n\nRename suspended_bdev to bdev.\n\nThis patch doesn\u0027t change any functionality, just renames the variable.\nIn the next patch, the variable will be used even for non-suspended device.\n\n(Pre-requisite for the per-target barrier support patches.)\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "8cbeb67ad50f7d68e5e83be2cb2284de8f9c03b5",
      "tree": "4fd4a467c06441ad7c07211b386c786062aa2aeb",
      "parents": [
        "53b351f972a882ea8b6cdb19602535f1057c884a"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Mon Jun 22 10:12:14 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Mon Jun 22 10:12:14 2009 +0100"
      },
      "message": "dm: avoid unsupported spanning of md stripe boundaries\n\nA bio that has two or more vector entries, size less than or equal to\npage size, that crosses a stripe boundary of an underlying md device is\naccepted by device mapper (it conforms to all its limits) but not by the\nunderlying device.\n\nThe fix is: If device mapper selects the one-page maximum request size,\nit also needs to set its own q-\u003emerge_bvec_fn to reject any bios with\nmultiple vector entries that span more pages.\n\nThe problem was discovered in the following scenario:\n  * MD - RAID-0\n  * LV on the top of it (raid1, snapshot or striped with chunk\nsize/stripe larger than RAID-0 stripe)\n  * one of the logical volumes is exported to xen domU\n  * inside xen domU it is partitioned, the key point is that the partition\nmust be unaligned on page boundary (fdisk normally aligns the partition to\n63 sectors which will trigger it)\n  * install the system on the partitioned disk in domU\nThis causes I/O failures in dom0.\nReference: https://bugzilla.redhat.com/show_bug.cgi?id\u003d223947\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "4d89b7b4e4726893453d0fb4ddbb5b3e16353994",
      "tree": "f0775811ee4942eadd555d5ddcdbb5ff313290bb",
      "parents": [
        "e094f4f15f5169526c7200b9bde44b900548a81e"
      ],
      "author": {
        "name": "Milan Broz",
        "email": "mbroz@redhat.com",
        "time": "Mon Jun 22 10:12:11 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Mon Jun 22 10:12:11 2009 +0100"
      },
      "message": "dm: sysfs skip output when device is being destroyed\n\nDo not process sysfs attributes when device is being destroyed.\n\nOtherwise code can cause\n  BUG_ON(test_bit(DMF_FREEING, \u0026md-\u003eflags));\nin dm_put() call.\n\nCc: stable@kernel.org\nSigned-off-by: Milan Broz \u003cmbroz@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "e212d6f25084e8e9b02a04ba514d7bb1e4a4924a",
      "tree": "a94638953a7aa7f0bbd6f5d08fa3c649ce0ef8ce",
      "parents": [
        "5ced504b1bd1979378de35c56aa5d3d79fb5033f"
      ],
      "author": {
        "name": "Li Zefan",
        "email": "lizf@cn.fujitsu.com",
        "time": "Tue Jun 16 11:19:36 2009 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Tue Jun 16 11:19:36 2009 +0200"
      },
      "message": "block: remove some includings of blktrace_api.h\n\nWhen porting blktrace to tracepoints, we changed to trace/block.h\nfor trace prober declarations.\n\nSigned-off-by: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "55782138e47d9baf2f7d3a7af9e7cf42adf72c56",
      "tree": "c7ccabae20e27bbeb08b69a358e8b86c98d1d9f3",
      "parents": [
        "f57a8a1911342265e7acdc190333c4e9235a6632"
      ],
      "author": {
        "name": "Li Zefan",
        "email": "lizf@cn.fujitsu.com",
        "time": "Tue Jun 09 13:43:05 2009 +0800"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Tue Jun 09 12:34:23 2009 -0400"
      },
      "message": "tracing/events: convert block trace points to TRACE_EVENT()\n\nTRACE_EVENT is a more generic way to define tracepoints. Doing so adds\nthese new capabilities to this tracepoint:\n\n  - zero-copy and per-cpu splice() tracing\n  - binary tracing without printf overhead\n  - structured logging records exposed under /debug/tracing/events\n  - trace events embedded in function tracer output and other plugins\n  - user-defined, per tracepoint filter expressions\n  ...\n\nCons:\n\n  - no dev_t info for the output of plug, unplug_timer and unplug_io events.\n    no dev_t info for getrq and sleeprq events if bio \u003d\u003d NULL.\n    no dev_t info for rq_abort,...,rq_requeue events if rq-\u003erq_disk \u003d\u003d NULL.\n\n    This is mainly because we can\u0027t get the deivce from a request queue.\n    But this may change in the future.\n\n  - A packet command is converted to a string in TP_assign, not TP_print.\n    While blktrace do the convertion just before output.\n\n    Since pc requests should be rather rare, this is not a big issue.\n\n  - In blktrace, an event can have 2 different print formats, but a TRACE_EVENT\n    has a unique format, which means we have some unused data in a trace entry.\n\n    The overhead is minimized by using __dynamic_array() instead of __array().\n\nI\u0027ve benchmarked the ioctl blktrace vs the splice based TRACE_EVENT tracing:\n\n      dd                   dd + ioctl blktrace       dd + TRACE_EVENT (splice)\n1     7.36s, 42.7 MB/s     7.50s, 42.0 MB/s          7.41s, 42.5 MB/s\n2     7.43s, 42.3 MB/s     7.48s, 42.1 MB/s          7.43s, 42.4 MB/s\n3     7.38s, 42.6 MB/s     7.45s, 42.2 MB/s          7.41s, 42.5 MB/s\n\nSo the overhead of tracing is very small, and no regression when using\nthose trace events vs blktrace.\n\nAnd the binary output of TRACE_EVENT is much smaller than blktrace:\n\n # ls -l -h\n -rw-r--r-- 1 root root 8.8M 06-09 13:24 sda.blktrace.0\n -rw-r--r-- 1 root root 195K 06-09 13:24 sda.blktrace.1\n -rw-r--r-- 1 root root 2.7M 06-09 13:25 trace_splice.out\n\nFollowing are some comparisons between TRACE_EVENT and blktrace:\n\nplug:\n  kjournald-480   [000]   303.084981: block_plug: [kjournald]\n  kjournald-480   [000]   303.084981:   8,0    P   N [kjournald]\n\nunplug_io:\n  kblockd/0-118   [000]   300.052973: block_unplug_io: [kblockd/0] 1\n  kblockd/0-118   [000]   300.052974:   8,0    U   N [kblockd/0] 1\n\nremap:\n  kjournald-480   [000]   303.085042: block_remap: 8,0 W 102736992 + 8 \u003c- (8,8) 33384\n  kjournald-480   [000]   303.085043:   8,0    A   W 102736992 + 8 \u003c- (8,8) 33384\n\nbio_backmerge:\n  kjournald-480   [000]   303.085086: block_bio_backmerge: 8,0 W 102737032 + 8 [kjournald]\n  kjournald-480   [000]   303.085086:   8,0    M   W 102737032 + 8 [kjournald]\n\ngetrq:\n  kjournald-480   [000]   303.084974: block_getrq: 8,0 W 102736984 + 8 [kjournald]\n  kjournald-480   [000]   303.084975:   8,0    G   W 102736984 + 8 [kjournald]\n\n  bash-2066  [001]  1072.953770:   8,0    G   N [bash]\n  bash-2066  [001]  1072.953773: block_getrq: 0,0 N 0 + 0 [bash]\n\nrq_complete:\n  konsole-2065  [001]   300.053184: block_rq_complete: 8,0 W () 103669040 + 16 [0]\n  konsole-2065  [001]   300.053191:   8,0    C   W 103669040 + 16 [0]\n\n  ksoftirqd/1-7   [001]  1072.953811:   8,0    C   N (5a 00 08 00 00 00 00 00 24 00) [0]\n  ksoftirqd/1-7   [001]  1072.953813: block_rq_complete: 0,0 N (5a 00 08 00 00 00 00 00 24 00) 0 + 0 [0]\n\nrq_insert:\n  kjournald-480   [000]   303.084985: block_rq_insert: 8,0 W 0 () 102736984 + 8 [kjournald]\n  kjournald-480   [000]   303.084986:   8,0    I   W 102736984 + 8 [kjournald]\n\nChangelog from v2 -\u003e v3:\n\n- use the newly introduced __dynamic_array().\n\nChangelog from v1 -\u003e v2:\n\n- use __string() instead of __array() to minimize the memory required\n  to store hex dump of rq-\u003ecmd().\n\n- support large pc requests.\n\n- add missing blk_fill_rwbs_rq() in block_rq_requeue TRACE_EVENT.\n\n- some cleanups.\n\nSigned-off-by: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nLKML-Reference: \u003c4A2DF669.5070905@cn.fujitsu.com\u003e\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "44347d947f628060b92449702071bfe1d31dfb75",
      "tree": "c6ed74610d5b3295df4296659f80f5feb94b28cc",
      "parents": [
        "d94fc523f3c35bd8013f04827e94756cbc0212f4",
        "413f81eba35d6ede9289b0c8a920c013a84fac71"
      ],
      "author": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Thu May 07 11:17:13 2009 +0200"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Thu May 07 11:17:34 2009 +0200"
      },
      "message": "Merge branch \u0027linus\u0027 into tracing/core\n\nMerge reason: tracing/core was on a .30-rc1 base and was missing out on\n              on a handful of tracing fixes present in .30-rc5-almost.\n\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "22a7c31a9659deaddafbbcec6562d44141e84474",
      "tree": "0fe1c64e82d673597c78c6ce5f3569d9101b5281",
      "parents": [
        "a42aaa3bbce85ac487ad4fad5db99e8e91b7aac1"
      ],
      "author": {
        "name": "Alan D. Brunelle",
        "email": "Alan.Brunelle@hp.com",
        "time": "Mon May 04 16:35:08 2009 -0400"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Wed May 06 14:13:01 2009 +0200"
      },
      "message": "blktrace: from-sector redundant in trace_block_remap\n\nRemove redundant from-sector parameter: it\u0027s /always/ the bio\u0027s sector\npassed in.\n\n[ Impact: cleanup ]\n\nSigned-off-by: Alan D. Brunelle \u003calan.brunelle@hp.com\u003e\nReviewed-by: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nReviewed-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Jens Axboe \u003cjens.axboe@oracle.com\u003e\nCc: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\nLKML-Reference: \u003c49FF517C.7000503@hp.com\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "8f3d8ba20e67991b531e9c0227dcd1f99271a32c",
      "tree": "337efd46f067ce3b7eeab0c3627b02a7edef4afd",
      "parents": [
        "0882e8dd3aad33eca41696d463bb896e6c8817eb"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Tue Apr 07 19:55:13 2009 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Wed Apr 15 08:28:09 2009 +0200"
      },
      "message": "block: move bio list helpers into bio.h\n\nIt\u0027s used by DM and MD and generally useful, so move the bio list\nhelpers into bio.h.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nAcked-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "af7e466a1acededbc10beaba9eec8531d561c566",
      "tree": "1d1d0655e2fc22e5b440202be4050fd083a66c04",
      "parents": [
        "92c639021ca6e962645114f02e356e7feb131d0b"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Thu Apr 09 00:27:16 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Apr 09 00:27:16 2009 +0100"
      },
      "message": "dm: implement basic barrier support\n\nBarriers are submitted to a worker thread that issues them in-order.\n\nThe thread is modified so that when it sees a barrier request it waits\nfor all pending IO before the request then submits the barrier and\nwaits for it.  (We must wait, otherwise it could be intermixed with\nfollowing requests.)\n\nErrors from the barrier request are recorded in a per-device barrier_error\nvariable. There may be only one barrier request in progress at once.\n\nFor now, the barrier request is converted to a non-barrier request when\nsending it to the underlying device.\n\nThis patch guarantees correct barrier behavior if the underlying device\ndoesn\u0027t perform write-back caching. The same requirement existed before\nbarriers were supported in dm.\n\nBottom layer barrier support (sending barriers by target drivers) and\nhandling devices with write-back caches will be done in further patches.\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "92c639021ca6e962645114f02e356e7feb131d0b",
      "tree": "eee01e9394b09fb3929fd4f3682815e91b87c764",
      "parents": [
        "3b00b2036fac7a7667d0676a0f80eee575b8c32b"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Thu Apr 09 00:27:15 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Apr 09 00:27:15 2009 +0100"
      },
      "message": "dm: remove dm_request loop\n\nRemove queue_io return value and a loop in dm_request.\n\nIO may be submitted to a worker thread with queue_io().  queue_io() sets\nDMF_QUEUE_IO_TO_THREAD so that all further IO is queued for the thread. When\nthe thread finishes its work, it clears DMF_QUEUE_IO_TO_THREAD and from this\npoint on, requests are submitted from dm_request again. This will be used\nfor processing barriers.\n\nRemove the loop in dm_request. queue_io() can submit I/Os to the worker thread\neven if DMF_QUEUE_IO_TO_THREAD was not set.\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "3b00b2036fac7a7667d0676a0f80eee575b8c32b",
      "tree": "cd893a75900ee81550230711ea4a0005a6f2c2ce",
      "parents": [
        "54d9a1b4513b96cbd835ca6866c6a604d194b2ae"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Thu Apr 09 00:27:15 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Apr 09 00:27:15 2009 +0100"
      },
      "message": "dm: rework queueing and suspension\n\nRework shutting down on suspend and document the associated rules.\n\nDrop write lock in __split_and_process_bio to allow more processing\nconcurrency.\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "54d9a1b4513b96cbd835ca6866c6a604d194b2ae",
      "tree": "42813374e137f5ac6d9d7aedfae02a089b6443a6",
      "parents": [
        "1eb787ec183d1267cac95aae632e92dee05ed50a"
      ],
      "author": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Apr 09 00:27:14 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Apr 09 00:27:14 2009 +0100"
      },
      "message": "dm: simplify dm_request loop\n\nRefactor the code in dm_request().\n\nRequire the new DMF_BLOCK_FOR_SUSPEND flag on readahead bios we will\ndiscard so we don\u0027t drop such bios while processing a barrier.\n\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "1eb787ec183d1267cac95aae632e92dee05ed50a",
      "tree": "ad8f50d995afc72fb4751fdd2436ebc40b648b0f",
      "parents": [
        "df12ee996378a5917e9555169fe278ecca0612d4"
      ],
      "author": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Apr 09 00:27:14 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Apr 09 00:27:14 2009 +0100"
      },
      "message": "dm: split DMF_BLOCK_IO flag into two\n\nSplit the DMF_BLOCK_IO flag into two.\n\nDMF_BLOCK_IO_FOR_SUSPEND is set when I/O must be blocked while suspending a\ndevice.  DMF_QUEUE_IO_TO_THREAD is set when I/O must be queued to a\nworker thread for later processing.\n\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "df12ee996378a5917e9555169fe278ecca0612d4",
      "tree": "ea6200205c68aab575b078e3a9e22d9b3466718f",
      "parents": [
        "692d0eb9e02cf81fb387ff891f53840db2f3110a"
      ],
      "author": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Apr 09 00:27:13 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Apr 09 00:27:13 2009 +0100"
      },
      "message": "dm: rearrange dm_wq_work\n\nRefactor dm_wq_work() to make later patch more readable.\n\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "692d0eb9e02cf81fb387ff891f53840db2f3110a",
      "tree": "0e6aa42d81cd47c55de37b55d2ffad419fe57cd0",
      "parents": [
        "9c47008d13add50ec4597a8b9eee200c515282c8"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Thu Apr 09 00:27:13 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Apr 09 00:27:13 2009 +0100"
      },
      "message": "dm: remove limited barrier support\n\nPrepare for full barrier implementation: first remove the restricted support.\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "9c47008d13add50ec4597a8b9eee200c515282c8",
      "tree": "debd8ebb2fef2687d4548a177505ec30bda95503",
      "parents": [
        "577c9c456f0e1371cbade38eaf91ae8e8a308555"
      ],
      "author": {
        "name": "Martin K. Petersen",
        "email": "martin.petersen@oracle.com",
        "time": "Thu Apr 09 00:27:12 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Apr 09 00:27:12 2009 +0100"
      },
      "message": "dm: add integrity support\n\nThis patch provides support for data integrity passthrough in the device\nmapper.\n\n - If one or more component devices support integrity an integrity\n   profile is preallocated for the DM device.\n\n - If all component devices have compatible profiles the DM device is\n   flagged as capable.\n\n - Handle integrity metadata when splitting and cloning bios.\n\nSigned-off-by: Martin K. Petersen \u003cmartin.petersen@oracle.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "99360b4c18f7675b50d283301d46d755affe75fd",
      "tree": "1ad78057b086aa1571cc8dcf2443c819f75ca30a",
      "parents": [
        "b44ebeb017b8a5fe5439e1259708b68cf83a8921"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Thu Apr 02 19:55:39 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Apr 02 19:55:39 2009 +0100"
      },
      "message": "dm: set queue ordered mode\n\nSet queue ordered mode.  It doesn\u0027t really matter what we set here\nbecause we don\u0027t ever put any requests on the queue.  But we need to set\nsomething other than QUEUE_ORDERED_NONE so that __generic_make_request\npasses barrier requests to us.\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "b44ebeb017b8a5fe5439e1259708b68cf83a8921",
      "tree": "ea138d44aa80302002b3e67cd6049a18c2302734",
      "parents": [
        "022c261100e15652d720395b17ce76304fb2f97f"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Thu Apr 02 19:55:39 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Apr 02 19:55:39 2009 +0100"
      },
      "message": "dm: move wait queue declaration\n\nMove wait queue declaration and unplug to dm_wait_for_completion.\n\nThe purpose is to minimize duplicate code in the further patches.\n\nThe patch reorders functions a little bit. It doesn\u0027t change any\nfunctionality. For proper non-deadlock operation, add_wait_queue must\nhappen before set_current_state(interruptible) and before the test for\n!atomic_read(\u0026md-\u003epending).\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "022c261100e15652d720395b17ce76304fb2f97f",
      "tree": "cbab417b11242d4561ba45e60b3838f1672013cb",
      "parents": [
        "401600dfd368305e641d79db16d514f55c084544"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Thu Apr 02 19:55:39 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Apr 02 19:55:39 2009 +0100"
      },
      "message": "dm: merge pushback and deferred bio lists\n\nMerge pushback and deferred lists into one list - use deferred list\nfor both deferred and pushed-back bios.\n\nThis will be needed for proper support of barrier bios: it is impossible to\nsupport ordering correctly with two lists because the requests on both lists\nwill be mixed up.\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "401600dfd368305e641d79db16d514f55c084544",
      "tree": "4e1c3f19c52d2bb7d78ec01689d17659960732ab",
      "parents": [
        "ef2085870ea448b3c19160d899cf4f948da6a384"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Thu Apr 02 19:55:38 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Apr 02 19:55:38 2009 +0100"
      },
      "message": "dm: allow uninterruptible wait for pending io\n\nAllow uninterruptible wait for pending IOs.\n\nAdd argument \"interruptible\" to dm_wait_for_completion that specifies\neither interruptible or uninterruptible waiting.\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "ef2085870ea448b3c19160d899cf4f948da6a384",
      "tree": "f8e6e4bdeecc41d1b0cd8608a7460b0d130f43a8",
      "parents": [
        "f0b9a4502baa18f8a255a2866bb4e0655fb35974"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Thu Apr 02 19:55:38 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Apr 02 19:55:38 2009 +0100"
      },
      "message": "dm: merge __flush_deferred_io into caller\n\nMerge __flush_deferred_io() into the only caller, dm_wq_work().\n\nThere\u0027s no need to have a function that has only one caller.\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "f0b9a4502baa18f8a255a2866bb4e0655fb35974",
      "tree": "28d45275783b68d608d632a84371aa6e625c08f5",
      "parents": [
        "8a53c28db42853591edbe8103e2ce3c4f2917f42"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Thu Apr 02 19:55:38 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Apr 02 19:55:38 2009 +0100"
      },
      "message": "dm: move bio_io_error into __split_and_process_bio\n\nMove the bio_io_error() calls directly into __split_and_process_bio().\n\nThis avoids some code duplication in later patches.\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "8a53c28db42853591edbe8103e2ce3c4f2917f42",
      "tree": "fe09d07b660847c37fa8cd6ee67ee043f4302ba4",
      "parents": [
        "53d5914f288b67ddc4d594d6a09568fe114bb909"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Thu Apr 02 19:55:37 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Apr 02 19:55:37 2009 +0100"
      },
      "message": "dm: rename __split_bio\n\nRename __split_bio() to __split_and_process_bio() because it not only splits\nthe bio to serveral parts, but also submits them to target drivers.\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "53d5914f288b67ddc4d594d6a09568fe114bb909",
      "tree": "e4f8e2442b85564a3f8f90f32228d5efeb3bd033",
      "parents": [
        "9a1fb46448cac50e93115322ad28f417936f7852"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Thu Apr 02 19:55:37 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Apr 02 19:55:37 2009 +0100"
      },
      "message": "dm: remove unnecessary struct dm_wq_req\n\nRemove struct dm_wq_req and move \"work\" directly into struct mapped_device.\n\nIn the revised implementation, the thread will do just one type of work\n(processing the queue).\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "9a1fb46448cac50e93115322ad28f417936f7852",
      "tree": "120e3e431dd98044a7620e4095da4bcc37ae4407",
      "parents": [
        "143773965b4677bd72dbbf71f52bea0df2ed4e18"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Thu Apr 02 19:55:36 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Apr 02 19:55:36 2009 +0100"
      },
      "message": "dm: remove unnecessary work queue context field\n\nRemove the context field from struct dm_wq_req because we will no longer\nneed it.\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "143773965b4677bd72dbbf71f52bea0df2ed4e18",
      "tree": "42cbaca9b881d1e84d555d9ced120f4e78babc9a",
      "parents": [
        "99c75e3130cff0c869c657ee97fb4a68958eeffc"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Thu Apr 02 19:55:36 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Apr 02 19:55:36 2009 +0100"
      },
      "message": "dm: remove unnecessary work queue type field\n\nRemove \"type\" field from struct dm_wq_req because we no longer need it\nto have more than one value.\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "b35f8caa0890169000fec22902290d9a15274cbd",
      "tree": "a1a8ad3e5ba8b36da631d7125e0deb4ae743955a",
      "parents": [
        "b2174eebd1fadb76454dad09a1dacbc17081e6b0"
      ],
      "author": {
        "name": "Milan Broz",
        "email": "mbroz@redhat.com",
        "time": "Mon Mar 16 17:44:36 2009 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Mon Mar 16 17:44:36 2009 +0000"
      },
      "message": "dm crypt: wait for endio to complete before destruction\n\nThe following oops has been reported when dm-crypt runs over a loop device.\n\n...\n[   70.381058] Process loop0 (pid: 4268, ti\u003dcf3b2000 task\u003dcf1cc1f0 task.ti\u003dcf3b2000)\n...\n[   70.381058] Call Trace:\n[   70.381058]  [\u003cd0d76601\u003e] ? crypt_dec_pending+0x5e/0x62 [dm_crypt]\n[   70.381058]  [\u003cd0d767b8\u003e] ? crypt_endio+0xa2/0xaa [dm_crypt]\n[   70.381058]  [\u003cd0d76716\u003e] ? crypt_endio+0x0/0xaa [dm_crypt]\n[   70.381058]  [\u003cc01a2f24\u003e] ? bio_endio+0x2b/0x2e\n[   70.381058]  [\u003cd0806530\u003e] ? dec_pending+0x224/0x23b [dm_mod]\n[   70.381058]  [\u003cd08066e4\u003e] ? clone_endio+0x79/0xa4 [dm_mod]\n[   70.381058]  [\u003cd080666b\u003e] ? clone_endio+0x0/0xa4 [dm_mod]\n[   70.381058]  [\u003cc01a2f24\u003e] ? bio_endio+0x2b/0x2e\n[   70.381058]  [\u003cc02bad86\u003e] ? loop_thread+0x380/0x3b7\n[   70.381058]  [\u003cc02ba8a1\u003e] ? do_lo_send_aops+0x0/0x165\n[   70.381058]  [\u003cc013754f\u003e] ? autoremove_wake_function+0x0/0x33\n[   70.381058]  [\u003cc02baa06\u003e] ? loop_thread+0x0/0x3b7\n\nWhen a table is being replaced, it waits for I/O to complete\nbefore destroying the mempool, but the endio function doesn\u0027t\ncall mempool_free() until after completing the bio.\n\nFix it by swapping the order of those two operations.\n\nThe same problem occurs in dm.c with md referenced after dec_pending.\nAgain, we swap the order.\n\nCc: stable@kernel.org\nSigned-off-by: Milan Broz \u003cmbroz@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "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": "8fbf26ad5b16ad3a826ca7fe3e86700420abed1f",
      "tree": "43bc5cc2ca90ea394682daa4b665a46ebb110b97",
      "parents": [
        "23d39f63aa87e812fd879b8bc32ee6ccfe733de3"
      ],
      "author": {
        "name": "Kiyoshi Ueda",
        "email": "k-ueda@ct.jp.nec.com",
        "time": "Tue Jan 06 03:05:06 2009 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Jan 06 03:05:06 2009 +0000"
      },
      "message": "dm request: add caches\n\nThis patch prepares some kmem_caches for request-based dm.\n\nSigned-off-by: Kiyoshi Ueda \u003ck-ueda@ct.jp.nec.com\u003e\nSigned-off-by: Jun\u0027ichi Nomura \u003cj-nomura@ce.jp.nec.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "a1b51e98676932d031f5eec1325b2df4bbdc8f26",
      "tree": "0dda5c172f6ef1880dbc9eafb9eb6d404c9447c6",
      "parents": [
        "fe0bdec68b77020281dc814805edfe594ae89e0f"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Tue Jan 06 03:04:53 2009 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Jan 06 03:04:53 2009 +0000"
      },
      "message": "dm table: drop reference at unbind\n\nMove one dm_table_put() so that the last reference in the thread\ngets dropped in __unbind().\n\nThis is required for a following patch,\ndm-table-rework-reference-counting.patch, which will change the logic in\nsuch a way that table destructor is called only at specific points in\nthe code.\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "bb799ca0202a360fa74d5f17039b9100caebdde7",
      "tree": "048b6cedfd2644edd82a606db6d9e8b19d31328b",
      "parents": [
        "1b4344986926da324b5cd10b683e5a1a5e1b7db3"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Wed Dec 10 15:35:05 2008 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Mon Dec 29 08:29:23 2008 +0100"
      },
      "message": "bio: allow individual slabs in the bio_set\n\nInstead of having a global bio slab cache, add a reference to one\nin each bio_set that is created. This allows for personalized slabs\nin each bio_set, so that they can have bios of different sizes.\n\nThis means we can personalize the bios we return. File systems may\nwant to embed the bio inside another structure, to avoid allocation\nmore items (and stuffing them in -\u003ebi_private) after the get a bio.\nOr we may want to embed a number of bio_vecs directly at the end\nof a bio, to avoid doing two allocations to return a bio. This is now\npossible.\n\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "0bfc24559d7945506184d86739fe365a181f06b7",
      "tree": "5c152128faac7080f4802ce03d1c6b6bc7173227",
      "parents": [
        "5f3ea37c7716db4e894a480e0c18b24399595b6b"
      ],
      "author": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Wed Nov 26 11:59:56 2008 +0100"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Wed Nov 26 13:04:35 2008 +0100"
      },
      "message": "blktrace: port to tracepoints, update\n\nPort to the new tracepoints API: split DEFINE_TRACE() and DECLARE_TRACE()\nsites. Spread them out to the usage sites, as suggested by\nMathieu Desnoyers.\n\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nAcked-by: Mathieu Desnoyers \u003cmathieu.desnoyers@polymtl.ca\u003e\n"
    },
    {
      "commit": "5f3ea37c7716db4e894a480e0c18b24399595b6b",
      "tree": "db6784635d024894f641b340dcd7c5060c446077",
      "parents": [
        "509dceef6470442d8c7b8a43ec34125205840b3c"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Thu Oct 30 08:34:33 2008 +0100"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Wed Nov 26 12:13:34 2008 +0100"
      },
      "message": "blktrace: port to tracepoints\n\nThis was a forward port of work done by Mathieu Desnoyers, I changed it to\nencode the \u0027what\u0027 parameter on the tracepoint name, so that one can register\ninterest in specific events and not on classes of events to then check the\n\u0027what\u0027 parameter.\n\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "8a57dfc6f943c92b861c9a19b0c86ddcb2aba768",
      "tree": "18090d42e647cda854c93aa304cf03fbad44f6c0",
      "parents": [
        "d221d2e77696e70e94b13989ea15db2ba5b34f8e"
      ],
      "author": {
        "name": "Chandra Seetharaman",
        "email": "sekharan@us.ibm.com",
        "time": "Thu Nov 13 23:39:14 2008 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Nov 13 23:39:14 2008 +0000"
      },
      "message": "dm: avoid destroying table in dm_any_congested\n\ndm_any_congested() just checks for the DMF_BLOCK_IO and has no\ncode to make sure that suspend waits for dm_any_congested() to\ncomplete.  This patch adds such a check.\n\nWithout it, a race can occur with dm_table_put() attempting to\ndestroying the table in the wrong thread, the one running\ndm_any_congested() which is meant to be quick and return\nimmediately.\n\nTwo examples of problems:\n1. Sleeping functions called from congested code, the caller\n   of which holds a spin lock.\n2. An ABBA deadlock between pdflush and multipathd. The two locks\n   in contention are inode lock and kernel lock.\n\nSigned-off-by: Chandra Seetharaman \u003csekharan@us.ibm.com\u003e\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "d221d2e77696e70e94b13989ea15db2ba5b34f8e",
      "tree": "82afcee59db83104d31848e2304eb51baeee3aa4",
      "parents": [
        "14e98c5ca8bed825f65cbf11cb0ffd2c09dac2f4"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Thu Nov 13 23:39:10 2008 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Nov 13 23:39:10 2008 +0000"
      },
      "message": "dm: move pending queue wake_up end_io_acct\n\nThis doesn\u0027t fix any bug, just moves wake_up immediately after decrementing\nmd-\u003epending, for better code readability.\n\nIt must be clear to anyone manipulating md-\u003epending to wake up\nthe queue if md-\u003epending reaches zero, so move the wakeup as close to\nthe decrementing as possible.\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": "51157b4ab47e1376c2b93cb854b14b637efeaff2",
      "tree": "76889af489b15aaf8c75d457f29d36336ca0a0a6",
      "parents": [
        "f431d9666fd6e69fbaf305cebc7278d1428950c2"
      ],
      "author": {
        "name": "Kiyoshi Ueda",
        "email": "k-ueda@ct.jp.nec.com",
        "time": "Tue Oct 21 17:45:08 2008 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Oct 21 17:45:08 2008 +0100"
      },
      "message": "dm: tidy local_init\n\nThis patch tidies local_init() in preparation for request-based 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\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "f431d9666fd6e69fbaf305cebc7278d1428950c2",
      "tree": "ebd0e7c5deb3e6782f0de657223d071bc11b1983",
      "parents": [
        "1f965b19437017cea6d3f3f46acdc5acae5fd011"
      ],
      "author": {
        "name": "Kiyoshi Ueda",
        "email": "k-ueda@ct.jp.nec.com",
        "time": "Tue Oct 21 17:45:07 2008 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Oct 21 17:45:07 2008 +0100"
      },
      "message": "dm: remove unused flush_all\n\nThis patch removes the DM_WQ_FLUSH_ALL state that is unnecessary.\n\nThe dm_queue_flush(md, DM_WQ_FLUSH_ALL, NULL) in dm_suspend()\nis never invoked because:\n  - \u0027goto flush_and_out\u0027 is the same as \u0027goto out\u0027 because\n    the \u0027goto flush_and_out\u0027 is called only when \u0027!noflush\u0027\n  - If r is non-zero, then the code above will invoke \u0027goto out\u0027\n    and skip this code.\n\nNo functional change.\n\nSigned-off-by: Kiyoshi Ueda \u003ck-ueda@ct.jp.nec.com\u003e\nSigned-off-by: Jun\u0027ichi Nomura \u003cj-nomura@ce.jp.nec.com\u003e\nSigned-off-by: Milan Broz \u003cmbroz@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "f3e1d26ede3fb15c06904d700f1d7b21bba2215e",
      "tree": "18ce3a0e4c4005d9737b840b37440e4ad85ed860",
      "parents": [
        "0a4a1047a445062793d9004bcb0d52756726fdf5"
      ],
      "author": {
        "name": "Martin K. Petersen",
        "email": "martin.petersen@oracle.com",
        "time": "Tue Oct 21 17:45:04 2008 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Oct 21 17:45:04 2008 +0100"
      },
      "message": "dm: mark split bio as cloned\n\nWhen a bio gets split, mark its fragments with the BIO_CLONED flag.\n\nSigned-off-by: Martin K. Petersen \u003cmartin.petersen@oracle.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "fe5f9f2cd57c2ce56f36c66e87a10d4b7a158505",
      "tree": "76bfbf4e634fcd043f4764cfff45ce6ea12171f8",
      "parents": [
        "a4600f81393d685043fe2d485cf2b123301f467d"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sun Mar 02 10:29:31 2008 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Oct 21 07:48:29 2008 -0400"
      },
      "message": "[PATCH] switch dm\n\nioctl() doesn\u0027t need BKL here\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "d4430d62fa77208824a37fe6f85ab2831d274769",
      "tree": "5d4d0bca31e63eb208fbebe4f39c912b964c1e4d",
      "parents": [
        "badf8082c33d18b118d3a6f1b32d5ea6b97d3839"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sun Mar 02 09:09:22 2008 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Oct 21 07:47:32 2008 -0400"
      },
      "message": "[PATCH] beginning of methods conversion\n\nTo keep the size of changesets sane we split the switch by drivers;\nto keep the damn thing bisectable we do the following:\n\t1) rename the affected methods, add ones with correct\nprototypes, make (few) callers handle both.  That\u0027s this changeset.\n\t2) for each driver convert to new methods.  *ALL* drivers\nare converted in this series.\n\t3) kill the old (renamed) methods.\n\nNote that it _is_ a flagday; all in-tree drivers are converted and by the\nend of this series no trace of old methods remain.  The only reason why\nwe do that this way is to keep the damn thing bisectable and allow per-driver\ndebugging if anything goes wrong.\n\nNew methods:\n\topen(bdev, mode)\n\trelease(disk, mode)\n\tioctl(bdev, mode, cmd, arg)\t\t/* Called without BKL */\n\tcompat_ioctl(bdev, mode, cmd, arg)\n\tlocked_ioctl(bdev, mode, cmd, arg)\t/* Called with BKL, legacy */\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\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": "074a7aca7afa6f230104e8e65eba3420263714a5",
      "tree": "f418313e45bd55be8156c8a3e8f9a216cf63058d",
      "parents": [
        "eddb2e26b5ee3c5da68ba4bf1921ba20e2097bff"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Aug 25 19:56:14 2008 +0900"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Thu Oct 09 08:56:08 2008 +0200"
      },
      "message": "block: move stats from disk to part0\n\nMove stats related fields - stamp, in_flight, dkstats - from disk to\npart0 and unify stat handling such that...\n\n* part_stat_*() now updates part0 together if the specified partition\n  is not part0.  ie. part_stat_*() are now essentially all_stat_*().\n\n* {disk|all}_stat_*() are gone.\n\n* part_round_stats() is updated similary.  It handles part0 stats\n  automatically and disk_round_stats() is killed.\n\n* part_{inc|dec}_in_fligh() is implemented which automatically updates\n  part0 stats for parts other than part0.\n\n* disk_map_sector_rcu() is updated to return part0 if no part matches.\n  Combined with the above changes, this makes NULL special case\n  handling in callers unnecessary.\n\n* Separate stats show code paths for disk are collapsed into part\n  stats show code paths.\n\n* Rename disk_stat_lock/unlock() to part_stat_lock/unlock()\n\nWhile at it, reposition stat handling macros a bit and add missing\nparentheses around macro parameters.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "ed9e1982347b36573cd622ee5f4e2a7ccd79b3fd",
      "tree": "79d834094d655ec97cfc0a382a9207ebc8e711a5",
      "parents": [
        "870d6656126add8e383645732b03df2b7ccd4f94"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Aug 25 19:56:05 2008 +0900"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Thu Oct 09 08:56:07 2008 +0200"
      },
      "message": "block: implement and use {disk|part}_to_dev()\n\nImplement {disk|part}_to_dev() and use them to access generic device\ninstead of directly dereferencing {disk|part}-\u003edev.  To make sure no\nuser is left behind, rename generic devices fields to __dev.\n\nThis is in preparation of unifying partition 0 handling with other\npartitions.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "c9959059161ddd7bf4670cf47367033d6b2f79c4",
      "tree": "6454db55f8e34361fe472358e10e0c5cfac1e366",
      "parents": [
        "e71bf0d0ee89e51b92776391c5634938236977d5"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Aug 25 19:47:21 2008 +0900"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Thu Oct 09 08:56:06 2008 +0200"
      },
      "message": "block: fix diskstats access\n\nThere are two variants of stat functions - ones prefixed with double\nunderbars which don\u0027t care about preemption and ones without which\ndisable preemption before manipulating per-cpu counters.  It\u0027s unclear\nwhether the underbarred ones assume that preemtion is disabled on\nentry as some callers don\u0027t do that.\n\nThis patch unifies diskstats access by implementing disk_stat_lock()\nand disk_stat_unlock() which take care of both RCU (for partition\naccess) and preemption (for per-cpu counter access).  diskstats access\nshould always be enclosed between the two functions.  As such, there\u0027s\nno need for the versions which disables preemption.  They\u0027re removed\nand double underbars ones are renamed to drop the underbars.  As an\nextra argument is added, there\u0027s no danger of using the old version\nunconverted.\n\ndisk_stat_lock() uses get_cpu() and returns the cpu index and all\ndiskstat functions which access per-cpu counters now has @cpu\nargument to help RT.\n\nThis change adds RCU or preemption operations at some places but also\ncollapses several preemption ops into one at others.  Overall, the\nperformance difference should be negligible as all involved ops are\nvery lightweight per-cpu ones.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "f331c0296f2a9fee0d396a70598b954062603015",
      "tree": "f74c467d58940131d97d90c4ea549843185e6ef0",
      "parents": [
        "cf771cb5a7b716f3f9e532fd42a1e3a0a75adec5"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Sep 03 09:01:48 2008 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Thu Oct 09 08:56:05 2008 +0200"
      },
      "message": "block: don\u0027t depend on consecutive minor space\n\n* Implement disk_devt() and part_devt() and use them to directly\n  access devt instead of computing it from -\u003emajor and -\u003efirst_minor.\n\n  Note that all references to -\u003emajor and -\u003efirst_minor outside of\n  block layer is used to determine devt of the disk (the part0) and as\n  -\u003emajor and -\u003efirst_minor will continue to represent devt for the\n  disk, converting these users aren\u0027t strictly necessary.  However,\n  convert them for consistency.\n\n* Implement disk_max_parts() to avoid directly deferencing\n  genhd-\u003eminors.\n\n* Update bdget_disk() such that it doesn\u0027t assume consecutive minor\n  space.\n\n* Move devt computation from register_disk() to add_disk() and make it\n  the only one (all other usages use the initially determined value).\n\nThese changes clean up the code and will help disk-\u003epart dereference\nfix and extended block device numbers.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "b01cd5ac43b00c49759c126c21e7d22c7e80b245",
      "tree": "ccfda9067457032999a5d2d6ed5203caa2422937",
      "parents": [
        "5037108acd4dc40c210321cc83b0bf8352eda95a"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Wed Oct 01 14:39:24 2008 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Wed Oct 01 14:39:24 2008 +0100"
      },
      "message": "dm: cope with access beyond end of device in dm_merge_bvec\n\nIf for any reason dm_merge_bvec() is given an offset beyond the end of the\ndevice, avoid an oops and always allow one page to be added to an empty bio.\nWe\u0027ll reject the I/O later after the bio is submitted.\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "5037108acd4dc40c210321cc83b0bf8352eda95a",
      "tree": "96b8684cd33eaee6dda5f07d598c93de36b1476a",
      "parents": [
        "d3a47e82b6bc3724dd60f3ee4e84fe4479104382"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Wed Oct 01 14:39:17 2008 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Wed Oct 01 14:39:17 2008 +0100"
      },
      "message": "dm: always allow one page in dm_merge_bvec\n\nSome callers assume they can always add at least one page to an empty bio,\nso dm_merge_bvec should not return 0 in this case: we\u0027ll reject the I/O\nlater after the bio is submitted.\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": "6ae2fa6718c398290be29ef740873640d25058b6",
      "tree": "057e8601891ed77fecbdb968033cc9dc06f8b788",
      "parents": [
        "c8da2f8dd86d70559ec4e50251f6a755b42bd5b4"
      ],
      "author": {
        "name": "Richard Kennedy",
        "email": "richard@rsk.demon.co.uk",
        "time": "Mon Jul 21 12:00:28 2008 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Mon Jul 21 12:00:28 2008 +0100"
      },
      "message": "dm io: remove struct padding\n\nRearrange struct dm_io.\nShrinks size from 40 -\u003e 32 allowing more objects/slab.\n\nSigned-off-by: Richard Kennedy \u003crichard@rsk.demon.co.uk\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "cf13ab8e02d452e2236d0b5fda9972b3b7f503cb",
      "tree": "135509aa2852deebba7b4a81cdafc2a2ee2e358f",
      "parents": [
        "4fdfe401e9d7e30029972d568c667234c0c1d828"
      ],
      "author": {
        "name": "Frederik Deweerdt",
        "email": "frederik.deweerdt@gmail.com",
        "time": "Thu Apr 24 22:10:59 2008 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Fri Apr 25 13:27:02 2008 +0100"
      },
      "message": "dm: remove md argument from specific_minor\n\nThe small patch below:\n- Removes the unused md argument from both specific_minor() and next_free_minor()\n- Folds kmalloc + memset(0) into a single kzalloc call in alloc_dev()\n\nThis has been compile tested on x86.\n\nSigned-off-by: Frederik Deweerdt \u003cfrederik.deweerdt@gmail.com\u003e\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": "304f3f6a58301316da612d7bf21d9abe1369d456",
      "tree": "aa380ca3cd0a7d8a61f17915050866876510f181",
      "parents": [
        "3a7f6c990ad04e6f576a159876c602d14d6f7fef"
      ],
      "author": {
        "name": "Milan Broz",
        "email": "mbroz@redhat.com",
        "time": "Fri Feb 08 02:11:17 2008 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Fri Feb 08 02:11:17 2008 +0000"
      },
      "message": "dm: move deferred bio flushing to workqueue\n\nAdd a single-thread workqueue for each mapped device\nand move flushing of the lists of pushback and deferred bios\nto this new workqueue.\n\nSigned-off-by: Milan Broz \u003cmbroz@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "46125c1c90882e17f856f1ba30440efea9135e80",
      "tree": "e1175d29ec1985a220bfb07c0d6fa6cc83c44f15",
      "parents": [
        "94d6351e147231b2c5a9512d69693ee8ac0c204d"
      ],
      "author": {
        "name": "Milan Broz",
        "email": "mbroz@redhat.com",
        "time": "Fri Feb 08 02:10:30 2008 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Fri Feb 08 02:10:30 2008 +0000"
      },
      "message": "dm: refactor dm_suspend completion wait\n\nMove completion wait to separate function\n\nSigned-off-by: Milan Broz \u003cmbroz@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "94d6351e147231b2c5a9512d69693ee8ac0c204d",
      "tree": "a0b5c1935077c1bf40db1945c5f30e8d8a9a47a2",
      "parents": [
        "73d410c0137f63c6597e9763c81e5f4d015e9940"
      ],
      "author": {
        "name": "Milan Broz",
        "email": "mbroz@redhat.com",
        "time": "Fri Feb 08 02:10:27 2008 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Fri Feb 08 02:10:27 2008 +0000"
      },
      "message": "dm: split dm_suspend io_lock hold into two\n\nChange io_locking to allow processing flush in separate thread.\n\nBecause we have DMF_BLOCK_IO already set, any possible\nnew ios are queued in dm_requests now.\n\nIn the case of interrupting previous wait there can be more\nios queued (we unlocked io_lock for a while) but this is safe.\n\nSigned-off-by: Milan Broz \u003cmbroz@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "73d410c0137f63c6597e9763c81e5f4d015e9940",
      "tree": "d76251d96254217b6935dee0acca676476a7a45e",
      "parents": [
        "6d6f10df890df8be69edd4db32dc8ce09f311bb8"
      ],
      "author": {
        "name": "Milan Broz",
        "email": "mbroz@redhat.com",
        "time": "Fri Feb 08 02:10:25 2008 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Fri Feb 08 02:10:25 2008 +0000"
      },
      "message": "dm: tidy dm_suspend\n\nTidy dm_suspend function\n\n - change return value logic in dm_suspend\n - use atomic_read only once.\n - move DMF_BLOCK_IO clearing into one place\n\nSigned-off-by: Milan Broz \u003cmbroz@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "6d6f10df890df8be69edd4db32dc8ce09f311bb8",
      "tree": "3845f7fdd940cdd4ee9e35cc40aeeab766b21b03",
      "parents": [
        "6ed7ade89657e71da3afa7cb13ad25570a95dd9d"
      ],
      "author": {
        "name": "Milan Broz",
        "email": "mbroz@redhat.com",
        "time": "Fri Feb 08 02:10:22 2008 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Fri Feb 08 02:10:22 2008 +0000"
      },
      "message": "dm: refactor deferred bio_list processing\n\nRefactor deferred bio_list processing.\n\n - use separate _merge_pushback_list function\n - move deferred bio list pick up to flush function\n - use bio_list_pop instead of bio_list_get\n - simplify noflush flag use\n\nNo real functional change in this patch.\n\nSigned-off-by: Milan Broz \u003cmbroz@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "6ed7ade89657e71da3afa7cb13ad25570a95dd9d",
      "tree": "713c0fc55b5802c92fa160d65eba1e692e9ff9fc",
      "parents": [
        "a26ffd4aa99d6ace82852930edf09e450cc7dc8d"
      ],
      "author": {
        "name": "Milan Broz",
        "email": "mbroz@redhat.com",
        "time": "Fri Feb 08 02:10:19 2008 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Fri Feb 08 02:10:19 2008 +0000"
      },
      "message": "dm: tidy alloc_dev labels\n\nTidy labels in alloc_dev to make later patches more clear.\n\nNo functional change in this patch.\n\nSigned-off-by: Milan Broz \u003cmbroz@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "e61290a4a23c3f85f883f0c8cc7c967501f82a57",
      "tree": "db8947500e6d75be2f6ff02cecfdb1bbace5230e",
      "parents": [
        "8defd83084c3ce46d314c038f7c0f0ed7156d6f8"
      ],
      "author": {
        "name": "Daniel Walker",
        "email": "dwalker@mvista.com",
        "time": "Fri Feb 08 02:10:08 2008 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Fri Feb 08 02:10:08 2008 +0000"
      },
      "message": "dm: convert suspend_lock semaphore to mutex\n\nReplace semaphore with mutex.\n\nSigned-off-by: Daniel Walker \u003cdwalker@mvista.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "b9249e556877643b940e4543824a3de5c85bce49",
      "tree": "535e9199affe5d79e370abef352ca8396f7deaef",
      "parents": [
        "7e5c1e830b2310359a4cfbbf89895dde4abd996a"
      ],
      "author": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Fri Feb 08 02:09:51 2008 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Fri Feb 08 02:09:51 2008 +0000"
      },
      "message": "dm: mark function lists static\n\nAdd a couple of statics.\n\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "7e5c1e830b2310359a4cfbbf89895dde4abd996a",
      "tree": "143d5ff1998b115689347f0346a25b622a888739",
      "parents": [
        "df922075f2a55b1ae71a6fe589c1cc1b91381f4f"
      ],
      "author": {
        "name": "Milan Broz",
        "email": "mbroz@redhat.com",
        "time": "Fri Feb 08 02:09:49 2008 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Fri Feb 08 02:09:49 2008 +0000"
      },
      "message": "dm: add missing memory barrier to dm_suspend\n\nAdd memory barrier to fix atomic_read of pending value.\n\nSigned-off-by: Milan Broz \u003cmbroz@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "edfaa7c36574f1bf09c65ad602412db9da5f96bf",
      "tree": "d591b80ff9229e4845e41d68e2f4c5aadb017027",
      "parents": [
        "09f82ea92822a7bbb7e816508abbda47ed54a77f"
      ],
      "author": {
        "name": "Kay Sievers",
        "email": "kay.sievers@vrfy.org",
        "time": "Mon May 21 22:08:01 2007 +0200"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@suse.de",
        "time": "Thu Jan 24 20:40:36 2008 -0800"
      },
      "message": "Driver core: convert block from raw kobjects to core devices\n\nThis moves the block devices to /sys/class/block. It will create a\nflat list of all block devices, with the disks and partitions in one\ndirectory. For compatibility /sys/block is created and contains symlinks\nto the disks.\n\n  /sys/class/block\n  |-- sda -\u003e ../../devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda\n  |-- sda1 -\u003e ../../devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1\n  |-- sda10 -\u003e ../../devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda10\n  |-- sda5 -\u003e ../../devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda5\n  |-- sda6 -\u003e ../../devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda6\n  |-- sda7 -\u003e ../../devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda7\n  |-- sda8 -\u003e ../../devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda8\n  |-- sda9 -\u003e ../../devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda9\n  `-- sr0 -\u003e ../../devices/pci0000:00/0000:00:1f.2/host1/target1:0:0/1:0:0:0/block/sr0\n\n  /sys/block/\n  |-- sda -\u003e ../devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda\n  `-- sr0 -\u003e ../devices/pci0000:00/0000:00:1f.2/host1/target1:0:0/1:0:0:0/block/sr0\n\nSigned-off-by: Kay Sievers \u003ckay.sievers@vrfy.org\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@suse.de\u003e\n\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": "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": "51e5b2bd34ded40ef48cade8a6a8f1baa0b4275e",
      "tree": "7c1650dcd2f53bed2c0b8c9538e8da2d2d1286c2",
      "parents": [
        "96a1f7dba6e464155c0d1dc69c6c2efa96b644ac"
      ],
      "author": {
        "name": "Mike Anderson",
        "email": "andmike@linux.vnet.ibm.com",
        "time": "Fri Oct 19 22:48:00 2007 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Sat Oct 20 02:01:24 2007 +0100"
      },
      "message": "dm: add uevent to core\n\nThis patch adds a uevent skeleton to device-mapper.\n\nSigned-off-by: Mike Anderson \u003candmike@linux.vnet.ibm.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "9e4e5f87ebcadb7ad9aca640bbe1038e1545e9f8",
      "tree": "f9e4851247a8261151f1c858a18088b2f2e4701a",
      "parents": [
        "def5b5b26e6d97820465fadcb7d1cb73cc4daf33"
      ],
      "author": {
        "name": "Milan Broz",
        "email": "mbroz@redhat.com",
        "time": "Fri Oct 19 22:38:53 2007 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Sat Oct 20 02:01:09 2007 +0100"
      },
      "message": "dm: tidy bio_io_error usage\n\nUse bio_io_error() in only two places and tidy the code,\npreparing for later patches.\n\nThere is no functional change in this patch.\n\nSigned-off-by: Milan Broz \u003cmbroz@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "ae9da83f6d800fe1f3b23bfbc8f7222ad1c5bb74",
      "tree": "18ec2683dd90399f09d41725bdc253a7b335bf0d",
      "parents": [
        "79662d1ea37392651f2cff08626cab6a40ba3adc"
      ],
      "author": {
        "name": "Jun\u0027ichi Nomura",
        "email": "j-nomura@ce.jp.nec.com",
        "time": "Fri Oct 19 22:38:43 2007 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Sat Oct 20 02:01:05 2007 +0100"
      },
      "message": "dm: fix thaw_bdev\n\nThis patch fixes a bd_mount_sem counter corruption bug in device-mapper.\n\nthaw_bdev() should be called only when freeze_bdev() was called for the\ndevice.\nOtherwise, thaw_bdev() will up bd_mount_sem and corrupt the semaphore counter.\nstruct block_device with the corrupted semaphore may remain in slab cache\nand be reused later.\n\nAttached patch will fix it by calling unlock_fs() instead.\nunlock_fs() will determine whether it should call thaw_bdev()\nby checking the device is frozen or not.\n\nEasy reproducer is:\n  #!/bin/sh\n  while [ 1 ]; do\n     dmsetup --notable create a\n     dmsetup --nolockfs suspend a\n     dmsetup remove a\n  done\n\nIt\u0027s not easy to see the effect of corrupted semaphore.\nSo I have tested with putting printk below in bdev_alloc_inode():\n        if (atomic_read(\u0026ei-\u003ebdev.bd_mount_sem.count) !\u003d 1)\n                printk(KERN_DEBUG \"Incorrect semaphore count \u003d %d (%p)\\n\",\n                        atomic_read(\u0026ei-\u003ebdev.bd_mount_sem.count),\n                        \u0026ei-\u003ebdev);\n\nWithout the patch, I saw something like:\n Incorrect semaphore count \u003d 17 (f2ab91c0)\n\nWith the patch, the message didn\u0027t appear.\n\nThe bug was introduced in 2.6.16 with this bug fix:\n\ncommit d9dde59ba03095e526640988c0fedd75e93bc8b7\nDate:   Fri Feb 24 13:04:24 2006 -0800\n\n    [PATCH] dm: missing bdput/thaw_bdev at removal\n\n    Need to unfreeze and release bdev otherwise the bdev inode with\n    inconsistent state is reused later and cause problem.\n\nand backported to 2.6.15.5.\n\nIt occurs only in free_dev(), which is called only when the dm device is\nremoved.  The buggy code is executed only if md-\u003esuspended_bdev is\nnon-NULL and that can happen only when the device was suspended without\nnoflush.\n\nSigned-off-by: Jun\u0027ichi Nomura \u003cj-nomura@ce.jp.nec.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\nCc: stable@kernel.org\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": "6712ecf8f648118c3363c142196418f89a510b90",
      "tree": "347d39a7d5a7ed96d3b1afecd28de2a0f98b98c9",
      "parents": [
        "5bb23a688b2de23d7765a1dd439d89c038378978"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Sep 27 12:47:43 2007 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@carl.home.kernel.dk",
        "time": "Wed Oct 10 09:25:57 2007 +0200"
      },
      "message": "Drop \u0027size\u0027 argument from bio_endio and bi_end_io\n\nAs bi_end_io is only called once when the reqeust is complete,\nthe \u0027size\u0027 argument is now redundant.  Remove it.\n\nNow there is no need for bio_endio to subtract the size completed\nfrom bi_size.  So don\u0027t do that either.\n\nWhile we are at it, change bi_end_io to return void.\n\nSigned-off-by: Neil Brown \u003cneilb@suse.de\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "c7149d6bce2561aeaa48caaa1700aa8b3b22008f",
      "tree": "cfaeda02f5bb62ccf290369b5bd3a5d3f3801cf9",
      "parents": [
        "ec05b297f91a443aa26b74059b573bfad49c9ebb"
      ],
      "author": {
        "name": "Alan D. Brunelle",
        "email": "Alan.Brunelle@hp.com",
        "time": "Tue Aug 07 15:30:23 2007 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Sat Aug 11 22:34:48 2007 +0200"
      },
      "message": "Fix remap handling by blktrace\n\nThis patch provides more information concerning REMAP operations on block\nIOs. The additional information provides clearer details at the user level,\nand supports post-processing analysis in btt.\n\no  Adds in partition remaps on the same device.\no  Fixed up the remap information in DM to be in the right order\no  Sent up mapped-from and mapped-to device information\n\nSigned-off-by: Alan D. Brunelle \u003calan.brunelle@hp.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "165125e1e480f9510a5ffcfbfee4e3ee38c05f23",
      "tree": "8009c8a5ff09e26dc2418d42f66ecafb055c52a2",
      "parents": [
        "f695baf2df9e0413d3521661070103711545207a"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Tue Jul 24 09:28:11 2007 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Tue Jul 24 09:28:11 2007 +0200"
      },
      "message": "[BLOCK] Get rid of request_queue_t typedef\n\nSome of the code has been gradually transitioned to using the proper\nstruct request_queue, but there\u0027s lots left. So do a full sweet of\nthe kernel and get rid of this typedef and replace its uses with\nthe proper type.\n\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "00d59405cf6d7ef8932394ab5a12da1a50ce581e",
      "tree": "ccd0c170b673a17792207b2b5816978bb27da436",
      "parents": [
        "294462a5c6c4fb9a6ced9cb5a368ff335f1b656e"
      ],
      "author": {
        "name": "Akinobu Mita",
        "email": "akinobu.mita@gmail.com",
        "time": "Tue Jul 17 04:03:46 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue Jul 17 10:23:03 2007 -0700"
      },
      "message": "unregister_blkdev() delete redundant messages in callers\n\nNo need to warn unregister_blkdev() failure by the callers.  (The previous\npatch makes unregister_blkdev() print error message in error case)\n\nSigned-off-by: Akinobu Mita \u003cakinobu.mita@gmail.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "07a83c47cfc00ba5f0f090ccddd3a0703be0eec9",
      "tree": "a17d8028f76ba242a04f3c0678644f93cc7eee7d",
      "parents": [
        "943317efdbc295e8a28df3f5cbd549d066ee8b4a"
      ],
      "author": {
        "name": "Stefan Bader",
        "email": "shbader@de.ibm.com",
        "time": "Thu Jul 12 17:28:33 2007 +0100"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Thu Jul 12 15:01:08 2007 -0700"
      },
      "message": "dm: disable barriers\n\nThis patch causes device-mapper to reject any barrier requests.  This is done\nsince most of the targets won\u0027t handle this correctly anyway.  So until the\nsituation improves it is better to reject these requests at the first place.\nSince barrier requests won\u0027t get to the targets, the checks there can be\nremoved.\n\nCc: stable@kernel.org\nSigned-off-by: Stefan Bader \u003cshbader@de.ibm.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "028867ac28e51afc834a5931e7545c022557eded",
      "tree": "0a268776ac68f26c86a28416b35a60ab54e3fb94",
      "parents": [
        "79e15ae424afa0a40b1a0c4478046d6ba0b71e20"
      ],
      "author": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Jul 12 17:26:32 2007 +0100"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Thu Jul 12 15:01:08 2007 -0700"
      },
      "message": "dm: use kmem_cache macro\n\nUse new KMEM_CACHE() macro and make the newly-exposed structure names more\nmeaningful.  Also remove some superfluous casts and inlines (let a modern\ncompiler be the judge).\n\nAcked-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "79eb885c96b5ccf8bbffd0dddc4c15a5dd436a1c",
      "tree": "1bae1cea97907415f19a0009aaa8e11e63fef34c",
      "parents": [
        "46b477306afcd0516924b26792c7a42f4dbfa9f0"
      ],
      "author": {
        "name": "Edward Goggin",
        "email": "egoggin@emc.com",
        "time": "Wed May 09 02:32:56 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Wed May 09 12:30:46 2007 -0700"
      },
      "message": "dm mpath: log device name\n\nMake the mapped device structure accessible to hardware handlers so error\nmessages can include the device name.\n\nSigned-off-by: Edward Goggin \u003cegoggin@emc.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "5972511b77809cb7c9ccdb79b825c54921c5c546",
      "tree": "8dec5821badf9750be04f339f0f621fab2114c8a",
      "parents": [
        "b9099ff63c75216d6ca10bce5a1abcd9293c27e6"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Mon Apr 02 10:06:42 2007 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@nelson.home.kernel.dk",
        "time": "Mon Apr 30 09:08:17 2007 +0200"
      },
      "message": "[BLOCK] Don\u0027t pin lots of memory in mempools\n\nCurrently we scale the mempool sizes depending on memory installed\nin the machine, except for the bio pool itself which sits at a fixed\n256 entry pre-allocation.\n\nThere\u0027s really no point in \"optimizing\" this OOM path, we just need\nenough preallocated to make progress. A single unit is enough, lets\nscale it down to 2 just to be on the safe side.\n\nThis patch saves ~150kb of pinned kernel memory on a 32-bit box.\n\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "bfa152fa5e4d328fe3ebf15908ee8ec20a0ce6dc",
      "tree": "1695481328f884639d6237eebfa48f4c29f9ce7c",
      "parents": [
        "e540eb45a5254873245fd377f2fe3afc47bd33c1"
      ],
      "author": {
        "name": "Jun\u0027ichi Nomura",
        "email": "j-nomura@ce.jp.nec.com",
        "time": "Fri Jan 26 00:57:07 2007 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Fri Jan 26 13:51:00 2007 -0800"
      },
      "message": "[PATCH] dm-multipath: fix stall on noflush suspend/resume\n\nAllow noflush suspend/resume of device-mapper device only for the case\nwhere the device size is unchanged.\n\nOtherwise, dm-multipath devices can stall when resumed if noflush was used\nwhen suspending them, all paths have failed and queue_if_no_path is set.\n\nExplanation:\n 1. Something is doing fsync() on the block dev,\n    holding inode-\u003ei_sem\n 2. The fsync write is blocked by all-paths-down and queue_if_no_path\n 3. Someone requests to suspend the dm device with noflush.\n    Pending writes are left in queue.\n 4. In the middle of dm_resume(), __bind() tries to get\n    inode-\u003ei_sem to do __set_size() and waits forever.\n\n\u0027noflush suspend\u0027 is a new device-mapper feature introduced in\nearly 2.6.20. So I hope the fix being included before 2.6.20 is\nreleased.\n\nExample of reproducer:\n 1. Create a multipath device by dmsetup\n 2. Fail all paths during mkfs\n 3. Do dmsetup suspend --noflush and load new map with healthy paths\n 4. Do dmsetup resume\n\nSigned-off-by: Jun\u0027ichi Nomura \u003cj-nomura@ce.jp.nec.com\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@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": "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": "74859364633963cb660c4fa518adca9ab1ca4229",
      "tree": "cd160337dc49fc26c79adcf5af75c5940fe1bb43",
      "parents": [
        "f00b16ad665a9b489d46f612679181f3f914917b"
      ],
      "author": {
        "name": "Kiyoshi Ueda",
        "email": "k-ueda@ct.jp.nec.com",
        "time": "Fri Dec 08 02:41:02 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.osdl.org",
        "time": "Fri Dec 08 08:29:08 2006 -0800"
      },
      "message": "[PATCH] dm: tidy core formatting\n\nRemove unnecessary spaces in dm.c.\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"
    }
  ],
  "next": "e18b890bb0881bbab6f4f1a6cd20d9c60d66b003"
}
