)]}'
{
  "log": [
    {
      "commit": "7f8635cc9e66a26d7280ba680b044fa2f65104af",
      "tree": "0d8506e86d07e15c473aca1a09af7ad6ff7d8b49",
      "parents": [
        "3cb50ddf97a0a1ca4c68bc12fa1e727a6b45fbf2",
        "0fc13c8995cd96f4123de400c71c223d80400ed9"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Dec 20 09:19:46 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Dec 20 09:19:46 2010 -0800"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.dk/linux-2.6-block\n\n* \u0027for-linus\u0027 of git://git.kernel.dk/linux-2.6-block:\n  cciss: fix cciss_revalidate panic\n  block: max hardware sectors limit wrapper\n  block: Deprecate QUEUE_FLAG_CLUSTER and use queue_limits instead\n  blk-throttle: Correct the placement of smp_rmb()\n  blk-throttle: Trim/adjust slice_end once a bio has been dispatched\n  block: check for proper length of iov entries earlier in blk_rq_map_user_iov()\n  drbd: fix for spin_lock_irqsave in endio callback\n  drbd: don\u0027t recvmsg with zero length\n"
    },
    {
      "commit": "72d4cd9f38b5ed96b75df4c622be25e1c2648dd3",
      "tree": "a229645cbbc63aad3fa5b57ea9f092e618588890",
      "parents": [
        "e692cb668fdd5a712c6ed2a2d6f2a36ee83997b4"
      ],
      "author": {
        "name": "Mike Snitzer",
        "email": "snitzer@redhat.com",
        "time": "Fri Dec 17 08:34:20 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Dec 17 08:36:01 2010 +0100"
      },
      "message": "block: max hardware sectors limit wrapper\n\nImplement blk_limits_max_hw_sectors() and make\nblk_queue_max_hw_sectors() a wrapper around it.\n\nDM needs this to avoid setting queue_limits\u0027 max_hw_sectors and\nmax_sectors directly.  dm_set_device_limits() now leverages\nblk_limits_max_hw_sectors() logic to establish the appropriate\nmax_hw_sectors minimum (PAGE_SIZE).  Fixes issue where DM was\nincorrectly setting max_sectors rather than max_hw_sectors (which\ncaused dm_merge_bvec()\u0027s max_hw_sectors check to be ineffective).\n\nSigned-off-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nCc: stable@kernel.org\nAcked-by: Martin K. Petersen \u003cmartin.petersen@oracle.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "e692cb668fdd5a712c6ed2a2d6f2a36ee83997b4",
      "tree": "accf682fe5e1388f305b5fc364a931dfda5f3fb9",
      "parents": [
        "04a6b516cdc6efc2500b52a540cf65be8c5aaf9e"
      ],
      "author": {
        "name": "Martin K. Petersen",
        "email": "martin.petersen@oracle.com",
        "time": "Wed Dec 01 19:41:49 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Dec 17 08:35:53 2010 +0100"
      },
      "message": "block: Deprecate QUEUE_FLAG_CLUSTER and use queue_limits instead\n\nWhen stacking devices, a request_queue is not always available. This\nforced us to have a no_cluster flag in the queue_limits that could be\nused as a carrier until the request_queue had been set up for a\nmetadevice.\n\nThere were several problems with that approach. First of all it was up\nto the stacking device to remember to set queue flag after stacking had\ncompleted. Also, the queue flag and the queue limits had to be kept in\nsync at all times. We got that wrong, which could lead to us issuing\ncommands that went beyond the max scatterlist limit set by the driver.\n\nThe proper fix is to avoid having two flags for tracking the same thing.\nWe deprecate QUEUE_FLAG_CLUSTER and use the queue limit directly in the\nblock layer merging functions. The queue_limit \u0027no_cluster\u0027 is turned\ninto \u0027cluster\u0027 to avoid double negatives and to ease stacking.\nClustering defaults to being enabled as before. The queue flag logic is\nremoved from the stacking function, and explicitly setting the cluster\nflag is no longer necessary in DM and MD.\n\nReported-by: Ed Lin \u003ced.lin@promise.com\u003e\nSigned-off-by: Martin K. Petersen \u003cmartin.petersen@oracle.com\u003e\nAcked-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nCc: stable@kernel.org\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "589a594be1fb8815b3f18e517be696c48664f728",
      "tree": "9de6f6b4f9244802ccf77312f7fba8612dd13a75",
      "parents": [
        "1a855a0606653d2d82506281e2c686bacb4b2f45"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Dec 09 17:02:14 2010 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Dec 09 17:02:14 2010 +1100"
      },
      "message": "md: protect against NULL reference when waiting to start a raid10.\n\nWhen we fail to start a raid10 for some reason, we call\nmd_unregister_thread to kill the thread that was created.\n\nUnfortunately md_thread() will then make one call into the handler\n(raid10d) even though md_wakeup_thread has not been called.  This is\nnot safe and as md_unregister_thread is called after mddev-\u003eprivate\nhas been set to NULL, it will definitely cause a NULL dereference.\n\nSo fix this at both ends:\n - md_thread should only call the handler if THREAD_WAKEUP has been\n   set.\n - raid10 should call md_unregister_thread before setting things\n   to NULL just like all the other raid modules do.\n\nThis is applicable to 2.6.35 and later.\n\nCc: stable@kernel.org\nReported-by: \"Citizen\" \u003ccitizen_lee@thecus.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "1a855a0606653d2d82506281e2c686bacb4b2f45",
      "tree": "7eeca410e738491318c0d80bd0a0940c392e513f",
      "parents": [
        "a035fc3e2531703b539f23bec4ca7943cfc69349"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Dec 09 16:36:28 2010 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Dec 09 16:36:28 2010 +1100"
      },
      "message": "md: fix bug with re-adding of partially recovered device.\n\nWith v0.90 metadata, a hot-spare does not become a full member of the\narray until recovery is complete.  So if we re-add such a device to\nthe array, we know that all of it is as up-to-date as the event count\nwould suggest, and so it a bitmap-based recovery is possible.\n\nHowever with v1.x metadata, the hot-spare immediately becomes a full\nmember of the array, but it record how much of the device has been\nrecovered.  If the array is stopped and re-assembled recovery starts\nfrom this point.\n\nWhen such a device is hot-added to an array we currently lose the \u0027how\nmuch is recovered\u0027 information and incorrectly included it as a full\nin-sync member (after bitmap-based fixup).\nThis is wrong and unsafe and could corrupt data.\n\nSo be more careful about setting saved_raid_disk - which is what\nguides the re-adding of devices back into an array.\nThe new code matches the code in slot_store which does a similar\nthing, which is encouraging.\n\nThis is suitable for any -stable kernel.\n\nReported-by: \"Dailey, Nate\" \u003cNate.Dailey@stratus.com\u003e\nCc: stable@kernel.org\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "a035fc3e2531703b539f23bec4ca7943cfc69349",
      "tree": "f10e160ce65745fd7ac56838c491a45ae180cb1e",
      "parents": [
        "a7a07e69653acf8540daa1da053cd84bf86e8e66"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Dec 09 16:17:51 2010 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Dec 09 16:17:51 2010 +1100"
      },
      "message": "md: fix possible deadlock in handling flush requests.\n\nAs recorded in\n    https://bugzilla.kernel.org/show_bug.cgi?id\u003d24012\n\nit is possible for a flush request through md to hang.  This is due to\nan interaction between the recursion avoidance in\ngeneric_make_request, the insistence in md of only having one flush\nactive at a time, and the possibility of dm (or md) submitting two\nflush requests to a device from the one generic_make_request.\n\nIf a generic_make_request call into dm causes two flush requests to be\nqueued (as happens if the dm table has two targets - they get one\neach), these two will be queued inside generic_make_request.\n\nAssume they are for the same md device.\nThe first is processed and causes 1 or more flush requests to be sent\nto lower devices.  These get queued within generic_make_request too.\nThen the second flush to the md device gets handled and it blocks\nwaiting for the first flush to complete.  But it won\u0027t complete until\nthe two lower-device requests complete, and they haven\u0027t even been\nsubmitted yet as they are on the generic_make_request queue.\n\nThe deadlock can be broken by using a separate thread to submit the\nrequests to lower devices.  md has such a thread readily available:\nmd_wq.\n\nSo use it to submit these requests.\n\nReported-by: Giacomo Catenazzi \u003ccate@cateee.net\u003e\nTested-by: Giacomo Catenazzi \u003ccate@cateee.net\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "a7a07e69653acf8540daa1da053cd84bf86e8e66",
      "tree": "edeb5ec7fc686c8699193338d3c3964aeb6279a8",
      "parents": [
        "2b74e12e567feb4163e32815bce0be57489e73b9"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Dec 09 16:04:25 2010 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Dec 09 16:04:25 2010 +1100"
      },
      "message": "md: move code in to submit_flushes.\n\nsubmit_flushes is called from exactly one place.\nMove the code that is before and after that call into\nsubmit_flushes.\n\nThis has not functional change, but will make the next patch\nsmaller and easier to follow.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "2b74e12e567feb4163e32815bce0be57489e73b9",
      "tree": "2eef8f977209a7e5ff88b4366bd72ccf59c8a987",
      "parents": [
        "be20e6c67b6c6024c19094d3447f144d118733b0"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Dec 09 15:59:01 2010 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Dec 09 15:59:01 2010 +1100"
      },
      "message": "md: remove handling of flush_pending in md_submit_flush_data\n\nNone of the functions called between setting flush_pending to 1, and\natomic_dec_and_test can change flush_pending, or will anything\nrunning in any other thread (as -\u003eflush_bio is not NULL).  So the\natomic_dec_and_test will always succeed.\nSo remove the atomic_sec and the atomic_dec_and_test.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "be20e6c67b6c6024c19094d3447f144d118733b0",
      "tree": "170f7a810d5947cdba7edc965676ad7d5ea8948c",
      "parents": [
        "8f9e0ee38f75d4740daa9e42c8af628d33d19a02"
      ],
      "author": {
        "name": "Darrick J. Wong",
        "email": "djwong@us.ibm.com",
        "time": "Wed Nov 24 16:40:33 2010 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Nov 24 16:40:33 2010 +1100"
      },
      "message": "md: Call blk_queue_flush() to establish flush/fua support\n\nBefore 2.6.37, the md layer had a mechanism for catching I/Os with the\nbarrier flag set, and translating the barrier into barriers for all\nthe underlying devices.  With 2.6.37, I/O barriers have become plain\nold flushes, and the md code was updated to reflect this.  However,\none piece was left out -- the md layer does not tell the block layer\nthat it supports flushes or FUA access at all, which results in md\nsilently dropping flush requests.\n\nSince the support already seems there, just add this one piece of\nbookkeeping.\n\nSigned-off-by: Darrick J. Wong \u003cdjwong@us.ibm.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "8f9e0ee38f75d4740daa9e42c8af628d33d19a02",
      "tree": "4e1b3fe1460cd0c71258cfb2f68bb28cf71eeca4",
      "parents": [
        "c26a44ed1e552aaa1d4ceb71842002d235fe98d7"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Nov 24 16:39:46 2010 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Nov 24 16:39:46 2010 +1100"
      },
      "message": "md/raid1: really fix recovery looping when single good device fails.\n\nCommit 4044ba58dd15cb01797c4fd034f39ef4a75f7cc3 supposedly fixed a\nproblem where if a raid1 with just one good device gets a read-error\nduring recovery, the recovery would abort and immediately restart in\nan infinite loop.\n\nHowever it depended on raid1_remove_disk removing the spare device\nfrom the array.  But that does not happen in this case.  So add a test\nso that in the \u0027recovery_disabled\u0027 case, the device will be removed.\n\nThis suitable for any kernel since 2.6.29 which is when\nrecovery_disabled was introduced.\n\nCc: stable@kernel.org\nReported-by: Sebastian Färber \u003cfaerber@gmail.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "c26a44ed1e552aaa1d4ceb71842002d235fe98d7",
      "tree": "47e0d62c2693ae60ae7a5bc44c2dfcd6a2f7e47e",
      "parents": [
        "3561d43fd289f590fdae672e5eb831b8d5cf0bf6"
      ],
      "author": {
        "name": "Justin Maggard",
        "email": "jmaggard10@gmail.com",
        "time": "Wed Nov 24 16:36:17 2010 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Nov 24 16:36:17 2010 +1100"
      },
      "message": "md: fix return value of rdev_size_change()\n\nWhen trying to grow an array by enlarging component devices,\nrdev_size_store() expects the return value of rdev_size_change() to be\nin sectors, but the actual value is returned in KBs.\n\nThis functionality was broken by commit\n     dd8ac336c13fd8afdb082ebacb1cddd5cf727889\nso this patch is suitable for any kernel since 2.6.30.\n\nCc: stable@kernel.org\nSigned-off-by: Justin Maggard \u003cjmaggard10@gmail.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "77304d2abac6101f7249754ffdd4421258877ab0",
      "tree": "8ee5914529d70120528a630a8e904c22f8c4f98c",
      "parents": [
        "90fdb0b98a62d78a0650b9fd3ddc58a48f71d740"
      ],
      "author": {
        "name": "Mike Snitzer",
        "email": "snitzer@redhat.com",
        "time": "Mon Nov 08 14:39:12 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Wed Nov 10 14:40:53 2010 +0100"
      },
      "message": "block: read i_size with i_size_read()\n\nConvert direct reads of an inode\u0027s i_size to using i_size_read().\n\ni_size_{read,write} use a seqcount to protect reads from accessing\nincomple writes.  Concurrent i_size_write()s require mutual exclussion\nto protect the seqcount that is used by i_size_{read,write}.  But\ni_size_read() callers do not need to use additional locking.\n\nSigned-off-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nAcked-by: NeilBrown \u003cneilb@suse.de\u003e\nAcked-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "f3ac8bf7ce1c5abd763ea762e95d1cdcf7799372",
      "tree": "bb903d4265520d5c96a9ee08557dd7f92c1f08df",
      "parents": [
        "046abeede717909feec38587d667cde1fc6c459c"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Sep 06 14:10:08 2010 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Oct 29 16:40:33 2010 +1100"
      },
      "message": "md: tidy up device searches in read_balance.\n\nThe code for searching through the device list to read-balance in\nraid1 is rather clumsy and hard to follow.  Try to simplify it a bit.\n\nNo important functionality change here.\n\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "046abeede717909feec38587d667cde1fc6c459c",
      "tree": "e273b3c9aa887d2bc571b5ddff0bdff954f303e0",
      "parents": [
        "9b19553e0bd342957846037c996861d280ed694d"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Oct 26 15:46:20 2010 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Oct 29 16:40:33 2010 +1100"
      },
      "message": "md/raid1: fix some typos in comments.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n\n"
    },
    {
      "commit": "9b19553e0bd342957846037c996861d280ed694d",
      "tree": "8275aadb773bf89a7f4a6c84ccd18412744ab8a7",
      "parents": [
        "be2a2656eef95c32ca73e7a6a8c85671aa92e3f1"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Oct 27 15:39:14 2010 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Oct 29 16:40:33 2010 +1100"
      },
      "message": "md/raid1: discard unused variable.\n\nThis structure field (flushing_bio_list) is never used, so remove it.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "be2a2656eef95c32ca73e7a6a8c85671aa92e3f1",
      "tree": "caea637e7247c0d57d8b1fe0042a5b7a0994ed9c",
      "parents": [
        "a167f663243662aa9153c01086580a11cde9ffdc"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Oct 27 15:37:41 2010 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Oct 29 16:40:32 2010 +1100"
      },
      "message": "md: unplug writes to external bitmaps.\n\nWhen writing to an \u0027external\u0027 bitmap we don\u0027t currently unplug the\ndevice before waiting, so we can get a 3msec delay each time;\nSo use REQ_UNPLUG to force and unplug.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "a167f663243662aa9153c01086580a11cde9ffdc",
      "tree": "886e64787421bbf17a1eab7853d67258b598f050",
      "parents": [
        "2b193363ef68667ad717a6723165e0dccf99470f"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Oct 26 18:31:13 2010 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Oct 28 17:36:15 2010 +1100"
      },
      "message": "md: use separate bio pool for each md device.\n\nbio_clone and bio_alloc allocate from a common bio pool.\nIf an md device is stacked with other devices that use this pool, or under\nsomething like swap which uses the pool, then the multiple calls on\nthe pool can cause deadlocks.\n\nSo allocate a local bio pool for each md array and use that rather\nthan the common pool.\n\nThis pool is used both for regular IO and metadata updates.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "2b193363ef68667ad717a6723165e0dccf99470f",
      "tree": "bd45d5186f0edf2b546c4503d794b479d126ad1f",
      "parents": [
        "1c4588e9c19cae6209a28c9da2f16a18a610b935"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Oct 27 15:16:40 2010 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Oct 28 17:36:11 2010 +1100"
      },
      "message": "md: change type of first arg to sync_page_io.\n\nCurrently sync_page_io takes a \u0027bdev\u0027.\nEvery caller passes \u0027rdev-\u003ebdev\u0027.\nWe will soon want another field out of the rdev in sync_page_io,\nSo just pass the rdev instead of the bdev out of it.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "1c4588e9c19cae6209a28c9da2f16a18a610b935",
      "tree": "74ffb14a5586c3a297b0fd372be5b72cf7e53bcd",
      "parents": [
        "6746557f0325a66f57d179126426e38a8ea66945"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Oct 26 17:41:22 2010 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Oct 28 17:36:09 2010 +1100"
      },
      "message": "md/raid1: perform mem allocation before disabling writes during resync.\n\nThough this mem alloc is GFP_NOIO an so will not deadlock, it seems\nbetter to do the allocation before \u0027raise_barrier\u0027 which stops any IO\nrequests while the resync proceeds.\n\nraid10 always uses this order, so it is at least consistent to do the\nsame in raid1.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "6746557f0325a66f57d179126426e38a8ea66945",
      "tree": "3b1db04c854b6ccc4752560f0d30c85e6cbbda6a",
      "parents": [
        "4e78064f42ad474ce9c31760861f7fb0cfc22532"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Oct 26 17:33:54 2010 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Oct 28 17:36:06 2010 +1100"
      },
      "message": "md: use bio_kmalloc rather than bio_alloc when failure is acceptable.\n\nbio_alloc can never fail (as it uses a mempool) but an block\nindefinitely, especially if the caller is holding a reference to a\npreviously allocated bio.\n\nSo these to places which both handle failure and hold multiple bios\nshould not use bio_alloc, they should use bio_kmalloc.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "4e78064f42ad474ce9c31760861f7fb0cfc22532",
      "tree": "3a1abaa98ebcbd62eacfbe95d72e44195fb3bc1f",
      "parents": [
        "e804ac780e2f01cb3b914daca2fd4780d1743db1"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Oct 19 12:54:01 2010 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Oct 28 17:34:07 2010 +1100"
      },
      "message": "md: Fix possible deadlock with multiple mempool allocations.\n\nIt is not safe to allocate from a mempool while holding an item\npreviously allocated from that mempool as that can deadlock when the\nmempool is close to exhaustion.\n\nSo don\u0027t use a bio list to collect the bios to write to multiple\ndevices in raid1 and raid10.\nInstead queue each bio as it becomes available so an unplug will\nactivate all previously allocated bios and so a new bio has a chance\nof being allocated.\n\nThis means we must set the \u0027remaining\u0027 count to \u00271\u0027 before submitting\nany requests, then when all are submitted, decrement \u0027remaining\u0027 and\npossible handle the write completion at that point.\n\nReported-by: Torsten Kaiser \u003cjust.for.lkml@googlemail.com\u003e\nTested-by: Torsten Kaiser \u003cjust.for.lkml@googlemail.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "e804ac780e2f01cb3b914daca2fd4780d1743db1",
      "tree": "60447c76ea9dbaa526c8cabc14898e4df4498bf6",
      "parents": [
        "57dab0bdf689d42972975ec646d862b0900a4bf3"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Oct 15 15:36:08 2010 +0200"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Oct 28 17:32:29 2010 +1100"
      },
      "message": "md: fix and update workqueue usage\n\nWorkqueue usage in md has two problems.\n\n* Flush can be used during or depended upon by memory reclaim, but md\n  uses the system workqueue for flush_work which may lead to deadlock.\n\n* md depends on flush_scheduled_work() to achieve exclusion against\n  completion of removal of previous instances.  flush_scheduled_work()\n  may incur unexpected amount of delay and is scheduled to be removed.\n\nThis patch adds two workqueues to md - md_wq and md_misc_wq.  The\nformer is guaranteed to make forward progress under memory pressure\nand serves flush_work.  The latter serves as the flush domain for\nother works.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "57dab0bdf689d42972975ec646d862b0900a4bf3",
      "tree": "d136f69b8a68850e40844397ebaffde31787c988",
      "parents": [
        "4b532c9b8c87eb8e51605c4d08dfb5139c758dc5"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Oct 19 10:03:39 2010 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Oct 28 17:32:26 2010 +1100"
      },
      "message": "md: use sector_t in bitmap_get_counter\n\nbitmap_get_counter returns the number of sectors covered\nby the counter in a pass-by-reference variable.\nIn some cases this can be very large, so make it a sector_t\nfor safety.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n\n"
    },
    {
      "commit": "4b532c9b8c87eb8e51605c4d08dfb5139c758dc5",
      "tree": "14d4813285bb4aff8e1d7a58a2fdfadd14803a9f",
      "parents": [
        "d97a41dc9c44f5829b7af7aa69fda10fd82b6b4e"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Oct 28 17:30:21 2010 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Oct 28 17:30:21 2010 +1100"
      },
      "message": "md: remove md_mutex locking.\n\nlock_kernel calls were recently pushed down into open/release\nfunctions.\nmd doesn\u0027t need that protection.\nThen the BKL calls were change to md_mutex.  We don\u0027t need those\neither.\nSo remove it all.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "d97a41dc9c44f5829b7af7aa69fda10fd82b6b4e",
      "tree": "4a834cce291edf6798f57d925a6134c287de974d",
      "parents": [
        "12ba8d1e9262ce81a695795410bd9ee5c9407ba1"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Oct 28 17:30:20 2010 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Oct 28 17:30:20 2010 +1100"
      },
      "message": "md: Fix regression with raid1 arrays without persistent metadata.\n\nA RAID1 which has no persistent metadata, whether internal or\nexternal, will hang on the first write.\nThis is caused by commit  070dc6dd7103b6b3f7e4d46e754354a5c15f366e\nIn that case, MD_CHANGE_PENDING never gets cleared.\n\nSo during md_update_sb, is neither persistent or external,\nclear MD_CHANGE_PENDING.\n\nThis is suitable for 2.6.36-stable.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\nCc: stable@kernel.org\n"
    },
    {
      "commit": "ca1cab37d91cbe8a8333732540d43cabb54cfa85",
      "tree": "ea936dc8e5eb80b02fdf1d970bcb6f2e836051b9",
      "parents": [
        "99dc829256bb8cfcb1f58b7f118893fdbf608e60"
      ],
      "author": {
        "name": "Andrew Morton",
        "email": "akpm@linux-foundation.org",
        "time": "Tue Oct 26 14:22:34 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Oct 26 16:52:14 2010 -0700"
      },
      "message": "workqueues: s/ON_STACK/ONSTACK/\n\nSilly though it is, completions and wait_queue_heads use foo_ONSTACK\n(COMPLETION_INITIALIZER_ONSTACK, DECLARE_COMPLETION_ONSTACK,\n__WAIT_QUEUE_HEAD_INIT_ONSTACK and DECLARE_WAIT_QUEUE_HEAD_ONSTACK) so I\nguess workqueues should do the same thing.\n\ns/INIT_WORK_ON_STACK/INIT_WORK_ONSTACK/\ns/INIT_DELAYED_WORK_ON_STACK/INIT_DELAYED_WORK_ONSTACK/\n\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nAcked-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "a2887097f25cd38cadfc11d10769e2b349fb5eca",
      "tree": "cd4adcb305365d6ba9acd2c02d4eb9d0125c6f8d",
      "parents": [
        "8abfc6e7a45eb74e51904bbae676fae008b11366",
        "005a1d15f5a6b2bb4ada80349513effbf22b4588"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Oct 22 17:07:18 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Oct 22 17:07:18 2010 -0700"
      },
      "message": "Merge branch \u0027for-2.6.37/barrier\u0027 of git://git.kernel.dk/linux-2.6-block\n\n* \u0027for-2.6.37/barrier\u0027 of git://git.kernel.dk/linux-2.6-block: (46 commits)\n  xen-blkfront: disable barrier/flush write support\n  Added blk-lib.c and blk-barrier.c was renamed to blk-flush.c\n  block: remove BLKDEV_IFL_WAIT\n  aic7xxx_old: removed unused \u0027req\u0027 variable\n  block: remove the BH_Eopnotsupp flag\n  block: remove the BLKDEV_IFL_BARRIER flag\n  block: remove the WRITE_BARRIER flag\n  swap: do not send discards as barriers\n  fat: do not send discards as barriers\n  ext4: do not send discards as barriers\n  jbd2: replace barriers with explicit flush / FUA usage\n  jbd2: Modify ASYNC_COMMIT code to not rely on queue draining on barrier\n  jbd: replace barriers with explicit flush / FUA usage\n  nilfs2: replace barriers with explicit flush / FUA usage\n  reiserfs: replace barriers with explicit flush / FUA usage\n  gfs2: replace barriers with explicit flush / FUA usage\n  btrfs: replace barriers with explicit flush / FUA usage\n  xfs: replace barriers with explicit flush / FUA usage\n  block: pass gfp_mask and flags to sb_issue_discard\n  dm: convey that all flushes are processed as empty\n  ...\n"
    },
    {
      "commit": "e9dd2b6837e26fe202708cce5ea4bb4ee3e3482e",
      "tree": "f42fd892495bfc4cbb740d06b016d267c9c42d00",
      "parents": [
        "4f3a29dadaf999a273f1e7fe2476595d0283eef3",
        "b4627321e18582dcbdeb45d77df29d3177107c65"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Oct 22 17:00:32 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Oct 22 17:00:32 2010 -0700"
      },
      "message": "Merge branch \u0027for-2.6.37/core\u0027 of git://git.kernel.dk/linux-2.6-block\n\n* \u0027for-2.6.37/core\u0027 of git://git.kernel.dk/linux-2.6-block: (39 commits)\n  cfq-iosched: Fix a gcc 4.5 warning and put some comments\n  block: Turn bvec_k{un,}map_irq() into static inline functions\n  block: fix accounting bug on cross partition merges\n  block: Make the integrity mapped property a bio flag\n  block: Fix double free in blk_integrity_unregister\n  block: Ensure physical block size is unsigned int\n  blkio-throttle: Fix possible multiplication overflow in iops calculations\n  blkio-throttle: limit max iops value to UINT_MAX\n  blkio-throttle: There is no need to convert jiffies to milli seconds\n  blkio-throttle: Fix link failure failure on i386\n  blkio: Recalculate the throttled bio dispatch time upon throttle limit change\n  blkio: Add root group to td-\u003etg_list\n  blkio: deletion of a cgroup was causes oops\n  blkio: Do not export throttle files if CONFIG_BLK_DEV_THROTTLING\u003dn\n  block: set the bounce_pfn to the actual DMA limit rather than to max memory\n  block: revert bad fix for memory hotplug causing bounces\n  Fix compile error in blk-exec.c for !CONFIG_DETECT_HUNG_TASK\n  block: set the bounce_pfn to the actual DMA limit rather than to max memory\n  block: Prevent hang_check firing during long I/O\n  cfq: improve fsync performance for small files\n  ...\n\nFix up trivial conflicts due to __rcu sparse annotation in include/linux/genhd.h\n"
    },
    {
      "commit": "092e0e7e520a1fca03e13c9f2d157432a8657ff2",
      "tree": "451897252c4c08c4b5a8ef535da156f1e817e80b",
      "parents": [
        "79f14b7c56d3b3ba58f8b43d1f70b9b71477a800",
        "776c163b1b93c8dfa5edba885bc2bfbc2d228a5f"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Oct 22 10:52:56 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Oct 22 10:52:56 2010 -0700"
      },
      "message": "Merge branch \u0027llseek\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/arnd/bkl\n\n* \u0027llseek\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/arnd/bkl:\n  vfs: make no_llseek the default\n  vfs: don\u0027t use BKL in default_llseek\n  llseek: automatically add .llseek fop\n  libfs: use generic_file_llseek for simple_attr\n  mac80211: disallow seeks in minstrel debug code\n  lirc: make chardev nonseekable\n  viotape: use noop_llseek\n  raw: use explicit llseek file operations\n  ibmasmfs: use generic_file_llseek\n  spufs: use llseek in all file operations\n  arm/omap: use generic_file_llseek in iommu_debug\n  lkdtm: use generic_file_llseek in debugfs\n  net/wireless: use generic_file_llseek in debugfs\n  drm: use noop_llseek\n"
    },
    {
      "commit": "c37927d4359e81b85de644f8fb08878717cf5f3f",
      "tree": "25dabf2d905e1410819d1bdaba0bf5f779100d3c",
      "parents": [
        "5704e44d283e907623e3775c1262f206a2c48cf3",
        "2a48fc0ab24241755dc93bfd4f01d68efab47f5a"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Oct 22 10:49:54 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Oct 22 10:49:54 2010 -0700"
      },
      "message": "Merge branch \u0027trivial\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/arnd/bkl\n\n* \u0027trivial\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/arnd/bkl:\n  block: autoconvert trivial BKL users to private mutex\n  drivers: autoconvert trivial BKL users to private mutex\n  ipmi: autoconvert trivial BKL users to private mutex\n  mac: autoconvert trivial BKL users to private mutex\n  mtd: autoconvert trivial BKL users to private mutex\n  scsi: autoconvert trivial BKL users to private mutex\n\nFix up trivial conflicts (due to addition of private mutex right next to\ndeletion of a version string) in drivers/char/pcmcia/cm40[04]0_cs.c\n"
    },
    {
      "commit": "fa251f89903d73989e2f63e13d0eaed1e07ce0da",
      "tree": "3f7fe779941e3b6d67754dd7c44a32f48ea47c74",
      "parents": [
        "dd3932eddf428571762596e17b65f5dc92ca361b",
        "cd07202cc8262e1669edff0d97715f3dd9260917"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Oct 19 09:13:04 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Oct 19 09:13:04 2010 +0200"
      },
      "message": "Merge branch \u0027v2.6.36-rc8\u0027 into for-2.6.37/barrier\n\nConflicts:\n\tblock/blk-core.c\n\tdrivers/block/loop.c\n\tmm/swapfile.c\n\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "6038f373a3dc1f1c26496e60b6c40b164716f07e",
      "tree": "a0d3bbd026eea41b9fc36b8c722cbaf56cd9f825",
      "parents": [
        "1ec5584e3edf9c4bf2c88c846534d19cf986ba11"
      ],
      "author": {
        "name": "Arnd Bergmann",
        "email": "arnd@arndb.de",
        "time": "Sun Aug 15 18:52:59 2010 +0200"
      },
      "committer": {
        "name": "Arnd Bergmann",
        "email": "arnd@arndb.de",
        "time": "Fri Oct 15 15:53:27 2010 +0200"
      },
      "message": "llseek: automatically add .llseek fop\n\nAll file_operations should get a .llseek operation so we can make\nnonseekable_open the default for future file operations without a\n.llseek pointer.\n\nThe three cases that we can automatically detect are no_llseek, seq_lseek\nand default_llseek. For cases where we can we can automatically prove that\nthe file offset is always ignored, we use noop_llseek, which maintains\nthe current behavior of not returning an error from a seek.\n\nNew drivers should normally not use noop_llseek but instead use no_llseek\nand call nonseekable_open at open time.  Existing drivers can be converted\nto do the same when the maintainer knows for certain that no user code\nrelies on calling seek on the device file.\n\nThe generated code is often incorrectly indented and right now contains\ncomments that clarify for each added line why a specific variant was\nchosen. In the version that gets submitted upstream, the comments will\nbe gone and I will manually fix the indentation, because there does not\nseem to be a way to do that using coccinelle.\n\nSome amount of new code is currently sitting in linux-next that should get\nthe same modifications, which I will do at the end of the merge window.\n\nMany thanks to Julia Lawall for helping me learn to write a semantic\npatch that does all this.\n\n\u003d\u003d\u003d\u003d\u003d begin semantic patch \u003d\u003d\u003d\u003d\u003d\n// This adds an llseek\u003d method to all file operations,\n// as a preparation for making no_llseek the default.\n//\n// The rules are\n// - use no_llseek explicitly if we do nonseekable_open\n// - use seq_lseek for sequential files\n// - use default_llseek if we know we access f_pos\n// - use noop_llseek if we know we don\u0027t access f_pos,\n//   but we still want to allow users to call lseek\n//\n@ open1 exists @\nidentifier nested_open;\n@@\nnested_open(...)\n{\n\u003c+...\nnonseekable_open(...)\n...+\u003e\n}\n\n@ open exists@\nidentifier open_f;\nidentifier i, f;\nidentifier open1.nested_open;\n@@\nint open_f(struct inode *i, struct file *f)\n{\n\u003c+...\n(\nnonseekable_open(...)\n|\nnested_open(...)\n)\n...+\u003e\n}\n\n@ read disable optional_qualifier exists @\nidentifier read_f;\nidentifier f, p, s, off;\ntype ssize_t, size_t, loff_t;\nexpression E;\nidentifier func;\n@@\nssize_t read_f(struct file *f, char *p, size_t s, loff_t *off)\n{\n\u003c+...\n(\n   *off \u003d E\n|\n   *off +\u003d E\n|\n   func(..., off, ...)\n|\n   E \u003d *off\n)\n...+\u003e\n}\n\n@ read_no_fpos disable optional_qualifier exists @\nidentifier read_f;\nidentifier f, p, s, off;\ntype ssize_t, size_t, loff_t;\n@@\nssize_t read_f(struct file *f, char *p, size_t s, loff_t *off)\n{\n... when !\u003d off\n}\n\n@ write @\nidentifier write_f;\nidentifier f, p, s, off;\ntype ssize_t, size_t, loff_t;\nexpression E;\nidentifier func;\n@@\nssize_t write_f(struct file *f, const char *p, size_t s, loff_t *off)\n{\n\u003c+...\n(\n  *off \u003d E\n|\n  *off +\u003d E\n|\n  func(..., off, ...)\n|\n  E \u003d *off\n)\n...+\u003e\n}\n\n@ write_no_fpos @\nidentifier write_f;\nidentifier f, p, s, off;\ntype ssize_t, size_t, loff_t;\n@@\nssize_t write_f(struct file *f, const char *p, size_t s, loff_t *off)\n{\n... when !\u003d off\n}\n\n@ fops0 @\nidentifier fops;\n@@\nstruct file_operations fops \u003d {\n ...\n};\n\n@ has_llseek depends on fops0 @\nidentifier fops0.fops;\nidentifier llseek_f;\n@@\nstruct file_operations fops \u003d {\n...\n .llseek \u003d llseek_f,\n...\n};\n\n@ has_read depends on fops0 @\nidentifier fops0.fops;\nidentifier read_f;\n@@\nstruct file_operations fops \u003d {\n...\n .read \u003d read_f,\n...\n};\n\n@ has_write depends on fops0 @\nidentifier fops0.fops;\nidentifier write_f;\n@@\nstruct file_operations fops \u003d {\n...\n .write \u003d write_f,\n...\n};\n\n@ has_open depends on fops0 @\nidentifier fops0.fops;\nidentifier open_f;\n@@\nstruct file_operations fops \u003d {\n...\n .open \u003d open_f,\n...\n};\n\n// use no_llseek if we call nonseekable_open\n////////////////////////////////////////////\n@ nonseekable1 depends on !has_llseek \u0026\u0026 has_open @\nidentifier fops0.fops;\nidentifier nso ~\u003d \"nonseekable_open\";\n@@\nstruct file_operations fops \u003d {\n...  .open \u003d nso, ...\n+.llseek \u003d no_llseek, /* nonseekable */\n};\n\n@ nonseekable2 depends on !has_llseek @\nidentifier fops0.fops;\nidentifier open.open_f;\n@@\nstruct file_operations fops \u003d {\n...  .open \u003d open_f, ...\n+.llseek \u003d no_llseek, /* open uses nonseekable */\n};\n\n// use seq_lseek for sequential files\n/////////////////////////////////////\n@ seq depends on !has_llseek @\nidentifier fops0.fops;\nidentifier sr ~\u003d \"seq_read\";\n@@\nstruct file_operations fops \u003d {\n...  .read \u003d sr, ...\n+.llseek \u003d seq_lseek, /* we have seq_read */\n};\n\n// use default_llseek if there is a readdir\n///////////////////////////////////////////\n@ fops1 depends on !has_llseek \u0026\u0026 !nonseekable1 \u0026\u0026 !nonseekable2 \u0026\u0026 !seq @\nidentifier fops0.fops;\nidentifier readdir_e;\n@@\n// any other fop is used that changes pos\nstruct file_operations fops \u003d {\n... .readdir \u003d readdir_e, ...\n+.llseek \u003d default_llseek, /* readdir is present */\n};\n\n// use default_llseek if at least one of read/write touches f_pos\n/////////////////////////////////////////////////////////////////\n@ fops2 depends on !fops1 \u0026\u0026 !has_llseek \u0026\u0026 !nonseekable1 \u0026\u0026 !nonseekable2 \u0026\u0026 !seq @\nidentifier fops0.fops;\nidentifier read.read_f;\n@@\n// read fops use offset\nstruct file_operations fops \u003d {\n... .read \u003d read_f, ...\n+.llseek \u003d default_llseek, /* read accesses f_pos */\n};\n\n@ fops3 depends on !fops1 \u0026\u0026 !fops2 \u0026\u0026 !has_llseek \u0026\u0026 !nonseekable1 \u0026\u0026 !nonseekable2 \u0026\u0026 !seq @\nidentifier fops0.fops;\nidentifier write.write_f;\n@@\n// write fops use offset\nstruct file_operations fops \u003d {\n... .write \u003d write_f, ...\n+\t.llseek \u003d default_llseek, /* write accesses f_pos */\n};\n\n// Use noop_llseek if neither read nor write accesses f_pos\n///////////////////////////////////////////////////////////\n\n@ fops4 depends on !fops1 \u0026\u0026 !fops2 \u0026\u0026 !fops3 \u0026\u0026 !has_llseek \u0026\u0026 !nonseekable1 \u0026\u0026 !nonseekable2 \u0026\u0026 !seq @\nidentifier fops0.fops;\nidentifier read_no_fpos.read_f;\nidentifier write_no_fpos.write_f;\n@@\n// write fops use offset\nstruct file_operations fops \u003d {\n...\n .write \u003d write_f,\n .read \u003d read_f,\n...\n+.llseek \u003d noop_llseek, /* read and write both use no f_pos */\n};\n\n@ depends on has_write \u0026\u0026 !has_read \u0026\u0026 !fops1 \u0026\u0026 !fops2 \u0026\u0026 !has_llseek \u0026\u0026 !nonseekable1 \u0026\u0026 !nonseekable2 \u0026\u0026 !seq @\nidentifier fops0.fops;\nidentifier write_no_fpos.write_f;\n@@\nstruct file_operations fops \u003d {\n... .write \u003d write_f, ...\n+.llseek \u003d noop_llseek, /* write uses no f_pos */\n};\n\n@ depends on has_read \u0026\u0026 !has_write \u0026\u0026 !fops1 \u0026\u0026 !fops2 \u0026\u0026 !has_llseek \u0026\u0026 !nonseekable1 \u0026\u0026 !nonseekable2 \u0026\u0026 !seq @\nidentifier fops0.fops;\nidentifier read_no_fpos.read_f;\n@@\nstruct file_operations fops \u003d {\n... .read \u003d read_f, ...\n+.llseek \u003d noop_llseek, /* read uses no f_pos */\n};\n\n@ depends on !has_read \u0026\u0026 !has_write \u0026\u0026 !fops1 \u0026\u0026 !fops2 \u0026\u0026 !has_llseek \u0026\u0026 !nonseekable1 \u0026\u0026 !nonseekable2 \u0026\u0026 !seq @\nidentifier fops0.fops;\n@@\nstruct file_operations fops \u003d {\n...\n+.llseek \u003d noop_llseek, /* no read or write fn */\n};\n\u003d\u003d\u003d\u003d\u003d End semantic patch \u003d\u003d\u003d\u003d\u003d\n\nSigned-off-by: Arnd Bergmann \u003carnd@arndb.de\u003e\nCc: Julia Lawall \u003cjulia@diku.dk\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\n"
    },
    {
      "commit": "5c04f5512f8134c75cd36e5b0354e10e330f4e6e",
      "tree": "7733d3a123e8be8782d345e6310a6c208bfc6606",
      "parents": [
        "db8d9d3591f77cc6b66248b2cdfa1c43deee5ec9"
      ],
      "author": {
        "name": "Vasiliy Kulikov",
        "email": "segooon@gmail.com",
        "time": "Fri Oct 01 14:18:12 2010 -0700"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Oct 07 12:02:50 2010 +1100"
      },
      "message": "md: check return code of read_sb_page\n\nFunction read_sb_page may return ERR_PTR(...). Check for it.\n\nSigned-off-by: Vasiliy Kulikov \u003csegooon@gmail.com\u003e\nCc: Neil Brown \u003cneilb@suse.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "db8d9d3591f77cc6b66248b2cdfa1c43deee5ec9",
      "tree": "2b8e727bc5f74883620934d3334323ce501c853e",
      "parents": [
        "7571ae887d3b96d8e7ce63d43828866c6a91cdc6"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Oct 07 12:00:50 2010 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Oct 07 12:00:50 2010 +1100"
      },
      "message": "md/raid1: minor bio initialisation improvements.\n\n\nWhen performing a resync we pre-allocate some bios and repeatedly use\nthem.  This requires us to re-initialise them each time.\nOne field (bi_comp_cpu) and some flags weren\u0027t being initiaised\nreliably.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n\n"
    },
    {
      "commit": "7571ae887d3b96d8e7ce63d43828866c6a91cdc6",
      "tree": "ecdc5d71d3d957604a172c23ef9943438ccee949",
      "parents": [
        "7c6d45e665d5322401e4439060bbf758b08422d4"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Oct 07 11:54:46 2010 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Oct 07 11:54:46 2010 +1100"
      },
      "message": "md/raid1:  avoid overflow in raid1 resync when bitmap is in use.\n\nbitmap_start_sync returns - via a pass-by-reference variable - the\nnumber of sectors before we need to check with the bitmap again.\nSince commit ef4256733506f245 this number can be substantially larger,\n2^27 is a common value.\n\nUnfortunately it is an \u0027int\u0027 and so when raid1.c:sync_request shifts\nit 9 places to the left it becomes 0.  This results in a zero-length\nread which the scsi layer justifiably complains about.\n\nThis patch just removes the shift so the common case becomes safe with\na trivially-correct patch.\n\nIn the next merge window we will convert this \u0027int\u0027 to a \u0027sector_t\u0027\n\nReported-by: \"George Spelvin\" \u003clinux@horizon.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "2a48fc0ab24241755dc93bfd4f01d68efab47f5a",
      "tree": "fa9ae10ce89b26b7d8ae9ce24bdfda5e3007b763",
      "parents": [
        "613655fa39ff6957754fa8ceb8559980920eb8ee"
      ],
      "author": {
        "name": "Arnd Bergmann",
        "email": "arnd@arndb.de",
        "time": "Wed Jun 02 14:28:52 2010 +0200"
      },
      "committer": {
        "name": "Arnd Bergmann",
        "email": "arnd@arndb.de",
        "time": "Tue Oct 05 15:01:10 2010 +0200"
      },
      "message": "block: autoconvert trivial BKL users to private mutex\n\nThe block device drivers have all gained new lock_kernel\ncalls from a recent pushdown, and some of the drivers\nwere already using the BKL before.\n\nThis turns the BKL into a set of per-driver mutexes.\nStill need to check whether this is safe to do.\n\nfile\u003d$1\nname\u003d$2\nif grep -q lock_kernel ${file} ; then\n    if grep -q \u0027include.*linux.mutex.h\u0027 ${file} ; then\n            sed -i \u0027/include.*\u003clinux\\/smp_lock.h\u003e/d\u0027 ${file}\n    else\n            sed -i \u0027s/include.*\u003clinux\\/smp_lock.h\u003e.*$/include \u003clinux\\/mutex.h\u003e/g\u0027 ${file}\n    fi\n    sed -i ${file} \\\n        -e \"/^#include.*linux.mutex.h/,$ {\n                1,/^\\(static\\|int\\|long\\)/ {\n                     /^\\(static\\|int\\|long\\)/istatic DEFINE_MUTEX(${name}_mutex);\n\n} }\"  \\\n    -e \"s/\\(un\\)*lock_kernel\\\u003e[ ]*()/mutex_\\1lock(\\\u0026${name}_mutex)/g\" \\\n    -e \u0027/[      ]*cycle_kernel_lock();/d\u0027\nelse\n    sed -i -e \u0027/include.*\\\u003csmp_lock.h\\\u003e/d\u0027 ${file}  \\\n                -e \u0027/cycle_kernel_lock()/d\u0027\nfi\n\nSigned-off-by: Arnd Bergmann \u003carnd@arndb.de\u003e\n"
    },
    {
      "commit": "ddcf3522cf03a147c867a2e0155761652dbd156a",
      "tree": "e5a47b7db19dc147df769b6cd8c82ac56964f6e1",
      "parents": [
        "126925c090155f13e90b9e7e8c4010e96027c00a"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Sep 08 16:48:17 2010 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Sep 17 13:53:28 2010 +1000"
      },
      "message": "md: fix v1.x metadata update when a disk is missing.\n\nIf an array with 1.x metadata is assembled with the last disk missing,\nmd doesn\u0027t properly record the fact that the disk was missing.\n\nThis is unlikely to cause a real problem as the event count will be\ndifferent to the count on the missing disk so it won\u0027t be included in\nthe array.  However it could still cause confusion.\n\nSo make sure we clear all the relevant slots, not just the early ones.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "126925c090155f13e90b9e7e8c4010e96027c00a",
      "tree": "f433e7cbd6aba7096a88cc7286b05e0c467ee43d",
      "parents": [
        "9c03f1622af051004416dd3e24d8a0fa31e34178"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Sep 07 17:02:47 2010 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Sep 17 13:53:13 2010 +1000"
      },
      "message": "md: call md_update_sb even for \u0027external\u0027 metadata arrays.\n\nNow that we depend on md_update_sb to clear variable bits in\nmddev-\u003eflags (rather than trying not to set them) it is important to\nalways call md_update_sb when appropriate.\n\nmd_check_recovery has this job but explicitly avoids it for -\u003eexternal\nmetadata arrays.  This is not longer appropraite, or needed.\n\nHowever we do want to avoid taking the mddev lock if only\nMD_CHANGE_PENDING is set as that is not cleared by md_update_sb for\nexternal-metadata arrays.\n\nReported-by:  \"Kwolek, Adam\" \u003cadam.kwolek@intel.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "c8bf1336824ebd698d37b71763e1c43190f2229a",
      "tree": "19948b3c686ba71bb2e85883a5325cec069015b7",
      "parents": [
        "76be97c1fc945db08aae1f1b746012662d643e97"
      ],
      "author": {
        "name": "Martin K. Petersen",
        "email": "martin.petersen@oracle.com",
        "time": "Fri Sep 10 20:07:38 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@carl.home.kernel.dk",
        "time": "Fri Sep 10 20:07:38 2010 +0200"
      },
      "message": "Consolidate min_not_zero\n\nWe have several users of min_not_zero, each of them using their own\ndefinition.  Move the define to kernel.h.\n\nSigned-off-by: Martin K. Petersen \u003cmartin.petersen@oracle.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@carl.home.kernel.dk\u003e\n"
    },
    {
      "commit": "b372d360df6deaf79a58a02fa0cc0d7e0aa3e92f",
      "tree": "e103bc03bae17f7a995ba44825aefd5fc5fdba66",
      "parents": [
        "05447420f99c1c44063c7f00054667c022cc1365"
      ],
      "author": {
        "name": "Mike Snitzer",
        "email": "snitzer@redhat.com",
        "time": "Wed Sep 08 18:07:01 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Sep 10 12:35:38 2010 +0200"
      },
      "message": "dm: convey that all flushes are processed as empty\n\nRename __clone_and_map_flush to __clone_and_map_empty_flush for added\nclarity.\n\nSimplify logic associated with REQ_FLUSH conditionals.\n\nIntroduce a BUG_ON() and add a few more helpful comments to the code\nso that it is clear that all flushes are empty.\n\nCleanup __split_and_process_bio() so that an empty flush isn\u0027t processed\nby a \u0027sector_count\u0027 focused while loop.\n\nSigned-off-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "05447420f99c1c44063c7f00054667c022cc1365",
      "tree": "9d70e7c0037d821784b76d9d7d99c174c73d0576",
      "parents": [
        "6a8736d10cb413be95ea443ba40f25c93f4ef9b2"
      ],
      "author": {
        "name": "Kiyoshi Ueda",
        "email": "k-ueda@ct.jp.nec.com",
        "time": "Wed Sep 08 18:07:01 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Sep 10 12:35:38 2010 +0200"
      },
      "message": "dm: fix locking context in queue_io()\n\nNow queue_io() is called from dec_pending(), which may be called with\ninterrupts disabled, so queue_io() must not enable interrupts\nunconditionally and must save/restore the current interrupts status.\n\nSigned-off-by: Kiyoshi Ueda \u003ck-ueda@ct.jp.nec.com\u003e\nSigned-off-by: Jun\u0027ichi Nomura \u003cj-nomura@ce.jp.nec.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "6a8736d10cb413be95ea443ba40f25c93f4ef9b2",
      "tree": "0b0bb541cfe73fbbd25a1b39585a97fa923270d0",
      "parents": [
        "29e4013de7ad950280e4b220894986866697d419"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Sep 08 18:07:00 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Sep 10 12:35:38 2010 +0200"
      },
      "message": "dm: relax ordering of bio-based flush implementation\n\nUnlike REQ_HARDBARRIER, REQ_FLUSH/FUA doesn\u0027t mandate any ordering\nagainst other bio\u0027s.  This patch relaxes ordering around flushes.\n\n* A flush bio is no longer deferred to workqueue directly.  It\u0027s\n  processed like other bio\u0027s but __split_and_process_bio() uses\n  md-\u003eflush_bio as the clone source.  md-\u003eflush_bio is initialized to\n  empty flush during md initialization and shared for all flushes.\n\n* As a flush bio now travels through the same execution path as other\n  bio\u0027s, there\u0027s no need for dedicated error handling path either.  It\n  can use the same error handling path in dec_pending().  Dedicated\n  error handling removed along with md-\u003eflush_error.\n\n* When dec_pending() detects that a flush has completed, it checks\n  whether the original bio has data.  If so, the bio is queued to the\n  deferred list w/ REQ_FLUSH cleared; otherwise, it\u0027s completed.\n\n* As flush sequencing is handled in the usual issue/completion path,\n  dm_wq_work() no longer needs to handle flushes differently.  Now its\n  only responsibility is re-issuing deferred bio\u0027s the same way as\n  _dm_request() would.  REQ_FLUSH handling logic including\n  process_flush() is dropped.\n\n* There\u0027s no reason for queue_io() and dm_wq_work() write lock\n  dm-\u003eio_lock.  queue_io() now only uses md-\u003edeferred_lock and\n  dm_wq_work() read locks dm-\u003eio_lock.\n\n* bio\u0027s no longer need to be queued on the deferred list while a flush\n  is in progress making DMF_QUEUE_IO_TO_THREAD unncessary.  Drop it.\n\nThis avoids stalling the device during flushes and simplifies the\nimplementation.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "29e4013de7ad950280e4b220894986866697d419",
      "tree": "302e99d146940d043696f3e53b3814e65f99b269",
      "parents": [
        "d87f4c14f27dc82d215108d8392a7d26687148a1"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Sep 08 18:07:00 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Sep 10 12:35:38 2010 +0200"
      },
      "message": "dm: implement REQ_FLUSH/FUA support for request-based dm\n\nThis patch converts request-based dm to support the new REQ_FLUSH/FUA.\n\nThe original request-based flush implementation depended on\nrequest_queue blocking other requests while a barrier sequence is in\nprogress, which is no longer true for the new REQ_FLUSH/FUA.\n\nIn general, request-based dm doesn\u0027t have infrastructure for cloning\none source request to multiple targets, but the original flush\nimplementation had a special mostly independent path which can issue\nflushes to multiple targets and sequence them.  However, the\ncapability isn\u0027t currently in use and adds a lot of complexity.\nMoreoever, it\u0027s unlikely to be useful in its current form as it\ndoesn\u0027t make sense to be able to send out flushes to multiple targets\nwhen write requests can\u0027t be.\n\nThis patch rips out special flush code path and deals handles\nREQ_FLUSH/FUA requests the same way as other requests.  The only\nspecial treatment is that REQ_FLUSH requests use the block address 0\nwhen finding target, which is enough for now.\n\n* added BUG_ON(!dm_target_is_valid(ti)) in dm_request_fn() as\n  suggested by Mike Snitzer\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nTested-by: Kiyoshi Ueda \u003ck-ueda@ct.jp.nec.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "d87f4c14f27dc82d215108d8392a7d26687148a1",
      "tree": "55f2a81f3df5d70fd85c4428089f6fe28540bcf4",
      "parents": [
        "3a2edd0d6ddbd5fa3b389ea6db811285415ce6c8"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Sep 03 11:56:19 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Sep 10 12:35:38 2010 +0200"
      },
      "message": "dm: implement REQ_FLUSH/FUA support for bio-based dm\n\nThis patch converts bio-based dm to support REQ_FLUSH/FUA instead of\nnow deprecated REQ_HARDBARRIER.\n\n* -EOPNOTSUPP handling logic dropped.\n\n* Preflush is handled as before but postflush is dropped and replaced\n  with passing down REQ_FUA to member request_queues.  This replaces\n  one array wide cache flush w/ member specific FUA writes.\n\n* __split_and_process_bio() now calls __clone_and_map_flush() directly\n  for flushes and guarantees all FLUSH bio\u0027s going to targets are zero\n`  length.\n\n* It\u0027s now guaranteed that all FLUSH bio\u0027s which are passed onto dm\n  targets are zero length.  bio_empty_barrier() tests are replaced\n  with REQ_FLUSH tests.\n\n* Empty WRITE_BARRIERs are replaced with WRITE_FLUSHes.\n\n* Dropped unlikely() around REQ_FLUSH tests.  Flushes are not unlikely\n  enough to be marked with unlikely().\n\n* Block layer now filters out REQ_FLUSH/FUA bio\u0027s if the request_queue\n  doesn\u0027t support cache flushing.  Advertise REQ_FLUSH | REQ_FUA\n  capability.\n\n* Request based dm isn\u0027t converted yet.  dm_init_request_based_queue()\n  resets flush support to 0 for now.  To avoid disturbing request\n  based dm code, dm-\u003eflush_error is added for bio based dm while\n  requested based dm continues to use dm-\u003ebarrier_error.\n\nLightly tested linear, stripe, raid1, snap and crypt targets.  Please\nproceed with caution as I\u0027m not familiar with the code base.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: dm-devel@redhat.com\nCc: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "e9c7469bb4f502dafc092166201bea1ad5fc0fbf",
      "tree": "04202b0bb88623d3005c909eaafcb280778902da",
      "parents": [
        "7bc9fddab074d6bb630344e1969e28d20b140621"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Sep 03 11:56:18 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Sep 10 12:35:38 2010 +0200"
      },
      "message": "md: implment REQ_FLUSH/FUA support\n\nThis patch converts md to support REQ_FLUSH/FUA instead of now\ndeprecated REQ_HARDBARRIER.  In the core part (md.c), the following\nchanges are notable.\n\n* Unlike REQ_HARDBARRIER, REQ_FLUSH/FUA don\u0027t interfere with\n  processing of other requests and thus there is no reason to mark the\n  queue congested while FLUSH/FUA is in progress.\n\n* REQ_FLUSH/FUA failures are final and its users don\u0027t need retry\n  logic.  Retry logic is removed.\n\n* Preflush needs to be issued to all member devices but FUA writes can\n  be handled the same way as other writes - their processing can be\n  deferred to request_queue of member devices.  md_barrier_request()\n  is renamed to md_flush_request() and simplified accordingly.\n\nFor linear, raid0 and multipath, the core changes are enough.  raid1,\n5 and 10 need the following conversions.\n\n* raid1: Handling of FLUSH/FUA bio\u0027s can simply be deferred to\n  request_queues of member devices.  Barrier related logic removed.\n\n* raid5: Queue draining logic dropped.  FUA bit is propagated through\n  biodrain and stripe resconstruction such that all the updated parts\n  of the stripe are written out with FUA writes if any of the dirtying\n  writes was FUA.  preread_active_stripes handling in make_request()\n  is updated as suggested by Neil Brown.\n\n* raid10: FUA bit needs to be propagated to write clones.\n\nlinear, raid0, 1, 5 and 10 tested.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nReviewed-by: Neil Brown \u003cneilb@suse.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "4913efe456c987057e5d36a3f0a55422a9072cae",
      "tree": "295f04a7214e1933df3301dd42c12ff3f282a22c",
      "parents": [
        "6958f145459ca7ad9715024de97445addacb8510"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Sep 03 11:56:16 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Sep 10 12:35:36 2010 +0200"
      },
      "message": "block: deprecate barrier and replace blk_queue_ordered() with blk_queue_flush()\n\nBarrier is deemed too heavy and will soon be replaced by FLUSH/FUA\nrequests.  Deprecate barrier.  All REQ_HARDBARRIERs are failed with\n-EOPNOTSUPP and blk_queue_ordered() is replaced with simpler\nblk_queue_flush().\n\nblk_queue_flush() takes combinations of REQ_FLUSH and FUA.  If a\ndevice has write cache and can flush it, it should set REQ_FLUSH.  If\nthe device can handle FUA writes, it should also set REQ_FUA.\n\nAll blk_queue_ordered() users are converted.\n\n* ORDERED_DRAIN is mapped to 0 which is the default value.\n* ORDERED_DRAIN_FLUSH is mapped to REQ_FLUSH.\n* ORDERED_DRAIN_FLUSH_FUA is mapped to REQ_FLUSH | REQ_FUA.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Boaz Harrosh \u003cbharrosh@panasas.com\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nCc: Nick Piggin \u003cnpiggin@kernel.dk\u003e\nCc: Michael S. Tsirkin \u003cmst@redhat.com\u003e\nCc: Jeremy Fitzhardinge \u003cjeremy@xensource.com\u003e\nCc: Chris Wright \u003cchrisw@sous-sol.org\u003e\nCc: FUJITA Tomonori \u003cfujita.tomonori@lab.ntt.co.jp\u003e\nCc: Geert Uytterhoeven \u003cGeert.Uytterhoeven@sonycom.com\u003e\nCc: David S. Miller \u003cdavem@davemloft.net\u003e\nCc: Alasdair G Kergon \u003cagk@redhat.com\u003e\nCc: Pierre Ossman \u003cdrzeus@drzeus.cx\u003e\nCc: Stefan Weinhuber \u003cwein@de.ibm.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "070dc6dd7103b6b3f7e4d46e754354a5c15f366e",
      "tree": "173e72d08b2070d496c203a6d5156b9a2ad2808c",
      "parents": [
        "bd52b746262c8d77e73903d6608014fb2fcdcd9d"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Aug 30 17:33:34 2010 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Aug 30 18:06:21 2010 +1000"
      },
      "message": "md: resolve confusion of MD_CHANGE_CLEAN\n\nMD_CHANGE_CLEAN is used for two different purposes and this leads to\nconfusion.\nOne of the purposes is largely mirrored by MD_CHANGE_PENDING which is\nnot used for anything else, so have MD_CHANGE_PENDING take over that\npurpose fully.\n\nThe two purposes are:\n 1/ tell md_update_sb that an update is needed and that it is just a\n   clean/dirty transition.\n 2/ tell user-space that an transition from clean to dirty is pending\n    (something wants to write), and tell te kernel (by clearin the\n    flag) that the transition is OK.\n\nThe first purpose remains wit MD_CHANGE_CLEAN, the second is moved\nfully to MD_CHANGE_PENDING.\n\nThis means that various places which conditionally set or cleared\nMD_CHANGE_CLEAN no longer need to be conditional.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "bd52b746262c8d77e73903d6608014fb2fcdcd9d",
      "tree": "5ee5789f1aae4b238d42c05672db90886b19280e",
      "parents": [
        "7c44ece988a3419e51c833cf14be186a22224dd1"
      ],
      "author": {
        "name": "Dan Williams",
        "email": "dan.j.williams@intel.com",
        "time": "Mon Aug 30 17:33:33 2010 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Aug 30 18:06:20 2010 +1000"
      },
      "message": "md: don\u0027t clear MD_CHANGE_CLEAN in md_update_sb() for external arrays\n\nIf this bit is cleared in md_update_sb() the kernel will allow writes to the\narray if userspace triggers md_allow_write(), e.g. through stripe_cache_size,\nwhen mdmon is not active.  When mdmon is active the array transitions to\nactive-idle bypassing write-pending, setting up a race for mdmon to set the\narray clean before a write arrives.\n\nSigned-off-by: Dan Williams \u003cdan.j.williams@intel.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "7c44ece988a3419e51c833cf14be186a22224dd1",
      "tree": "914239dd8f2ce809caf94f6fa7b73cc302f679c4",
      "parents": [
        "2bfc96a127bc1cc94d26bfaa40159966064f9c8c"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Aug 30 17:35:52 2010 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Aug 30 17:35:52 2010 +1000"
      },
      "message": "Move .gitignore from drivers/md to lib/raid6\n\nAnother missing bit of the raid6 -\u003e /lib move.\n\nReported-by: Andreas Schwab \u003cschwab@linux-m68k.org\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "2c7d46ec192e4f2b350f67a0e185b9bce646cd6b",
      "tree": "2a49c1e99de3442184726be20d03e3a15d80cee0",
      "parents": [
        "6b9656205469269c050963c71fca1998b247a560"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Aug 18 16:16:05 2010 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Aug 18 16:16:05 2010 +1000"
      },
      "message": "md raid-1/10 Fix bio_rw bit manipulations again\n\ncommit 7b6d91daee5cac6402186ff224c3af39d79f4a0e changed the behaviour\nof a few variables in raid1 and raid10 from flags to bit-sets, but\nleft them as type \u0027bool\u0027 so they did not work.\n\nChange them (back) to unsigned long.\n(historical note: see 1ef04fefe2241087d9db7e9615c3f11b516e36cf)\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\nReported-by: Jiri Slaby \u003cjslaby@suse.cz\u003e and many others\n"
    },
    {
      "commit": "6b9656205469269c050963c71fca1998b247a560",
      "tree": "9d090d2e363d269cdc55549213025d86af8ef70a",
      "parents": [
        "e6ffbcb6cd0ac471223df24ae77eb486c1ee68cc"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Aug 18 11:56:59 2010 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Aug 18 12:04:32 2010 +1000"
      },
      "message": "md: provide appropriate return value for spare_active functions.\n\nmd_check_recovery expects -\u003espare_active to return \u0027true\u0027 if any\nspares were activated, but none of them do, so the consequent change\nin \u0027degraded\u0027 is not notified through sysfs.\n\nSo count the number of spares activated, subtract it from \u0027degraded\u0027\njust once, and return it.\n\nReported-by: Adrian Drzewiecki \u003cadriand@vmware.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "e6ffbcb6cd0ac471223df24ae77eb486c1ee68cc",
      "tree": "8739230c95a051c8ab95fdbfd90ec2e6ce0bf3c9",
      "parents": [
        "3a3a5ddb7a0f43c3dd0f98673f3d930a456725f8"
      ],
      "author": {
        "name": "Adrian Drzewiecki",
        "email": "adriand@vmware.com",
        "time": "Wed Aug 18 11:49:02 2010 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Aug 18 11:49:02 2010 +1000"
      },
      "message": "md: Notify sysfs when RAID1/5/10 disk is In_sync.\n\nWhen RAID1 is done syncing disks, it\u0027ll update the state\nof synced rdevs to In_sync. But it neglected to notify\nsysfs that the attribute changed. So any programs that\nare waiting for an rdev\u0027s state to change will not be\nwoken.\n\n(raid5/raid10 added by neilb)\n\nSigned-off-by: Adrian Drzewiecki \u003cadriand@vmware.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n\n"
    },
    {
      "commit": "3a3a5ddb7a0f43c3dd0f98673f3d930a456725f8",
      "tree": "fa1e33c011c9f6350ce5118b89deafacbb1e0f2b",
      "parents": [
        "da5cabf80e2433131bf0ed8993abc0f7ea618c73"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Aug 16 18:09:31 2010 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Aug 18 11:39:38 2010 +1000"
      },
      "message": "Update recovery_offset even when external metadata is used.\n\nThe update of -\u003erecovery_offset in sync_sbs is appropriate even then external\nmetadata is in use.  However sync_sbs is only called when native\nmetadata is used.\n\nSo move that update in to the top of md_update_sb (which is the only\ncaller of sync_sbs) before the test on -\u003eexternal.\n\nThis moves the update out of -\u003ewrite_lock protection, but those fields\nonly need -\u003ereconfig_mutex protection which they still have.\n\nAlso move the test on -\u003epersistent up to where -\u003eexternal is set as\nfor metadata update purposes they are the same.\n\nClear MD_CHANGE_DEVS and MD_CHANGE_CLEAN as they can only be confusing\nif -\u003eexternal is set or -\u003epersistent isn\u0027t.\n\nFinally move the update of -\u003eutime down as it is only relevent (like\nthe -\u003eevents update) for native metadata.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\nReported-by: \"Kwolek, Adam\" \u003cadam.kwolek@intel.com\u003e\n"
    },
    {
      "commit": "959eb4e5592cc0b0b07db0ca30d2b1efd790020f",
      "tree": "564a22942512825ca1f466ae9d18ffe9fd7bf1fb",
      "parents": [
        "7b76ec11fec40203836b488496d2df082d5b2022"
      ],
      "author": {
        "name": "Mike Snitzer",
        "email": "snitzer@redhat.com",
        "time": "Thu Aug 12 04:14:32 2010 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Aug 12 04:14:32 2010 +0100"
      },
      "message": "dm mpath: support discard\n\nEnable discard support in the DM multipath target.\n\nThis discard support depends on a few discard-specific fixes to the\nblock layer\u0027s request stacking driver methods.\n\nDiscard requests are optional so don\u0027t allow a failed discard to trigger\npath failures.  If there is a real problem with a given path the\nbarriers associated with the discard (either before or after the\ndiscard) will cause path failure.  That said, unconditionally passing\ndiscard failures up the stack is not ideal.  This must be fixed once DM\nhas more information about the nature of the underlying storage failure.\n\nSigned-off-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\nCc: Kiyoshi Ueda \u003ck-ueda@ct.jp.nec.com\u003e\n"
    },
    {
      "commit": "7b76ec11fec40203836b488496d2df082d5b2022",
      "tree": "8b3c75295945f0533206c699139e55a30bcd426e",
      "parents": [
        "a79245b3e5669dc203fec63644d988c451fe55d5"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Thu Aug 12 04:14:26 2010 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Aug 12 04:14:26 2010 +0100"
      },
      "message": "dm stripe: support discards\n\nThe DM core will submit a discard bio to the stripe target for each\nstripe in a striped DM device.  The stripe target will determine\nstripe-specific portions of the supplied bio to be remapped into\nindividual (at most \u0027num_discard_requests\u0027 extents).  If a given\nstripe-specific discard bio doesn\u0027t touch a particular stripe the bio\nwill be dropped.\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": "a79245b3e5669dc203fec63644d988c451fe55d5",
      "tree": "8814720781708a95ac0bd23bb5232aa5ed9337bd",
      "parents": [
        "c96053b767d494d7c30e2be68097ac9defa9403f"
      ],
      "author": {
        "name": "Mike Snitzer",
        "email": "snitzer@redhat.com",
        "time": "Thu Aug 12 04:14:24 2010 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Aug 12 04:14:24 2010 +0100"
      },
      "message": "dm: split discard requests on target boundaries\n\nUpdate __clone_and_map_discard to loop across all targets in a DM\ndevice\u0027s table when it processes a discard bio.  If a discard crosses a\ntarget boundary it must be split accordingly.\n\nUpdate __issue_target_requests and __issue_target_request to allow a\ncloned discard bio to have a custom start sector and size.\n\nSigned-off-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "c96053b767d494d7c30e2be68097ac9defa9403f",
      "tree": "b66f185ffd58538f6107f3acf3af38b8aecd7f8a",
      "parents": [
        "65988525abde0b0a5833c4e20f32967184a5dcf0"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Thu Aug 12 04:14:21 2010 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Aug 12 04:14:21 2010 +0100"
      },
      "message": "dm stripe: optimize sector division\n\nOptimize sector division: If the number of stripes is a power of two,\nwe can do shift and mask instead of division.\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": "65988525abde0b0a5833c4e20f32967184a5dcf0",
      "tree": "27e8908099d9dbd1473e6b69775fcba23827d2a1",
      "parents": [
        "38e1b257fd7b4f3eee667d29a5e44ec15e253c1c"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Thu Aug 12 04:14:14 2010 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Aug 12 04:14:14 2010 +0100"
      },
      "message": "dm stripe: move sector translation to a function\n\nMove sector to stripe translation into a function.\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": "38e1b257fd7b4f3eee667d29a5e44ec15e253c1c",
      "tree": "c5b8d853de330cb2db9fefc8588e283a1916b934",
      "parents": [
        "3fd5d48027181168ce85e8094b926aeb9f34c556"
      ],
      "author": {
        "name": "Mike Snitzer",
        "email": "snitzer@redhat.com",
        "time": "Thu Aug 12 04:14:14 2010 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Aug 12 04:14:14 2010 +0100"
      },
      "message": "dm: error return error for discards\n\nHave the error target respond to a discard request with a hard -EIO\nrather than fail the request with -EOPNOTSUPP.\n\nSigned-off-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "3fd5d48027181168ce85e8094b926aeb9f34c556",
      "tree": "740534f0992225e64b2874df296b6dff59111c0b",
      "parents": [
        "f8facb61b5095488a4d78fa78116ef4f4b82bc4d"
      ],
      "author": {
        "name": "Mike Snitzer",
        "email": "snitzer@redhat.com",
        "time": "Thu Aug 12 04:14:13 2010 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Aug 12 04:14:13 2010 +0100"
      },
      "message": "dm delay: support discard\n\nEnable discard support for the delay target.\n\nSigned-off-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "f8facb61b5095488a4d78fa78116ef4f4b82bc4d",
      "tree": "5ee747721c27a8ac1cb68bb05862bfdfea185d9b",
      "parents": [
        "b441a262e7d1c56fbe21794c91d7a9c83809113f"
      ],
      "author": {
        "name": "Mike Snitzer",
        "email": "snitzer@redhat.com",
        "time": "Thu Aug 12 04:14:12 2010 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Aug 12 04:14:12 2010 +0100"
      },
      "message": "dm: zero silently drop discards\n\nHave the zero target silently drop a discard rather than fail the\nrequest with -EOPNOTSUPP.\n\nSigned-off-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "b441a262e7d1c56fbe21794c91d7a9c83809113f",
      "tree": "cc9acb2c3f7045ff513739fd81bba8a789d713b6",
      "parents": [
        "56a67df766039666f61fb15b079f713e44a735ae"
      ],
      "author": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Aug 12 04:14:11 2010 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Aug 12 04:14:11 2010 +0100"
      },
      "message": "dm: use dm_target_offset macro\n\nUse new dm_target_offset() macro to avoid most references to ti-\u003ebegin\nin dm targets.\n\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "56a67df766039666f61fb15b079f713e44a735ae",
      "tree": "cfeeb4f0a151b440293da593c723e9982368a58f",
      "parents": [
        "06a426cee9b35505aeb7516a67bd26496ca7ed08"
      ],
      "author": {
        "name": "Mike Snitzer",
        "email": "snitzer@redhat.com",
        "time": "Thu Aug 12 04:14:10 2010 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Aug 12 04:14:10 2010 +0100"
      },
      "message": "dm: factor out max_io_len_target_boundary\n\nSplit max_io_len_target_boundary out of max_io_len so that the discard\nsupport can make use of it without duplicating max_io_len code.\n\nAvoiding max_io_len\u0027s split_io logic enables DM\u0027s discard support to\nsubmit the entire discard request to a target.  But discards must still\nbe split on target boundaries.\n\nSigned-off-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "06a426cee9b35505aeb7516a67bd26496ca7ed08",
      "tree": "008d8d20b667b195dbe7e53a53e5003aec0a0a5f",
      "parents": [
        "5ae89a8720c28caf35c4e53711d77df2856c404e"
      ],
      "author": {
        "name": "Mike Snitzer",
        "email": "snitzer@redhat.com",
        "time": "Thu Aug 12 04:14:09 2010 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Aug 12 04:14:09 2010 +0100"
      },
      "message": "dm: use common __issue_target_request for flush and discard support\n\nRename __flush_target to __issue_target_request now that it is used to\nissue both flush and discard requests.\n\nIntroduce __issue_target_requests as a convenient wrapper to\n__issue_target_request \u0027num_flush_requests\u0027 or \u0027num_discard_requests\u0027\ntimes per target.\n\nSigned-off-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "5ae89a8720c28caf35c4e53711d77df2856c404e",
      "tree": "712ddc158309d7ad77e3c19e70f0ae9fafb94446",
      "parents": [
        "5ebaee6d290279d1df6ce45d6d54de8cfc473273"
      ],
      "author": {
        "name": "Mike Snitzer",
        "email": "snitzer@redhat.com",
        "time": "Thu Aug 12 04:14:08 2010 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Aug 12 04:14:08 2010 +0100"
      },
      "message": "dm: linear support discard\n\nAllow discards to be passed through to linear mappings if at least one\nunderlying device supports it.  Discards will be forwarded only to\ndevices that support them.\n\nA target that supports discards should set num_discard_requests to\nindicate how many times each discard request must be submitted to it.\n\nVerify table\u0027s underlying devices support discards prior to setting the\nassociated DM device as capable of discards (via QUEUE_FLAG_DISCARD).\n\nSigned-off-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nReviewed-by: Joe Thornber \u003cthornber@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "5ebaee6d290279d1df6ce45d6d54de8cfc473273",
      "tree": "9fa2693bcd1f46827e90f1aff1d36fd1d6da4ea6",
      "parents": [
        "28513fccf0ceefb8171ddc0cefa429b82e92a2c9"
      ],
      "author": {
        "name": "Milan Broz",
        "email": "mbroz@redhat.com",
        "time": "Thu Aug 12 04:14:07 2010 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Aug 12 04:14:07 2010 +0100"
      },
      "message": "dm crypt: simplify crypt_ctr\n\nAllocate cipher strings indpendently of struct crypt_config and move\ncipher parsing and allocation into a separate function to prepare for\nsupporting the cryptoapi format e.g. \"xts(aes)\".\n\nNo functional change in this patch.\n\nSigned-off-by: Milan Broz \u003cmbroz@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "28513fccf0ceefb8171ddc0cefa429b82e92a2c9",
      "tree": "3d094133a496dd045657e9b631bb0a903cf8274e",
      "parents": [
        "7e507eb6432afdd798d4c6dccf949b8c43ef151c"
      ],
      "author": {
        "name": "Milan Broz",
        "email": "mbroz@redhat.com",
        "time": "Thu Aug 12 04:14:06 2010 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Aug 12 04:14:06 2010 +0100"
      },
      "message": "dm crypt: simplify crypt_config destruction logic\n\nUse just one label and reuse common destructor for crypt target.\n\nParse remaining argv arguments in logic order.\n\nAlso do not ignore error values from IV init and set key functions.\n\nNo functional change in this patch except changed return codes\nbased on above.\n\nSigned-off-by: Milan Broz \u003cmbroz@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "7e507eb6432afdd798d4c6dccf949b8c43ef151c",
      "tree": "a9c91e310bfd8e26c326f094eade79f5baf1ee25",
      "parents": [
        "57cba5d3658d9fdc019c6af14a2d80aefa651e56"
      ],
      "author": {
        "name": "Peter Rajnoha",
        "email": "prajnoha@redhat.com",
        "time": "Thu Aug 12 04:14:05 2010 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Aug 12 04:14:05 2010 +0100"
      },
      "message": "dm: allow autoloading of dm mod\n\nAdd devname:mapper/control and MAPPER_CTRL_MINOR module alias\nto support dm-mod module autoloading.\n\nSigned-off-by: Kay Sievers \u003ckay.sievers@vrfy.org\u003e\nSigned-off-by: Peter Rajnoha \u003cprajnoha@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "57cba5d3658d9fdc019c6af14a2d80aefa651e56",
      "tree": "4905a162b6785e1a1228b8870d8011cf9035147a",
      "parents": [
        "26803b9f06d365122fae82e7554a66ef8278e0bb"
      ],
      "author": {
        "name": "Mike Snitzer",
        "email": "snitzer@redhat.com",
        "time": "Thu Aug 12 04:14:04 2010 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Aug 12 04:14:04 2010 +0100"
      },
      "message": "dm: rename map_info flush_request to target_request_nr\n\n\u0027target_request_nr\u0027 is a more generic name that reflects the fact that\nit will be used for both flush and discard support.\n\nSigned-off-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "26803b9f06d365122fae82e7554a66ef8278e0bb",
      "tree": "83f77be2b09bbaa6d97105509d54955b2eec7147",
      "parents": [
        "b1d5552838334c600b068c9c8cc18638e5a8cb47"
      ],
      "author": {
        "name": "Will Drewry",
        "email": "wad@chromium.org",
        "time": "Thu Aug 12 04:14:03 2010 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Aug 12 04:14:03 2010 +0100"
      },
      "message": "dm ioctl: refactor dm_table_complete\n\nThis change unifies the various checks and finalization that occurs on a\ntable prior to use.  By doing so, it allows table construction without\ntraversing the dm-ioctl interface.\n\nSigned-off-by: Will Drewry \u003cwad@chromium.org\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "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": "4a0b4ddf261fc89c050fe0a10ec57a61251d7ac0",
      "tree": "23854bb6d42e7cedec9100fcdd63c307ee5d1332",
      "parents": [
        "a5664dad7e1a278d2915c2bf79cf42250e12d7db"
      ],
      "author": {
        "name": "Mike Snitzer",
        "email": "snitzer@redhat.com",
        "time": "Thu Aug 12 04:14:02 2010 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Aug 12 04:14:02 2010 +0100"
      },
      "message": "dm: do not initialise full request queue when bio based\n\nChange bio-based mapped devices no longer to have a fully initialized\nrequest_queue (request_fn, elevator, etc).  This means bio-based DM\ndevices no longer register elevator sysfs attributes (\u0027iosched/\u0027 tree\nor \u0027scheduler\u0027 other than \"none\").\n\nIn contrast, a request-based DM device will continue to have a full\nrequest_queue and will register elevator sysfs attributes.  Therefore\na user can determine a DM device\u0027s type by checking if elevator sysfs\nattributes exist.\n\nFirst allocate a minimalist request_queue structure for a DM device\n(needed for both bio and request-based DM).\n\nInitialization of a full request_queue is deferred until it is known\nthat the DM device is request-based, at the end of the table load\nsequence.\n\nFactor DM device\u0027s request_queue initialization:\n- common to both request-based and bio-based into dm_init_md_queue().\n- specific to request-based into dm_init_request_based_queue().\n\nThe md-\u003etype_lock mutex is used to protect md-\u003equeue, in addition to\nmd-\u003etype, during table_load().\n\nA DM device\u0027s first table_load will establish the immutable md-\u003etype.\nBut md-\u003equeue initialization, based on md-\u003etype, may fail at that time\n(because blk_init_allocated_queue cannot allocate memory).  Therefore\nany subsequent table_load must (re)try dm_setup_md_queue independently of\nestablishing md-\u003etype.\n\nSigned-off-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nAcked-by: Kiyoshi Ueda \u003ck-ueda@ct.jp.nec.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "a5664dad7e1a278d2915c2bf79cf42250e12d7db",
      "tree": "3bdbe17f12376c63ea05100c2597757e01dc95e2",
      "parents": [
        "708e929513502fb050c0a3c3ee267cab5b056ded"
      ],
      "author": {
        "name": "Mike Snitzer",
        "email": "snitzer@redhat.com",
        "time": "Thu Aug 12 04:14:01 2010 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Aug 12 04:14:01 2010 +0100"
      },
      "message": "dm ioctl: make bio or request based device type immutable\n\nDetermine whether a mapped device is bio-based or request-based when\nloading its first (inactive) table and don\u0027t allow that to be changed\nlater.\n\nThis patch performs different device initialisation in each of the two\ncases.  (We don\u0027t think it\u0027s necessary to add code to support changing\nbetween the two types.)\n\nAllowed md-\u003etype transitions:\n  DM_TYPE_NONE to DM_TYPE_BIO_BASED\n  DM_TYPE_NONE to DM_TYPE_REQUEST_BASED\n\nWe now prevent table_load from replacing the inactive table with a\nconflicting type of table even after an explicit table_clear.\n\nIntroduce \u0027type_lock\u0027 into the struct mapped_device to protect md-\u003etype\nand to prepare for the next patch that will change the queue\ninitialization and allocate memory while md-\u003etype_lock is held.\n\nSigned-off-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nAcked-by: Kiyoshi Ueda \u003ck-ueda@ct.jp.nec.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n\n drivers/md/dm-ioctl.c    |   15 +++++++++++++++\n drivers/md/dm.c          |   37 ++++++++++++++++++++++++++++++-------\n drivers/md/dm.h          |    5 +++++\n include/linux/dm-ioctl.h |    4 ++--\n 4 files changed, 52 insertions(+), 9 deletions(-)\n"
    },
    {
      "commit": "708e929513502fb050c0a3c3ee267cab5b056ded",
      "tree": "e7b6845a3d53c5b92350f1755b4e89418f0c351c",
      "parents": [
        "87c961cb747fa55b664b76abfcb9d44c14ae851f"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Thu Aug 12 04:14:00 2010 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Aug 12 04:14:00 2010 +0100"
      },
      "message": "dm: skip second flush on bio unsupported error\n\nWhen processing barriers, skip the second flush if processing the bio\nfailed with -EOPNOTSUPP.  This can happen with discard+barrier requests.\nIf the device doesn\u0027t support discard, there would be two useless\nSYNCHRONIZE CACHE commands.  The first dm_flush cannot be so easily\noptimized out, so we leave it there.\n\nPreviously, -EOPNOTSUPP could be received in dec_pending only with empty\nbarriers and we ignored that error, assuming the device not supporting\ncache flushes has cache always consistent.  With the addition of discard\nbarriers, this -EOPNOTSUPP can also be generated by discards and we\nmust record it in md-\u003ebarrier_error for process_barrier.\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "87c961cb747fa55b664b76abfcb9d44c14ae851f",
      "tree": "2aefac4f795bd211bb60c13c4ea401bd6a747e1b",
      "parents": [
        "a9c88f2ebc1a5937915cb3b89c9f03894134f39a"
      ],
      "author": {
        "name": "Tomohiro Kusumi",
        "email": "kusumi.tomohiro@jp.fujitsu.com",
        "time": "Thu Aug 12 04:13:59 2010 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Aug 12 04:13:59 2010 +0100"
      },
      "message": "dm snapshot: persistent use define for disk header chunk size\n\nThis patch fixes hard-coded value for the size of a chunk that includes\ndisk header for persistent snapshot. It should be changed to existing\nmacro NUM_SNAPSHOT_HDR_CHUNKS instead of using hard-coded value 1.\n\nSigned-off-by: Tomohiro Kusumi \u003ckusumi.tomohiro@jp.fujitsu.com\u003e\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "a9c88f2ebc1a5937915cb3b89c9f03894134f39a",
      "tree": "84f409698a8b0c861b91f90dc8e8043009132398",
      "parents": [
        "402ab352c2c00ba8f90c724565f8cf31210d99cf"
      ],
      "author": {
        "name": "Julia Lawall",
        "email": "julia@diku.dk",
        "time": "Thu Aug 12 04:13:58 2010 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Aug 12 04:13:58 2010 +0100"
      },
      "message": "dm crypt: use kstrdup\n\nUse kstrdup when the goal of an allocation is copy a string into the\nallocated region.\n\nThe semantic patch that makes this change is as follows:\n(http://coccinelle.lip6.fr/)\n\n// \u003csmpl\u003e\n@@\nexpression from,to;\nexpression flag,E1,E2;\nstatement S;\n@@\n\n-  to \u003d kmalloc(strlen(from) + 1,flag);\n+  to \u003d kstrdup(from, flag);\n   ... when !\u003d \\(from \u003d E1 \\| to \u003d E1 \\)\n   if (to\u003d\u003dNULL || ...) S\n   ... when !\u003d \\(from \u003d E2 \\| to \u003d E2 \\)\n-  strcpy(to, from);\n// \u003c/smpl\u003e\n\nSigned-off-by: Julia Lawall \u003cjulia@diku.dk\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "402ab352c2c00ba8f90c724565f8cf31210d99cf",
      "tree": "d24566917708f1624a7af33bc049aa5dfb24e96c",
      "parents": [
        "3f77316de0ec0fd208467fbee8d9edc70e2c73b2"
      ],
      "author": {
        "name": "Arnd Bergmann",
        "email": "arnd@relay.de.ibm.com",
        "time": "Thu Aug 12 04:13:57 2010 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Aug 12 04:13:57 2010 +0100"
      },
      "message": "dm ioctl: use nonseekable_open\n\nThe dm control device does not implement read/write, so it has no use for\nseeking.  Using no_llseek prevents falling back to default_llseek, which\nrequires the BKL.\n\nSigned-off-by: Arnd Bergmann \u003carnd@arndb.de\u003e\nSigned-off-by: Frederic Weisbecker \u003cfweisbec@gmail.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "3f77316de0ec0fd208467fbee8d9edc70e2c73b2",
      "tree": "73a91aa53eefe9537432a344ebf116cc7d106e51",
      "parents": [
        "98f332855effef02aeb738e4d62e9a5b903c52fd"
      ],
      "author": {
        "name": "Kiyoshi Ueda",
        "email": "k-ueda@ct.jp.nec.com",
        "time": "Thu Aug 12 04:13:56 2010 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Aug 12 04:13:56 2010 +0100"
      },
      "message": "dm: separate device deletion from dm_put\n\nThis patch separates the device deletion code from dm_put()\nto make sure the deletion happens in the process context.\n\nBy this patch, device deletion always occurs in an ioctl (process)\ncontext and dm_put() can be called in interrupt context.\nAs a result, the request-based dm\u0027s bad dm_put() usage pointed out\nby Mikulas below disappears.\n    http://marc.info/?l\u003ddm-devel\u0026m\u003d126699981019735\u0026w\u003d2\n\nWithout this patch, I confirmed there is a case to crash the system:\n    dm_put() \u003d\u003e dm_table_destroy() \u003d\u003e vfree() \u003d\u003e BUG_ON(in_interrupt())\n\nSome more backgrounds and details:\nIn request-based dm, a device opener can remove a mapped_device\nwhile the last request is still completing, because bios in the last\nrequest complete first and then the device opener can close and remove\nthe mapped_device before the last request completes:\n  CPU0                                          CPU1\n  \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n  \u003c\u003cINTERRUPT\u003e\u003e\n  blk_end_request_all(clone_rq)\n    blk_update_request(clone_rq)\n      bio_endio(clone_bio) \u003d\u003d end_clone_bio\n        blk_update_request(orig_rq)\n          bio_endio(orig_bio)\n                                                \u003c\u003cI/O completed\u003e\u003e\n                                                dm_blk_close()\n                                                dev_remove()\n                                                  dm_put(md)\n                                                    \u003c\u003cFree md\u003e\u003e\n   blk_finish_request(clone_rq)\n     ....\n     dm_end_request(clone_rq)\n       free_rq_clone(clone_rq)\n       blk_end_request_all(orig_rq)\n       rq_completed(md)\n\nSo request-based dm used dm_get()/dm_put() to hold md for each I/O\nuntil its request completion handling is fully done.\nHowever, the final dm_put() can call the device deletion code which\nmust not be run in interrupt context and may cause kernel panic.\n\nTo solve the problem, this patch moves the device deletion code,\ndm_destroy(), to predetermined places that is actually deleting\nthe mapped_device in ioctl (process) context, and changes dm_put()\njust to decrement the reference count of the mapped_device.\nBy this change, dm_put() can be used in any context and the symmetric\nmodel below is introduced:\n    dm_create():  create a mapped_device\n    dm_destroy(): destroy a mapped_device\n    dm_get():     increment the reference count of a mapped_device\n    dm_put():     decrement the reference count of a mapped_device\n\ndm_destroy() waits for all references of the mapped_device to disappear,\nthen deletes the mapped_device.\n\ndm_destroy() uses active waiting with msleep(1), since deleting\nthe mapped_device isn\u0027t performance-critical task.\nAnd since at this point, nobody opens the mapped_device and no new\nreference will be taken, the pending counts are just for racing\ncompleting activity and will eventually decrease to zero.\n\nFor the unlikely case of the forced module unload, dm_destroy_immediate(),\nwhich doesn\u0027t wait and forcibly deletes the mapped_device, is also\nintroduced and used in dm_hash_remove_all().  Otherwise, \"rmmod -f\"\nmay be stuck and never return.\nAnd now, because the mapped_device is deleted at this point, subsequent\naccesses to the mapped_device may cause NULL pointer references.\n\nCc: stable@kernel.org\nSigned-off-by: Kiyoshi Ueda \u003ck-ueda@ct.jp.nec.com\u003e\nSigned-off-by: Jun\u0027ichi Nomura \u003cj-nomura@ce.jp.nec.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "98f332855effef02aeb738e4d62e9a5b903c52fd",
      "tree": "b10d7f632022415ddb047c2bacbaa1f861a76161",
      "parents": [
        "abdc568b0540bec6d3e0afebac496adef1189b77"
      ],
      "author": {
        "name": "Kiyoshi Ueda",
        "email": "k-ueda@ct.jp.nec.com",
        "time": "Thu Aug 12 04:13:55 2010 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Aug 12 04:13:55 2010 +0100"
      },
      "message": "dm ioctl: release _hash_lock between devices in remove_all\n\nThis patch changes dm_hash_remove_all() to release _hash_lock when\nremoving a device.  After removing the device, dm_hash_remove_all()\ntakes _hash_lock and searches the hash from scratch again.\n\nThis patch is a preparation for the next patch, which changes device\ndeletion code to wait for md reference to be 0.  Without this patch,\nthe wait in the next patch may cause AB-BA deadlock:\n  CPU0                                CPU1\n  -----------------------------------------------------------------------\n  dm_hash_remove_all()\n    down_write(_hash_lock)\n                                      table_status()\n                                        md \u003d find_device()\n                                               dm_get(md)\n                                                 \u003cincrement md-\u003eholders\u003e\n                                        dm_get_live_or_inactive_table()\n                                          dm_get_inactive_table()\n                                            down_write(_hash_lock)\n    \u003cin the md deletion code\u003e\n      \u003cwait for md-\u003eholders to be 0\u003e\n\nSigned-off-by: Kiyoshi Ueda \u003ck-ueda@ct.jp.nec.com\u003e\nSigned-off-by: Jun\u0027ichi Nomura \u003cj-nomura@ce.jp.nec.com\u003e\nCc: stable@kernel.org\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "abdc568b0540bec6d3e0afebac496adef1189b77",
      "tree": "1c88c8de6e90b7f9cbbc788fa9e3fb539f1d231c",
      "parents": [
        "856a6f1dbd8940e72755af145ebcd806408ecedd"
      ],
      "author": {
        "name": "Kiyoshi Ueda",
        "email": "k-ueda@ct.jp.nec.com",
        "time": "Thu Aug 12 04:13:54 2010 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Aug 12 04:13:54 2010 +0100"
      },
      "message": "dm: prevent access to md being deleted\n\nThis patch prevents access to mapped_device which is being deleted.\n\nCurrently, even after a mapped_device has been removed from the hash,\nit could be accessed through idr_find() using minor number.\nThat could cause a race and NULL pointer reference below:\n  CPU0                          CPU1\n  ------------------------------------------------------------------\n  dev_remove(param)\n    down_write(_hash_lock)\n    dm_lock_for_deletion(md)\n      spin_lock(_minor_lock)\n      set_bit(DMF_DELETING)\n      spin_unlock(_minor_lock)\n    __hash_remove(hc)\n    up_write(_hash_lock)\n                                dev_status(param)\n                                  md \u003d find_device(param)\n                                         down_read(_hash_lock)\n                                         __find_device_hash_cell(param)\n                                           dm_get_md(param-\u003edev)\n                                             md \u003d dm_find_md(dev)\n                                                    spin_lock(_minor_lock)\n                                                    md \u003d idr_find(MINOR(dev))\n                                                    spin_unlock(_minor_lock)\n    dm_put(md)\n      free_dev(md)\n                                             dm_get(md)\n                                         up_read(_hash_lock)\n                                  __dev_status(md, param)\n                                  dm_put(md)\n\nThis patch fixes such problems.\n\nSigned-off-by: Kiyoshi Ueda \u003ck-ueda@ct.jp.nec.com\u003e\nSigned-off-by: Jun\u0027ichi Nomura \u003cj-nomura@ce.jp.nec.com\u003e\nCc: stable@kernel.org\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "856a6f1dbd8940e72755af145ebcd806408ecedd",
      "tree": "e9fcdd440e5a4dbc58ffe59699b918d34b1cdd21",
      "parents": [
        "094ea9a071f68bd6f56c3f8cdeb5263727b68ce9"
      ],
      "author": {
        "name": "Peter Rajnoha",
        "email": "prajnoha@redhat.com",
        "time": "Thu Aug 12 04:13:53 2010 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Aug 12 04:13:53 2010 +0100"
      },
      "message": "dm ioctl: return uevent flag after rename\n\nAll the dm ioctls that generate uevents set the DM_UEVENT_GENERATED flag so\nthat userspace knows whether or not to wait for a uevent to be processed\nbefore continuing,\n\nThe dm rename ioctl sets this flag but was not structured to return it\nto userspace.  This patch restructures the rename ioctl processing to\nbehave like the other ioctls that return data and so fix this.\n\nSigned-off-by: Peter Rajnoha \u003cprajnoha@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "094ea9a071f68bd6f56c3f8cdeb5263727b68ce9",
      "tree": "26455271959efc8241adaee9f49c31e87606c9ff",
      "parents": [
        "6be544940109b4c45f560785fe5798ce3fdc1922"
      ],
      "author": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Aug 12 04:13:52 2010 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Aug 12 04:13:52 2010 +0100"
      },
      "message": "dm ioctl: make __dev_status void\n\n__dev_status() cannot fail so make it void and simplify callers.\n\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "6be544940109b4c45f560785fe5798ce3fdc1922",
      "tree": "46307861cfa5d9cc00ba936a0db76aa5feac5226",
      "parents": [
        "c24110450650f17f7d3ba4fbe01f01ac5a115456"
      ],
      "author": {
        "name": "Peter Rajnoha",
        "email": "prajnoha@redhat.com",
        "time": "Thu Aug 12 04:13:52 2010 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Aug 12 04:13:52 2010 +0100"
      },
      "message": "dm ioctl: remove __dev_status from geometry and target message\n\nRemove useless __dev_status call while processing an ioctl that sets up\ndevice geometry and target message.  The data is not returned to\nuserspace so there is no point collecting it and in the case of\ntarget_message it is collected before processing the message so if it\ndid return it might be stale.\n\nSigned-off-by: Peter Rajnoha \u003cprajnoha@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": "6bbf79a14080a0c61212f53b4b87dc1a99fedf9c",
      "tree": "332dea35445605f6e1bacd9330500e9d93057319",
      "parents": [
        "5af568cbd55f60b5a1d174f621b273e4f585dc35"
      ],
      "author": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Aug 12 04:13:49 2010 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Aug 12 04:13:49 2010 +0100"
      },
      "message": "dm mpath: fix NULL pointer dereference when path parameters missing\n\nmultipath_ctr() forgets to return an error after detecting\nmissing path parameters.  Fix this.\n\nSigned-off-by: Patrick LoPresti \u003clopresti@gmail.com\u003e\nCc: stable@kernel.org\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "3d30701b58970425e1d45994d6cb82f828924fdd",
      "tree": "8b14cf462628bebf8548c1b8c205a674564052d1",
      "parents": [
        "8cbd84f2dd4e52a8771b191030c374ba3e56d291",
        "fd8aa2c1811bf60ccb2d5de0579c6f62aec1772d"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Aug 10 15:38:19 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Aug 10 15:38:19 2010 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://neil.brown.name/md\n\n* \u0027for-linus\u0027 of git://neil.brown.name/md: (24 commits)\n  md: clean up do_md_stop\n  md: fix another deadlock with removing sysfs attributes.\n  md: move revalidate_disk() back outside open_mutex\n  md/raid10: fix deadlock with unaligned read during resync\n  md/bitmap:  separate out loading a bitmap from initialising the structures.\n  md/bitmap: prepare for storing write-intent-bitmap via dm-dirty-log.\n  md/bitmap: optimise scanning of empty bitmaps.\n  md/bitmap: clean up plugging calls.\n  md/bitmap: reduce dependence on sysfs.\n  md/bitmap: white space clean up and similar.\n  md/raid5: export raid5 unplugging interface.\n  md/plug: optionally use plugger to unplug an array during resync/recovery.\n  md/raid5: add simple plugging infrastructure.\n  md/raid5: export is_congested test\n  raid5: Don\u0027t set read-ahead when there is no queue\n  md: add support for raising dm events.\n  md: export various start/stop interfaces\n  md: split out md_rdev_init\n  md: be more careful setting MD_CHANGE_CLEAN\n  md/raid5: ensure we create a unique name for kmem_cache when mddev has no gendisk\n  ...\n"
    },
    {
      "commit": "fd8aa2c1811bf60ccb2d5de0579c6f62aec1772d",
      "tree": "311567d03758afc3a93b4273fe172836e89bb01d",
      "parents": [
        "6e17b0276452912cb13445e5ea552b599984675f",
        "2144381da478cc4aa3a29ee29b0c5e6ddaaced14"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Aug 10 10:02:33 2010 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Aug 10 10:02:33 2010 +1000"
      },
      "message": "Merge git://git.infradead.org/users/dwmw2/libraid-2.6 into for-linus\n"
    },
    {
      "commit": "2144381da478cc4aa3a29ee29b0c5e6ddaaced14",
      "tree": "380a29fec86b537ed602d12f4050654b1c66c27c",
      "parents": [
        "45d7f32c7a43cbb9592886d38190e379e2eb2226",
        "e5d84970a554d5c0072043a7b9f0f5b88b5fdfe1"
      ],
      "author": {
        "name": "David Woodhouse",
        "email": "David.Woodhouse@intel.com",
        "time": "Mon Aug 09 10:36:44 2010 +0100"
      },
      "committer": {
        "name": "David Woodhouse",
        "email": "David.Woodhouse@intel.com",
        "time": "Mon Aug 09 10:36:44 2010 +0100"
      },
      "message": "Merge branch \u0027async\u0027 of macbook:git/btrfs-unstable\n\nConflicts:\n\tdrivers/md/Makefile\n\tlib/raid6/unroll.pl\n"
    },
    {
      "commit": "6e17b0276452912cb13445e5ea552b599984675f",
      "tree": "1ccac9c3d01f7ea8c6c0061948b92c901253e676",
      "parents": [
        "bb4f1e9d0e2ef93de8e36ca0f5f26625fcd70b7d"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Sat Aug 07 21:41:19 2010 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Sun Aug 08 21:22:45 2010 +1000"
      },
      "message": "md: clean up do_md_stop\n\nThere is only one error exit from do_md_stop, so make that more\nexplicit and discard the \u0027err\u0027 variable.\nAlso drop the \u0027revalidate\u0027 variable by moving the unlock calls around.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "bb4f1e9d0e2ef93de8e36ca0f5f26625fcd70b7d",
      "tree": "7c7edc0d5fa2b5702358f11396d52d07183708c0",
      "parents": [
        "147e0b6a639ac581ca3bf627bedc3f4a6d3eca66"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Sun Aug 08 21:18:03 2010 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Sun Aug 08 21:21:27 2010 +1000"
      },
      "message": "md: fix another deadlock with removing sysfs attributes.\n\nMove the deletion of sysfs attributes from reconfig_mutex to\nopen_mutex didn\u0027t really help as a process can try to take\nopen_mutex while holding reconfig_mutex, so the same deadlock can\nhappen, just requiring one more process to be involved in the chain.\n\nI looks like I cannot easily use locking to wait for the sysfs\ndeletion to complete, so don\u0027t.\n\nThe only things that we cannot do while the deletions are still\npending is other things which can change the sysfs namespace: run,\ntakeover, stop.  Each of these can fail with -EBUSY.\nSo set a flag while doing a sysfs deletion, and fail run, takeover,\nstop if that flag is set.\n\nThis is suitable for 2.6.35.x\n\nCc: stable@kernel.org\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "147e0b6a639ac581ca3bf627bedc3f4a6d3eca66",
      "tree": "95ca7cb3b2f06586d678ec33c0e9910d11f3af42",
      "parents": [
        "51e9ac77035a3dfcb6fc0a88a0d80b6f99b5edb1"
      ],
      "author": {
        "name": "Dan Williams",
        "email": "dan.j.williams@intel.com",
        "time": "Fri Aug 06 18:01:59 2010 -0700"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Sun Aug 08 21:20:17 2010 +1000"
      },
      "message": "md: move revalidate_disk() back outside open_mutex\n\nCommit b821eaa5 \"md: remove -\u003echanged and related code\" moved\nrevalidate_disk() under open_mutex, and lockdep noticed.\n\n[ INFO: possible circular locking dependency detected ]\n2.6.32-mdadm-locking #1\n-------------------------------------------------------\nmdadm/3640 is trying to acquire lock:\n (\u0026bdev-\u003ebd_mutex){+.+.+.}, at: [\u003cffffffff811acecb\u003e] revalidate_disk+0x5b/0x90\n\nbut task is already holding lock:\n (\u0026mddev-\u003eopen_mutex){+.+...}, at: [\u003cffffffffa055e07a\u003e] do_md_stop+0x4a/0x4d0 [md_mod]\n\nwhich lock already depends on the new lock.\n\nIt is suitable for 2.6.35.x\n\nCc: \u003cstable@kernel.org\u003e\nReported-by: Przemyslaw Czarnowski \u003cprzemyslaw.hawrylewicz.czarnowski@intel.com\u003e\nSigned-off-by: Dan Williams \u003cdan.j.williams@intel.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "6e9624b8caec290d28b4c6d9ec75749df6372b87",
      "tree": "47225b544e1da82742795553dc4e8aa70c17afdc",
      "parents": [
        "8a6cfeb6deca3a8fefd639d898b0d163c0b5d368"
      ],
      "author": {
        "name": "Arnd Bergmann",
        "email": "arnd@arndb.de",
        "time": "Sat Aug 07 18:25:34 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sat Aug 07 18:25:34 2010 +0200"
      },
      "message": "block: push down BKL into .open and .release\n\nThe open and release block_device_operations are currently\ncalled with the BKL held. In order to change that, we must\nfirst make sure that all drivers that currently rely\non this have no regressions.\n\nThis blindly pushes the BKL into all .open and .release\noperations for all block drivers to prepare for the\nnext step. The drivers can subsequently replace the BKL\nwith their own locks or remove it completely when it can\nbe shown that it is not needed.\n\nThe functions blkdev_get and blkdev_put are the only\nremaining users of the big kernel lock in the block\nlayer, besides a few uses in the ioctl code, none\nof which need to serialize with blkdev_{get,put}.\n\nMost of these two functions is also under the protection\nof bdev-\u003ebd_mutex, including the actual calls to\n-\u003eopen and -\u003erelease, and the common code does not\naccess any global data structures that need the BKL.\n\nSigned-off-by: Arnd Bergmann \u003carnd@arndb.de\u003e\nAcked-by: Christoph Hellwig \u003chch@infradead.org\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "00fff26539bfe3fad21c164fc4002d9ede056fb0",
      "tree": "4909c8eed03133b1d46f689e465ed1f579b8e282",
      "parents": [
        "afc23068103ccfbf1917eb2a007bc15ab5418cc9"
      ],
      "author": {
        "name": "FUJITA Tomonori",
        "email": "fujita.tomonori@lab.ntt.co.jp",
        "time": "Sat Jul 03 17:45:40 2010 +0900"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sat Aug 07 18:24:15 2010 +0200"
      },
      "message": "block: remove q-\u003eprepare_flush_fn completely\n\nThis removes q-\u003eprepare_flush_fn completely (changes the\nblk_queue_ordered API).\n\nSigned-off-by: FUJITA Tomonori \u003cfujita.tomonori@lab.ntt.co.jp\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "144d6ed551ce430084489b198826c89bac5680dc",
      "tree": "78b59ca5c4487784bfc2a16bcd91c0cb41631f8a",
      "parents": [
        "98d8c8f40ed72d997e50bc107a5cc1a6cee19e76"
      ],
      "author": {
        "name": "FUJITA Tomonori",
        "email": "fujita.tomonori@lab.ntt.co.jp",
        "time": "Sat Jul 03 17:45:37 2010 +0900"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sat Aug 07 18:24:14 2010 +0200"
      },
      "message": "dm: stop using q-\u003eprepare_flush_fn\n\nuse REQ_FLUSH flag instead.\n\nSigned-off-by: FUJITA Tomonori \u003cfujita.tomonori@lab.ntt.co.jp\u003e\nCc: Alasdair G Kergon \u003cagk@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "7b6d91daee5cac6402186ff224c3af39d79f4a0e",
      "tree": "b1518cf0b6c301178e0a320f80610cd5b3aa7625",
      "parents": [
        "33659ebbae262228eef4e0fe990f393d1f0ed941"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Sat Aug 07 18:20:39 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sat Aug 07 18:20:39 2010 +0200"
      },
      "message": "block: unify flags for struct bio and struct request\n\nRemove the current bio flags and reuse the request flags for the bio, too.\nThis allows to more easily trace the type of I/O from the filesystem\ndown to the block driver.  There were two flags in the bio that were\nmissing in the requests:  BIO_RW_UNPLUG and BIO_RW_AHEAD.  Also I\u0027ve\nrenamed two request flags that had a superflous RW in them.\n\nNote that the flags are in bio.h despite having the REQ_ name - as\nblkdev.h includes bio.h that is the only way to go for now.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "33659ebbae262228eef4e0fe990f393d1f0ed941",
      "tree": "fcb537f09359c8dad3a6f6e16dc4319562dc42cc",
      "parents": [
        "7e005f79791dcd58436c88ded4a7f5aed1b82147"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Sat Aug 07 18:17:56 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sat Aug 07 18:17:56 2010 +0200"
      },
      "message": "block: remove wrappers for request type/flags\n\nRemove all the trivial wrappers for the cmd_type and cmd_flags fields in\nstruct requests.  This allows much easier grepping for different request\ntypes instead of unwinding through macros.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "51e9ac77035a3dfcb6fc0a88a0d80b6f99b5edb1",
      "tree": "94167223c5711c47169db672a0ec0d23a36208b9",
      "parents": [
        "69e51b449d383e97b1b9f890f8378c96e9e17346"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Sat Aug 07 21:17:00 2010 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Sat Aug 07 21:17:00 2010 +1000"
      },
      "message": "md/raid10: fix deadlock with unaligned read during resync\n\nIf the \u0027bio_split\u0027 path in raid10-read is used while\nresync/recovery is happening it is possible to deadlock.\nFix this be elevating -\u003enr_waiting for the duration of both\nparts of the split request.\n\nThis fixes a bug that has been present since 2.6.22\nbut has only started manifesting recently for unknown reasons.\nIt is suitable for and -stable since then.\n\nReported-by:  Justin Bronder \u003cjsbronder@gentoo.org\u003e\nTested-by:  Justin Bronder \u003cjsbronder@gentoo.org\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\nCc: stable@kernel.org\n"
    },
    {
      "commit": "69e51b449d383e97b1b9f890f8378c96e9e17346",
      "tree": "650123fa4f08e8fa7f348a4ca875c59c129e5d84",
      "parents": [
        "e384e58549a2e9a83071ad80280c1a9053cfd84c"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Jun 01 19:37:35 2010 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Jul 26 13:21:34 2010 +1000"
      },
      "message": "md/bitmap:  separate out loading a bitmap from initialising the structures.\n\ndm makes this distinction between -\u003ectr and -\u003eresume, so we need to\ntoo.\n\nAlso get the new bitmap_load to clear out the bitmap first, as this is\nmost consistent with the dm suspend/resume approach\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "e384e58549a2e9a83071ad80280c1a9053cfd84c",
      "tree": "805619143612ddc8cc71a45dd4522393c23a576f",
      "parents": [
        "ef4256733506f2459a0c436b62267d22a3f0cec6"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Jun 01 19:37:34 2010 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Jul 26 13:21:34 2010 +1000"
      },
      "message": "md/bitmap: prepare for storing write-intent-bitmap via dm-dirty-log.\n\nThis allows md/raid5 to fully work as a dm target.\n\nNormally md uses a \u0027filemap\u0027 which contains a list of pages of bits\neach of which may be written separately.\ndm-log uses and all-or-nothing approach to writing the log, so\nwhen using a dm-log, -\u003efilemap is NULL and the flags normally stored\nin filemap_attr are stored in -\u003elogattrs instead.\n\n\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    }
  ],
  "next": "ef4256733506f2459a0c436b62267d22a3f0cec6"
}
