)]}'
{
  "log": [
    {
      "commit": "57cba5d3658d9fdc019c6af14a2d80aefa651e56",
      "tree": "4905a162b6785e1a1228b8870d8011cf9035147a",
      "parents": [
        "26803b9f06d365122fae82e7554a66ef8278e0bb"
      ],
      "author": {
        "name": "Mike Snitzer",
        "email": "snitzer@redhat.com",
        "time": "Thu Aug 12 04:14:04 2010 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Aug 12 04:14:04 2010 +0100"
      },
      "message": "dm: rename map_info flush_request to target_request_nr\n\n\u0027target_request_nr\u0027 is a more generic name that reflects the fact that\nit will be used for both flush and discard support.\n\nSigned-off-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "b1d5552838334c600b068c9c8cc18638e5a8cb47",
      "tree": "789e435ab60e6956abffc15b4da85fe1e5b1714c",
      "parents": [
        "4a0b4ddf261fc89c050fe0a10ec57a61251d7ac0"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Thu Aug 12 04:14:02 2010 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Aug 12 04:14:02 2010 +0100"
      },
      "message": "dm snapshot: implement merge\n\nImplement merge method for the snapshot origin to improve read\nperformance.\n\nWithout merge method, dm asks the upper layers to submit smallest possible\nbios --- one page. Submitting such small bios impacts performance negatively\nwhen reading or writing the origin device.\n\nWithout this patch, CPU consumption when reading the origin on lvm on md-raid0\nwas 6 to 12%, with this patch, it drops to 1 to 4%.\n\nNote: in my testing, it actually degraded performance in some settings, I\ntraced it to Maxtor disks having problems with \u003e 512-sector requests.\nReducing the number of sectors to /sys/block/sd*/queue/max_sectors_kb to\n256 fixed the read performance. I think we don\u0027t have to care about weird\ndisks that actually degrade performance because of large requests being\nsent to them.\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "c24110450650f17f7d3ba4fbe01f01ac5a115456",
      "tree": "8b5bff17f77c995099d93b2b4a32bc306962a0bf",
      "parents": [
        "1e5554c8428bc7209a83e2d07ca724be4d981ce3"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Thu Aug 12 04:13:51 2010 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Aug 12 04:13:51 2010 +0100"
      },
      "message": "dm snapshot: test chunk size against both origin and snapshot\n\nValidate chunk size against both origin and snapshot sector size\n\nDon\u0027t allow chunk size smaller than either origin or snapshot logical\nsector size. Reading or writing data not aligned to sector size is not\nallowed and causes immediate errors.\n\nThis requires us to open the origin before initialising the\nexception store and to export dm_snap_origin.\n\nCc: stable@kernel.org\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nReviewed-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "1e5554c8428bc7209a83e2d07ca724be4d981ce3",
      "tree": "c434fd684132ae502880dc745b1982fc3ca94db0",
      "parents": [
        "6bbf79a14080a0c61212f53b4b87dc1a99fedf9c"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Thu Aug 12 04:13:50 2010 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Aug 12 04:13:50 2010 +0100"
      },
      "message": "dm snapshot: iterate origin and cow devices\n\nIterate both origin and snapshot devices\n\niterate_devices method should call the callback for all the devices where\nthe bio may be remapped. Thus, snapshot_iterate_devices should call the callback\nfor both snapshot and origin underlying devices because it remaps some bios\nto the snapshot and some to the origin.\n\nsnapshot_iterate_devices called the callback only for the origin device.\nThis led to badly calculated device limits if snapshot and origin were placed\non different types of disks.\n\nCc: stable@kernel.org\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nReviewed-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "924e600d417ead9ef67043988055ba236f114718",
      "tree": "338db5dfc0f8fe8f9aa39bd19639ad1f1dc27e46",
      "parents": [
        "3abf85b5b5851b5f28d3d8a920ebb844edd08352"
      ],
      "author": {
        "name": "Mike Snitzer",
        "email": "snitzer@redhat.com",
        "time": "Sat Mar 06 02:32:33 2010 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Sat Mar 06 02:32:33 2010 +0000"
      },
      "message": "dm: eliminate some holes data structures\n\nEliminate a 4-byte hole in \u0027struct dm_io_memory\u0027 by moving \u0027offset\u0027 above the\n\u0027ptr\u0027 to which it applies (size reduced from 24 to 16 bytes).  And by\nassociation, 1-4 byte hole is eliminated in \u0027struct dm_io_request\u0027 (size\nreduced from 56 to 48 bytes).\n\nEliminate all 6 4-byte holes and 1 cache-line in \u0027struct dm_snapshot\u0027 (size\nreduced from 392 to 368 bytes).\n\nSigned-off-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "8215d6ec5fee1e76545decea2cd73717efb5cb42",
      "tree": "54ed2c995c3b91417def0ad31368e3094f72bd81",
      "parents": [
        "0f3649a9e305ea22eb196a84a2d7520afcaa6060"
      ],
      "author": {
        "name": "Nikanth Karthikesan",
        "email": "knikanth@novell.com",
        "time": "Sat Mar 06 02:32:27 2010 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Sat Mar 06 02:32:27 2010 +0000"
      },
      "message": "dm table: remove unused dm_get_device range parameters\n\nRemove unused parameters(start and len) of dm_get_device()\nand fix the callers.\n\nSigned-off-by: Nikanth Karthikesan \u003cknikanth@suse.de\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "d2fdb776e08d4231d7e86a879cc663a93913c202",
      "tree": "92c892ecca2bd1c9d405ba4cdaa85ba26a190023",
      "parents": [
        "d8ddb1cfff0070479c1f4a07c1d4a48ef8cb188e"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Thu Dec 10 23:52:36 2009 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Dec 10 23:52:36 2009 +0000"
      },
      "message": "dm snapshot: use merge origin if snapshot invalid\n\nIf the snapshot we are merging became invalid (e.g. it ran out of\nspace) redirect all I/O directly to the origin device.\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nReviewed-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "d8ddb1cfff0070479c1f4a07c1d4a48ef8cb188e",
      "tree": "340967ea04ef1d790dfce3c324c3bfc1ce30cace",
      "parents": [
        "8a2d528620e228ddfd0df9cec0a16e034ff8db1d"
      ],
      "author": {
        "name": "Mike Snitzer",
        "email": "snitzer@redhat.com",
        "time": "Thu Dec 10 23:52:35 2009 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Dec 10 23:52:35 2009 +0000"
      },
      "message": "dm snapshot: report merge failure in status\n\nSet \u0027merge_failed\u0027 flag if a snapshot fails to merge.  Update\nsnapshot_status() to report \"Merge failed\" if \u0027merge_failed\u0027 is set.\n\nSigned-off-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "8a2d528620e228ddfd0df9cec0a16e034ff8db1d",
      "tree": "ff93eac3e996df7bf046d08c7386d690c3fd5ee0",
      "parents": [
        "73dfd078cf8bfee4018fb22f1e2a24f2e05b69dc"
      ],
      "author": {
        "name": "Mike Snitzer",
        "email": "snitzer@redhat.com",
        "time": "Thu Dec 10 23:52:34 2009 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Dec 10 23:52:34 2009 +0000"
      },
      "message": "dm snapshot: merge consecutive chunks together\n\ns-\u003estore-\u003etype-\u003eprepare_merge returns the number of chunks that can be\ncopied linearly working backwards from the returned chunk number.\n\nFor example, if it returns 3 chunks with old_chunk \u003d\u003d 10 and new_chunk\n\u003d\u003d 20, then chunk 20 can be copied to 10, chunk 19 to 9 and 18 to 8.\n\nUntil now kcopyd only copied one chunk at a time.  This patch now copies\nthe full set at once.\n\nConsequently, snapshot_merge_process() needs to delay the merging of all\nchunks if any have writes in progress, not just the first chunk in the\nregion that is to be merged.\n\nsnapshot-merge\u0027s performance is now comparable to the original\nsnapshot-origin target.\n\nSigned-off-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "73dfd078cf8bfee4018fb22f1e2a24f2e05b69dc",
      "tree": "e5cc81262315df5c44d13d5a2eb731cfe7f8ea86",
      "parents": [
        "17aa03326d40614db94bc51fbbc92df628a5c97c"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Thu Dec 10 23:52:34 2009 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Dec 10 23:52:34 2009 +0000"
      },
      "message": "dm snapshot: trigger exceptions in remaining snapshots during merge\n\nWhen there is one merging snapshot and other non-merging snapshots,\nsnapshot_merge_process() must make exceptions in the non-merging\nsnapshots.\n\nUse a sequence count to resolve the race between I/O to chunks that are\nabout to be merged.  The count increases each time an exception\nreallocation finishes.  Use wait_event() to wait until the count\nchanges.\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "17aa03326d40614db94bc51fbbc92df628a5c97c",
      "tree": "a9661a11274731b6b8e2fcbaace7d4424b9cefb6",
      "parents": [
        "9fe862548821b0c206c58e8057b782530a173703"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Thu Dec 10 23:52:33 2009 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Dec 10 23:52:33 2009 +0000"
      },
      "message": "dm snapshot: delay merging a chunk until writes to it complete\n\nTrack writes to chunks that are currently being merged and delay merging\na chunk until all writes to that chunk finish.\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nReviewed-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "9fe862548821b0c206c58e8057b782530a173703",
      "tree": "1a23bec091d5163dfec29750b5daf3e93637c5ab",
      "parents": [
        "1e03f97e4301f75a2f3b649787f7876516764929"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Thu Dec 10 23:52:33 2009 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Dec 10 23:52:33 2009 +0000"
      },
      "message": "dm snapshot: queue writes to chunks being merged\n\nWhile a set of chunks is being merged, any overlapping writes need to be\nqueued.\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "1e03f97e4301f75a2f3b649787f7876516764929",
      "tree": "37f4baa83145c011245a83f1e18acf9348aac3c3",
      "parents": [
        "9d3b15c4c776b041f9ee81810cbd375275411829"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Thu Dec 10 23:52:32 2009 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Dec 10 23:52:32 2009 +0000"
      },
      "message": "dm snapshot: add merging\n\nMerging is started when origin is resumed and it is stopped when\norigin is suspended or when the merging snapshot is destroyed or\nerrors are detected.\n\nMerging is not yet interlocked with writes: this will be handled in\nsubsequent patches.\n\nThe code relies on callbacks from a private kcopyd thread.\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "9d3b15c4c776b041f9ee81810cbd375275411829",
      "tree": "8298b50b4d9cf11355e622e6b7c314628e5c6256",
      "parents": [
        "10b8106a70433e14153469ebbdd189776500e238"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Thu Dec 10 23:52:32 2009 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Dec 10 23:52:32 2009 +0000"
      },
      "message": "dm snapshot: permit only one merge at once\n\nMerging more than one snapshot is not supported, so prevent\nthis happening.\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "10b8106a70433e14153469ebbdd189776500e238",
      "tree": "5d46ee65e40d165494ef1d4342e03f2fcfaa0492",
      "parents": [
        "3452c2a1eb5b93c1b9fb0d22bd5b07c0cee4dc29"
      ],
      "author": {
        "name": "Mike Snitzer",
        "email": "snitzer@redhat.com",
        "time": "Thu Dec 10 23:52:31 2009 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Dec 10 23:52:31 2009 +0000"
      },
      "message": "dm snapshot: support barriers in snapshot merge target\n\nSets num_flush_requests\u003d2 to support flushing both the origin and cow\ndevices used by the snapshot-merge target.\n\nAlso, snapshot_ctr() now gets the origin device using FMODE_WRITE if the\ntarget is snapshot-merge (which writes to the origin device).\n\nSigned-off-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "3452c2a1eb5b93c1b9fb0d22bd5b07c0cee4dc29",
      "tree": "65d4af8d6cf36ac4bcc8c226f8be891740d343ee",
      "parents": [
        "515ad66cc4c82f210d726340349c8f7c1ec6b125"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Thu Dec 10 23:52:31 2009 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Dec 10 23:52:31 2009 +0000"
      },
      "message": "dm snapshot: avoid allocating exceptions in merge\n\nThe snapshot-merge target should not allocate new exceptions because the\nintent is to merge all of its exceptions as quickly and safely as\npossible.\n\nThis patch introduces the snapshot-merge mapping function and updates\n__origin_write() so that it doesn\u0027t allocate exceptions on any snapshots\nthat are being merged.\n\nIf a write request to a merging snapshot device is to be dispatched\ndirectly to the origin (because the chunk is not remapped or was already\nmerged), snapshot_merge_map() must make exceptions in other snapshots so\ncalls do_origin().\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "515ad66cc4c82f210d726340349c8f7c1ec6b125",
      "tree": "e6ae5591a7906f3ce9ae0fb0a62419acffcdcbcd",
      "parents": [
        "d698aa4500aa3ca9559142060caf0f79da998744"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Thu Dec 10 23:52:30 2009 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Dec 10 23:52:30 2009 +0000"
      },
      "message": "dm snapshot: rework writing to origin\n\nTo track the completion of exceptions relating to the same location on\nthe device, the current code selects one exception as primary_pe, links\nthe other exceptions to it and uses reference counting to wait until all\nthe reallocations are complete.\n\nIt is considered too complicated to extend this code to handle the new\nsnapshot-merge target, where sets of non-overlapping chunks would also\nneed to become linked.\n\nInstead, a simpler (but less efficient) approach is taken.  Bios are\nlinked to one exception.  When it completes, bios are simply retried,\nand if other related exceptions are still outstanding, they\u0027ll get\nqueued again to wait for another one.\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "d698aa4500aa3ca9559142060caf0f79da998744",
      "tree": "175577ce2c8ae0918e6f38a2a27ad2b124bb2466",
      "parents": [
        "4454a6216f75a9ef8c4bd0a65e34b101f725ef1e"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Thu Dec 10 23:52:30 2009 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Dec 10 23:52:30 2009 +0000"
      },
      "message": "dm snapshot: add merge target\n\nThe snapshot-merge target allows a snapshot to be merged back into the\nsnapshot\u0027s origin device.\n\nOne anticipated use of snapshot merging is the rollback of filesystems\nto back out problematic system upgrades.\n\nThis patch adds snapshot-merge target management to both\ndm_snapshot_init() and dm_snapshot_exit().  As an initial place-holder,\nsnapshot-merge is identical to the snapshot target.  Documentation is\nprovided.\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "615d1eb9cad9b34ed17c18c604254e8db533ac6f",
      "tree": "0937db148422cad3057db39ec2eaecf7b87e21a9",
      "parents": [
        "9eaae8ffbc340fc034fed1e5d0dc9ca0e943f817"
      ],
      "author": {
        "name": "Mike Snitzer",
        "email": "snitzer@redhat.com",
        "time": "Thu Dec 10 23:52:29 2009 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Dec 10 23:52:29 2009 +0000"
      },
      "message": "dm snapshot: create function for chunk_is_tracked wait\n\nMove the __chunk_is_tracked() loop into a separate function as we will\nalso need to call it from the write path in the rare case of conflicting\nwrites to the same chunk.\n\nOriginally introduced in commit a8d41b59f3f5a7ac19452ef442a7fc1b5fa17366\n(\"dm snapshot: fix race during exception creation\").\n\nSigned-off-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "9eaae8ffbc340fc034fed1e5d0dc9ca0e943f817",
      "tree": "b40361de2cde4ecd14f569a82b18df87f7f9cbc7",
      "parents": [
        "c2f3d24b783fda20618b73d65678eb5dfae31a5d"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Thu Dec 10 23:52:28 2009 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Dec 10 23:52:28 2009 +0000"
      },
      "message": "dm snapshot: make bio optional in __origin_write\n\nTo support the merging of snapshots back into their origin we need\nto trigger exceptions in other snapshots not being merged without\nany incoming bio on the origin device.  The bio parameter to\n__origin_write() becomes optional and the sector needs supplying\nseparately.\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "c1f0c183f6acc6d32c5a1d0249ec68bf783af7b1",
      "tree": "f8e8e88e5403a9dbbebff14dc4afd6d475d1c03a",
      "parents": [
        "042d2a9bcd80fe12d4b0871706aa9dd2231e8238"
      ],
      "author": {
        "name": "Mike Snitzer",
        "email": "snitzer@redhat.com",
        "time": "Thu Dec 10 23:52:24 2009 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Dec 10 23:52:24 2009 +0000"
      },
      "message": "dm snapshot: allow live exception store handover between tables\n\nPermit in-use snapshot exception data to be \u0027handed over\u0027 from one\nsnapshot instance to another.  This is a pre-requisite for patches\nthat allow the changes made in a snapshot device to be merged back into\nits origin device and also allows device resizing.\n\nThe basic call sequence is:\n\n  dmsetup load new_snapshot (referencing the existing in-use cow device)\n     - the ctr code detects that the cow is already in use and allows the\n       two snapshot target instances to be linked together\n  dmsetup suspend original_snapshot\n  dmsetup resume new_snapshot\n     - the new_snapshot becomes live, and if anything now tries to access\n       the original one it will receive -EIO\n  dmsetup remove original_snapshot\n\n(There can only be two snapshot targets referencing the same cow device\nsimultaneously.)\n\nSigned-off-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "c26655ca3ca7550740a63820ee981e5c7c797523",
      "tree": "1ac39d32d93a6fd5dbcfb5fa95304aecb6cb5efe",
      "parents": [
        "fc56f6fbcca3672c63c93c65f45105faacfc13cb"
      ],
      "author": {
        "name": "Mike Snitzer",
        "email": "snitzer@redhat.com",
        "time": "Thu Dec 10 23:52:12 2009 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Dec 10 23:52:12 2009 +0000"
      },
      "message": "dm snapshot: track suspended state in target\n\nKeep track of whether or not the device is suspended within the snapshot\ntarget module, the same as we do in dm-raid1.\n\nWe will use this later to enforce the correct sequence of ioctls to\ntransfer the in-core exceptions from a snapshot target instance in\none table to a replacement one capable of merging them back\ninto the origin.\n\nSigned-off-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "fc56f6fbcca3672c63c93c65f45105faacfc13cb",
      "tree": "f50f42a461ef33f8617fbdb781879e6ae77b62c4",
      "parents": [
        "985903bb3a6d98623360ab6c855417f638840029"
      ],
      "author": {
        "name": "Mike Snitzer",
        "email": "snitzer@redhat.com",
        "time": "Thu Dec 10 23:52:12 2009 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Dec 10 23:52:12 2009 +0000"
      },
      "message": "dm snapshot: move cow ref from exception store to snap core\n\nStore the reference to the snapshot cow device in the core snapshot\ncode instead of each exception store.  It can be accessed through the\nnew function dm_snap_cow().  Exception stores should each now maintain a\nreference to their parent snapshot struct.\n\nThis is cleaner and makes part of the forthcoming snapshot merge code simpler.\n\nSigned-off-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\nReviewed-by: Jonathan Brassow \u003cjbrassow@redhat.com\u003e\nCc: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\n"
    },
    {
      "commit": "985903bb3a6d98623360ab6c855417f638840029",
      "tree": "64e7582e0b7827aa318c4fe1c497ebc541d9ce8b",
      "parents": [
        "3510cb94ff7b04b016bd22bfee913e2c1c05c066"
      ],
      "author": {
        "name": "Mike Snitzer",
        "email": "snitzer@redhat.com",
        "time": "Thu Dec 10 23:52:11 2009 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Dec 10 23:52:11 2009 +0000"
      },
      "message": "dm snapshot: add allocated metadata to snapshot status\n\nAdd number of sectors used by metadata to the end of the snapshot\u0027s status\nline.\n\nRenamed dm_exception_store_type\u0027s \u0027fraction_full\u0027 to \u0027usage\u0027.  Renamed\narguments to be clearer about what is being returned.  Also added\n\u0027metadata_sectors\u0027.\n\nSigned-off-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "3510cb94ff7b04b016bd22bfee913e2c1c05c066",
      "tree": "6d8f1d3a8873d52b561c26b5b631763908d0f015",
      "parents": [
        "191437a53c8269df3a2c6199206781e742c57bb5"
      ],
      "author": {
        "name": "Jon Brassow",
        "email": "jbrassow@redhat.com",
        "time": "Thu Dec 10 23:52:11 2009 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Dec 10 23:52:11 2009 +0000"
      },
      "message": "dm snapshot: rename exception functions\n\nRename exception functions.  Preparing to pull them out of\ndm-snap.c for broader use.\n\nSigned-off-by: Jonathan Brassow \u003cjbrassow@redhat.com\u003e\nReviewed-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "191437a53c8269df3a2c6199206781e742c57bb5",
      "tree": "cf0c03388fe387a7f2e40a1eb5cf1b8761cf7db6",
      "parents": [
        "1d4989c858093bda0426be536fc7f9c415857836"
      ],
      "author": {
        "name": "Jon Brassow",
        "email": "jbrassow@redhat.com",
        "time": "Thu Dec 10 23:52:10 2009 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Dec 10 23:52:10 2009 +0000"
      },
      "message": "dm snapshot: rename exception_table to dm_exception_table\n\nRename exception_table for broader use outside dm-snap.c\n\nSigned-off-by: Jonathan Brassow \u003cjbrassow@redhat.com\u003e\nReviewed-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "1d4989c858093bda0426be536fc7f9c415857836",
      "tree": "f3d831048cb65b39d5fb89178d2a6de599518a2b",
      "parents": [
        "d32a6ea65fbc33621f9c790da3dff10201640b2a"
      ],
      "author": {
        "name": "Jon Brassow",
        "email": "jbrassow@redhat.com",
        "time": "Thu Dec 10 23:52:10 2009 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Dec 10 23:52:10 2009 +0000"
      },
      "message": "dm snapshot: rename dm_snap_exception to dm_exception\n\nThe exception structure is not necessarily just a snapshot\nelement (especially after we pull it out of dm-snap.c).\n\nRenaming appropriately.\n\nSigned-off-by: Jonathan Brassow \u003cjbrassow@redhat.com\u003e\nReviewed-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "d32a6ea65fbc33621f9c790da3dff10201640b2a",
      "tree": "a352ceb4ed92812bda57dd33806417da84adbc7b",
      "parents": [
        "7e201b35132a1f02c931a0a06760766c846bb49b"
      ],
      "author": {
        "name": "Jon Brassow",
        "email": "jbrassow@redhat.com",
        "time": "Thu Dec 10 23:52:09 2009 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Dec 10 23:52:09 2009 +0000"
      },
      "message": "dm snapshot: consolidate insert exception functions\n\nConsolidate the insert_*exception functions.  \u0027insert_completed_exception\u0027\nalready contains all the logic to handle \u0027insert_exception\u0027 (via\ncheck for a hash_shift of 0), so remove redundant function.\n\nSigned-off-by: Jonathan Brassow \u003cjbrassow@redhat.com\u003e\nReviewed-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "7e201b35132a1f02c931a0a06760766c846bb49b",
      "tree": "02ab2bcf4609763ab9780db2a87b9f37aa77186f",
      "parents": [
        "102c6ddb1d081a6a1fede38c43a42c9811313ec7"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Thu Dec 10 23:52:08 2009 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Dec 10 23:52:08 2009 +0000"
      },
      "message": "dm snapshot: abstract minimum_chunk_size fn\n\nThe origin needs to find minimum chunksize of all snapshots.  This logic is\nmoved to a separate function because it will be used at another place in\nthe snapshot merge patches.\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nReviewed-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nReviewed-by: Jonathan Brassow \u003cjbrassow@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "8e87b9b81b3c370f7e53c1ab6e1c3519ef37a644",
      "tree": "272a8532e12749c6c8419dcab0c341604646c571",
      "parents": [
        "94e76572b5dd37b1f0f4b3742ee8a565daead932"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Thu Dec 10 23:51:54 2009 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Dec 10 23:51:54 2009 +0000"
      },
      "message": "dm snapshot: cope with chunk size larger than origin\n\nUnder some special conditions the snapshot hash_size is calculated as zero.\nThis patch instead sets a minimum value of 64, the same as for the\npending exception table.\n\nrounddown_pow_of_two(0) is an undefined operation (it expands to shift\nby -1).  init_exception_table with an argument of 0 would fail with -ENOMEM.\n\nThe way to trigger the problem is to create a snapshot with a chunk size\nthat is larger than the origin device.\n\nCc: stable@kernel.org\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "94e76572b5dd37b1f0f4b3742ee8a565daead932",
      "tree": "2e7737f21d99a881b7a2d0977adad1d2bd9bfb87",
      "parents": [
        "d2bb7df8cac647b92f51fb84ae735771e7adbfa7"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Thu Dec 10 23:51:53 2009 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Dec 10 23:51:53 2009 +0000"
      },
      "message": "dm snapshot: only take lock for statustype info not table\n\nTake snapshot lock only for STATUSTYPE_INFO, not STATUSTYPE_TABLE.\n\nCommit 4c6fff445d7aa753957856278d4d93bcad6e2c14\n(dm-snapshot-lock-snapshot-while-supplying-status.patch)\nintroduced this use of the lock, but userspace applications using\nlibdevmapper have been found to request STATUSTYPE_TABLE while the device\nis suspended and the lock is already held, leading to deadlock.  Since\nthe lock is not necessary in this case, don\u0027t try to take it.\n\nCc: stable@kernel.org\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "df96eee679ba28c98cf722fa7c9f4286ee1ed0bd",
      "tree": "282c1368f3dff6ed0e0994210cc13c09b4680d66",
      "parents": [
        "4c6fff445d7aa753957856278d4d93bcad6e2c14"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Fri Oct 16 23:18:17 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Fri Oct 16 23:18:17 2009 +0100"
      },
      "message": "dm snapshot: use unsigned integer chunk size\n\nUse unsigned integer chunk size.\n\nMaximum chunk size is 512kB, there won\u0027t ever be need to use 4GB chunk size,\nso the number can be 32-bit. This fixes compiler failure on 32-bit systems\nwith large block devices.\n\nCc: stable@kernel.org\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nReviewed-by: Jonathan Brassow \u003cjbrassow@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "4c6fff445d7aa753957856278d4d93bcad6e2c14",
      "tree": "56ac3d262699fe5a42f76fe9f992277a6a7a2934",
      "parents": [
        "0e8c4e4e3ebb15756ddc4170a88149a2cd323cfe"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Fri Oct 16 23:18:16 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Fri Oct 16 23:18:16 2009 +0100"
      },
      "message": "dm snapshot: lock snapshot while supplying status\n\nThis patch locks the snapshot when returning status.  It fixes a race\nwhen it could return an invalid number of free chunks if someone\nwas simultaneously modifying it.\n\nCc: stable@kernel.org\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "3f2412dc85260e5aae7ebb03bf50d5b1407e3083",
      "tree": "c736dc9a52677e29b4dfeb3061da5111edbb9454",
      "parents": [
        "f88fb981183e71daf40bbd84bc8251bbf7b59e19"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Fri Oct 16 23:18:16 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Fri Oct 16 23:18:16 2009 +0100"
      },
      "message": "dm snapshot: require non zero chunk size by end of ctr\n\nIf we are creating snapshot with memory-stored exception store, fail if\nthe user didn\u0027t specify chunk size. Zero chunk size would probably crash\na lot of places in the rest of snapshot code.\n\nCc: stable@kernel.org\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nReviewed-by: Jonathan Brassow \u003cjbrassow@redhat.com\u003e\nReviewed-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "034a186d29dbcef099e57ab23ec39440596be911",
      "tree": "ab7b134d082581dd11fd9894f37d109d5d7a34b7",
      "parents": [
        "6d45d93ead319423099b82a4efd775bc0f159121"
      ],
      "author": {
        "name": "Jonathan Brassow",
        "email": "jbrassow@redhat.com",
        "time": "Fri Oct 16 23:18:14 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Fri Oct 16 23:18:14 2009 +0100"
      },
      "message": "dm snapshot: free exception store on init failure\n\nWhile initializing the snapshot module, if we fail to register\nthe snapshot target then we must back-out the exception store\nmodule initialization.\n\nCc: stable@kernel.org\nSigned-off-by: Jonathan Brassow \u003cjbrassow@redhat.com\u003e\nReviewed-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nReviewed-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "6d45d93ead319423099b82a4efd775bc0f159121",
      "tree": "6af9a92a7e9ef38aac856233d7721e3dfaefbd3e",
      "parents": [
        "012abeea669ea49636cf952d13298bb68654146a"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Fri Oct 16 23:18:14 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Fri Oct 16 23:18:14 2009 +0100"
      },
      "message": "dm snapshot: sort by chunk size to fix race\n\nAvoid a race causing corruption when snapshots of the same origin have\ndifferent chunk sizes by sorting the internal list of snapshots by chunk\nsize, largest first.\n  https://bugzilla.redhat.com/show_bug.cgi?id\u003d182659\n\nFor example, let\u0027s have two snapshots with different chunk sizes. The\nfirst snapshot (1) has small chunk size and the second snapshot (2) has\nlarge chunk size.  Let\u0027s have chunks A, B, C in these snapshots:\nsnapshot1: \u003d\u003d\u003d\u003dA\u003d\u003d\u003d\u003d   \u003d\u003d\u003d\u003dB\u003d\u003d\u003d\u003d\nsnapshot2: \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003dC\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\n(Chunk size is a power of 2. Chunks are aligned.)\n\nA write to the origin at a position within A and C comes along. It\ntriggers reallocation of A, then reallocation of C and links them\ntogether using A as the \u0027primary\u0027 exception.\n\nThen another write to the origin comes along at a position within B and\nC.  It creates pending exception for B.  C already has a reallocation in\nprogress and it already has a primary exception (A), so nothing is done\nto it: B and C are not linked.\n\nIf the reallocation of B finishes before the reallocation of C, because\nthere is no link with the pending exception for C it does not know to\nwait for it and, the second write is dispatched to the origin and causes\ndata corruption in the chunk C in snapshot2.\n\nTo avoid this situation, we maintain snapshots sorted in descending\norder of chunk size.  This leads to a guaranteed ordering on the links\nbetween the pending exceptions and avoids the problem explained above -\nboth A and B now get linked to C.\n\nCc: stable@kernel.org\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "8811f46c1f9386fc7017150de9d52359e5b1826e",
      "tree": "d7ff12ec29d2911801e81b50440f160d58b0f9a8",
      "parents": [
        "a77e28c7e1dc1a6a035c7627d4a88ecf3ea09aea"
      ],
      "author": {
        "name": "Mike Snitzer",
        "email": "snitzer@redhat.com",
        "time": "Fri Sep 04 20:40:19 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Fri Sep 04 20:40:19 2009 +0100"
      },
      "message": "dm snapshot: implement iterate devices\n\nImplement the .iterate_devices for the origin and snapshot targets.\ndm-snapshot\u0027s lack of .iterate_devices resulted in the inability to\nproperly establish queue_limits for both targets.\n\nWith 4K sector drives: an unfortunate side-effect of not establishing\nproper limits in either targets\u0027 DM device was that IO to the devices\nwould fail even though both had been created without error.\n\nCommit af4874e03ed82f050d5872d8c39ce64bf16b5c38 (\"dm target:s introduce\niterate devices fn\") in 2.6.31-rc1 should have implemented .iterate_devices\nfor dm-snap.c\u0027s origin and snapshot targets.\n\nSigned-off-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "494b3ee7d4f69210def80aecce28d08c3f0755d5",
      "tree": "8cd8fc4de72cf9a1a56e45518019a3cae106515a",
      "parents": [
        "8627921fa2ef6d40fd9b787e163ba3a9ff8f471d"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Mon Jun 22 10:12:25 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Mon Jun 22 10:12:25 2009 +0100"
      },
      "message": "dm snapshot: support barriers\n\nFlush support for dm-snapshot target.\n\nThis patch just forwards the flush request to either the origin or the snapshot\ndevice.  (It doesn\u0027t flush exception store metadata.)\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\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": "1e302a929e2da6e8448e2058e4b07b07252b57fe",
      "tree": "3345d31926a2254a2041d62d270cba76b2590bae",
      "parents": [
        "fee1998e9c690f9920671e1e0ef187a48cfbbde4"
      ],
      "author": {
        "name": "Jonathan Brassow",
        "email": "jbrassow@redhat.com",
        "time": "Thu Apr 02 19:55:35 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Apr 02 19:55:35 2009 +0100"
      },
      "message": "dm snapshot: move status to exception store\n\nLet the exception store types print out their status through\nthe new API, rather than having the snapshot code do it.\n\nAdjust the buffer position to allow for the preceding DMEMIT in the\narguments to type-\u003estatus().\n\nSigned-off-by: Jonathan Brassow \u003cjbrassow@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "fee1998e9c690f9920671e1e0ef187a48cfbbde4",
      "tree": "a217e9bc2142350d9e8065c6e581be0524636498",
      "parents": [
        "2e4a31df2b10cbcaf43c333112f6f7440a035c69"
      ],
      "author": {
        "name": "Jonathan Brassow",
        "email": "jbrassow@redhat.com",
        "time": "Thu Apr 02 19:55:34 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Apr 02 19:55:34 2009 +0100"
      },
      "message": "dm snapshot: move ctr parsing to exception store\n\nFirst step of having the exception stores parse their own arguments -\ngeneralizing the interface.\n\nSigned-off-by: Jonathan Brassow \u003cjbrassow@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "2e4a31df2b10cbcaf43c333112f6f7440a035c69",
      "tree": "fbfcde3d358e615b500c22219190654825e48a26",
      "parents": [
        "ccc45ea8aeffec49fa5985efc3649aa67bb4fcb7"
      ],
      "author": {
        "name": "Jonathan Brassow",
        "email": "jbrassow@redhat.com",
        "time": "Thu Apr 02 19:55:34 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Apr 02 19:55:34 2009 +0100"
      },
      "message": "dm snapshot: use DMEMIT macro for status\n\nUse DMEMIT in place of snprintf.  This makes it easier later when\nother modules are helping to populate our status output.\n\nSigned-off-by: Jonathan Brassow \u003cjbrassow@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "ccc45ea8aeffec49fa5985efc3649aa67bb4fcb7",
      "tree": "69a72e1a1599d3495224dcd425f0bb230a48108e",
      "parents": [
        "71fab00a6bef7fb53119271a8abdbaf40970d28a"
      ],
      "author": {
        "name": "Jonathan Brassow",
        "email": "jbrassow@redhat.com",
        "time": "Thu Apr 02 19:55:34 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Apr 02 19:55:34 2009 +0100"
      },
      "message": "dm snapshot: remove dm_snap header\n\nMove some of the last bits from dm-snap.h into dm-snap.c where they\nbelong and remove dm-snap.h.\n\nSigned-off-by: Jonathan Brassow \u003cjbrassow@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "71fab00a6bef7fb53119271a8abdbaf40970d28a",
      "tree": "4881f8f6d1b1c42528889d7a56fb8674d2aa7723",
      "parents": [
        "49beb2b87a972a994ff77633234ca3bf0d30a1d8"
      ],
      "author": {
        "name": "Jonathan Brassow",
        "email": "jbrassow@redhat.com",
        "time": "Thu Apr 02 19:55:33 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Apr 02 19:55:33 2009 +0100"
      },
      "message": "dm snapshot: remove dm_snap header use\n\nMove useful functions out of dm-snap.h and stop using dm-snap.h.\n\nSigned-off-by: Jonathan Brassow \u003cjbrassow@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "49beb2b87a972a994ff77633234ca3bf0d30a1d8",
      "tree": "4b281ebd48624d0fbe74b93fa72baa834211ca2f",
      "parents": [
        "d0216849519bec8dc96301a3cd80316e71243839"
      ],
      "author": {
        "name": "Jonathan Brassow",
        "email": "jbrassow@redhat.com",
        "time": "Thu Apr 02 19:55:33 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Apr 02 19:55:33 2009 +0100"
      },
      "message": "dm exception store: move cow pointer\n\nMove COW device from snapshot to exception store.\n\nSigned-off-by: Jonathan Brassow \u003cjbrassow@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "d0216849519bec8dc96301a3cd80316e71243839",
      "tree": "06e7f1d2028e784213e17f1a8ea1abae9ffb0ab9",
      "parents": [
        "0cea9c78270cdf1d2ad74ce0e083d5555a0842e8"
      ],
      "author": {
        "name": "Jonathan Brassow",
        "email": "jbrassow@redhat.com",
        "time": "Thu Apr 02 19:55:32 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Apr 02 19:55:32 2009 +0100"
      },
      "message": "dm exception store: move chunk_fields\n\nMove chunk fields from snapshot to exception store.\n\nSigned-off-by: Jonathan Brassow \u003cjbrassow@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "0cea9c78270cdf1d2ad74ce0e083d5555a0842e8",
      "tree": "783785811de9ed558ec1179a6bc201dd6161cae6",
      "parents": [
        "493df71c6420b211a68ae82b889c1e8a5fe701be"
      ],
      "author": {
        "name": "Jonathan Brassow",
        "email": "jbrassow@redhat.com",
        "time": "Thu Apr 02 19:55:32 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Apr 02 19:55:32 2009 +0100"
      },
      "message": "dm exception store: move dm_target pointer\n\nMove target pointer from snapshot to exception store.\n\nSigned-off-by: Jonathan Brassow \u003cjbrassow@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "493df71c6420b211a68ae82b889c1e8a5fe701be",
      "tree": "2738295190c1b3c5f72d85059aae3c96f162afa6",
      "parents": [
        "7513c2a761d69d2a93f17146b3563527d3618ba0"
      ],
      "author": {
        "name": "Jonathan Brassow",
        "email": "jbrassow@redhat.com",
        "time": "Thu Apr 02 19:55:31 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Apr 02 19:55:31 2009 +0100"
      },
      "message": "dm exception store: introduce registry\n\nMove exception stores into a registry.\n\nSigned-off-by: Jonathan Brassow \u003cjbrassow@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "b2a114652940ccf7e9668ad447ca78bf16a31139",
      "tree": "f86e851ff752a8ae5ce1b5571cde1918c86a156a",
      "parents": [
        "ec44ab9d6681ddf9026b593e866bec9c0e075e1d"
      ],
      "author": {
        "name": "Jonathan Brassow",
        "email": "jbrassow@redhat.com",
        "time": "Thu Apr 02 19:55:30 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Apr 02 19:55:30 2009 +0100"
      },
      "message": "dm exception store: separate type from instance\n\nIntroduce struct dm_exception_store_type.\n\nSigned-off-by: Jonathan Brassow \u003cjbrassow@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "35bf659b008e83e725dcd30f542e38461dbb867c",
      "tree": "40be2f357f0905573bd4d21ff59e0db3cda26442",
      "parents": [
        "c66213921c816f6b1b16a84911618ba9a363b134"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Thu Apr 02 19:55:26 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Apr 02 19:55:26 2009 +0100"
      },
      "message": "dm snapshot: avoid having two exceptions for the same chunk\n\nWe need to check if the exception was completed after dropping the lock.\n\nAfter regaining the lock, __find_pending_exception checks if the exception\nwas already placed into \u0026s-\u003epending hash.\n\nBut we don\u0027t check if the exception was already completed and placed into\n\u0026s-\u003ecomplete hash. If the process waiting in alloc_pending_exception was\ndelayed at this point because of a scheduling latency and the exception\nwas meanwhile completed, we\u0027d miss that and allocate another pending\nexception for already completed chunk.\n\nIt would lead to a situation where two records for the same chunk exist\nand potential data corruption because multiple snapshot I/Os to the\naffected chunk could be redirected to different locations in the\nsnapshot.\n\nCc: stable@kernel.org\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "c66213921c816f6b1b16a84911618ba9a363b134",
      "tree": "2b99c1ef34eea840fe3d517d8a20fb59a5a84044",
      "parents": [
        "2913808eb56a6445a7b277eb8d17651c8defb035"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Thu Apr 02 19:55:25 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Apr 02 19:55:25 2009 +0100"
      },
      "message": "dm snapshot: avoid dropping lock in __find_pending_exception\n\nIt is uncommon and bug-prone to drop a lock in a function that is called with\nthe lock held, so this is moved to the caller.\n\nCc: stable@kernel.org\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "2913808eb56a6445a7b277eb8d17651c8defb035",
      "tree": "a6d5392acc09cba9658071ca80a81b5a3a725a6c",
      "parents": [
        "b64b6bf4fd8b678a9f8477c11773c38a0a246a6d"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Thu Apr 02 19:55:25 2009 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Apr 02 19:55:25 2009 +0100"
      },
      "message": "dm snapshot: refactor __find_pending_exception\n\nMove looking-up of a pending exception from __find_pending_exception to another\nfunction.\n\nCc: stable@kernel.org\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "a159c1ac5f33c6cf0f5aa3c9d1ccdc82c907ee46",
      "tree": "2cb6bfd3f376e2366f3e3820ebd07a0a86a01cfc",
      "parents": [
        "4db6bfe02bdc7dc5048f46dd682a94801d029adc"
      ],
      "author": {
        "name": "Jonathan Brassow",
        "email": "jbrassow@redhat.com",
        "time": "Tue Jan 06 03:05:19 2009 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Jan 06 03:05:19 2009 +0000"
      },
      "message": "dm snapshot: extend exception store functions\n\nSupply dm_add_exception as a callback to the read_metadata function.\nAdd a status function ready for a later patch and name the functions\nconsistently.\n\nSigned-off-by: Jonathan Brassow \u003cjbrassow@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "4db6bfe02bdc7dc5048f46dd682a94801d029adc",
      "tree": "780a41560ea05266288853204f0d7e4eef4f6355",
      "parents": [
        "1ae25f9c933d1432fbffdf3e126051a974608abf"
      ],
      "author": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Jan 06 03:05:17 2009 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Jan 06 03:05:17 2009 +0000"
      },
      "message": "dm snapshot: split out exception store implementations\n\nMove the existing snapshot exception store implementations out into\nseparate files.  Later patches will place these behind a new\ninterface in preparation for alternative implementations.\n\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "aea53d92f70eeb00ae480e399a997dd55fd5055d",
      "tree": "55e087e5e22168ed87f6d51ca0c8557a7678834f",
      "parents": [
        "fe9cf30eb8186ef267d1868dc9f12f2d0f40835a"
      ],
      "author": {
        "name": "Jonathan Brassow",
        "email": "jbrassow@redhat.com",
        "time": "Tue Jan 06 03:05:15 2009 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Jan 06 03:05:15 2009 +0000"
      },
      "message": "dm snapshot: separate out exception store interface\n\nPull structures that bridge the gap between snapshot and\nexception store out of dm-snap.h and put them in a new\n.h file - dm-exception-store.h.  This file will define the\nAPI for new exception stores.\n\nUltimately, dm-snap.h is unnecessary, since only dm-snap.c\nshould be using it.\n\nSigned-off-by: Jonathan Brassow \u003cjbrassow@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "10d3bd09a3c25df114f74f7f86e1b58d070bef32",
      "tree": "a44e2fe5ccc5950b87a1d31849e5f0ac24fdcc16",
      "parents": [
        "d460c65a6a9ec9e0d284864ec3a9a2d1b73f0e43"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Tue Jan 06 03:04:58 2009 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Jan 06 03:04:58 2009 +0000"
      },
      "message": "dm: consolidate target deregistration error handling\n\nChange dm_unregister_target to return void and use BUG() for error\nreporting.\n\ndm_unregister_target can only fail because of programming bug in the\ntarget driver. It can\u0027t fail because of user\u0027s behavior or disk errors.\n\nThis patch changes unregister_target to return void and use BUG if\nsomeone tries to unregister non-registered target or unregister target\nthat is in use.\n\nThis patch removes code duplication (testing of error codes in all dm\ntargets) and reports bugs in just one place, in dm_unregister_target. In\nsome target drivers, these return codes were ignored, which could lead\nto a situation where bugs could be missed.\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "90fa1527bddc7147dc0d590ee6184ca88bc50ecf",
      "tree": "a6b692b5a7ef777cbd8f2927783f593234b091d1",
      "parents": [
        "a1b51e98676932d031f5eec1325b2df4bbdc8f26"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Tue Jan 06 03:04:54 2009 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Jan 06 03:04:54 2009 +0000"
      },
      "message": "dm snapshot: change yield to msleep\n\nChange yield() to msleep(1). If the thread had realtime priority,\nyield() doesn\u0027t really yield, so the yielding process would loop\nindefinitely and cause machine lockup.\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "879129d208f725267366296b631aef31409cf304",
      "tree": "7dd927ae094580f6a3fe420c0cc5f8e251ce9e9e",
      "parents": [
        "60c856c8e2f57a3f69c505735ef66e3719ea0bd6"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Thu Oct 30 13:33:16 2008 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Oct 30 13:33:16 2008 +0000"
      },
      "message": "dm snapshot: wait for chunks in destructor\n\nIf there are several snapshots sharing an origin and one is removed\nwhile the origin is being written to, the snapshot\u0027s mempool may get\ndeleted while elements are still referenced.\n\nPrior to dm-snapshot-use-per-device-mempools.patch the pending\nexceptions may still have been referenced after the snapshot was\ndestroyed, but this was not a problem because the shared mempool\nwas still there.\n\nThis patch fixes the problem by tracking the number of mempool elements\nin use.\n\nThe scenario:\n- You have an origin and two snapshots 1 and 2.\n- Someone writes to the origin.\n- It creates two exceptions in the snapshots, snapshot 1 will be primary\nexception, snapshot 2\u0027s pending_exception-\u003eprimary_pe will point to the\nexception in snapshot 1.\n- The exceptions are being relocated, relocation of exception 1 finishes\n(but it\u0027s pending_exception is still allocated, because it is referenced\nby an exception from snapshot 2)\n- The user lvremoves snapshot 1 --- it calls just suspend (does nothing)\nand destructor. md-\u003epending is zero (there is no I/O submitted to the\nsnapshot by md layer), so it won\u0027t help us.\n- The destructor waits for kcopyd jobs to finish on snapshot 1 --- but\nthere are none.\n- The destructor on snapshot 1 cleans up everything.\n- The relocation of exception on snapshot 2 finishes, it drops reference\non primary_pe. This frees its primary_pe pointer. Primary_pe points to\npending exception created for snapshot 1. So it frees memory into\nnon-existing mempool.\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "60c856c8e2f57a3f69c505735ef66e3719ea0bd6",
      "tree": "a6295bec9c1fa01885ef14befa4ae3618f51ca57",
      "parents": [
        "b34578a48459ed1bd5396631aaa4a65d6bcc7726"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Thu Oct 30 13:33:12 2008 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Oct 30 13:33:12 2008 +0000"
      },
      "message": "dm snapshot: fix register_snapshot deadlock\n\nregister_snapshot() performs a GFP_KERNEL allocation while holding\n_origins_lock for write, but that could write out dirty pages onto a\ndevice that attempts to acquire _origins_lock for read, resulting in\ndeadlock.\n\nSo move the allocation up before taking the lock.\n\nThis path is not performance-critical, so it doesn\u0027t matter that we\nallocate memory and free it if we find that we won\u0027t need it.\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "f68d4f3d394da5b1f69d855b8513f4256ccc803e",
      "tree": "0302fdc83ab62aeb9ad891dffd772625219bcbfc",
      "parents": [
        "7c5f78b9d7f21937e46c26db82976df4b459c95c"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Tue Oct 21 17:44:53 2008 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Oct 21 17:44:53 2008 +0100"
      },
      "message": "dm snapshot: drop unused last_percent\n\nThe last_percent field is unused - remove it.\n(It dates from when events were triggered as each X% filled up.)\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "7c5f78b9d7f21937e46c26db82976df4b459c95c",
      "tree": "dce6b094836929224af2ff16af60ee3109598652",
      "parents": [
        "b673c3a8192e28f13e2050a4b82c1986be92cc15"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Tue Oct 21 17:44:51 2008 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Oct 21 17:44:51 2008 +0100"
      },
      "message": "dm snapshot: fix primary_pe race\n\nFix a race condition with primary_pe ref_count handling.\n\nput_pending_exception runs under dm_snapshot-\u003elock, it does atomic_dec_and_test\non primary_pe-\u003eref_count, and later does atomic_read primary_pe-\u003eref_count.\n\n__origin_write does atomic_dec_and_test on primary_pe-\u003eref_count without holding\ndm_snapshot-\u003elock.\n\nThis opens the following race condition:\nAssume two CPUs, CPU1 is executing put_pending_exception (and holding\ndm_snapshot-\u003elock). CPU2 is executing __origin_write in parallel.\nprimary_pe-\u003eref_count \u003d\u003d 2.\n\nCPU1:\nif (primary_pe \u0026\u0026 atomic_dec_and_test(\u0026primary_pe-\u003eref_count))\n\torigin_bios \u003d bio_list_get(\u0026primary_pe-\u003eorigin_bios);\n... decrements primary_pe-\u003eref_count to 1. Doesn\u0027t load origin_bios\n\nCPU2:\nif (first \u0026\u0026 atomic_dec_and_test(\u0026primary_pe-\u003eref_count)) {\n\tflush_bios(bio_list_get(\u0026primary_pe-\u003eorigin_bios));\n\tfree_pending_exception(primary_pe);\n\t/* If we got here, pe_queue is necessarily empty. */\n\treturn r;\n}\n... decrements primary_pe-\u003eref_count to 0, submits pending bios, frees\nprimary_pe.\n\nCPU1:\nif (!primary_pe || primary_pe !\u003d pe)\n\tfree_pending_exception(pe);\n... this has no effect.\nif (primary_pe \u0026\u0026 !atomic_read(\u0026primary_pe-\u003eref_count))\n\tfree_pending_exception(primary_pe);\n... sees ref_count \u003d\u003d 0 (written by CPU 2), does double free !!\n\nThis bug can happen only if someone is simultaneously writing to both the\norigin and the snapshot.\n\nIf someone is writing only to the origin, __origin_write will submit kcopyd\nrequest after it decrements primary_pe-\u003eref_count (so it can\u0027t happen that the\nfinished copy races with primary_pe-\u003eref_count decrementation).\n\nIf someone is writing only to the snapshot, __origin_write isn\u0027t invoked at all\nand the race can\u0027t happen.\n\nThe race happens when someone writes to the snapshot --- this creates\npending_exception with primary_pe \u003d\u003d NULL and starts copying. Then, someone\nwrites to the same chunk in the snapshot, and __origin_write races with\ntermination of already submitted request in pending_complete (that calls\nput_pending_exception).\n\nThis race may be reason for bugs:\n  http://bugzilla.kernel.org/show_bug.cgi?id\u003d11636\n  https://bugzilla.redhat.com/show_bug.cgi?id\u003d465825\n\nThe patch fixes the code to make sure that:\n1. If atomic_dec_and_test(\u0026primary_pe-\u003eref_count) returns false, the process\nmust no longer dereference primary_pe (because someone else may free it under\nus).\n2. If atomic_dec_and_test(\u0026primary_pe-\u003eref_count) returns true, the process\nis responsible for freeing primary_pe.\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\nCc: stable@kernel.org\n"
    },
    {
      "commit": "92e868122edf08b9fc06b112e7e0c80ab94c1f93",
      "tree": "9cd2e5e2f15adcaf1b8d3f8f55d5a676ad40bfd6",
      "parents": [
        "a8d41b59f3f5a7ac19452ef442a7fc1b5fa17366"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Mon Jul 21 12:00:35 2008 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Mon Jul 21 12:00:35 2008 +0100"
      },
      "message": "dm snapshot: use per device mempools\n\nChange snapshot per-module mempool to per-device mempool.\n\nPer-module mempools could cause a deadlock if multiple\nsnapshot devices are stacked above each other.\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "a8d41b59f3f5a7ac19452ef442a7fc1b5fa17366",
      "tree": "f9435bed2d582e4cd3e91e4d6fb18a18f62aa019",
      "parents": [
        "cd45daffd1f7b53aac0835b23e97f814ec3f10dc"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Mon Jul 21 12:00:34 2008 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Mon Jul 21 12:00:34 2008 +0100"
      },
      "message": "dm snapshot: fix race during exception creation\n\nFix a race condition that returns incorrect data when a write causes an\nexception to be allocated whilst a read is still in flight.\n\nThe race condition happens as follows:\n* A read to non-reallocated sector in the snapshot is submitted so that the\n  read is routed to the original device.\n* A write to the original device is submitted. The write causes an exception\n  that reallocates the block.  The write proceeds.\n* The original read is dequeued and reads the wrong data.\n\nThis race can be triggered with CFQ scheduler and one thread writing and\nmultiple threads reading simultaneously.\n\n(This patch relies upon the earlier dm-kcopyd-per-device.patch to avoid a\ndeadlock.)\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "cd45daffd1f7b53aac0835b23e97f814ec3f10dc",
      "tree": "17d35682a8a97f3a73f513531f08ba7e0c8cd718",
      "parents": [
        "def052d21c4e77975bb75cf212f018ec913f8e2f"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Mon Jul 21 12:00:32 2008 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Mon Jul 21 12:00:32 2008 +0100"
      },
      "message": "dm snapshot: track snapshot reads\n\nWhenever a snapshot read gets mapped through to the origin, track it in\na per-snapshot hash table indexed by chunk number, using memory allocated\nfrom a new per-snapshot mempool.\n\nWe need to track these reads to avoid race conditions which will be fixed\nby patches that follow.\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "a765e20eeb423d0fa6a02ffab51141e53bbd93cb",
      "tree": "fc7279fa73a21518373e1ba2efad27dab89a2214",
      "parents": [
        "2d1e580afe23287871529ce54429e249809525a1"
      ],
      "author": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Apr 24 22:02:01 2008 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Fri Apr 25 13:26:55 2008 +0100"
      },
      "message": "dm: move include files\n\nPublish the dm-io, dm-log and dm-kcopyd headers in include/linux.\n\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "eb69aca5d3370b81450d68edeebc2bb9a3eb9689",
      "tree": "ddb4c6d52e963b0898a892aaaee3228680e36449",
      "parents": [
        "22a1ceb1e6a7fbce95a1531ff10bb4fb036d4a37"
      ],
      "author": {
        "name": "Heinz Mauelshagen",
        "email": "hjm@redhat.com",
        "time": "Thu Apr 24 21:43:19 2008 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Fri Apr 25 13:26:44 2008 +0100"
      },
      "message": "dm kcopyd: clean interface\n\nClean up the kcopyd interface to prepare for publishing it in include/linux.\n\nSigned-off-by: Heinz Mauelshagen \u003chjm@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "22a1ceb1e6a7fbce95a1531ff10bb4fb036d4a37",
      "tree": "5b6ebebc747a0027626684a153b418a26119d074",
      "parents": [
        "e01fd7eeb00f8078103f4ed3e8ef64474c11f300"
      ],
      "author": {
        "name": "Heinz Mauelshagen",
        "email": "hjm@redhat.com",
        "time": "Thu Apr 24 21:43:17 2008 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Fri Apr 25 13:26:43 2008 +0100"
      },
      "message": "dm io: clean interface\n\nClean up the dm-io interface to prepare for publishing it in include/linux.\n\nSigned-off-by: Heinz Mauelshagen \u003chjm@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "72727bad544b4ce0a3f7853bfd7ae939f398007d",
      "tree": "97961bf4031c9fa1739f545e6030e8ab6cbf0ecc",
      "parents": [
        "769aef30f0f505c44bbe9fcd2c911a052a386139"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Thu Apr 24 21:43:11 2008 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Fri Apr 25 13:26:40 2008 +0100"
      },
      "message": "dm snapshot: store pointer to target instance\n\nSave pointer to dm_target in dm_snapshot structure.\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "8ee2767a5903fde549fd3597690f64c8d951051a",
      "tree": "d419a324e1da7323113e8b6e0063ba94ab70fa70",
      "parents": [
        "924362629bf5645aee5f49f8a0d0d5b193e65997"
      ],
      "author": {
        "name": "Milan Broz",
        "email": "mbroz@redhat.com",
        "time": "Thu Apr 24 21:42:36 2008 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Fri Apr 25 13:26:35 2008 +0100"
      },
      "message": "dm snapshot: reduce default memory allocation\n\nLimit the amount of memory allocated per snapshot on systems\nwith a large page size.  (The larger default chunk size on\nthese systems compensates for the smaller number of pages reserved.)\n\nSigned-off-by: Milan Broz \u003cmbroz@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "4cdc1d1fa5c5ac14dc21be19832f02fd0b83867e",
      "tree": "a8c93c90dd088b18b9307bb50413478dbc48f5b5",
      "parents": [
        "d250dad64a154a9f95ec3574e2ffc97d9f61a19c"
      ],
      "author": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Fri Mar 28 14:16:10 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Mar 28 14:45:23 2008 -0700"
      },
      "message": "dm io: write error bits form long not int\n\nwrite_err is an unsigned long used with set_bit() so should not be passed\naround as unsigned int.\n\nhttp://bugzilla.kernel.org/show_bug.cgi?id\u003d10271\n\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\nCc: Heiko Carstens \u003cheiko.carstens@de.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "d74f81f8adc504a23be3babf347b9f69e9389924",
      "tree": "4a687e400479ad330bb36ded54012cd8b8b84ecf",
      "parents": [
        "4f7f5c675fd6bacaae3c67be44de872dcff0e3b7"
      ],
      "author": {
        "name": "Milan Broz",
        "email": "mbroz@redhat.com",
        "time": "Fri Feb 08 02:11:27 2008 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Fri Feb 08 02:11:27 2008 +0000"
      },
      "message": "dm snapshot: combine consecutive exceptions in memory\n\nProvided sector_t is 64 bits, reduce the in-memory footprint of the\nsnapshot exception table by the simple method of using unused bits of\nthe chunk number to combine consecutive entries.\n\nSigned-off-by: Milan Broz \u003cmbroz@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "8defd83084c3ce46d314c038f7c0f0ed7156d6f8",
      "tree": "c21d30f80f0d991e731ba9a2c1263c5dbe498e6e",
      "parents": [
        "82d601dc076deb5f348cc3a70f57248bc976ae0c"
      ],
      "author": {
        "name": "Robert P. J. Day",
        "email": "rpjday@crashcourse.ca",
        "time": "Fri Feb 08 02:10:06 2008 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Fri Feb 08 02:10:06 2008 +0000"
      },
      "message": "dm snapshot: use rounddown_pow_of_two\n\nSince the source file already includes the log2.h header file, it\nseems pointless to re-invent the necessary routine.\n\nSigned-off-by: Robert P. J. Day \u003crpjday@crashcourse.ca\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "6f3c3f0afa50782dc1742c968646c491657d255a",
      "tree": "cb1f69504094cec60564be51c405bba5eb66c322",
      "parents": [
        "ae9da83f6d800fe1f3b23bfbc8f7222ad1c5bb74"
      ],
      "author": {
        "name": "vignesh babu",
        "email": "vignesh.babu@wipro.com",
        "time": "Fri Oct 19 22:38:44 2007 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Sat Oct 20 02:01:06 2007 +0100"
      },
      "message": "dm: use is_power_of_2\n\nReplacing n \u0026 (n - 1) for power of 2 check by is_power_of_2(n)\n\nSigned-off-by: vignesh babu \u003cvignesh.babu@wipro.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.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": "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": "0764147b111b8ca886e4f2e9c9e019106b09b657",
      "tree": "815c9d80c961d54c79692ebe4751318c9052ad45",
      "parents": [
        "fcac03abd325e4f7a4cc8fe05fea2793b1c8eb75"
      ],
      "author": {
        "name": "Milan Broz",
        "email": "mbroz@redhat.com",
        "time": "Thu Jul 12 17:28:13 2007 +0100"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Thu Jul 12 15:01:08 2007 -0700"
      },
      "message": "dm snapshot: permit invalid activation\n\nAllow invalid snapshots to be activated instead of failing.\n\nThis allows userspace to reinstate any given snapshot state - for\nexample after an unscheduled reboot - and clean up the invalid snapshot\nat its leisure.\n\nCc: stable@kernel.org\nSigned-off-by: Milan Broz \u003cmbroz@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "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": "c642f9e03b3ca04fc806ba5d8d34cc821382e525",
      "tree": "6161b0bbdae62c648b411c2ef01e8b539540d2cd",
      "parents": [
        "88b20a1a71d98d6e0b8373fa68fb784340b3ee51"
      ],
      "author": {
        "name": "Adrian Bunk",
        "email": "bunk@stusta.de",
        "time": "Fri Dec 08 02:41:13 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.osdl.org",
        "time": "Fri Dec 08 08:29:09 2006 -0800"
      },
      "message": "[PATCH] make drivers/md/dm-snap.c:ksnapd static\n\nSigned-off-by: Adrian Bunk \u003cbunk@stusta.de\u003e\nAcked-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "31c93a0c29bf96efd806ccf4ee81cacf04f255de",
      "tree": "dad0b4ce13c5efb82a5bff72fbd1a41b08042c99",
      "parents": [
        "45e157206c732613d1c07e8ceeb1a3e497fb2abf"
      ],
      "author": {
        "name": "Milan Broz",
        "email": "mbroz@redhat.com",
        "time": "Fri Dec 08 02:41:11 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.osdl.org",
        "time": "Fri Dec 08 08:29:09 2006 -0800"
      },
      "message": "[PATCH] dm: snapshot: abstract memory release\n\nMove the code that releases memory used by a snapshot into a separate function.\n\nSigned-off-by: Milan Broz \u003cmbroz@redhat.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": "d2a7ad29a810441e9dacbaddcc2f0c6045390008",
      "tree": "36bea90fa2f286f525a3b4f05adf40ec4d28221c",
      "parents": [
        "45cbcd798354251b99694086af9d57c99e89bb43"
      ],
      "author": {
        "name": "Kiyoshi Ueda",
        "email": "k-ueda@ct.jp.nec.com",
        "time": "Fri Dec 08 02:41:06 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 symbolic return codes\n\nUpdate existing targets to use the new symbols for return values from target\nmap and end_io functions.\n\nThere is no effect on behaviour.\n\nTest results:\nDone build test without errors.\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": "e18b890bb0881bbab6f4f1a6cd20d9c60d66b003",
      "tree": "4828be07e1c24781c264b42c5a75bcd968223c3f",
      "parents": [
        "441e143e95f5aa1e04026cb0aa71c801ba53982f"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "clameter@sgi.com",
        "time": "Wed Dec 06 20:33:20 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.osdl.org",
        "time": "Thu Dec 07 08:39:25 2006 -0800"
      },
      "message": "[PATCH] slab: remove kmem_cache_t\n\nReplace all uses of kmem_cache_t with struct kmem_cache.\n\nThe patch was generated using the following script:\n\n\t#!/bin/sh\n\t#\n\t# Replace one string by another in all the kernel sources.\n\t#\n\n\tset -e\n\n\tfor file in `find * -name \"*.c\" -o -name \"*.h\"|xargs grep -l $1`; do\n\t\tquilt add $file\n\t\tsed -e \"1,\\$s/$1/$2/g\" $file \u003e/tmp/$$\n\t\tmv /tmp/$$ $file\n\t\tquilt refresh\n\tdone\n\nThe script was run like this\n\n\tsh replace kmem_cache_t \"struct kmem_cache\"\n\nSigned-off-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "c4028958b6ecad064b1a6303a6a5906d4fe48d73",
      "tree": "1c4c89652c62a75da09f9b9442012007e4ac6250",
      "parents": [
        "65f27f38446e1976cc98fd3004b110fedcddd189"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Wed Nov 22 14:57:56 2006 +0000"
      },
      "committer": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Wed Nov 22 14:57:56 2006 +0000"
      },
      "message": "WorkStruct: make allyesconfig\n\nFix up for make allyesconfig.\n\nSigned-Off-By: David Howells \u003cdhowells@redhat.com\u003e\n"
    },
    {
      "commit": "695368ac3302174531429a90d55c3f7f9b83906e",
      "tree": "515457b78ec2bf95dab7f5b614284ccecda8afbd",
      "parents": [
        "4b832e8de22726206eb886f6dbff47a0f3fe5168"
      ],
      "author": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Oct 03 01:15:31 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Tue Oct 03 08:04:15 2006 -0700"
      },
      "message": "[PATCH] dm snapshot: fix freeing pending exception\n\nIf a snapshot became invalid while there are outstanding pending_exceptions,\nwhen pending_complete() processes each one it forgets to remove the\ncorresponding exception from its exception table before freeing it.\n\nFix this by moving the \u0027out:\u0027 label up one statement so that\nremove_exception() is always called.  Then __invalidate_exception() no longer\nneeds to call it and its \u0027pe\u0027 argument become superfluous.\n\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "4b832e8de22726206eb886f6dbff47a0f3fe5168",
      "tree": "279cf60137cc08f4f4ae17f04940d69d68262b10",
      "parents": [
        "ca3a931fd33b841cbcc5932f8eac7c43e0909242"
      ],
      "author": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Oct 03 01:15:30 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Tue Oct 03 08:04:14 2006 -0700"
      },
      "message": "[PATCH] dm snapshot: tidy pe ref counting\n\nRename sibling_count to ref_count and introduce get and put functions.\n\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "ca3a931fd33b841cbcc5932f8eac7c43e0909242",
      "tree": "bc8aa7ace1a5e528cbfabc01b17a2016c55bc448",
      "parents": [
        "9d493fa8c943ed4ec6e42b7ebfd8f0b7657d54f8"
      ],
      "author": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Oct 03 01:15:30 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Tue Oct 03 08:04:14 2006 -0700"
      },
      "message": "[PATCH] dm snapshot: add workqueue\n\nAdd a workqueue so that I/O can be queued up to be flushed from a separate\nthread (e.g.  if local interrupts are disabled).\n\nA new per-snapshot spinlock pe_lock is introduced to protect queued_bios.\n\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\nSigned-off-by: Mark McLoughlin \u003cmarkmc@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "9d493fa8c943ed4ec6e42b7ebfd8f0b7657d54f8",
      "tree": "8d7cac80b09a73058fd491563737a77db47df7de",
      "parents": [
        "ba40a2aa6e6f3d084cf35c8b872fc9f18f91231f"
      ],
      "author": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Oct 03 01:15:29 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Tue Oct 03 08:04:14 2006 -0700"
      },
      "message": "[PATCH] dm snapshot: tidy pending_complete\n\nThis patch rearranges the pending_complete() code so that the functional\nchanges in subsequent patches are clearer.\n\nBy consolidating the error and the non-error paths, we can move\nerror_snapshot_bios() and __flush_bios() in line.\n\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\nSigned-off-by: Mark McLoughlin \u003cmarkmc@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "ba40a2aa6e6f3d084cf35c8b872fc9f18f91231f",
      "tree": "d32ec4949a0a9721e8955e7f0e98130019d95849",
      "parents": [
        "927ffe7c9a156e259aae31c07dd76072c459ec57"
      ],
      "author": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Oct 03 01:15:28 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Tue Oct 03 08:04:14 2006 -0700"
      },
      "message": "[PATCH] dm snapshot: tidy snapshot_map\n\nThis patch rearranges the snapshot_map code so that the functional changes in\nsubsequent patches are clearer.\n\nThe only functional change is to replace the existing read lock with a write\nlock which the next patch needs.\n\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "f9cea4f70734f743e0beb55552a9794fa5032645",
      "tree": "7227221bc8913aedfa0f222c365137f549125efc",
      "parents": [
        "4c7e3bf44d0ae227ea1ee87c2197212e65d043d7"
      ],
      "author": {
        "name": "Mark McLoughlin",
        "email": "markmc@redhat.com",
        "time": "Tue Oct 03 01:15:25 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Tue Oct 03 08:04:14 2006 -0700"
      },
      "message": "[PATCH] dm snapshot: fix metadata error handling\n\nFix the error handling when store.read_metadata is called: the error should be\nreturned immediately.\n\nSigned-off-by: Mark McLoughlin \u003cmarkmc@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "4c7e3bf44d0ae227ea1ee87c2197212e65d043d7",
      "tree": "658140b966d78f4709de10cd03e0bfdade6bc13e",
      "parents": [
        "92c060a692a0c3482cdfcaf346cb2f7572368895"
      ],
      "author": {
        "name": "Mark McLoughlin",
        "email": "markmc@redhat.com",
        "time": "Tue Oct 03 01:15:25 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Tue Oct 03 08:04:14 2006 -0700"
      },
      "message": "[PATCH] dm snapshot: allow zero chunk_size\n\nThe chunk size of snapshots cannot be changed so it is redundant to require it\nas a parameter when activating an existing snapshot.  Allow a value of zero in\nthis case and ignore it.  For a new snapshot, use a default value if zero is\nspecified.\n\nSigned-off-by: Mark McLoughlin \u003cmarkmc@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "92c060a692a0c3482cdfcaf346cb2f7572368895",
      "tree": "7d0c16f4fffff713fbf0fdd5612f1961556f8ac0",
      "parents": [
        "e3f6ac6123be6f4ba14d71af0da0e8d3d39c33ed"
      ],
      "author": {
        "name": "Milan Broz",
        "email": "mbroz@redhat.com",
        "time": "Tue Oct 03 01:15:24 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Tue Oct 03 08:04:14 2006 -0700"
      },
      "message": "[PATCH] dm snapshot: fix invalidation ENOMEM\n\nFix ENOMEM error sign.\n\nSigned-off-by: Milan Broz \u003cmbroz@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "6ab3d5624e172c553004ecc862bfeac16d9d68b7",
      "tree": "6d98881fe91fd9583c109208d5c27131b93fa248",
      "parents": [
        "e02169b682bc448ccdc819dc8639ed34a23cedd8"
      ],
      "author": {
        "name": "Jörn Engel",
        "email": "joern@wohnheim.fh-wedel.de",
        "time": "Fri Jun 30 19:25:36 2006 +0200"
      },
      "committer": {
        "name": "Adrian Bunk",
        "email": "bunk@stusta.de",
        "time": "Fri Jun 30 19:25:36 2006 +0200"
      },
      "message": "Remove obsolete #include \u003clinux/config.h\u003e\n\nSigned-off-by: Jörn Engel \u003cjoern@wohnheim.fh-wedel.de\u003e\nSigned-off-by: Adrian Bunk \u003cbunk@stusta.de\u003e\n"
    },
    {
      "commit": "72d9486169a2a8353e022813185ba2f32d7dde69",
      "tree": "2fe6c382feb3f21d829abf543c54be486007557c",
      "parents": [
        "5c6bd75d06db512515a3781aa97e42df2faf0815"
      ],
      "author": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Mon Jun 26 00:27:35 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Mon Jun 26 09:58:36 2006 -0700"
      },
      "message": "[PATCH] dm: improve error message consistency\n\nTidy device-mapper error messages to include context information\nautomatically.\n\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "c51c2752491e5e771de6c8861a85ba46752d7888",
      "tree": "9371dab2a38e1a17bf91d9bc143b47b1c58c5fb7",
      "parents": [
        "b877a96409a3a99f2ce27b3c6473c9b28298ac7c"
      ],
      "author": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Mon Jun 26 00:27:18 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Mon Jun 26 09:58:34 2006 -0700"
      },
      "message": "[PATCH] dm snapshot: unify chunk_size\n\nPersistent snapshots currently store a private copy of the chunk size.\nUserspace also supplies the chunk size when loading a snapshot.  Ensure\nconsistency by only storing the chunk_size in one place instead of two.\n\nCurrently the two sizes will differ if the chunk size supplied by userspace\ndoes not match the chunk size an existing snapshot actually uses.  Amongst\nother problems, this causes an incorrect \u0027percentage full\u0027 to be reported.\n\nThe patch ensures consistency by only storing the chunk_size in one place,\nremoving it from struct pstore.  Some initialisation is delayed until the\ncorrect chunk_size is known.  If read_header() discovers that the wrong chunk\nsize was supplied, the \u0027area\u0027 buffer (which the header already got read into)\nis reinitialised to the correct size.\n\n[akpm: too late for 2.6.17 - suitable for 2.6.17.x after it has settled]\n\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\nCc: \u003cstable@kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "138728dc96529f20dfe970c470e51885a60e329f",
      "tree": "a0369a9de402cd8b9a123129c5e8ba7c69ba1a95",
      "parents": [
        "969429b504ae866d3f8b1cafd68a2c099e305093"
      ],
      "author": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Mon Mar 27 01:17:50 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Mon Mar 27 08:44:59 2006 -0800"
      },
      "message": "[PATCH] dm snapshot: fix kcopyd destructor\n\nBefore removing a snapshot, wait for the completion of any kcopyd jobs using\nit.\n\nDo this by maintaining a count (nr_jobs) of how many outstanding jobs each\nkcopyd_client has.\n\nThe snapshot destructor first unregisters the snapshot so that no new kcopyd\njobs (created by writes to the origin) will reference that particular\nsnapshot.  kcopyd_client_destroy() is now run next to wait for the completion\nof any outstanding jobs before the snapshot exception structures (that those\njobs reference) are freed.\n\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "4ee218cd67b385759993a6c840ea45f0ee0a8b30",
      "tree": "788d33b31e9d008eeb2de2a7f874e45b09695719",
      "parents": [
        "930d332a23682202c07df0276dd665a57755b37d"
      ],
      "author": {
        "name": "Andrew Morton",
        "email": "akpm@osdl.org",
        "time": "Mon Mar 27 01:17:48 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Mon Mar 27 08:44:58 2006 -0800"
      },
      "message": "[PATCH] dm: remove SECTOR_FORMAT\n\nWe don\u0027t know what type sector_t has.  Sometimes it\u0027s unsigned long, sometimes\nit\u0027s unsigned long long.  For example on ppc64 it\u0027s unsigned long with\nCONFIG_LBD\u003dn and on x86_64 it\u0027s unsigned long long with CONFIG_LBD\u003dn.\n\nThe way to handle all of this is to always use unsigned long long and to\nalways typecast the sector_t when printing it.\n\nAcked-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "76df1c651b66bdf07d60b3d60789feb5f58d73e3",
      "tree": "5458257a6a089396ac6ed5883a916af542ca8477",
      "parents": [
        "b4b610f684d13bf8691feeae5d4d7a8bd1f1033e"
      ],
      "author": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Mon Mar 27 01:17:45 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Mon Mar 27 08:44:58 2006 -0800"
      },
      "message": "[PATCH] device-mapper snapshot: fix invalidation\n\nWhen a snapshot becomes invalid, s-\u003evalid is set to 0.  In this state, a\nsnapshot can no longer be accessed.\n\nWhen s-\u003elock is acquired, before doing anything else, s-\u003evalid must be checked\nto ensure the snapshot remains valid.\n\nThis patch eliminates some races (that may cause panics) by adding some\nmissing checks.  At the same time, some unnecessary levels of indentation are\nremoved and snapshot invalidation is moved into a single function that always\ngenerates a device-mapper event.\n\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "b4b610f684d13bf8691feeae5d4d7a8bd1f1033e",
      "tree": "3226c70f318f494d3c6a6707879ba82ebec900b9",
      "parents": [
        "eccf081799be8d83852f183838bf26e1ca099db4"
      ],
      "author": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Mon Mar 27 01:17:44 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Mon Mar 27 08:44:58 2006 -0800"
      },
      "message": "[PATCH] device-mapper snapshot: replace sibling list\n\nThe siblings \"list\" is used unsafely at the moment.\n\nFirstly, only the element on the list being changed gets locked (via the\nsnapshot lock), not the next and previous elements which have pointers that\nare also being changed.\n\nSecondly, if you have two or more snapshots and write to the same chunk a\nsecond time before every snapshot has finished making its private copy of the\ndata, if you\u0027re unlucky, _origin_write() could attempt its list_merge() and\ndereference a \u0027last\u0027 pointer to a pending_exception structure that has just\nbeen freed.\n\nAnalysis reveals that the list is actually only there for reference counting.\nIf 5 pending_exceptions are needed in origin_write, then the 5 are joined\ntogether into a 5-element list - without a separate list head because there\u0027s\nnowhere suitable to store it.  As the pending_exceptions complete, they are\nremoved from the list one-by-one and any contents of origin_bios get moved\nacross to one of the remaining pending_exceptions on the list.  Whichever one\nis last is detected because list_empty() is then true and the origin_bios get\nsubmitted.\n\nThe fix proposed here uses an alternative reference counting mechanism by\nchoosing one of the pending_exceptions as primary and maintaining an atomic\ncounter there.\n\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "eccf081799be8d83852f183838bf26e1ca099db4",
      "tree": "ff6e2fa87a149f1122e5f0f854bf1707e962f3b8",
      "parents": [
        "e4ccde33de202fae1b1e2a940604ee9e295450d9"
      ],
      "author": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Mon Mar 27 01:17:42 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Mon Mar 27 08:44:58 2006 -0800"
      },
      "message": "[PATCH] device-mapper snapshot: fix origin_write pending_exception submission\n\nSay you have several snapshots of the same origin and then you issue a write\nto some place in the origin for the first time.\n\nBefore the device-mapper snapshot target lets the write go through to the\nunderlying device, it needs to make a copy of the data that is about to be\noverwritten.  Each snapshot is independent, so it makes one copy for each\nsnapshot.\n\n__origin_write() loops through each snapshot and checks to see whether a copy\nis needed for that snapshot.  (A copy is only needed the first time that data\nchanges.)\n\nIf a copy is needed, the code allocates a \u0027pending_exception\u0027 structure\nholding the details.  It links these together for all the snapshots, then\nworks its way through this list and submits the copying requests to the kcopyd\nthread by calling start_copy().  When each request is completed, the original\npending_exception structure gets freed in pending_complete().\n\nIf you\u0027re very unlucky, this structure can get freed *before* the submission\nprocess has finished walking the list.\n\nThis patch:\n\n  1) Creates a new temporary list pe_queue to hold the pending exception\n     structures;\n\n  2) Does all the bookkeeping up-front, then walks through the new list\n     safely and calls start_copy() for each pending_exception that needed it;\n\n  3) Avoids attempting to add pe-\u003esiblings to the list if it\u0027s already\n     connected.\n\n[NB This does not fix all the races in this code.  More patches will follow.]\n\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "93d2341c750cda0df48a6cc67b35fe25f1ec47df",
      "tree": "f098a3bbfae65ce967591ee94d605c6e6bea21c6",
      "parents": [
        "fec433aaaae32a02329ad7d71b0f3c91b7525077"
      ],
      "author": {
        "name": "Matthew Dobson",
        "email": "colpatch@us.ibm.com",
        "time": "Sun Mar 26 01:37:50 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sun Mar 26 08:57:00 2006 -0800"
      },
      "message": "[PATCH] mempool: use mempool_create_slab_pool()\n\nModify well over a dozen mempool users to call mempool_create_slab_pool()\nrather than calling mempool_create() with extra arguments, saving about 30\nlines of code and increasing readability.\n\nSigned-off-by: Matthew Dobson \u003ccolpatch@us.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "4aac0a63fe8d418a2b74e43708f59380ba379a3b",
      "tree": "b71c432edf274776443a27d5dfdbd7800d014e08",
      "parents": [
        "3eaf840e0b0046f56602c524c7ba58a82f5526c5"
      ],
      "author": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Wed Feb 01 03:04:55 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Wed Feb 01 08:53:11 2006 -0800"
      },
      "message": "[PATCH] device-mapper snapshot: barriers not supported\n\nThe snapshot and origin targets are incapable of handling barriers and need to\nindicate this.\n\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    }
  ],
  "next": "aa14edeb994f8f7e223d02ad14780bf2fa719f6d"
}
