)]}'
{
  "log": [
    {
      "commit": "b35f8caa0890169000fec22902290d9a15274cbd",
      "tree": "a1a8ad3e5ba8b36da631d7125e0deb4ae743955a",
      "parents": [
        "b2174eebd1fadb76454dad09a1dacbc17081e6b0"
      ],
      "author": {
        "name": "Milan Broz",
        "email": "mbroz@redhat.com",
        "time": "Mon Mar 16 17:44:36 2009 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Mon Mar 16 17:44:36 2009 +0000"
      },
      "message": "dm crypt: wait for endio to complete before destruction\n\nThe following oops has been reported when dm-crypt runs over a loop device.\n\n...\n[   70.381058] Process loop0 (pid: 4268, ti\u003dcf3b2000 task\u003dcf1cc1f0 task.ti\u003dcf3b2000)\n...\n[   70.381058] Call Trace:\n[   70.381058]  [\u003cd0d76601\u003e] ? crypt_dec_pending+0x5e/0x62 [dm_crypt]\n[   70.381058]  [\u003cd0d767b8\u003e] ? crypt_endio+0xa2/0xaa [dm_crypt]\n[   70.381058]  [\u003cd0d76716\u003e] ? crypt_endio+0x0/0xaa [dm_crypt]\n[   70.381058]  [\u003cc01a2f24\u003e] ? bio_endio+0x2b/0x2e\n[   70.381058]  [\u003cd0806530\u003e] ? dec_pending+0x224/0x23b [dm_mod]\n[   70.381058]  [\u003cd08066e4\u003e] ? clone_endio+0x79/0xa4 [dm_mod]\n[   70.381058]  [\u003cd080666b\u003e] ? clone_endio+0x0/0xa4 [dm_mod]\n[   70.381058]  [\u003cc01a2f24\u003e] ? bio_endio+0x2b/0x2e\n[   70.381058]  [\u003cc02bad86\u003e] ? loop_thread+0x380/0x3b7\n[   70.381058]  [\u003cc02ba8a1\u003e] ? do_lo_send_aops+0x0/0x165\n[   70.381058]  [\u003cc013754f\u003e] ? autoremove_wake_function+0x0/0x33\n[   70.381058]  [\u003cc02baa06\u003e] ? loop_thread+0x0/0x3b7\n\nWhen a table is being replaced, it waits for I/O to complete\nbefore destroying the mempool, but the endio function doesn\u0027t\ncall mempool_free() until after completing the bio.\n\nFix it by swapping the order of those two operations.\n\nThe same problem occurs in dm.c with md referenced after dec_pending.\nAgain, we swap the order.\n\nCc: stable@kernel.org\nSigned-off-by: Milan Broz \u003cmbroz@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "b2174eebd1fadb76454dad09a1dacbc17081e6b0",
      "tree": "a53722388ed012d097cf58a29e484957109c0b7b",
      "parents": [
        "d659e6cc98766a1a61d6bdd283f95d149abd7719"
      ],
      "author": {
        "name": "Huang Ying",
        "email": "ying.huang@intel.com",
        "time": "Mon Mar 16 17:44:33 2009 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Mon Mar 16 17:44:33 2009 +0000"
      },
      "message": "dm crypt: fix kcryptd_async_done parameter\n\nIn the async encryption-complete function (kcryptd_async_done), the\ncrypto_async_request passed in may be different from the one passed to\ncrypto_ablkcipher_encrypt/decrypt.  Only crypto_async_request-\u003edata is\nguaranteed to be same as the one passed in.  The current\nkcryptd_async_done uses the passed-in crypto_async_request directly\nwhich may cause the AES-NI-based AES algorithm implementation to panic.\n\nThis patch fixes this bug by only using crypto_async_request-\u003edata,\nwhich points to dm_crypt_request, the crypto_async_request passed in.\nThe original data (convert_context) is gotten from dm_crypt_request.\n\n[mbroz@redhat.com: reworked]\nCc: stable@kernel.org\nSigned-off-by: Huang Ying \u003cying.huang@intel.com\u003e\nCc: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\nSigned-off-by: Milan Broz \u003cmbroz@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "d659e6cc98766a1a61d6bdd283f95d149abd7719",
      "tree": "6bed5b474d50d345a2d16562cf521d7bfa7243b8",
      "parents": [
        "f80a557008462a0a4adef25407f1872e793d8dd5"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Mon Mar 16 17:44:30 2009 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Mon Mar 16 17:44:30 2009 +0000"
      },
      "message": "dm io: respect BIO_MAX_PAGES limit\n\ndm-io calls bio_get_nr_vecs to get the maximum number of pages to use\nfor a given device.  It allocates one additional bio_vec to use\ninternally but failed to respect BIO_MAX_PAGES, so fix this.\n\nThis was the likely cause of:\n  https://bugzilla.redhat.com/show_bug.cgi?id\u003d173153\n\nCc: stable@kernel.org\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "f80a557008462a0a4adef25407f1872e793d8dd5",
      "tree": "41c0d0b924dc392adb413ef4ebe35bb42ef24727",
      "parents": [
        "bc0fd67feba2e0770aad85393500ba77c6489f1c"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Mon Mar 16 17:44:26 2009 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Mon Mar 16 17:44:26 2009 +0000"
      },
      "message": "dm table: rework reference counting fix\n\nFix an error introduced in dm-table-rework-reference-counting.patch.\n\nWhen there is failure after table initialization, we need to use\ndm_table_destroy, not dm_table_put, to free the table.\n\ndm_table_put may be used only after dm_table_get.\n\nCc: Kiyoshi Ueda \u003ck-ueda@ct.jp.nec.com\u003e\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nReviewed-by: Jonathan Brassow \u003cjbrassow@redhat.com\u003e\nReviewed-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "bc0fd67feba2e0770aad85393500ba77c6489f1c",
      "tree": "898f91bc16492588dc74f191979dcca5462cdc36",
      "parents": [
        "5bee17f18b595937e6beafeee5197868a3f74a06"
      ],
      "author": {
        "name": "Milan Broz",
        "email": "mbroz@redhat.com",
        "time": "Mon Mar 16 16:56:01 2009 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Mon Mar 16 16:56:01 2009 +0000"
      },
      "message": "dm ioctl: validate name length when renaming\n\nWhen renaming a mapped device validate the length of the new name.\n\nThe rename ioctl accepted any correctly-terminated string enclosed\nwithin the data passed from userspace.  The other ioctls enforce a\nsize limit of DM_NAME_LEN.  If the name is changed and becomes longer\nthan that, the device can no longer be addressed by name.\n\nFix it by properly checking for device name length (including\nterminating zero).\n\nCc: stable@kernel.org\nSigned-off-by: Milan Broz \u003cmbroz@redhat.com\u003e\nReviewed-by: Jonathan Brassow \u003cjbrassow@redhat.com\u003e\nReviewed-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "5fd3a17ed456637a224cf4ca82b9ad9d005bc8d4",
      "tree": "24906c956159349cddecc43b3479d2a9add364df",
      "parents": [
        "fec6c6fec3e20637bee5d276fb61dd8b49a3f9cc"
      ],
      "author": {
        "name": "Dan Williams",
        "email": "dan.j.williams@intel.com",
        "time": "Wed Mar 04 00:57:25 2009 -0700"
      },
      "committer": {
        "name": "Dan Williams",
        "email": "dan.j.williams@intel.com",
        "time": "Wed Mar 04 00:57:25 2009 -0700"
      },
      "message": "md: fix deadlock when stopping arrays\n\nResolve a deadlock when stopping redundant arrays, i.e. ones that\nrequire a call to sysfs_remove_group when shutdown.  The deadlock is\nsummarized below:\n\nThread1                Thread2\n-------                -------\nread sysfs attribute   stop array\n                       take mddev lock\n                       sysfs_remove_group\nsysfs_get_active\nwait for mddev lock\n                       wait for active\n\nSysrq-w:\n--------\nmdmon         S 00000017  2212  4163      1\n  f1982ea8 00000046 2dcf6b85 00000017 c0b23100 f2f83ed0 c0b23100 f2f8413c\n  c0b23100 c0b23100 c0b1fb98 f2f8413c 00000000 f2f8413c c0b23100 f2291ecc\n  00000002 c0b23100 00000000 00000017 f2f83ed0 f1982eac 00000046 c044d9dd\nCall Trace:\n  [\u003cc044d9dd\u003e] ? debug_mutex_add_waiter+0x1d/0x58\n  [\u003cc06ef451\u003e] __mutex_lock_common+0x1d9/0x338\n  [\u003cc06ef451\u003e] ? __mutex_lock_common+0x1d9/0x338\n  [\u003cc06ef5e3\u003e] mutex_lock_interruptible_nested+0x33/0x3a\n  [\u003cc0634553\u003e] ? mddev_lock+0x14/0x16\n  [\u003cc0634553\u003e] mddev_lock+0x14/0x16\n  [\u003cc0634eda\u003e] md_attr_show+0x2a/0x49\n  [\u003cc04e9997\u003e] sysfs_read_file+0x93/0xf9\nmdadm         D 00000017  2812  4177      1\n  f0401d78 00000046 430456f8 00000017 f0401d58 f0401d20 c0b23100 f2da2c4c\n  c0b23100 c0b23100 c0b1fb98 f2da2c4c 0a10fc36 00000000 c0b23100 f0401d70\n  00000003 c0b23100 00000000 00000017 f2da29e0 00000001 00000002 00000000\nCall Trace:\n  [\u003cc06eed1b\u003e] schedule_timeout+0x1b/0x95\n  [\u003cc06eed1b\u003e] ? schedule_timeout+0x1b/0x95\n  [\u003cc06eeb97\u003e] ? wait_for_common+0x34/0xdc\n  [\u003cc044fa8a\u003e] ? trace_hardirqs_on_caller+0x18/0x145\n  [\u003cc044fbc2\u003e] ? trace_hardirqs_on+0xb/0xd\n  [\u003cc06eec03\u003e] wait_for_common+0xa0/0xdc\n  [\u003cc0428c7c\u003e] ? default_wake_function+0x0/0x12\n  [\u003cc06eeccc\u003e] wait_for_completion+0x17/0x19\n  [\u003cc04ea620\u003e] sysfs_addrm_finish+0x19f/0x1d1\n  [\u003cc04e920e\u003e] sysfs_hash_and_remove+0x42/0x55\n  [\u003cc04eb4db\u003e] sysfs_remove_group+0x57/0x86\n  [\u003cc0638086\u003e] do_md_stop+0x13a/0x499\n\nThis has been there for a while, but is easier to trigger now that mdmon\nis closely watching sysfs.\n\nCc: \u003cstable@kernel.org\u003e\nReported-by: Jacek Danecki \u003cjacek.danecki@intel.com\u003e\nSigned-off-by: Dan Williams \u003cdan.j.williams@intel.com\u003e\n"
    },
    {
      "commit": "73d5c38a9536142e062c35997b044e89166e063b",
      "tree": "68fd385cbdee1fa75269974ef210d53a0ae5e311",
      "parents": [
        "78200d45cde2a79c0d0ae0407883bb264caa3c18"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Feb 25 13:18:47 2009 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Feb 25 13:18:47 2009 +1100"
      },
      "message": "md: avoid races when stopping resync.\n\nThere has been a race in raid10 and raid1 for a long time\nwhich has only recently started showing up due to a scheduler changed.\n\nWhen a sync_read request finishes, as soon as reschedule_retry\nis called, another thread can mark the resync request as having\ncompleted, so md_do_sync can finish, -\u003estop can be called, and\n-\u003econf can be freed.  So using conf after reschedule_retry is not\nsafe.\n\nSimilarly, when finishing a sync_write, calling md_done_sync must be\nthe last thing we do, as it allows a chain of events which will free\nconf and other data structures.\n\nThe first of these requires action in raid10.c\nThe second requires action in raid1.c and raid10.c\n\nCc: stable@kernel.org\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "78200d45cde2a79c0d0ae0407883bb264caa3c18",
      "tree": "bda4b9d8607410d01f819b6789b58d74188c915b",
      "parents": [
        "09b4068a7fe442efc40e9dcbcf5ff37c3338ab15"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Feb 25 13:18:47 2009 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Feb 25 13:18:47 2009 +1100"
      },
      "message": "md/raid10:  Don\u0027t call bitmap_cond_end_sync when we are doing recovery.\n\nFor raid1/4/5/6, resync (fixing inconsistencies between devices) is\nvery similar to recovery (rebuilding a failed device onto a spare).\nThe both walk through the device addresses in order.\n\nFor raid10 it can be quite different.  resync follows the \u0027array\u0027\naddress, and makes sure all copies are the same.  Recover walks\nthrough \u0027device\u0027 addresses and recreates each missing block.\n\nThe \u0027bitmap_cond_end_sync\u0027 function allows the write-intent-bitmap\n(When present) to be updated to reflect a partially completed resync.\nIt makes assumptions which mean that it does not work correctly for\nraid10 recovery at all.\n\nIn particularly, it can cause bitmap-directed recovery of a raid10 to\nnot recovery some of the blocks that need to be recovered.\n\nSo move the call to bitmap_cond_end_sync into the resync path, rather\nthan being in the common \"resync or recovery\" path.\n\n\nCc: stable@kernel.org\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "09b4068a7fe442efc40e9dcbcf5ff37c3338ab15",
      "tree": "c7d2eb0715e2b12cac4bc2196583a510c234743c",
      "parents": [
        "2ec77fc93ca8731368fbe8e71f805c0569d4bcee"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Feb 25 13:18:47 2009 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Feb 25 13:18:47 2009 +1100"
      },
      "message": "md/raid10:  Don\u0027t skip more than 1 bitmap-chunk at a time during recovery.\n\nWhen doing recovery on a raid10 with a write-intent bitmap, we only\nneed to recovery chunks that are flagged in the bitmap.\n\nHowever if we choose to skip a chunk as it isn\u0027t flag, the code\ncurrently skips the whole raid10-chunk, thus it might not recovery\nsome blocks that need recovering.\n\nThis patch fixes it.\n\nIn case that is confusing, it might help to understand that there\nis a \u0027raid10 chunk size\u0027 which guides how data is distributed across\nthe devices, and a \u0027bitmap chunk size\u0027 which says how much data\ncorresponds to a single bit in the bitmap.\n\nThis bug only affects cases where the bitmap chunk size is smaller\nthan the raid10 chunk size.\n\n\n\nCc: stable@kernel.org\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "93dbb393503d53cd226e5e1f0088fe8f4dbaa2b8",
      "tree": "790365e207951cf6810e8995f3141ddc0b74519b",
      "parents": [
        "c1c201200a359cf3b6e2e36a4236cdca77a3cd8e"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Mon Feb 16 10:25:40 2009 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Wed Feb 18 10:32:00 2009 +0100"
      },
      "message": "block: fix bad definition of BIO_RW_SYNC\n\nWe can\u0027t OR shift values, so get rid of BIO_RW_SYNC and use BIO_RW_SYNCIO\nand BIO_RW_UNPLUG explicitly. This brings back the behaviour from before\n213d9417fec62ef4c3675621b9364a667954d4dd.\n\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "de01dfadf25bf83cfe3d85c163005c4320532658",
      "tree": "dc1cca5a6aa10ecc0fea2fb9f13534685ba8ff61",
      "parents": [
        "852c8bf484a0e17ee27f413ef26e87f522af5607"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Feb 06 18:02:46 2009 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Feb 06 18:02:46 2009 +1100"
      },
      "message": "md: Ensure an md array never has too many devices.\n\nEach different metadata format supported by md supports a\ndifferent maximum number of devices.\nWe really should be enforcing this maximum in the kernel, but\nwe aren\u0027t quite doing that properly.\n\nWe currently only enforce it at the \u0027hot_add\u0027 point, which is an\nolder interface which is not used by current userspace.\n\nWe need to also enforce it at \u0027add_new_disk\u0027 time for active arrays\nand at \u0027do_md_run\u0027 time when starting a new array.\n\nSo move the test from \u0027hot_add\u0027 into \u0027bind_rdev_to_array\u0027 which is\ncalled from both \u0027hot_add\u0027 and \u0027add_new_disk, and add a new\ntest in \u0027analyse_sbs\u0027 which is called from \u0027do_md_run\u0027.\n\nThis bug (or missing feature) has been around \"forever\" and so\nthe patch is suitable for any -stable that is currently maintained.\n\nCc: stable@kernel.org\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "852c8bf484a0e17ee27f413ef26e87f522af5607",
      "tree": "a2bf0b7c3a277c65cdad307a3d48ee358868769c",
      "parents": [
        "4706b349f4a8312d31b3d0cf61fe721699356920"
      ],
      "author": {
        "name": "Andre Noll",
        "email": "maan@systemlinux.org",
        "time": "Fri Feb 06 15:10:52 2009 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Feb 06 15:10:52 2009 +1100"
      },
      "message": "md: Fix a bug in linear.c causing which_dev() to return the wrong device.\n\nab5bd5cbc8d4b868378d062eed3d4240930fbb86 introduced the following\nbug in linear software raid for large arrays on 32 bit machines:\n\nwhich_dev() computes the device holding a given sector by shifting\ndown the sector number to a 32 bit range, dividing by the array\nspacing and looking up the resulting index in the hash table of\nthe array.\n\nBecause the computed index might be slightly too small, a loop at\nthe end of which_dev() increases the index until the given sector\nactually falls into the range of the device associated with that index.\n\nThe changes of the above mentioned commit caused this loop to check\nwhether the _index_ rather than the sector number is small enough,\neffectively bypassing the loop and thus possibly returning the wrong\ndevice.\n\nAs reported by Simon Kirby, this leads to errors such as\n\n\tlinear_make_request: Sector 2340486136 out of bounds on dev sdi: 156301312 sectors, offset 2109870464\n\nFix this bug by introducing a local variable for the index so that\nthe variable containing the passed sector is left unchanged.\n\nCc: stable@kernel.org\nSigned-off-by: Andre Noll \u003cmaan@systemlinux.org\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "4706b349f4a8312d31b3d0cf61fe721699356920",
      "tree": "86c0ee896722e45e324a97b704c0419fbb968d4a",
      "parents": [
        "eda58a85ec3fc05855a26654d97a2b53f0e715b9"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Feb 06 15:06:47 2009 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Feb 06 15:06:47 2009 +1100"
      },
      "message": "md: Allow read error in a single drive raid1 to be passed up.\n\nIf a raid1 only has a single working device and gets a read error, \nwe choose to simply return that error up to the filesystem (or whatever)\nrather than failing the whole array.\n\nHowever the codes doesn\u0027t quite do that.  We attempt a readbalance\nwhich allocates the same drive, so we retry the read - indefinitely. \n\nInstead:  If read_balance in the error case chooses the same drive that just\nfailed, treat it as a failure and don\u0027t retry.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "4044ba58dd15cb01797c4fd034f39ef4a75f7cc3",
      "tree": "e1bea8143538fc3eaeeb8578c2f9231e32809a25",
      "parents": [
        "efeb53c0e57213e843b7ef3cc6ebcdea7d6186ac"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Jan 09 08:31:11 2009 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Jan 09 08:31:11 2009 +1100"
      },
      "message": "md: don\u0027t retry recovery of raid1 that fails due to error on source drive.\n\nIf a raid1 has only one working drive and it has a sector which\ngives an error on read, then an attempt to recover onto a spare will\nfail, but as the single remaining drive is not removed from the\narray, the recovery will be immediately re-attempted, resulting\nin an infinite recovery loop.\n\nSo detect this situation and don\u0027t retry recovery once an error\non the lone remaining drive is detected.\n\nAllow recovery to be retried once every time a spare is added\nin case the problem wasn\u0027t actually a media error.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "efeb53c0e57213e843b7ef3cc6ebcdea7d6186ac",
      "tree": "ef580effd8809fb0bc5d6ffa6f3b8abaa9180539",
      "parents": [
        "d3374825ce57ba2214d375023979f6197ccc1385"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Jan 09 08:31:10 2009 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Jan 09 08:31:10 2009 +1100"
      },
      "message": "md: Allow md devices to be created by name.\n\nUsing sequential numbers to identify md devices is somewhat artificial.\nUsing names can be a lot more user-friendly.\n\nAlso, creating md devices by opening the device special file is a bit\nawkward.\n\nSo this patch provides a new option for creating and naming devices.\n\nWriting a name such as \"md_home\" to\n    /sys/modules/md_mod/parameters/new_array\nwill cause an array with that name to be created.  It will appear in\n/sys/block/ /proc/partitions and /proc/mdstat as \u0027md_home\u0027.\nIt will have an arbitrary minor number allocated.\n\nmd devices that a created by an open are destroyed on the last\nclose when the device is inactive.\nFor named md devices, they will not be destroyed until the array\nis explicitly stopped, either with the STOP_ARRAY ioctl or by\nwriting \u0027clear\u0027 to /sys/block/md_XXXX/md/array_state.\n\nThe name of the array must start \u0027md_\u0027 to avoid conflict with\nother devices.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "d3374825ce57ba2214d375023979f6197ccc1385",
      "tree": "441ea927a7c702e4eadeafbac8be97d664bfb83b",
      "parents": [
        "a21d15042d8cd736caf82c2bac564f3f93f3d017"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Jan 09 08:31:10 2009 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Jan 09 08:31:10 2009 +1100"
      },
      "message": "md: make devices disappear when they are no longer needed.\n\nCurrently md devices, once created, never disappear until the module\nis unloaded.  This is essentially because the gendisk holds a\nreference to the mddev, and the mddev holds a reference to the\ngendisk, this a circular reference.\n\nIf we drop the reference from mddev to gendisk, then we need to ensure\nthat the mddev is destroyed when the gendisk is destroyed.  However it\nis not possible to hook into the gendisk destruction process to enable\nthis.\n\nSo we drop the reference from the gendisk to the mddev and destroy the\ngendisk when the mddev gets destroyed.  However this has a\ncomplication.\nBetween the call\n   __blkdev_get-\u003eget_gendisk-\u003ekobj_lookup-\u003emd_probe\nand the call\n   __blkdev_get-\u003emd_open\n\nthere is no obvious way to hold a reference on the mddev any more, so\nunless something is done, it will disappear and gendisk will be\ndestroyed prematurely.\n\nAlso, once we decide to destroy the mddev, there will be an unlockable\nmoment before the gendisk is unlinked (blk_unregister_region) during\nwhich a new reference to the gendisk can be created.  We need to\nensure that this reference can not be used.  i.e. the -\u003eopen must\nfail.\n\nSo:\n 1/  in md_probe we set a flag in the mddev (hold_active) which\n     indicates that the array should be treated as active, even\n     though there are no references, and no appearance of activity.\n     This is cleared by md_release when the device is closed if it\n     is no longer needed.\n     This ensures that the gendisk will survive between md_probe and\n     md_open.\n\n 2/  In md_open we check if the mddev we expect to open matches\n     the gendisk that we did open.\n     If there is a mismatch we return -ERESTARTSYS and modify\n     __blkdev_get to retry from the top in that case.\n     In the -ERESTARTSYS sys case we make sure to wait until\n     the old gendisk (that we succeeded in opening) is really gone so\n     we loop at most once.\n\nSome udev configurations will always open an md device when it first\nappears.   If we allow an md device that was just created by an open\nto disappear on an immediate close, then this can race with such udev\nconfigurations and result in an infinite loop the device being opened\nand closed, then re-open due to the \u0027ADD\u0027 even from the first open,\nand then close and so on.\nSo we make sure an md device, once created by an open, remains active\nat least until some md \u0027ioctl\u0027 has been made on it.  This means that\nall normal usage of md devices will allow them to disappear promptly\nwhen not needed, but the worst that an incorrect usage will do it\ncause an inactive md device to be left in existence (it can easily be\nremoved).\n\nAs an array can be stopped by writing to a sysfs attribute\n  echo clear \u003e /sys/block/mdXXX/md/array_state\nwe need to use scheduled work for deleting the gendisk and other\nkobjects.  This allows us to wait for any pending gendisk deletion to\ncomplete by simply calling flush_scheduled_work().\n\n\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "a21d15042d8cd736caf82c2bac564f3f93f3d017",
      "tree": "d430b6ae126e9bc8139d1c491b80a18cc86b27f1",
      "parents": [
        "8b76539823d71576927e3eb08b395eb6620f628d"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Jan 09 08:31:09 2009 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Jan 09 08:31:09 2009 +1100"
      },
      "message": "md: centralise all freeing of an \u0027mddev\u0027 in \u0027md_free\u0027\n\nmd_free is the .release handler for the md kobj_type.\nSo it makes sense to release all the objects referenced by\nthe mddev in there, rather than just prior to calling kobject_put\nfor what we think is the last time.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "8b76539823d71576927e3eb08b395eb6620f628d",
      "tree": "37f9c4da6c861a69b4695ea7818eab2cf6ce95f4",
      "parents": [
        "cd2ac9321c26dc7a76455cd2a4df89123fa2b73e"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Jan 09 08:31:08 2009 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Jan 09 08:31:08 2009 +1100"
      },
      "message": "md: move allocation of -\u003equeue from mddev_find to md_probe\n\nIt is more balanced to just do simple initialisation in mddev_find,\nwhich allocates and links a new md device, and leave all the\nmore sophisticated allocation to md_probe (which calls mddev_find).\nmd_probe already allocated the gendisk.  It should allocate the\nqueue too.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "cd2ac9321c26dc7a76455cd2a4df89123fa2b73e",
      "tree": "8163a2cc791282cf32fafed19a60f357882d6169",
      "parents": [
        "159ec1fc060ab22b157a62364045f5e98749c4d3"
      ],
      "author": {
        "name": "Cheng Renquan",
        "email": "crquan@gmail.com",
        "time": "Fri Jan 09 08:31:08 2009 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Jan 09 08:31:08 2009 +1100"
      },
      "message": "md: need another print_sb for mdp_superblock_1\n\nmd_print_devices is called in two code path: MD_BUG(...), and md_ioctl\nwith PRINT_RAID_DEBUG.  it will dump out all in use md devices\ninformation;\n\nHowever, it wrongly processed two types of superblock in one:\n\nThe header file \u003clinux/raid/md_p.h\u003e has defined two types of superblock,\nstruct mdp_superblock_s (typedefed with mdp_super_t) according to md with\nmetadata 0.90, and struct mdp_superblock_1 according to md with metadata\n1.0 and later,\n\nThese two types of superblock are very different,\n\nThe md_print_devices code processed them both in mdp_super_t, that would\nlead to wrong informaton dump like:\n\n\t[ 6742.345877]\n\t[ 6742.345887] md:\t**********************************\n\t[ 6742.345890] md:\t* \u003cCOMPLETE RAID STATE PRINTOUT\u003e *\n\t[ 6742.345892] md:\t**********************************\n\t[ 6742.345896] md1: \u003cram7\u003e\u003cram6\u003e\u003cram5\u003e\u003cram4\u003e\n\t[ 6742.345907] md: rdev ram7, SZ:00065472 F:0 S:1 DN:3\n\t[ 6742.345909] md: rdev superblock:\n\t[ 6742.345914] md:  SB: (V:0.90.0) ID:\u003c42ef13c7.598c059a.5f9f1645.801e9ee6\u003e CT:4919856d\n\t[ 6742.345918] md:     L5 S00065472 ND:4 RD:4 md1 LO:2 CS:65536\n\t[ 6742.345922] md:     UT:4919856d ST:1 AD:4 WD:4 FD:0 SD:0 CSUM:b7992907 E:00000001\n\t[ 6742.345924]      D  0:  DISK\u003cN:0,(1,8),R:0,S:6\u003e\n\t[ 6742.345930]      D  1:  DISK\u003cN:1,(1,10),R:1,S:6\u003e\n\t[ 6742.345933]      D  2:  DISK\u003cN:2,(1,12),R:2,S:6\u003e\n\t[ 6742.345937]      D  3:  DISK\u003cN:3,(1,14),R:3,S:6\u003e\n\t[ 6742.345942] md:     THIS:  DISK\u003cN:3,(1,14),R:3,S:6\u003e\n\t...\n\t[ 6742.346058] md0: \u003cram3\u003e\u003cram2\u003e\u003cram1\u003e\u003cram0\u003e\n\t[ 6742.346067] md: rdev ram3, SZ:00065472 F:0 S:1 DN:3\n\t[ 6742.346070] md: rdev superblock:\n\t[ 6742.346073] md:  SB: (V:1.0.0) ID:\u003c369aad81.00000000.00000000.00000000\u003e CT:9a322a9c\n\t[ 6742.346077] md:     L-1507699579 S976570180 ND:48 RD:0 md0 LO:65536 CS:196610\n\t[ 6742.346081] md:     UT:00000018 ST:0 AD:131048 WD:0 FD:8 SD:0 CSUM:00000000 E:00000000\n\t[ 6742.346084]      D  0:  DISK\u003cN:-1,(-1,-1),R:-1,S:-1\u003e\n\t[ 6742.346089]      D  1:  DISK\u003cN:-1,(-1,-1),R:-1,S:-1\u003e\n\t[ 6742.346092]      D  2:  DISK\u003cN:-1,(-1,-1),R:-1,S:-1\u003e\n\t[ 6742.346096]      D  3:  DISK\u003cN:-1,(-1,-1),R:-1,S:-1\u003e\n\t[ 6742.346102] md:     THIS:  DISK\u003cN:0,(0,0),R:0,S:0\u003e\n\t...\n\t[ 6742.346219] md:\t**********************************\n\t[ 6742.346221]\n\nHere md1 is metadata 0.90.0, and md0 is metadata 1.2\n\nAfter some more code to distinguish these two types of superblock, in this patch,\n\nit will generate dump information like:\n\n\t[ 7906.755790]\n\t[ 7906.755799] md:\t**********************************\n\t[ 7906.755802] md:\t* \u003cCOMPLETE RAID STATE PRINTOUT\u003e *\n\t[ 7906.755804] md:\t**********************************\n\t[ 7906.755808] md1: \u003cram7\u003e\u003cram6\u003e\u003cram5\u003e\u003cram4\u003e\n\t[ 7906.755819] md: rdev ram7, SZ:00065472 F:0 S:1 DN:3\n\t[ 7906.755821] md: rdev superblock (MJ:0):\n\t[ 7906.755826] md:  SB: (V:0.90.0) ID:\u003c3fca7a0d.a612bfed.5f9f1645.801e9ee6\u003e CT:491989f3\n\t[ 7906.755830] md:     L5 S00065472 ND:4 RD:4 md1 LO:2 CS:65536\n\t[ 7906.755834] md:     UT:491989f3 ST:1 AD:4 WD:4 FD:0 SD:0 CSUM:00fb52ad E:00000001\n\t[ 7906.755836]      D  0:  DISK\u003cN:0,(1,8),R:0,S:6\u003e\n\t[ 7906.755842]      D  1:  DISK\u003cN:1,(1,10),R:1,S:6\u003e\n\t[ 7906.755845]      D  2:  DISK\u003cN:2,(1,12),R:2,S:6\u003e\n\t[ 7906.755849]      D  3:  DISK\u003cN:3,(1,14),R:3,S:6\u003e\n\t[ 7906.755855] md:     THIS:  DISK\u003cN:3,(1,14),R:3,S:6\u003e\n\t...\n\t[ 7906.755972] md0: \u003cram3\u003e\u003cram2\u003e\u003cram1\u003e\u003cram0\u003e\n\t[ 7906.755981] md: rdev ram3, SZ:00065472 F:0 S:1 DN:3\n\t[ 7906.755984] md: rdev superblock (MJ:1):\n\t[ 7906.755989] md:  SB: (V:1) (F:0) Array-ID:\u003c5fbcf158:55aa:5fbe:9a79:1e939880dcbd\u003e\n\t[ 7906.755990] md:    Name: \"DG5:0\" CT:1226410480\n\t[ 7906.755998] md:       L5 SZ130944 RD:4 LO:2 CS:128 DO:24 DS:131048 SO:8 RO:0\n\t[ 7906.755999] md:     Dev:00000003 UUID: 9194d744:87f7:a448:85f2:7497b84ce30a\n\t[ 7906.756001] md:       (F:0) UT:1226410480 Events:0 ResyncOffset:-1 CSUM:0dbcd829\n\t[ 7906.756003] md:         (MaxDev:384)\n\t...\n\t[ 7906.756113] md:\t**********************************\n\t[ 7906.756116]\n\nthis md0 (metadata 1.2) information dumping is exactly according to struct\nmdp_superblock_1.\n\nSigned-off-by: Cheng Renquan \u003ccrquan@gmail.com\u003e\nCc: Neil Brown \u003cneilb@suse.de\u003e\nCc: Dan Williams \u003cdan.j.williams@gmail.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "159ec1fc060ab22b157a62364045f5e98749c4d3",
      "tree": "1de0edfd782245b271d2898e36ae76c00e1e1b6d",
      "parents": [
        "ccacc7d2cf03114a24ab903f710118e9e5d43273"
      ],
      "author": {
        "name": "Cheng Renquan",
        "email": "crquan@gmail.com",
        "time": "Fri Jan 09 08:31:08 2009 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Jan 09 08:31:08 2009 +1100"
      },
      "message": "md: use list_for_each_entry macro directly\n\nThe rdev_for_each macro defined in \u003clinux/raid/md_k.h\u003e is identical to\nlist_for_each_entry_safe, from \u003clinux/list.h\u003e, it should be defined to\nuse list_for_each_entry_safe, instead of reinventing the wheel.\n\nBut some calls to each_entry_safe don\u0027t really need a safe version,\njust a direct list_for_each_entry is enough, this could save a temp\nvariable (tmp) in every function that used rdev_for_each.\n\nIn this patch, most rdev_for_each loops are replaced by list_for_each_entry,\ntotally save many tmp vars; and only in the other situations that will call\nlist_del to delete an entry, the safe version is used.\n\nSigned-off-by: Cheng Renquan \u003ccrquan@gmail.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "ccacc7d2cf03114a24ab903f710118e9e5d43273",
      "tree": "c856e2a17f6c6a26996a8cfba87680a2375061d5",
      "parents": [
        "83838ed87898e0a8ff8dbf001e54e6c017f0a011"
      ],
      "author": {
        "name": "Andre Noll",
        "email": "maan@systemlinux.org",
        "time": "Fri Jan 09 08:31:08 2009 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Jan 09 08:31:08 2009 +1100"
      },
      "message": "md: raid0: make hash_spacing and preshift sector-based.\n\nThis patch renames the hash_spacing and preshift members of struct\nraid0_private_data to spacing and sector_shift respectively and\nchanges the semantics as follows:\n\nWe always have spacing \u003d 2 * hash_spacing. In case\nsizeof(sector_t) \u003e sizeof(u32) we also have sector_shift \u003d preshift + 1\nwhile sector_shift \u003d preshift \u003d 0 otherwise.\n\nNote that the values of nb_zone and zone are unaffected by these changes\nbecause in the sector_div() preceeding the assignement of these two\nvariables both arguments double.\n\nSigned-off-by: Andre Noll \u003cmaan@systemlinux.org\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "83838ed87898e0a8ff8dbf001e54e6c017f0a011",
      "tree": "218e6c8dbe52257251f165cd544c4bebbeae3c40",
      "parents": [
        "0825b87a7dd9645c7e16489fec839a3cb5c40a08"
      ],
      "author": {
        "name": "Andre Noll",
        "email": "maan@systemlinux.org",
        "time": "Fri Jan 09 08:31:07 2009 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Jan 09 08:31:07 2009 +1100"
      },
      "message": "md: raid0: Represent the size of strip zones in sectors.\n\nThis completes the block -\u003e sector conversion of struct strip_zone.\n\nSigned-off-by: Andre Noll \u003cmaan@systemlinux.org\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "0825b87a7dd9645c7e16489fec839a3cb5c40a08",
      "tree": "35c009c01470ce79fd1bc93d19c5bdb6b2a3b761",
      "parents": [
        "6b8796cc3decb43c7c67a13a0699b6a21b754c78"
      ],
      "author": {
        "name": "Andre Noll",
        "email": "maan@systemlinux.org",
        "time": "Fri Jan 09 08:31:07 2009 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Jan 09 08:31:07 2009 +1100"
      },
      "message": "md: raid0 create_strip_zones(): Add KERN_INFO/KERN_ERR to printk\u0027s.\n\nThis patch consists only of these trivial changes.\n\nSigned-off-by: Andre Noll \u003cmaan@systemlinux.org\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "6b8796cc3decb43c7c67a13a0699b6a21b754c78",
      "tree": "6096c9da13baa3983d96f69f5b3dbcd099d35c49",
      "parents": [
        "6199d3db0fc34f8ada895879d04a353a6ae632bc"
      ],
      "author": {
        "name": "Andre Noll",
        "email": "maan@systemlinux.org",
        "time": "Fri Jan 09 08:31:07 2009 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Jan 09 08:31:07 2009 +1100"
      },
      "message": "md: raid0 create_strip_zones(): Make two local variables sector-based.\n\ncurrent_offset and curr_zone_offset stored the corresponding offsets\nas 1K quantities. Rename them to current_start and curr_zone_start\nto match the naming of struct strip_zone and store the offsets as\nsector counts.\n\nAlso, add KERN_INFO to the printk() affected by this change to make\ncheckpatch happy.\n\nSigned-off-by: Andre Noll \u003cmaan@systemlinux.org\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "6199d3db0fc34f8ada895879d04a353a6ae632bc",
      "tree": "5a7d5f4a080abf6c46a87f121a859fd45fd53254",
      "parents": [
        "019c4e2f3e02aac4b44003913b54ca4b332e4371"
      ],
      "author": {
        "name": "Andre Noll",
        "email": "maan@systemlinux.org",
        "time": "Fri Jan 09 08:31:07 2009 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Jan 09 08:31:07 2009 +1100"
      },
      "message": "md: raid0: Represent zone-\u003ezone_offset in sectors.\n\nFor the same reason as in the previous patch, rename it from zone_offset\nto zone_start.\n\nSigned-off-by: Andre Noll \u003cmaan@systemlinux.org\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "019c4e2f3e02aac4b44003913b54ca4b332e4371",
      "tree": "ebdd73075be543d5feb1a1e86a793a2b3311ea9b",
      "parents": [
        "e0f06868341700c5c1964a04f6c5b51d0a2d5bca"
      ],
      "author": {
        "name": "Andre Noll",
        "email": "maan@systemlinux.org",
        "time": "Fri Jan 09 08:31:06 2009 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Jan 09 08:31:06 2009 +1100"
      },
      "message": "md: raid0: Represent device offset in sectors.\n\nRename zone-\u003edev_offset to zone-\u003edev_start to make sure all users\nhave been converted.\n\nSigned-off-by: Andre Noll \u003cmaan@systemlinux.org\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "e0f06868341700c5c1964a04f6c5b51d0a2d5bca",
      "tree": "3709a5c7868c721086416737f71b1382a2690be6",
      "parents": [
        "a471200595b24fb1907ad12107a6a66db02c63f2"
      ],
      "author": {
        "name": "Andre Noll",
        "email": "maan@systemlinux.org",
        "time": "Fri Jan 09 08:31:06 2009 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Jan 09 08:31:06 2009 +1100"
      },
      "message": "md: raid0_make_request(): Replace local variable block by sector.\n\nThis change already simplifies the code a bit.\n\nSigned-off-by: Andre Noll \u003cmaan@systemlinux.org\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "a471200595b24fb1907ad12107a6a66db02c63f2",
      "tree": "55c04f45ca294cdd765d386a4f2539e4f4d7b069",
      "parents": [
        "1b7fdf8ff7c0e3fba9c679def4e98d5701d2949e"
      ],
      "author": {
        "name": "Andre Noll",
        "email": "maan@systemlinux.org",
        "time": "Fri Jan 09 08:31:06 2009 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Jan 09 08:31:06 2009 +1100"
      },
      "message": "md: raid0_make_request(): Remove local variable chunk_size.\n\nWe might as well use chunk_sects instead.\n\nSigned-off-by: Andre Noll \u003cmaan@systemlinux.org\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "1b7fdf8ff7c0e3fba9c679def4e98d5701d2949e",
      "tree": "c24c3a5f0c5f36a2af9b2a860074995b18537d06",
      "parents": [
        "0c3573f19d135d718264e38c46597295bd6154b7"
      ],
      "author": {
        "name": "Andre Noll",
        "email": "maan@systemlinux.org",
        "time": "Fri Jan 09 08:31:06 2009 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Jan 09 08:31:06 2009 +1100"
      },
      "message": "md: raid0_make_request(): Replace chunksize_bits by chunksect_bits.\n\nAs ffz(~(2 * x)) \u003d ffz(~x) + 1, we have\n\n\tchunksect_bits \u003d chunksize_bits + 1.\n\nFixup all users accordingly.\n\nSigned-off-by: Andre Noll \u003cmaan@systemlinux.org\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "0c3573f19d135d718264e38c46597295bd6154b7",
      "tree": "0943035f89d163d9d7b354445303fb03e5ea7fb1",
      "parents": [
        "538452700d95480c16e7aa6b10ff77cd937d33f4"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Jan 09 08:31:05 2009 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Jan 09 08:31:05 2009 +1100"
      },
      "message": "md: use sysfs_notify_dirent to notify changes to md/sync_action.\n\nThere is no compelling need for this, but sysfs_notify_dirent is a\nnicer interface and the change is good for consistency.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "538452700d95480c16e7aa6b10ff77cd937d33f4",
      "tree": "f0a25315e64ee38e59cefca1fb3bd064ffaedc46",
      "parents": [
        "9e42d0cf5020aaf217433cad1a224745241d212a"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Jan 09 08:31:05 2009 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Jan 09 08:31:05 2009 +1100"
      },
      "message": "md: fix bitmap-on-external-file bug.\n\ncommit a2ed9615e3222645007fc19991aedf30eed3ecfd\nfixed a bug with \u0027internal\u0027 bitmaps, but in the process broke\n\u0027in a file\u0027 bitmaps.  So they are broken in 2.6.28\n\nThis fixes it, and needs to go in 2.6.28-stable.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\nCc: stable@kernel.org\n"
    },
    {
      "commit": "a159c1ac5f33c6cf0f5aa3c9d1ccdc82c907ee46",
      "tree": "2cb6bfd3f376e2366f3e3820ebd07a0a86a01cfc",
      "parents": [
        "4db6bfe02bdc7dc5048f46dd682a94801d029adc"
      ],
      "author": {
        "name": "Jonathan Brassow",
        "email": "jbrassow@redhat.com",
        "time": "Tue Jan 06 03:05:19 2009 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Jan 06 03:05:19 2009 +0000"
      },
      "message": "dm snapshot: extend exception store functions\n\nSupply dm_add_exception as a callback to the read_metadata function.\nAdd a status function ready for a later patch and name the functions\nconsistently.\n\nSigned-off-by: Jonathan Brassow \u003cjbrassow@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "4db6bfe02bdc7dc5048f46dd682a94801d029adc",
      "tree": "780a41560ea05266288853204f0d7e4eef4f6355",
      "parents": [
        "1ae25f9c933d1432fbffdf3e126051a974608abf"
      ],
      "author": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Jan 06 03:05:17 2009 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Jan 06 03:05:17 2009 +0000"
      },
      "message": "dm snapshot: split out exception store implementations\n\nMove the existing snapshot exception store implementations out into\nseparate files.  Later patches will place these behind a new\ninterface in preparation for alternative implementations.\n\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "1ae25f9c933d1432fbffdf3e126051a974608abf",
      "tree": "5a15a6330107a70a51d0c3cfe0bf703762e79839",
      "parents": [
        "aea53d92f70eeb00ae480e399a997dd55fd5055d"
      ],
      "author": {
        "name": "Jonathan Brassow",
        "email": "jbrassow@redhat.com",
        "time": "Tue Jan 06 03:05:16 2009 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Jan 06 03:05:16 2009 +0000"
      },
      "message": "dm snapshot: rename struct exception_store\n\nRename struct exception_store to dm_exception_store.\n\nSigned-off-by: Jonathan Brassow \u003cjbrassow@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "aea53d92f70eeb00ae480e399a997dd55fd5055d",
      "tree": "55e087e5e22168ed87f6d51ca0c8557a7678834f",
      "parents": [
        "fe9cf30eb8186ef267d1868dc9f12f2d0f40835a"
      ],
      "author": {
        "name": "Jonathan Brassow",
        "email": "jbrassow@redhat.com",
        "time": "Tue Jan 06 03:05:15 2009 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Jan 06 03:05:15 2009 +0000"
      },
      "message": "dm snapshot: separate out exception store interface\n\nPull structures that bridge the gap between snapshot and\nexception store out of dm-snap.h and put them in a new\n.h file - dm-exception-store.h.  This file will define the\nAPI for new exception stores.\n\nUltimately, dm-snap.h is unnecessary, since only dm-snap.c\nshould be using it.\n\nSigned-off-by: Jonathan Brassow \u003cjbrassow@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "fe9cf30eb8186ef267d1868dc9f12f2d0f40835a",
      "tree": "357db984073d7362b6c31dd431f77768c65800bf",
      "parents": [
        "784aae735d9b0bba3f8b9faef4c8b30df3bf0128"
      ],
      "author": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Jan 06 03:05:13 2009 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Jan 06 03:05:13 2009 +0000"
      },
      "message": "dm mpath: move trigger_event to system workqueue\n\nThe same workqueue is used both for sending uevents and processing queued I/O.\nDeadlock has been reported in RHEL5 when sending a uevent was blocked waiting\nfor the queued I/O to be processed.  Use scheduled_work() for the asynchronous\nuevents instead.\n\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "784aae735d9b0bba3f8b9faef4c8b30df3bf0128",
      "tree": "7e2e956c395b27f63569d7a6adc1098f116cc3a4",
      "parents": [
        "d58168763f74d1edbc296d7038c60efe6493fdd4"
      ],
      "author": {
        "name": "Milan Broz",
        "email": "mbroz@redhat.com",
        "time": "Tue Jan 06 03:05:12 2009 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Jan 06 03:05:12 2009 +0000"
      },
      "message": "dm: add name and uuid to sysfs\n\nImplement simple read-only sysfs entry for device-mapper block device.\n\nThis patch adds a simple sysfs directory named \"dm\" under block device\nproperties and implements\n\t- name attribute (string containing mapped device name)\n\t- uuid attribute (string containing UUID, or empty string if not set)\n\nThe kobject is embedded in mapped_device struct, so no additional\nmemory allocation is needed for initializing sysfs entry.\n\nDuring the processing of sysfs attribute we need to lock mapped device\nwhich is done by a new function dm_get_from_kobj, which returns the md\nassociated with kobject and increases the usage count.\n\nEach \u0027show attribute\u0027 function is responsible for its own locking.\n\nSigned-off-by: Milan Broz \u003cmbroz@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "d58168763f74d1edbc296d7038c60efe6493fdd4",
      "tree": "03866d641211fe16961a5b8aab6d9132bf07d9c8",
      "parents": [
        "ab4c1424882be9cd70b89abf2b484add355712fa"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Tue Jan 06 03:05:10 2009 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Jan 06 03:05:10 2009 +0000"
      },
      "message": "dm table: rework reference counting\n\nRework table reference counting.\n\nThe existing code uses a reference counter. When the last reference is\ndropped and the counter reaches zero, the table destructor is called.\nTable reference counters are acquired/released from upcalls from other\nkernel code (dm_any_congested, dm_merge_bvec, dm_unplug_all).\nIf the reference counter reaches zero in one of the upcalls, the table\ndestructor is called from almost random kernel code.\n\nThis leads to various problems:\n* dm_any_congested being called under a spinlock, which calls the\n  destructor, which calls some sleeping function.\n* the destructor attempting to take a lock that is already taken by the\n  same process.\n* stale reference from some other kernel code keeps the table\n  constructed, which keeps some devices open, even after successful\n  return from \"dmsetup remove\". This can confuse lvm and prevent closing\n  of underlying devices or reusing device minor numbers.\n\nThe patch changes reference counting so that the table destructor can be\ncalled only at predetermined places.\n\nThe table has always exactly one reference from either mapped_device-\u003emap\nor hash_cell-\u003enew_map. After this patch, this reference is not counted\nin table-\u003eholders.  A pair of dm_create_table/dm_destroy_table functions\nis used for table creation/destruction.\n\nTemporary references from the other code increase table-\u003eholders. A pair\nof dm_table_get/dm_table_put functions is used to manipulate it.\n\nWhen the table is about to be destroyed, we wait for table-\u003eholders to\nreach 0. Then, we call the table destructor.  We use active waiting with\nmsleep(1), because the situation happens rarely (to one user in 5 years)\nand removing the device isn\u0027t performance-critical task: the user doesn\u0027t\ncare if it takes one tick more or not.\n\nThis way, the destructor is called only at specific points\n(dm_table_destroy function) and the above problems associated with lazy\ndestruction can\u0027t happen.\n\nFinally remove the temporary protection added to dm_any_congested().\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "ab4c1424882be9cd70b89abf2b484add355712fa",
      "tree": "8baed3606be67900df9f02e42fcdb091b78c5def",
      "parents": [
        "7d76345da6ed3927c9cbf5d3f7a7021e8bba7374"
      ],
      "author": {
        "name": "Andi Kleen",
        "email": "ak@suse.de",
        "time": "Tue Jan 06 03:05:09 2009 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Jan 06 03:05:09 2009 +0000"
      },
      "message": "dm: support barriers on simple devices\n\nImplement barrier support for single device DM devices\n\nThis patch implements barrier support in DM for the common case of dm linear\njust remapping a single underlying device. In this case we can safely\npass the barrier through because there can be no reordering between\ndevices.\n\n NB. Any DM device might cease to support barriers if it gets\n     reconfigured so code must continue to allow for a possible\n     -EOPNOTSUPP on every barrier bio submitted.  - agk\n\nSigned-off-by: Andi Kleen \u003cak@suse.de\u003e\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "8fbf26ad5b16ad3a826ca7fe3e86700420abed1f",
      "tree": "43bc5cc2ca90ea394682daa4b665a46ebb110b97",
      "parents": [
        "23d39f63aa87e812fd879b8bc32ee6ccfe733de3"
      ],
      "author": {
        "name": "Kiyoshi Ueda",
        "email": "k-ueda@ct.jp.nec.com",
        "time": "Tue Jan 06 03:05:06 2009 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Jan 06 03:05:06 2009 +0000"
      },
      "message": "dm request: add caches\n\nThis patch prepares some kmem_caches for request-based dm.\n\nSigned-off-by: Kiyoshi Ueda \u003ck-ueda@ct.jp.nec.com\u003e\nSigned-off-by: Jun\u0027ichi Nomura \u003cj-nomura@ce.jp.nec.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "23d39f63aa87e812fd879b8bc32ee6ccfe733de3",
      "tree": "3535af0aff56260cdbf573a704e3f0122c6cfc8b",
      "parents": [
        "ac1f0ac22c7be908fd33407273b9808bfaedada4"
      ],
      "author": {
        "name": "Milan Broz",
        "email": "mbroz@redhat.com",
        "time": "Tue Jan 06 03:05:04 2009 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Jan 06 03:05:04 2009 +0000"
      },
      "message": "dm ioctl: allow dm_copy_name_and_uuid to return only one field\n\nAllow NULL buffer in dm_copy_name_and_uuid if you only want to return one of\nthe fields.\n\n(Required by a following patch that adds these fields to sysfs.)\n\nSigned-off-by: Milan Broz \u003cmbroz@redhat.com\u003e\nReviewed-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "ac1f0ac22c7be908fd33407273b9808bfaedada4",
      "tree": "f6a867138918b591639464802744506f6b83ad14",
      "parents": [
        "2045e88edb4e0c9ce62d317f77dc59d27d9c530e"
      ],
      "author": {
        "name": "Milan Broz",
        "email": "mbroz@redhat.com",
        "time": "Tue Jan 06 03:05:02 2009 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Jan 06 03:05:02 2009 +0000"
      },
      "message": "dm log: ensure log bitmap fits on log device\n\nCheck that the log bitmap will fit within the log device.\n\nSigned-off-by: Milan Broz \u003cmbroz@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "2045e88edb4e0c9ce62d317f77dc59d27d9c530e",
      "tree": "324eeea271b889263d0141fe0c82d4b0e43d0079",
      "parents": [
        "6f3af01cb0eda0ec50fe1e4cbdf028269dc396fe"
      ],
      "author": {
        "name": "Milan Broz",
        "email": "mbroz@redhat.com",
        "time": "Tue Jan 06 03:05:01 2009 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Jan 06 03:05:01 2009 +0000"
      },
      "message": "dm log: move region_size validation\n\nMove log size validation from mirror target to log constructor.\n\nRemoved PAGE_SIZE restriction we no longer think necessary.\n\nSigned-off-by: Milan Broz \u003cmbroz@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "6f3af01cb0eda0ec50fe1e4cbdf028269dc396fe",
      "tree": "29988ebe5a40ee1092bdbeac45eb0bdc312ff670",
      "parents": [
        "10d3bd09a3c25df114f74f7f86e1b58d070bef32"
      ],
      "author": {
        "name": "Takahiro Yasui",
        "email": "tyasui@redhat.com",
        "time": "Tue Jan 06 03:04:59 2009 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Jan 06 03:04:59 2009 +0000"
      },
      "message": "dm log: avoid reinitialising io_req on every operation\n\nrw_header function updates three members of io_req data every time\nwhen I/O is processed. bi_rw and notify.fn are never modified once\nthey get initialized, and so they can be set in advance.\n\nheader_to_disk() can also be pulled out of write_header() since only one\ncaller needs it and write_header() can be replaced by rw_header()\ndirectly.\n\nSigned-off-by: Takahiro Yasui \u003ctyasui@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "10d3bd09a3c25df114f74f7f86e1b58d070bef32",
      "tree": "a44e2fe5ccc5950b87a1d31849e5f0ac24fdcc16",
      "parents": [
        "d460c65a6a9ec9e0d284864ec3a9a2d1b73f0e43"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Tue Jan 06 03:04:58 2009 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Jan 06 03:04:58 2009 +0000"
      },
      "message": "dm: consolidate target deregistration error handling\n\nChange dm_unregister_target to return void and use BUG() for error\nreporting.\n\ndm_unregister_target can only fail because of programming bug in the\ntarget driver. It can\u0027t fail because of user\u0027s behavior or disk errors.\n\nThis patch changes unregister_target to return void and use BUG if\nsomeone tries to unregister non-registered target or unregister target\nthat is in use.\n\nThis patch removes code duplication (testing of error codes in all dm\ntargets) and reports bugs in just one place, in dm_unregister_target. In\nsome target drivers, these return codes were ignored, which could lead\nto a situation where bugs could be missed.\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "d460c65a6a9ec9e0d284864ec3a9a2d1b73f0e43",
      "tree": "84131d888f5ec610cc343ca7188a5d4044043c2b",
      "parents": [
        "c7a2bd19b7c1e0bd2c7604c53d2583e91e536948"
      ],
      "author": {
        "name": "Jonathan Brassow",
        "email": "jbrassow@redhat.com",
        "time": "Tue Jan 06 03:04:57 2009 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Jan 06 03:04:57 2009 +0000"
      },
      "message": "dm raid1: fix error count\n\nAlways increase the error count when I/O on a leg of a mirror fails.\n\nThe error count is used to decide whether to select an alternative\nmirror leg.  If the target doesn\u0027t use the \"handle_errors\" feature, the\nerror count is not updated and the bio can get requeued forever by the\nread callback.\n\nFix it by increasing error_count before the handle_errors feature\nchecking.\n\nCc: stable@kernel.org\nSigned-off-by: Milan Broz \u003cmbroz@redhat.com\u003e\nSigned-off-by: Jonathan Brassow \u003cjbrassow@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "c7a2bd19b7c1e0bd2c7604c53d2583e91e536948",
      "tree": "bb896040c05397026745de9d05bd6f491d26603f",
      "parents": [
        "90fa1527bddc7147dc0d590ee6184ca88bc50ecf"
      ],
      "author": {
        "name": "Takahiro Yasui",
        "email": "tyasui@redhat.com",
        "time": "Tue Jan 06 03:04:56 2009 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Jan 06 03:04:56 2009 +0000"
      },
      "message": "dm log: fix dm_io_client leak on error paths\n\nIn create_log_context function, dm_io_client_destroy function needs\nto be called, when memory allocation of disk_header, sync_bits and\nrecovering_bits failed, but dm_io_client_destroy is not called.\n\nCc: stable@kernel.org\nSigned-off-by: Takahiro Yasui \u003ctyasui@redhat.com\u003e\nAcked-by: Jonathan Brassow \u003cjbrassow@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "90fa1527bddc7147dc0d590ee6184ca88bc50ecf",
      "tree": "a6b692b5a7ef777cbd8f2927783f593234b091d1",
      "parents": [
        "a1b51e98676932d031f5eec1325b2df4bbdc8f26"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Tue Jan 06 03:04:54 2009 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Jan 06 03:04:54 2009 +0000"
      },
      "message": "dm snapshot: change yield to msleep\n\nChange yield() to msleep(1). If the thread had realtime priority,\nyield() doesn\u0027t really yield, so the yielding process would loop\nindefinitely and cause machine lockup.\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "a1b51e98676932d031f5eec1325b2df4bbdc8f26",
      "tree": "0dda5c172f6ef1880dbc9eafb9eb6d404c9447c6",
      "parents": [
        "fe0bdec68b77020281dc814805edfe594ae89e0f"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Tue Jan 06 03:04:53 2009 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Jan 06 03:04:53 2009 +0000"
      },
      "message": "dm table: drop reference at unbind\n\nMove one dm_table_put() so that the last reference in the thread\ngets dropped in __unbind().\n\nThis is required for a following patch,\ndm-table-rework-reference-counting.patch, which will change the logic in\nsuch a way that table destructor is called only at specific points in\nthe code.\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "bb799ca0202a360fa74d5f17039b9100caebdde7",
      "tree": "048b6cedfd2644edd82a606db6d9e8b19d31328b",
      "parents": [
        "1b4344986926da324b5cd10b683e5a1a5e1b7db3"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Wed Dec 10 15:35:05 2008 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Mon Dec 29 08:29:23 2008 +0100"
      },
      "message": "bio: allow individual slabs in the bio_set\n\nInstead of having a global bio slab cache, add a reference to one\nin each bio_set that is created. This allows for personalized slabs\nin each bio_set, so that they can have bios of different sizes.\n\nThis means we can personalize the bios we return. File systems may\nwant to embed the bio inside another structure, to avoid allocation\nmore items (and stuffing them in -\u003ebi_private) after the get a bio.\nOr we may want to embed a number of bio_vecs directly at the end\nof a bio, to avoid doing two allocations to return a bio. This is now\npossible.\n\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "db8862eafe8a5d030a3b02e81b8bb47447c315e3",
      "tree": "073ea7b46809bf804134cbf008a593413c02a99c",
      "parents": [
        "c5dee6177f4bd2095aab7d9be9f6ebdddd6deee9",
        "c20137fc5329eaf24093fc48c52608dc66be8e5c"
      ],
      "author": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Wed Dec 24 21:08:26 2008 +0100"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Wed Dec 24 21:08:26 2008 +0100"
      },
      "message": "Merge branch \u0027linus\u0027 into tracing/hw-branch-tracing\n"
    },
    {
      "commit": "a2ed9615e3222645007fc19991aedf30eed3ecfd",
      "tree": "2a07cc815f5c348f085ad96a5660e3213da955f4",
      "parents": [
        "55dac3a5553b13891f0ae4bbd11920619b5436d4"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Dec 19 16:25:01 2008 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Dec 19 16:25:01 2008 +1100"
      },
      "message": "md: Don\u0027t read past end of bitmap when reading bitmap.\n\nWhen we read the write-intent-bitmap off the device, we currently\nread a whole number of pages.\nWhen PAGE_SIZE is 4K, this works due to the alignment we enforce\non the superblock and bitmap.\nWhen PAGE_SIZE is 64K, this case read past the end-of-device\nwhich causes an error.\n\nWhen we write the superblock, we ensure to clip the last page\nto just be the required size.  Copy that code into the read path\nto just read the required number of sectors.\n\nSigned-off-by: Neil Brown \u003cneilb@suse.de\u003e\nCc: stable@kernel.org\n"
    },
    {
      "commit": "970987beb9c99ca806edc464518d411cc399fb4d",
      "tree": "51e2298b6eb7e6412009428b380a51e1f17b531b",
      "parents": [
        "faec2ec505d397e9426754722b6e80d519c4938f",
        "1fd8f2a3f9a91b287a876cef830b21baafc8a799",
        "feaf3848a813a106f163013af6fcf6c4bfec92d9"
      ],
      "author": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Fri Dec 05 14:45:22 2008 +0100"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Fri Dec 05 14:45:22 2008 +0100"
      },
      "message": "Merge branches \u0027tracing/ftrace\u0027, \u0027tracing/function-graph-tracer\u0027 and \u0027tracing/urgent\u0027 into tracing/core\n"
    },
    {
      "commit": "0e435ac26e3f951d83338ed3d4ab7dc0fe0055bc",
      "tree": "8f208a3093de1a314a981ae47e5ef92a5909c13b",
      "parents": [
        "53a08807c01989c6847bb135d8d43f61c5dfdda5"
      ],
      "author": {
        "name": "Milan Broz",
        "email": "mbroz@redhat.com",
        "time": "Wed Dec 03 12:55:08 2008 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Wed Dec 03 12:55:55 2008 +0100"
      },
      "message": "block: fix setting of max_segment_size and seg_boundary mask\n\nFix setting of max_segment_size and seg_boundary mask for stacked md/dm\ndevices.\n\nWhen stacking devices (LVM over MD over SCSI) some of the request queue\nparameters are not set up correctly in some cases by default, namely\nmax_segment_size and and seg_boundary mask.\n\nIf you create MD device over SCSI, these attributes are zeroed.\n\nProblem become when there is over this mapping next device-mapper mapping\n- queue attributes are set in DM this way:\n\nrequest_queue   max_segment_size  seg_boundary_mask\nSCSI                65536             0xffffffff\nMD RAID1                0                      0\nLVM                 65536                 -1 (64bit)\n\nUnfortunately bio_add_page (resp.  bio_phys_segments) calculates number of\nphysical segments according to these parameters.\n\nDuring the generic_make_request() is segment cout recalculated and can\nincrease bio-\u003ebi_phys_segments count over the allowed limit.  (After\nbio_clone() in stack operation.)\n\nThi is specially problem in CCISS driver, where it produce OOPS here\n\n    BUG_ON(creq-\u003enr_phys_segments \u003e MAXSGENTRIES);\n\n(MAXSEGENTRIES is 31 by default.)\n\nSometimes even this command is enough to cause oops:\n\n  dd iflag\u003ddirect if\u003d/dev/\u003cvg\u003e/\u003clv\u003e of\u003d/dev/null bs\u003d128000 count\u003d10\n\nThis command generates bios with 250 sectors, allocated in 32 4k-pages\n(last page uses only 1024 bytes).\n\nFor LVM layer, it allocates bio with 31 segments (still OK for CCISS),\nunfortunatelly on lower layer it is recalculated to 32 segments and this\nviolates CCISS restriction and triggers BUG_ON().\n\nThe patch tries to fix it by:\n\n * initializing attributes above in queue request constructor\n   blk_queue_make_request()\n\n * make sure that blk_queue_stack_limits() inherits setting\n\n (DM uses its own function to set the limits because it\n blk_queue_stack_limits() was introduced later.  It should probably switch\n to use generic stack limit function too.)\n\n * sets the default seg_boundary value in one place (blkdev.h)\n\n * use this mask as default in DM (instead of -1, which differs in 64bit)\n\nBugs related to this:\nhttps://bugzilla.redhat.com/show_bug.cgi?id\u003d471639\nhttp://bugzilla.kernel.org/show_bug.cgi?id\u003d8672\n\nSigned-off-by: Milan Broz \u003cmbroz@redhat.com\u003e\nReviewed-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\nCc: Neil Brown \u003cneilb@suse.de\u003e\nCc: FUJITA Tomonori \u003cfujita.tomonori@lab.ntt.co.jp\u003e\nCc: Tejun Heo \u003chtejun@gmail.com\u003e\nCc: Mike Miller \u003cmike.miller@hp.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "0bfc24559d7945506184d86739fe365a181f06b7",
      "tree": "5c152128faac7080f4802ce03d1c6b6bc7173227",
      "parents": [
        "5f3ea37c7716db4e894a480e0c18b24399595b6b"
      ],
      "author": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Wed Nov 26 11:59:56 2008 +0100"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Wed Nov 26 13:04:35 2008 +0100"
      },
      "message": "blktrace: port to tracepoints, update\n\nPort to the new tracepoints API: split DEFINE_TRACE() and DECLARE_TRACE()\nsites. Spread them out to the usage sites, as suggested by\nMathieu Desnoyers.\n\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nAcked-by: Mathieu Desnoyers \u003cmathieu.desnoyers@polymtl.ca\u003e\n"
    },
    {
      "commit": "5f3ea37c7716db4e894a480e0c18b24399595b6b",
      "tree": "db6784635d024894f641b340dcd7c5060c446077",
      "parents": [
        "509dceef6470442d8c7b8a43ec34125205840b3c"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Thu Oct 30 08:34:33 2008 +0100"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Wed Nov 26 12:13:34 2008 +0100"
      },
      "message": "blktrace: port to tracepoints\n\nThis was a forward port of work done by Mathieu Desnoyers, I changed it to\nencode the \u0027what\u0027 parameter on the tracepoint name, so that one can register\ninterest in specific events and not on classes of events to then check the\n\u0027what\u0027 parameter.\n\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "8a57dfc6f943c92b861c9a19b0c86ddcb2aba768",
      "tree": "18090d42e647cda854c93aa304cf03fbad44f6c0",
      "parents": [
        "d221d2e77696e70e94b13989ea15db2ba5b34f8e"
      ],
      "author": {
        "name": "Chandra Seetharaman",
        "email": "sekharan@us.ibm.com",
        "time": "Thu Nov 13 23:39:14 2008 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Nov 13 23:39:14 2008 +0000"
      },
      "message": "dm: avoid destroying table in dm_any_congested\n\ndm_any_congested() just checks for the DMF_BLOCK_IO and has no\ncode to make sure that suspend waits for dm_any_congested() to\ncomplete.  This patch adds such a check.\n\nWithout it, a race can occur with dm_table_put() attempting to\ndestroying the table in the wrong thread, the one running\ndm_any_congested() which is meant to be quick and return\nimmediately.\n\nTwo examples of problems:\n1. Sleeping functions called from congested code, the caller\n   of which holds a spin lock.\n2. An ABBA deadlock between pdflush and multipathd. The two locks\n   in contention are inode lock and kernel lock.\n\nSigned-off-by: Chandra Seetharaman \u003csekharan@us.ibm.com\u003e\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "d221d2e77696e70e94b13989ea15db2ba5b34f8e",
      "tree": "82afcee59db83104d31848e2304eb51baeee3aa4",
      "parents": [
        "14e98c5ca8bed825f65cbf11cb0ffd2c09dac2f4"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Thu Nov 13 23:39:10 2008 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Nov 13 23:39:10 2008 +0000"
      },
      "message": "dm: move pending queue wake_up end_io_acct\n\nThis doesn\u0027t fix any bug, just moves wake_up immediately after decrementing\nmd-\u003epending, for better code readability.\n\nIt must be clear to anyone manipulating md-\u003epending to wake up\nthe queue if md-\u003epending reaches zero, so move the wakeup as close to\nthe decrementing as possible.\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "14e98c5ca8bed825f65cbf11cb0ffd2c09dac2f4",
      "tree": "62cb7234d156c0523584343796d0e3c89d7a80bf",
      "parents": [
        "b81aa1c79201cb424114fd198607951900babe18"
      ],
      "author": {
        "name": "Chandra Seetharaman",
        "email": "sekharan@us.ibm.com",
        "time": "Thu Nov 13 23:39:06 2008 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Nov 13 23:39:06 2008 +0000"
      },
      "message": "dm mpath: warn if args ignored\n\nCurrently dm ignores the parameters provided to hardware handlers\nwithout providing any notifications to the user.\n\nThis patch just prints a warning message so that the user knows that\nthe arguments are ignored.\n\nSigned-off-by: Chandra Seetharaman \u003csekharan@us.ibm.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "b81aa1c79201cb424114fd198607951900babe18",
      "tree": "f05501c670fd9919779b6759e2ff816f574186fe",
      "parents": [
        "6edebdee48729ab4ba564bbfcb8dbf6a6cd68a39"
      ],
      "author": {
        "name": "Chandra Seetharaman",
        "email": "sekharan@us.ibm.com",
        "time": "Thu Nov 13 23:39:00 2008 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Nov 13 23:39:00 2008 +0000"
      },
      "message": "dm mpath: avoid attempting to activate null path\n\nPath activation code is called even when the pgpath is NULL. This could\nlead to a panic in activate_path(). Such a panic is seen in -rt kernel.\n\nThis problem has been there before the pg_init() was moved to a\nworkqueue.\n\nSigned-off-by: Chandra Seetharaman \u003csekharan@us.ibm.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "6edebdee48729ab4ba564bbfcb8dbf6a6cd68a39",
      "tree": "29b92a961e503e9257e3f34fc2e933d51315ec42",
      "parents": [
        "18776c7316545482a02bfaa2629a2aa1afc48357"
      ],
      "author": {
        "name": "Heinz Mauelshagen",
        "email": "heinzm@redhat.com",
        "time": "Thu Nov 13 23:38:56 2008 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Nov 13 23:38:56 2008 +0000"
      },
      "message": "dm stripe: fix init failure\n\nDon\u0027t proceed if dm_stripe_init() fails to register itself as a dm target.\n\nSigned-off-by: Heinz Mauelshagen \u003cheinzm@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "18776c7316545482a02bfaa2629a2aa1afc48357",
      "tree": "ecd30db869eff5968921af7df8f055794ed3730f",
      "parents": [
        "4ffaf869c7780bbdfc11291e5fd4b61dde662b1c"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Thu Nov 13 23:38:52 2008 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Nov 13 23:38:52 2008 +0000"
      },
      "message": "dm raid1: flush workqueue before destruction\n\nWe queue work on keventd queue --- so this queue must be flushed in the\ndestructor. Otherwise, keventd could access mirror_set after it was freed.\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\nCc: stable@kernel.org\n"
    },
    {
      "commit": "f1cd14ae52985634d0389e934eba25b5ecf24565",
      "tree": "131e1fedd27d63d30896233d695594508bdbd04f",
      "parents": [
        "a53a6c85756339f82ff19e001e90cfba2d6299a8"
      ],
      "author": {
        "name": "Andre Noll",
        "email": "maan@systemlinux.org",
        "time": "Thu Nov 06 19:41:24 2008 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Nov 06 19:41:24 2008 +1100"
      },
      "message": "md: linear: Fix a division by zero bug for very small arrays.\n\nWe currently oops with a divide error on starting a linear software\nraid array consisting of at least two very small (\u003c 500K) devices.\n\nThe bug is caused by the calculation of the hash table size which\ntries to compute sector_div(sz, base) with \"base\" being zero due to\nthe small size of the component devices of the array.\n\nFix this by requiring the hash spacing to be at least one which\nimplies that also \"base\" is non-zero.\n\nThis bug has existed since about 2.6.14.\n\nCc: stable@kernel.org\nSigned-off-by: Andre Noll \u003cmaan@systemlinux.org\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "a53a6c85756339f82ff19e001e90cfba2d6299a8",
      "tree": "1c2d2601ad6c75aae1f47313f7df256556161fc7",
      "parents": [
        "cb3ac42b8af357fdd9ad838234245b39e5bdb7fe"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Nov 06 17:28:20 2008 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Nov 06 17:28:20 2008 +1100"
      },
      "message": "md: fix bug in raid10 recovery.\n\nAdding a spare to a raid10 doesn\u0027t cause recovery to start.\nThis is due to an silly type in\n  commit 6c2fce2ef6b4821c21b5c42c7207cb9cf8c87eda\nand so is a bug in 2.6.27 and .28-rc.\n\nThanks to Thomas Backlund for bisecting to find this.\n\nCc: Thomas Backlund \u003ctmb@mandriva.org\u003e\nCc: stable@kernel.org\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "cb3ac42b8af357fdd9ad838234245b39e5bdb7fe",
      "tree": "f6c354c2ec374fa35fe64902204d212f0ef30bd4",
      "parents": [
        "45beca08dd8b6d6a65c5ffd730af2eac7a2c7a03"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Nov 06 17:28:01 2008 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Nov 06 17:28:01 2008 +1100"
      },
      "message": "md: revert the recent addition of a call to the BLKRRPART ioctl.\n\nIt turns out that it is only safe to call blkdev_ioctl when the device\nis actually open (as -\u003ebd_disk is set to NULL on last close).  And it\nis quite possible for do_md_stop to be called when the device is not\nopen.  So discard the call to blkdev_ioctl(BLKRRPART) which was\nadded in\n   commit 934d9c23b4c7e31840a895ba4b7e88d6413c81f3\n\nIt is just as easy to call this ioctl from userspace when needed (on\nmdadm -S) so leave it out of the kernel\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "721d5dfe7e516954c501d5e9d0dfab379cf4241a",
      "tree": "3056d4ffeecd171cf9f091437e721d2556e63c6d",
      "parents": [
        "f2347dfcd14fd9e30714656cb27be2b7abe59c63",
        "934d9c23b4c7e31840a895ba4b7e88d6413c81f3"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Oct 30 18:36:16 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Oct 30 18:36:16 2008 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://neil.brown.name/md\n\n* \u0027for-linus\u0027 of git://neil.brown.name/md:\n  md: destroy partitions and notify udev when md array is stopped.\n"
    },
    {
      "commit": "879129d208f725267366296b631aef31409cf304",
      "tree": "7dd927ae094580f6a3fe420c0cc5f8e251ce9e9e",
      "parents": [
        "60c856c8e2f57a3f69c505735ef66e3719ea0bd6"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Thu Oct 30 13:33:16 2008 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Oct 30 13:33:16 2008 +0000"
      },
      "message": "dm snapshot: wait for chunks in destructor\n\nIf there are several snapshots sharing an origin and one is removed\nwhile the origin is being written to, the snapshot\u0027s mempool may get\ndeleted while elements are still referenced.\n\nPrior to dm-snapshot-use-per-device-mempools.patch the pending\nexceptions may still have been referenced after the snapshot was\ndestroyed, but this was not a problem because the shared mempool\nwas still there.\n\nThis patch fixes the problem by tracking the number of mempool elements\nin use.\n\nThe scenario:\n- You have an origin and two snapshots 1 and 2.\n- Someone writes to the origin.\n- It creates two exceptions in the snapshots, snapshot 1 will be primary\nexception, snapshot 2\u0027s pending_exception-\u003eprimary_pe will point to the\nexception in snapshot 1.\n- The exceptions are being relocated, relocation of exception 1 finishes\n(but it\u0027s pending_exception is still allocated, because it is referenced\nby an exception from snapshot 2)\n- The user lvremoves snapshot 1 --- it calls just suspend (does nothing)\nand destructor. md-\u003epending is zero (there is no I/O submitted to the\nsnapshot by md layer), so it won\u0027t help us.\n- The destructor waits for kcopyd jobs to finish on snapshot 1 --- but\nthere are none.\n- The destructor on snapshot 1 cleans up everything.\n- The relocation of exception on snapshot 2 finishes, it drops reference\non primary_pe. This frees its primary_pe pointer. Primary_pe points to\npending exception created for snapshot 1. So it frees memory into\nnon-existing mempool.\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "60c856c8e2f57a3f69c505735ef66e3719ea0bd6",
      "tree": "a6295bec9c1fa01885ef14befa4ae3618f51ca57",
      "parents": [
        "b34578a48459ed1bd5396631aaa4a65d6bcc7726"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Thu Oct 30 13:33:12 2008 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Oct 30 13:33:12 2008 +0000"
      },
      "message": "dm snapshot: fix register_snapshot deadlock\n\nregister_snapshot() performs a GFP_KERNEL allocation while holding\n_origins_lock for write, but that could write out dirty pages onto a\ndevice that attempts to acquire _origins_lock for read, resulting in\ndeadlock.\n\nSo move the allocation up before taking the lock.\n\nThis path is not performance-critical, so it doesn\u0027t matter that we\nallocate memory and free it if we find that we won\u0027t need it.\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "b34578a48459ed1bd5396631aaa4a65d6bcc7726",
      "tree": "3b7bf0d60d7491403b4a541775b42b8763dbf32d",
      "parents": [
        "e946217e4fdaa67681bbabfa8e6b18641921f750"
      ],
      "author": {
        "name": "Ilpo Jarvinen",
        "email": "ilpo.jarvinen@helsinki.fi",
        "time": "Thu Oct 30 13:33:07 2008 +0000"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Oct 30 13:33:07 2008 +0000"
      },
      "message": "dm raid1: fix do_failures\n\nMissing braces.  Commit 1f965b1943 (dm raid1: separate region_hash interface\npart1) broke it.\n\nSigned-off-by: Ilpo Jarvinen \u003cilpo.jarvinen@helsinki.fi\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\nCc: Heinz Mauelshagen \u003chjm@redhat.com\u003e\n"
    },
    {
      "commit": "934d9c23b4c7e31840a895ba4b7e88d6413c81f3",
      "tree": "989d1ac0be656e51d44eaf8513076917bfed3adf",
      "parents": [
        "f8d56f1771e4867acc461146764b4feeb5245669"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Oct 28 17:01:23 2008 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Oct 28 17:01:23 2008 +1100"
      },
      "message": "md: destroy partitions and notify udev when md array is stopped.\n\nmd arrays are not currently destroyed when they are stopped - they\nremain in /sys/block.  Last time I tried this I tripped over locking\ntoo much.\n\nA consequence of this is that udev doesn\u0027t remove anything from /dev.\nThis is rather ugly.\n\nAs an interim measure until proper device removal can be achieved,\nmake sure all partitions are removed using the BLKRRPART ioctl, and\nsend a KOBJ_CHANGE when an md array is stopped.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "f8d56f1771e4867acc461146764b4feeb5245669",
      "tree": "9d4857b72287f3170818b4b883c232e3ffb677af",
      "parents": [
        "3d6eadcb5008beca1b289983ffd7771d1e947bac",
        "92850bbd71228730c80efd491e7427650188d359"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sun Oct 26 16:42:18 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sun Oct 26 16:42:18 2008 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://neil.brown.name/md\n\n* \u0027for-linus\u0027 of git://neil.brown.name/md:\n  md: allow extended partitions on md devices.\n  md: use sysfs_notify_dirent to notify changes to md/dev-xxx/state\n  md: use sysfs_notify_dirent to notify changes to md/array_state\n"
    },
    {
      "commit": "22484856402bfa1ff3defe47f6029ab0418240d9",
      "tree": "140c67bf59674da350a7b51765d6ff7eb101b597",
      "parents": [
        "5ed487bc2c44ca4e9668ef9cb54c830e2a9fac47",
        "56b26add02b4bdea81d5e0ebda60db1fe3311ad4"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Oct 23 10:23:07 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Oct 23 10:23:07 2008 -0700"
      },
      "message": "Merge git://git.kernel.org/pub/scm/linux/kernel/git/viro/bdev\n\n* git://git.kernel.org/pub/scm/linux/kernel/git/viro/bdev: (66 commits)\n  [PATCH] kill the rest of struct file propagation in block ioctls\n  [PATCH] get rid of struct file use in blkdev_ioctl() BLKBSZSET\n  [PATCH] get rid of blkdev_locked_ioctl()\n  [PATCH] get rid of blkdev_driver_ioctl()\n  [PATCH] sanitize blkdev_get() and friends\n  [PATCH] remember mode of reiserfs journal\n  [PATCH] propagate mode through swsusp_close()\n  [PATCH] propagate mode through open_bdev_excl/close_bdev_excl\n  [PATCH] pass fmode_t to blkdev_put()\n  [PATCH] kill the unused bsize on the send side of /dev/loop\n  [PATCH] trim file propagation in block/compat_ioctl.c\n  [PATCH] end of methods switch: remove the old ones\n  [PATCH] switch sr\n  [PATCH] switch sd\n  [PATCH] switch ide-scsi\n  [PATCH] switch tape_block\n  [PATCH] switch dcssblk\n  [PATCH] switch dasd\n  [PATCH] switch mtd_blkdevs\n  [PATCH] switch mmc\n  ...\n"
    },
    {
      "commit": "5ed487bc2c44ca4e9668ef9cb54c830e2a9fac47",
      "tree": "af19ed28db83e8f52690872ac99336da1cf2fd3b",
      "parents": [
        "5b34653963de7a6d0d8c783527457d68fddc60fb",
        "fd217f4d70172c526478f2bc76859e909fdfa674"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Oct 23 10:22:40 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Oct 23 10:22:40 2008 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6: (46 commits)\n  [PATCH] fs: add a sanity check in d_free\n  [PATCH] i_version: remount support\n  [patch] vfs: make security_inode_setattr() calling consistent\n  [patch 1/3] FS_MBCACHE: don\u0027t needlessly make it built-in\n  [PATCH] move executable checking into -\u003epermission()\n  [PATCH] fs/dcache.c: update comment of d_validate()\n  [RFC PATCH] touch_mnt_namespace when the mount flags change\n  [PATCH] reiserfs: add missing llseek method\n  [PATCH] fix -\u003ellseek for more directories\n  [PATCH vfs-2.6 6/6] vfs: add LOOKUP_RENAME_TARGET intent\n  [PATCH vfs-2.6 5/6] vfs: remove LOOKUP_PARENT from non LOOKUP_PARENT lookup\n  [PATCH vfs-2.6 4/6] vfs: remove unnecessary fsnotify_d_instantiate()\n  [PATCH vfs-2.6 3/6] vfs: add __d_instantiate() helper\n  [PATCH vfs-2.6 2/6] vfs: add d_ancestor()\n  [PATCH vfs-2.6 1/6] vfs: replace parent \u003d\u003d dentry-\u003ed_parent by IS_ROOT()\n  [PATCH] get rid of on-stack dentry in udf\n  [PATCH 2/2] anondev: switch to IDA\n  [PATCH 1/2] anondev: init IDR statically\n  [JFFS2] Use d_splice_alias() not d_add() in jffs2_lookup()\n  [PATCH] Optimise NFS readdir hack slightly.\n  ...\n"
    },
    {
      "commit": "72e8264eda02b6ba85a222b9620802ebf23c6a10",
      "tree": "4c82b49f538b1ae4e469bbf9a98d76766ab3f768",
      "parents": [
        "3516586a424ea5727be089da6541cbd5644f0497"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Mon Aug 11 00:24:08 2008 +0200"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Oct 23 05:12:57 2008 -0400"
      },
      "message": "[PATCH] dm: kill lookup_device wrapper\n\nNow that lookup_bdev is exported and used by dm just use it directly\ninstead of through a trivial wrapper.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "51157b4ab47e1376c2b93cb854b14b637efeaff2",
      "tree": "76889af489b15aaf8c75d457f29d36336ca0a0a6",
      "parents": [
        "f431d9666fd6e69fbaf305cebc7278d1428950c2"
      ],
      "author": {
        "name": "Kiyoshi Ueda",
        "email": "k-ueda@ct.jp.nec.com",
        "time": "Tue Oct 21 17:45:08 2008 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Oct 21 17:45:08 2008 +0100"
      },
      "message": "dm: tidy local_init\n\nThis patch tidies local_init() in preparation for request-based dm.\nNo functional change.\n\nSigned-off-by: Kiyoshi Ueda \u003ck-ueda@ct.jp.nec.com\u003e\nSigned-off-by: Jun\u0027ichi Nomura \u003cj-nomura@ce.jp.nec.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "f431d9666fd6e69fbaf305cebc7278d1428950c2",
      "tree": "ebd0e7c5deb3e6782f0de657223d071bc11b1983",
      "parents": [
        "1f965b19437017cea6d3f3f46acdc5acae5fd011"
      ],
      "author": {
        "name": "Kiyoshi Ueda",
        "email": "k-ueda@ct.jp.nec.com",
        "time": "Tue Oct 21 17:45:07 2008 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Oct 21 17:45:07 2008 +0100"
      },
      "message": "dm: remove unused flush_all\n\nThis patch removes the DM_WQ_FLUSH_ALL state that is unnecessary.\n\nThe dm_queue_flush(md, DM_WQ_FLUSH_ALL, NULL) in dm_suspend()\nis never invoked because:\n  - \u0027goto flush_and_out\u0027 is the same as \u0027goto out\u0027 because\n    the \u0027goto flush_and_out\u0027 is called only when \u0027!noflush\u0027\n  - If r is non-zero, then the code above will invoke \u0027goto out\u0027\n    and skip this code.\n\nNo functional change.\n\nSigned-off-by: Kiyoshi Ueda \u003ck-ueda@ct.jp.nec.com\u003e\nSigned-off-by: Jun\u0027ichi Nomura \u003cj-nomura@ce.jp.nec.com\u003e\nSigned-off-by: Milan Broz \u003cmbroz@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "1f965b19437017cea6d3f3f46acdc5acae5fd011",
      "tree": "f70fd0684d1afbde7f0031a6f8cb6aa58880723c",
      "parents": [
        "f3e1d26ede3fb15c06904d700f1d7b21bba2215e"
      ],
      "author": {
        "name": "Heinz Mauelshagen",
        "email": "hjm@redhat.com",
        "time": "Tue Oct 21 17:45:06 2008 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Oct 21 17:45:06 2008 +0100"
      },
      "message": "dm raid1: separate region_hash interface part1\n\nSeparate the region hash code from raid1 so it can be shared by forthcoming\ntargets.  Use BUG_ON() for failed async dm_io() calls.\n\nSigned-off-by: Heinz Mauelshagen \u003chjm@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "f3e1d26ede3fb15c06904d700f1d7b21bba2215e",
      "tree": "18ce3a0e4c4005d9737b840b37440e4ad85ed860",
      "parents": [
        "0a4a1047a445062793d9004bcb0d52756726fdf5"
      ],
      "author": {
        "name": "Martin K. Petersen",
        "email": "martin.petersen@oracle.com",
        "time": "Tue Oct 21 17:45:04 2008 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Oct 21 17:45:04 2008 +0100"
      },
      "message": "dm: mark split bio as cloned\n\nWhen a bio gets split, mark its fragments with the BIO_CLONED flag.\n\nSigned-off-by: Martin K. Petersen \u003cmartin.petersen@oracle.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "0a4a1047a445062793d9004bcb0d52756726fdf5",
      "tree": "4fb581827ae3951c0737188301208a4fb73831e3",
      "parents": [
        "393b47ef23bbcf16890c907d0144b5a8ec4caebf"
      ],
      "author": {
        "name": "Milan Broz",
        "email": "mbroz@redhat.com",
        "time": "Tue Oct 21 17:45:03 2008 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Oct 21 17:45:03 2008 +0100"
      },
      "message": "dm crypt: remove waitqueue\n\nRemove waitqueue no longer needed with the async crypto interface.\n\nSigned-off-by: Milan Broz \u003cmbroz@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "393b47ef23bbcf16890c907d0144b5a8ec4caebf",
      "tree": "8f3f26715fe81ef5fb78a6f30a46e163873de6b9",
      "parents": [
        "b635b00e0e159d858486fd899c4021d1d67757e2"
      ],
      "author": {
        "name": "Milan Broz",
        "email": "mbroz@redhat.com",
        "time": "Tue Oct 21 17:45:02 2008 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Oct 21 17:45:02 2008 +0100"
      },
      "message": "dm crypt: fix async split\n\nWhen writing io, dm-crypt has to allocate a new cloned bio\nand encrypt the data into newly-allocated pages attached to this bio.\nIn rare cases, because of hw restrictions (e.g. physical segment limit)\nor memory pressure, sometimes more than one cloned bio has to be used,\neach processing a different fragment of the original.\n\nCurrently there is one waitqueue which waits for one fragment to finish\nand continues processing the next fragment.\n\nBut when using asynchronous crypto this doesn\u0027t work, because several\nfragments may be processed asynchronously or in parallel and there is\nonly one crypt context that cannot be shared between the bio fragments.\nThe result may be corruption of the data contained in the encrypted bio.\n\nThe patch fixes this by allocating new dm_crypt_io structs (with new\ncrypto contexts) and running them independently.\n\nThe fragments contains a pointer to the base dm_crypt_io struct to\nhandle reference counting, so the base one is properly deallocated\nafter all the fragments are finished.\n\nIn a low memory situation, this only uses one additional object from the\nmempool.  If the mempool is empty, the next allocation simple waits for\nprevious fragments to complete.\n\nSigned-off-by: Milan Broz \u003cmbroz@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "b635b00e0e159d858486fd899c4021d1d67757e2",
      "tree": "ceb7bb5bd97142fe4fb5412cbf1f19fa867869c1",
      "parents": [
        "586e80e6ee0d137c7d79fbae183bb37bc60ee97e"
      ],
      "author": {
        "name": "Milan Broz",
        "email": "mbroz@redhat.com",
        "time": "Tue Oct 21 17:45:00 2008 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Oct 21 17:45:00 2008 +0100"
      },
      "message": "dm crypt: tidy sector\n\nPrepare local sector variable (offset) for later patch.\nDo not update io-\u003esector for still-running I/O.\n\nNo functional change.\n\nSigned-off-by: Milan Broz \u003cmbroz@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "586e80e6ee0d137c7d79fbae183bb37bc60ee97e",
      "tree": "1f3cc124ed6ad93abd4c14f9c8900333c6cba6fb",
      "parents": [
        "d63a5ce3c0d25c96bdadc78792e5b48b846e899d"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Tue Oct 21 17:44:59 2008 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Oct 21 17:44:59 2008 +0100"
      },
      "message": "dm: remove dm header from targets\n\nChange #include \"dm.h\" to #include \u003clinux/device-mapper.h\u003e in all targets.\nTargets should not need direct access to internal DM structures.\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "d63a5ce3c0d25c96bdadc78792e5b48b846e899d",
      "tree": "ac46375b47f784dff17d1e657d5115b45ad86844",
      "parents": [
        "7acedc5b98a2fcff64f00c21110aae7d3ac2f7df"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Tue Oct 21 17:44:57 2008 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Oct 21 17:44:57 2008 +0100"
      },
      "message": "dm: publish array_too_big\n\nMove array_too_big to include/linux/device-mapper.h because it is\nused by targets.\n\nRemove the test from dm-raid1 as the number of mirror legs is limited\nsuch that it can never fail.  (Even for stripes it seems rather\nunlikely.)\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "7acedc5b98a2fcff64f00c21110aae7d3ac2f7df",
      "tree": "ed9eda05b30d3606f1ad16e368c313b40c616c3d",
      "parents": [
        "7c9e6c17325fab380fbe9c9787680ff7d4a51abd"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Tue Oct 21 17:44:56 2008 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Oct 21 17:44:56 2008 +0100"
      },
      "message": "dm exception store: fix misordered writes\n\nWe must zero the next chunk on disk *before* writing out the current chunk, not\nafter.  Otherwise if the machine crashes at the wrong time, the \"end of metadata\"\nmarker may be missing.\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\nCc: stable@kernel.org\n"
    },
    {
      "commit": "7c9e6c17325fab380fbe9c9787680ff7d4a51abd",
      "tree": "3d92b66810b90bcef66a0e021e3944f335ebf9fa",
      "parents": [
        "f68d4f3d394da5b1f69d855b8513f4256ccc803e"
      ],
      "author": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Oct 21 17:44:55 2008 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Oct 21 17:44:55 2008 +0100"
      },
      "message": "dm exception store: refactor zero_area\n\nUse a separate buffer for writing zeroes to the on-disk snapshot\nexception store, make the updating of ps-\u003ecurrent_area explicit and\nrefactor the code in preparation for the fix in the next patch.\n\nNo functional change.\n\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nCc: stable@kernel.org\n"
    },
    {
      "commit": "f68d4f3d394da5b1f69d855b8513f4256ccc803e",
      "tree": "0302fdc83ab62aeb9ad891dffd772625219bcbfc",
      "parents": [
        "7c5f78b9d7f21937e46c26db82976df4b459c95c"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Tue Oct 21 17:44:53 2008 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Oct 21 17:44:53 2008 +0100"
      },
      "message": "dm snapshot: drop unused last_percent\n\nThe last_percent field is unused - remove it.\n(It dates from when events were triggered as each X% filled up.)\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "7c5f78b9d7f21937e46c26db82976df4b459c95c",
      "tree": "dce6b094836929224af2ff16af60ee3109598652",
      "parents": [
        "b673c3a8192e28f13e2050a4b82c1986be92cc15"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Tue Oct 21 17:44:51 2008 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Oct 21 17:44:51 2008 +0100"
      },
      "message": "dm snapshot: fix primary_pe race\n\nFix a race condition with primary_pe ref_count handling.\n\nput_pending_exception runs under dm_snapshot-\u003elock, it does atomic_dec_and_test\non primary_pe-\u003eref_count, and later does atomic_read primary_pe-\u003eref_count.\n\n__origin_write does atomic_dec_and_test on primary_pe-\u003eref_count without holding\ndm_snapshot-\u003elock.\n\nThis opens the following race condition:\nAssume two CPUs, CPU1 is executing put_pending_exception (and holding\ndm_snapshot-\u003elock). CPU2 is executing __origin_write in parallel.\nprimary_pe-\u003eref_count \u003d\u003d 2.\n\nCPU1:\nif (primary_pe \u0026\u0026 atomic_dec_and_test(\u0026primary_pe-\u003eref_count))\n\torigin_bios \u003d bio_list_get(\u0026primary_pe-\u003eorigin_bios);\n... decrements primary_pe-\u003eref_count to 1. Doesn\u0027t load origin_bios\n\nCPU2:\nif (first \u0026\u0026 atomic_dec_and_test(\u0026primary_pe-\u003eref_count)) {\n\tflush_bios(bio_list_get(\u0026primary_pe-\u003eorigin_bios));\n\tfree_pending_exception(primary_pe);\n\t/* If we got here, pe_queue is necessarily empty. */\n\treturn r;\n}\n... decrements primary_pe-\u003eref_count to 0, submits pending bios, frees\nprimary_pe.\n\nCPU1:\nif (!primary_pe || primary_pe !\u003d pe)\n\tfree_pending_exception(pe);\n... this has no effect.\nif (primary_pe \u0026\u0026 !atomic_read(\u0026primary_pe-\u003eref_count))\n\tfree_pending_exception(primary_pe);\n... sees ref_count \u003d\u003d 0 (written by CPU 2), does double free !!\n\nThis bug can happen only if someone is simultaneously writing to both the\norigin and the snapshot.\n\nIf someone is writing only to the origin, __origin_write will submit kcopyd\nrequest after it decrements primary_pe-\u003eref_count (so it can\u0027t happen that the\nfinished copy races with primary_pe-\u003eref_count decrementation).\n\nIf someone is writing only to the snapshot, __origin_write isn\u0027t invoked at all\nand the race can\u0027t happen.\n\nThe race happens when someone writes to the snapshot --- this creates\npending_exception with primary_pe \u003d\u003d NULL and starts copying. Then, someone\nwrites to the same chunk in the snapshot, and __origin_write races with\ntermination of already submitted request in pending_complete (that calls\nput_pending_exception).\n\nThis race may be reason for bugs:\n  http://bugzilla.kernel.org/show_bug.cgi?id\u003d11636\n  https://bugzilla.redhat.com/show_bug.cgi?id\u003d465825\n\nThe patch fixes the code to make sure that:\n1. If atomic_dec_and_test(\u0026primary_pe-\u003eref_count) returns false, the process\nmust no longer dereference primary_pe (because someone else may free it under\nus).\n2. If atomic_dec_and_test(\u0026primary_pe-\u003eref_count) returns true, the process\nis responsible for freeing primary_pe.\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\nCc: stable@kernel.org\n"
    },
    {
      "commit": "b673c3a8192e28f13e2050a4b82c1986be92cc15",
      "tree": "6d4f2f3565cc046750eb482a0ccb15cbe28ba7f9",
      "parents": [
        "2515ddc6db8eb49a79f0fe5e67ff09ac7c81eab4"
      ],
      "author": {
        "name": "Kazuo Ito",
        "email": "ito.kazuo@oss.ntt.co.jp",
        "time": "Tue Oct 21 17:44:50 2008 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Oct 21 17:44:50 2008 +0100"
      },
      "message": "dm kcopyd: avoid queue shuffle\n\nWrite throughput to LVM snapshot origin volume is an order\nof magnitude slower than those to LV without snapshots or\nsnapshot target volumes, especially in the case of sequential\nwrites with O_SYNC on.\n\nThe following patch originally written by Kevin Jamieson and\nJan Blunck and slightly modified for the current RCs by myself\ntries to improve the performance by modifying the behaviour\nof kcopyd, so that it pushes back an I/O job to the head of\nthe job queue instead of the tail as process_jobs() currently\ndoes when it has to wait for free pages. This way, write\nrequests aren\u0027t shuffled to cause extra seeks.\n\nI tested the patch against 2.6.27-rc5 and got the following results.\nThe test is a dd command writing to snapshot origin followed by fsync\nto the file just created/updated.  A couple of filesystem benchmarks\ngave me similar results in case of sequential writes, while random\nwrites didn\u0027t suffer much.\n\ndd if\u003d/dev/zero of\u003d\u003csomewhere on snapshot origin\u003e bs\u003d4096 count\u003d...\n   [conv\u003dnotrunc when updating]\n\n1) linux 2.6.27-rc5 without the patch, write to snapshot origin,\naverage throughput (MB/s)\n                     10M     100M    1000M\ncreate,dd         511.46   610.72    11.81\ncreate,dd+fsync     7.10     6.77     8.13\nupdate,dd         431.63   917.41    12.75\nupdate,dd+fsync     7.79     7.43     8.12\n\ncompared with write throughput to LV without any snapshots,\nall dd+fsync and 1000 MiB writes perform very poorly.\n\n                     10M     100M    1000M\ncreate,dd         555.03   608.98   123.29\ncreate,dd+fsync   114.27    72.78    76.65\nupdate,dd         152.34  1267.27   124.04\nupdate,dd+fsync   130.56    77.81    77.84\n\n2) linux 2.6.27-rc5 with the patch, write to snapshot origin,\naverage throughput (MB/s)\n\n                     10M     100M    1000M\ncreate,dd         537.06   589.44    46.21\ncreate,dd+fsync    31.63    29.19    29.23\nupdate,dd         487.59   897.65    37.76\nupdate,dd+fsync    34.12    30.07    26.85\n\nAlthough still not on par with plain LV performance -\ncannot be avoided because it\u0027s copy on write anyway -\nthis simple patch successfully improves throughtput\nof dd+fsync while not affecting the rest.\n\nSigned-off-by: Jan Blunck \u003cjblunck@suse.de\u003e\nSigned-off-by: Kazuo Ito \u003cito.kazuo@oss.ntt.co.jp\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\nCc: stable@kernel.org\n"
    },
    {
      "commit": "9a1c3542768b5a58e45a9216921cd10a3bae1205",
      "tree": "c20ffda950db868ec7e1e35aed532962de2ecfd9",
      "parents": [
        "511de73ff09034fb89c8d54bed201a10d057328c"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Feb 22 20:40:24 2008 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Oct 21 07:48:58 2008 -0400"
      },
      "message": "[PATCH] pass fmode_t to blkdev_put()\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "a39907fa2fdb73d3c0fb06eff06d855c3298d707",
      "tree": "d8be7f2fb0fe6ddf037e40b2cc958a6c07a32d95",
      "parents": [
        "fe5f9f2cd57c2ce56f36c66e87a10d4b7a158505"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sun Mar 02 10:31:15 2008 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Oct 21 07:48:31 2008 -0400"
      },
      "message": "[PATCH] switch md\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "fe5f9f2cd57c2ce56f36c66e87a10d4b7a158505",
      "tree": "76bfbf4e634fcd043f4764cfff45ce6ea12171f8",
      "parents": [
        "a4600f81393d685043fe2d485cf2b123301f467d"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sun Mar 02 10:29:31 2008 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Oct 21 07:48:29 2008 -0400"
      },
      "message": "[PATCH] switch dm\n\nioctl() doesn\u0027t need BKL here\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "d4430d62fa77208824a37fe6f85ab2831d274769",
      "tree": "5d4d0bca31e63eb208fbebe4f39c912b964c1e4d",
      "parents": [
        "badf8082c33d18b118d3a6f1b32d5ea6b97d3839"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sun Mar 02 09:09:22 2008 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Oct 21 07:47:32 2008 -0400"
      },
      "message": "[PATCH] beginning of methods conversion\n\nTo keep the size of changesets sane we split the switch by drivers;\nto keep the damn thing bisectable we do the following:\n\t1) rename the affected methods, add ones with correct\nprototypes, make (few) callers handle both.  That\u0027s this changeset.\n\t2) for each driver convert to new methods.  *ALL* drivers\nare converted in this series.\n\t3) kill the old (renamed) methods.\n\nNote that it _is_ a flagday; all in-tree drivers are converted and by the\nend of this series no trace of old methods remain.  The only reason why\nwe do that this way is to keep the damn thing bisectable and allow per-driver\ndebugging if anything goes wrong.\n\nNew methods:\n\topen(bdev, mode)\n\trelease(disk, mode)\n\tioctl(bdev, mode, cmd, arg)\t\t/* Called without BKL */\n\tcompat_ioctl(bdev, mode, cmd, arg)\n\tlocked_ioctl(bdev, mode, cmd, arg)\t/* Called with BKL, legacy */\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "633a08b81206122469365b4c72eaeb71f04f2cb4",
      "tree": "9cd30507efd30645d30d351c7ad0d5966f806532",
      "parents": [
        "a0eb62a0a4470fef5a5f41e7f1442fdd667220ef"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Aug 29 20:34:12 2007 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Oct 21 07:47:26 2008 -0400"
      },
      "message": "[PATCH] introduce __blkdev_driver_ioctl()\n\nAnalog of blkdev_driver_ioctl() with sane arguments.  For\nnow uses fake struct file, by the end of the series it won\u0027t\nand blkdev_driver_ioctl() will become a wrapper around it.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "647b3d0084158c47b1aea8f34d13cab9cd0a5b49",
      "tree": "c36d61d8c85c4e0e6160153ab99a6e7568b44a70",
      "parents": [
        "1bddd9e6453ef1c7bc5b6f4ddbf7d31f4aee7a44"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Aug 28 22:15:59 2007 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Oct 21 07:47:18 2008 -0400"
      },
      "message": "[PATCH] lose unused arguments in dm ioctl callbacks\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "aeb5d727062a0238a2f96c9c380fbd2be4640c6f",
      "tree": "51dae8a071fcf42e4431a66d37c5b843c8e99cf6",
      "parents": [
        "2515ddc6db8eb49a79f0fe5e67ff09ac7c81eab4"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Sep 02 15:28:45 2008 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Oct 21 07:47:06 2008 -0400"
      },
      "message": "[PATCH] introduce fmode_t, do annotations\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "92850bbd71228730c80efd491e7427650188d359",
      "tree": "1d9d87d8eead78e2f6d37db62b580a8b7961844e",
      "parents": [
        "3c0ee63a64a20351ed6c16ec797e1f8c850741ea"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Oct 21 13:25:32 2008 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Oct 21 13:25:32 2008 +1100"
      },
      "message": "md: allow extended partitions on md devices.\n\nThe new extended partition support provides a much nicer was\nto have partitions on md devices that the \u0027mdp\u0027 alternate major.\nWe cannot really get rid of \u0027mdp\u0027 at this time, but we can\nenable extended partitions as that will probably make life\neasier for sysadmins.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "3c0ee63a64a20351ed6c16ec797e1f8c850741ea",
      "tree": "482b825a00356a2b7b605065ce1d6ebe87591eb5",
      "parents": [
        "b62b75905d571c29262a6c38cf9e5f089c203871"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Oct 21 13:25:28 2008 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Oct 21 13:25:28 2008 +1100"
      },
      "message": "md: use sysfs_notify_dirent to notify changes to md/dev-xxx/state\n\nThe \u0027state\u0027 file for a device reports, for example, when the device\nhas failed.  Changes should be reported to userspace ASAP without\nthe possibility of blocking on low-memory.  sysfs_notify does\nhave that possibility (as it takes a mutex which can be held\nacross a kmalloc) so use sysfs_notify_dirent instead.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "b62b75905d571c29262a6c38cf9e5f089c203871",
      "tree": "0ca9a74c1d53aad0532aaebebb031b9d8edc5d90",
      "parents": [
        "0cfd81031a26717fe14380d18275f8e217571615"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Oct 21 13:25:21 2008 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Oct 21 13:25:21 2008 +1100"
      },
      "message": "md: use sysfs_notify_dirent to notify changes to md/array_state\n\nNow that we have sysfs_notify_dirent, use it to notify changes\nto md/array_state.\nAs sysfs_notify_dirent can be called in atomic context, we can\nremove the delayed notify and the MD_NOTIFY_ARRAY_STATE flag.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "ed09441dacc2a2d6c170aa3b1f79a041291a813f",
      "tree": "95c35bdf4f0b679806984093dce627a66d0d7cf1",
      "parents": [
        "b225ee5bed70254a100896c473e6dd8c2be45c18",
        "4c393e6e457fb41169dd110c1b96a138394c2d7b"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Oct 17 09:00:23 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Oct 17 09:00:23 2008 -0700"
      },
      "message": "Merge git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6\n\n* git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6: (39 commits)\n  [SCSI] sd: fix compile failure with CONFIG_BLK_DEV_INTEGRITY\u003dn\n  libiscsi: fix locking in iscsi_eh_device_reset\n  libiscsi: check reason why we are stopping iscsi session to determine error value\n  [SCSI] iscsi_tcp: return a descriptive error value during connection errors\n  [SCSI] libiscsi: rename host reset to target reset\n  [SCSI] iscsi class: fix endpoint id handling\n  [SCSI] libiscsi: Support drivers initiating session removal\n  [SCSI] libiscsi: fix data corruption when target has to resend data-in packets\n  [SCSI] sd: Switch kernel printing level for DIF messages\n  [SCSI] sd: Correctly handle all combinations of DIF and DIX\n  [SCSI] sd: Always print actual protection_type\n  [SCSI] sd: Issue correct protection operation\n  [SCSI] scsi_error: fix target reset handling\n  [SCSI] lpfc 8.2.8 v2 : Add statistical reporting control and additional fc vendor events\n  [SCSI] lpfc 8.2.8 v2 : Add sysfs control of target queue depth handling\n  [SCSI] lpfc 8.2.8 v2 : Revert target busy in favor of transport disrupted\n  [SCSI] scsi_dh_alua: remove REQ_NOMERGE\n  [SCSI] lpfc 8.2.8 : update driver version to 8.2.8\n  [SCSI] lpfc 8.2.8 : Add MSI-X support\n  [SCSI] lpfc 8.2.8 : Update driver to use new Host byte error code DID_TRANSPORT_DISRUPTED\n  ...\n"
    },
    {
      "commit": "c472273f863c80b87e53356256c5466df24328f0",
      "tree": "988b67a44e8ecd49d417a7e3cbdffa057251a28f",
      "parents": [
        "36ac1d2f323f8bf8bc10c25b88f617657720e241",
        "97ce0a7f9caf9d715cee815a016ee21575f71c95"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Oct 16 11:55:11 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Oct 16 11:55:11 2008 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://neil.brown.name/md\n\n* \u0027for-linus\u0027 of git://neil.brown.name/md:\n  md: fix input truncation in safe_delay_store()\n  md: check for memory allocation failure in faulty personality\n  md: build failure due to missing delay.h\n  md: Relax minimum size restrictions on chunk_size.\n  md: remove space after function name in declaration and call.\n  md: Remove unnecessary #includes, #defines, and function declarations.\n  md: Convert remaining 1k representations in linear.c to sectors.\n  md: linear.c: Make two local variables sector-based.\n  md: linear: Represent dev_info-\u003esize and dev_info-\u003eoffset in sectors.\n  md: linear.c: Remove broken debug code.\n  md: linear.c: Remove pointless initialization of curr_offset.\n  md: linear.c: Fix typo in comment.\n  md: Don\u0027t try to set an array to \u0027read-auto\u0027 if it is already in that state.\n  md: Allow metadata_version to be updated for externally managed metadata.\n  md: Fix rdev_size_store with size \u003d\u003d 0\n"
    }
  ],
  "next": "97ce0a7f9caf9d715cee815a016ee21575f71c95"
}
