)]}'
{
  "log": [
    {
      "commit": "56de210245487ef1f1416c8ec9e581ebdd0d32ec",
      "tree": "61d75301cf6f1440e206a46472e0c73316ee3f52",
      "parents": [
        "b051f6edc29c084a6440e9731bc85d95b6b95e14"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Feb 27 17:04:01 2013 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Feb 27 19:10:15 2013 -0800"
      },
      "message": "drbd: convert to idr_alloc()\n\nConvert to the much saner new idr interface.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "2681f7f6ce6c7416eb619d0fb19422bcc68bd9e1",
      "tree": "31b6a1a1830c4c81d917b545e659c1f46bcc1218",
      "parents": [
        "d2ec180c23a5a1bfe34d8638b0342a47c00cf70f"
      ],
      "author": {
        "name": "Lars Ellenberg",
        "email": "lars.ellenberg@linbit.com",
        "time": "Mon Jan 21 15:43:41 2013 +0100"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Mon Jan 21 22:58:36 2013 +0100"
      },
      "message": "drbd: fix potential protocol error and resulting disconnect/reconnect\n\nWhen we notice a disk failure on the receiving side,\nwe stop sending it new incoming writes.\n\nDepending on exact timing of various events, the same transfer log epoch\ncould end up containing both replicated (before we noticed the failure)\nand local-only requests (after we noticed the failure).\n\nThe sanity checks in tl_release(), called when receiving a\nP_BARRIER_ACK, check that the ack\u0027ed transfer log epoch matches\nthe expected epoch, and the number of contained writes matches\nthe number of ack\u0027ed writes.\n\nIn this case, they counted both replicated and local-only writes,\nbut the peer only acknowledges those it has seen.  We get a mismatch,\nresulting in a protocol error and disconnect/reconnect cycle.\n\nMessages logged are\n  \"BAD! BarrierAck #%u received with n_writes\u003d%u, expected n_writes\u003d%u!\\n\"\n\nA similar issue can also be triggered when starting a resync while\nhaving a healthy replication link, by invalidating one side, forcing a\nfull sync, or attaching to a diskless node.\n\nFix this by closing the current epoch if the state changes in a way\nthat would cause the replication intent of the next write.\n\nEpochs now contain either only non-replicated,\nor only replicated writes.\n\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "d2ec180c23a5a1bfe34d8638b0342a47c00cf70f",
      "tree": "dd32f657c489adbb9e4f42e218a02149b1cd8c1e",
      "parents": [
        "ef86b77957a97315d43ff72c9b83361ba1a07963"
      ],
      "author": {
        "name": "Lars Ellenberg",
        "email": "lars.ellenberg@linbit.com",
        "time": "Thu Dec 06 11:11:04 2012 +0100"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Thu Dec 06 13:08:29 2012 +0100"
      },
      "message": "drbd: update Kconfig to match current dependencies\n\nWe no longer need the connector.\nBut we need libcrc32c.\n\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "ef86b77957a97315d43ff72c9b83361ba1a07963",
      "tree": "3058caac35c58b5ea92453163e00dd3a7cac57c5",
      "parents": [
        "13c76aba7846647f86d479293ae0a0adc1ca840a"
      ],
      "author": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Thu Dec 06 10:34:34 2012 +0100"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Thu Dec 06 13:04:34 2012 +0100"
      },
      "message": "drbd: Fix drbdsetup wait-connect, wait-sync etc... commands\n\nThis was introduces when moving the code over from the 8.3 codebase\nwith commit 328e0f125bf41f4f33f684db22015f92cb44fe56\n\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "13c76aba7846647f86d479293ae0a0adc1ca840a",
      "tree": "a729c2b6f77403829c712f118d3cc1ff65d901b7",
      "parents": [
        "691631c0652bc47e6d20b0d981e23a9025fd794e"
      ],
      "author": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Thu Nov 22 17:06:00 2012 +0100"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Thu Dec 06 13:00:33 2012 +0100"
      },
      "message": "drbd: close race between drbd_set_role and drbd_connect\n\ndrbd_set_role(, R_PRIMARY, ) does the state change to Primary,\nsome more housekeeping, and possibly generates a new UUID set.\n\nAll of this holding the \"state_mutex\".\n\nThe connection handshake involves sending of various state information,\nincluding the current data generation UUID set, and two connection\nstate changes from C_WF_CONNECTION to C_WF_REPORT_PARAMS further to\na number of different outcomes, resync being one of them.\n\nIf the connection handshake happens between the state change to Primary\nand the generation of the new UUIDs, the resync decision based on the\nold UUID set may be confused, depending on circumstances.\n\nMake sure that, before we do the handshake, any promotion to Primary\nrole will either be complete (including the housekeeping stuff), or can\nsee, and serialize with, the ongoing handshake, based on the\n\"STATE_SENT\" bit, which is set when we start the handshake, and cleared\nonly when we leave C_WF_REPORT_PARAMS again.\n\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "691631c0652bc47e6d20b0d981e23a9025fd794e",
      "tree": "86f1b42988865dc1e43aba9a76b1a421b2f4144c",
      "parents": [
        "298307ed1d2ac4815b0ce9a5f1c9cc643f4a9aca"
      ],
      "author": {
        "name": "Lars Ellenberg",
        "email": "lars.ellenberg@linbit.com",
        "time": "Fri Oct 26 00:41:50 2012 +0200"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Thu Dec 06 13:00:04 2012 +0100"
      },
      "message": "drbd: respect no-md-barriers setting also when changed online via disk-options\n\nWe need to propagate the configuration into the flag bits,\nor it won\u0027t be effective.\n\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "298307ed1d2ac4815b0ce9a5f1c9cc643f4a9aca",
      "tree": "ec20f76413bec74f5c5aa15631554712c114fce4",
      "parents": [
        "84ad6845fbb1248228d3beab8084e4b5f6f82b1d"
      ],
      "author": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Fri Nov 16 12:27:41 2012 +0100"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Thu Dec 06 12:09:55 2012 +0100"
      },
      "message": "drbd: Remove obsolete check\n\nSmatch complained about it this redundanct check.\n\nThe check was introduced in 2006-09-13. On 2007-07-24 the body of the\nfunction was enclosed by get_ldev()/put_ldev() reference counting.\nSince then the check is useless and miss leading.\n\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "2cecb7309897c872b977a60d53e5de0af4265dd6",
      "tree": "d48284c1edb9ed24d3afa57ba18441d345a5b20c",
      "parents": [
        "7b5a35225b0d4fd779cf79d7624e63d1957f6c4d"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Fri Nov 30 21:20:15 2012 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Fri Nov 30 21:20:15 2012 +0100"
      },
      "message": "drbd: fixup after wait_even_lock_irq() addition to generic code\n\nCompiling drbd yields:\n\ndrivers/block/drbd/drbd_state.c: In function ‘_conn_request_state’:\ndrivers/block/drbd/drbd_state.c:1804:5: error: macro \"wait_event_lock_irq\" passed 4 arguments, but takes just 3\ndrivers/block/drbd/drbd_state.c:1801:3: error: ‘wait_event_lock_irq’ undeclared (first use in this function)\ndrivers/block/drbd/drbd_state.c:1801:3: note: each undeclared identifier is reported only once for each function it appears in\ndrivers/block/drbd/drbd_state.c: At top level:\ndrivers/block/drbd/drbd_state.c:1734:1: warning: ‘_conn_rq_cond’ defined but not used [-Wunused-function]\n\nDue to drbd having copied the MD definition for wait_event_lock_irq()\nas well. Kill them.\n\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "f1d6a328bbe63b528721a25251ad8f5f1e997804",
      "tree": "fc3a84e75a9c6fbbf749b498c252adb9ca1980c3",
      "parents": [
        "ed635cb0674d6e4303d1a2e27d9e6e80b451a338"
      ],
      "author": {
        "name": "Akinobu Mita",
        "email": "akinobu.mita@gmail.com",
        "time": "Thu Nov 08 16:12:31 2012 -0800"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Fri Nov 09 14:22:26 2012 +0100"
      },
      "message": "drbd: use copy_highpage\n\nUse copy_highpage() to copy from one page to another.\n\nSigned-off-by: Akinobu Mita \u003cakinobu.mita@gmail.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "ed635cb0674d6e4303d1a2e27d9e6e80b451a338",
      "tree": "f540786331a69a1d6d378a2a64a0a79cd2bcdfff",
      "parents": [
        "063eacf88cc1394ece125d106c05cba1ca03aa3d"
      ],
      "author": {
        "name": "Lars Ellenberg",
        "email": "lars.ellenberg@linbit.com",
        "time": "Mon Nov 05 11:54:30 2012 +0100"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Fri Nov 09 14:22:19 2012 +0100"
      },
      "message": "drbd: if the replication link breaks during handshake, keep retrying\n\nThe 8.3.12 commit drbd: Bugfix for the connection behavior fixes a\n\"wasted established connection\", if a former connection attempt failed\nduring its early stages.\n\nHowever it opened a window for a regression, if a connection attempt\nfails during its last stages.  The result was a terminated receiver\nthread, that left behind the supposedly transient \"C_UNCONNECTED\" state.\nAny later requests to change the connection state fail, as they wait for\nthe connection state to \"stabilize\".\n\nFix: short circuit and keep retrying to restablish a new connection,\nif we don\u0027t reach C_WF_REPORT_PARAMS.\n\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "063eacf88cc1394ece125d106c05cba1ca03aa3d",
      "tree": "11e2d734cf848a5f73657f2342a760baa1360a7a",
      "parents": [
        "986836503e49ccf7e84b813715d344964ec93566"
      ],
      "author": {
        "name": "Jing Wang",
        "email": "windsdaemon@gmail.com",
        "time": "Thu Oct 25 15:00:56 2012 +0800"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Fri Nov 09 14:22:10 2012 +0100"
      },
      "message": "drbd: check return of kmalloc in receive_uuids\n\nSigned-off-by: Jing Wang \u003cwindsdaemon@gmail.com\u003e\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "986836503e49ccf7e84b813715d344964ec93566",
      "tree": "b3bea7428efde5b77096cef80e5b6bfee494cc12",
      "parents": [
        "ccae7868b0c5697508a541c531cf96b361d62c1c",
        "328e0f125bf41f4f33f684db22015f92cb44fe56"
      ],
      "author": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Fri Nov 09 14:18:43 2012 +0100"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Fri Nov 09 14:20:23 2012 +0100"
      },
      "message": "Merge branch \u0027drbd-8.4_ed6\u0027 into for-3.8-drivers-drbd-8.4_ed6\n"
    },
    {
      "commit": "328e0f125bf41f4f33f684db22015f92cb44fe56",
      "tree": "364b7292db9d7072130080589b579e3fdadf23e6",
      "parents": [
        "518a4d53b2985451a08cb4e5b79deacfe151a38a"
      ],
      "author": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Fri Oct 19 14:37:47 2012 +0200"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Fri Nov 09 14:11:43 2012 +0100"
      },
      "message": "drbd: Broadcast sync progress no more often than once per second\n\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "518a4d53b2985451a08cb4e5b79deacfe151a38a",
      "tree": "a2bbe91f62459f474417c1485912b1da7beaed10",
      "parents": [
        "fd0017c1243b2b9058525672b9ea13272fb51b30"
      ],
      "author": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Fri Oct 19 14:21:22 2012 +0200"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Fri Nov 09 14:11:42 2012 +0100"
      },
      "message": "drbd: don\u0027t try to clear bits once the disk has failed\n\nIf the disk has failed already, there is no point trying to change the\nbitmap. drbd_set_out_of_sync() already had this safeguard,\ntime to add it to drbd_set_in_sync() as well.\n\nThis also prevents some warning messages, like\n FIXME asender in bm_change_bits_to, bitmap locked for \u0027detach\u0027 by worker\nif our disk fails during resync, while there are some resync acks queued up.\n\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "fd0017c1243b2b9058525672b9ea13272fb51b30",
      "tree": "529e6eaef73f2ac210e12f9bc4eb8a6178e1894c",
      "parents": [
        "4035e4c2ebeb6ac1acbf4e5dd8a759fcf93ff8da"
      ],
      "author": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Fri Oct 19 14:19:23 2012 +0200"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Fri Nov 09 14:11:42 2012 +0100"
      },
      "message": "drbd: fix regression: potential NULL pointer dereference\n\nrecent commit\n    drbd: always write bitmap on detach\nintroduced a bitmap writeout during detach,\nwhich obviously needs some meta data device to write to.\n\nUnfortunately, that same error path may be taken if we fail to attach,\ne.g. due to UUID mismatch, after we changed state to D_ATTACHING,\nbut before the lower level device pointer is even assigned.\n\nWe need to test for presence of mdev-\u003eldev.\n\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "4035e4c2ebeb6ac1acbf4e5dd8a759fcf93ff8da",
      "tree": "6b05a01cb88deeec5a0e1159fd7d9db5067d3a09",
      "parents": [
        "42839f65361baa0fa62494c32f1dae570e9dce19"
      ],
      "author": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Mon Oct 01 18:04:12 2012 +0200"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Fri Nov 09 14:11:42 2012 +0100"
      },
      "message": "drbd: Fix clearing of MDF_AL_DISABLED\n\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "42839f65361baa0fa62494c32f1dae570e9dce19",
      "tree": "1ddd9c433dfed793d3cbe45f900f470cd7d781d1",
      "parents": [
        "edc9f5eb7afa3d832f540fcfe10e3e1087e6f527"
      ],
      "author": {
        "name": "Lars Ellenberg",
        "email": "lars.ellenberg@linbit.com",
        "time": "Thu Sep 27 15:19:38 2012 +0200"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Fri Nov 09 14:11:41 2012 +0100"
      },
      "message": "drbd: log request sector offset and size for IO errors\n\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "edc9f5eb7afa3d832f540fcfe10e3e1087e6f527",
      "tree": "eba63d771575a42a6aa81bd55a59f7d6253d18ea",
      "parents": [
        "e34b677d09ce375a87acd0360537cbed33881b0c"
      ],
      "author": {
        "name": "Lars Ellenberg",
        "email": "lars.ellenberg@linbit.com",
        "time": "Thu Sep 27 15:18:21 2012 +0200"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Fri Nov 09 14:11:41 2012 +0100"
      },
      "message": "drbd: always write bitmap on detach\n\nIf we detach due to local read-error (which sets a bit in the bitmap),\nstay Primary, and then re-attach (which re-reads the bitmap from disk),\nwe potentially lost the \"out-of-sync\" (or, \"bad block\") information in\nthe bitmap.\n\nAlways (try to) write out the changed bitmap pages before going diskless.\n\nThat way, we don\u0027t lose the bit for the bad block,\nthe next resync will fetch it from the peer, and rewrite\nit locally, which may result in block reallocation in some\nlower layer (or the hardware), and thereby \"heal\" the bad blocks.\n\nIf the bitmap writeout errors out as well, we will (again: try to)\nmark the \"we need a full sync\" bit in our super block,\nif it was a READ error; writes are covered by the activity log already.\n\nIf that superblock does not make it to disk either, we are sorry.\n\nMaybe we just lost an entire disk or controller (or iSCSI connection),\nand there actually are no bad blocks at all, so we don\u0027t need to\nre-fetch from the peer, there is no \"auto-healing\" necessary.\n\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "e34b677d09ce375a87acd0360537cbed33881b0c",
      "tree": "6b8d1a2d6224f095c046bc0792d9288190253e19",
      "parents": [
        "8747d30af97232f9ff4cde78b8d259cc715a9b7a"
      ],
      "author": {
        "name": "Lars Ellenberg",
        "email": "lars.ellenberg@linbit.com",
        "time": "Thu Sep 27 15:07:11 2012 +0200"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Fri Nov 09 14:11:40 2012 +0100"
      },
      "message": "drbd: wait for meta data IO completion even with failed disk, unless force-detached\n\nThe intention of force-detach is to be able to deal with a completely\nunresponsive lower level IO stack, which does not even deliver error\ncompletions anymore, but no completion at all.\n\nIn all other cases, we must still wait for the meta data IO completion.\n\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "8747d30af97232f9ff4cde78b8d259cc715a9b7a",
      "tree": "4c983fe736a4bdfc80f7a978011d01932ec85e02",
      "parents": [
        "bc891c9ae3fb2848922e0f0da22fd7de0d58dc1b"
      ],
      "author": {
        "name": "Lars Ellenberg",
        "email": "lars.ellenberg@linbit.com",
        "time": "Wed Sep 26 14:22:40 2012 +0200"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Fri Nov 09 14:11:40 2012 +0100"
      },
      "message": "drbd: a few more GFP_KERNEL -\u003e GFP_NOIO\n\nThis has not yet been observed, but conceivably, when using GFP_KERNEL\nallocations from drbd_md_sync(), drbd_flush_after_epoch() or\nreceive_SyncParam(), we could trigger additional IO to our own device,\nor an other device in a criss-cross setup, and end up in a local\ndeadlock, or potentially a distributed deadlock in a criss-cross setup\ninvolving the peer blocked in a similar way waiting for us to make\nprogress.\n\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "bc891c9ae3fb2848922e0f0da22fd7de0d58dc1b",
      "tree": "58353dfe6fb1257533959a56346b5d5a0a15ad4f",
      "parents": [
        "a506c13a4d1ec5e1f2f9bc0123dacb5d123004d3"
      ],
      "author": {
        "name": "Lars Ellenberg",
        "email": "lars.ellenberg@linbit.com",
        "time": "Wed Sep 26 14:18:51 2012 +0200"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Fri Nov 09 14:11:39 2012 +0100"
      },
      "message": "drbd: fix potential deadlock during bitmap (re-)allocation\n\nThe former comment arguing that GFP_KERNEL was good enough was wrong: it\ndid not take resize into account at all, and assumed the only path\nleading here was the normal attach on a still secondary device, so no\ndeadlock would be possible.\n\nBoth resize on a Primary, or attach on a diskless Primary,\ncould potentially deadlock.\n\ndrbd_bm_resize() is called while IO to the respective device is\nsuspended, so we must use GFP_NOIO to avoid potential deadlock.\n\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "a506c13a4d1ec5e1f2f9bc0123dacb5d123004d3",
      "tree": "220cf5d8b8cbd88b498b4ae46e5f523cfb9449ab",
      "parents": [
        "1b6dd252e6c631322372c018ed546a108d9869d3"
      ],
      "author": {
        "name": "Lars Ellenberg",
        "email": "lars.ellenberg@linbit.com",
        "time": "Wed Sep 26 14:16:30 2012 +0200"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Fri Nov 09 14:11:39 2012 +0100"
      },
      "message": "drbd: use list_move_tail instead of list_del/list_add_tail\n\nUsing list_move_tail() instead of list_del() + list_add_tail().\n\nspatch with a semantic match is used to found this problem.\n(http://coccinelle.lip6.fr/)\n\nSigned-off-by: Wei Yongjun \u003cyongjun_wei@trendmicro.com.cn\u003e\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "1b6dd252e6c631322372c018ed546a108d9869d3",
      "tree": "475048ee4f70f46a9a2b01f9350752b72d16ae6a",
      "parents": [
        "a3025a273700fc51dd561c7b2941f3c9db9be90a"
      ],
      "author": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Tue Sep 04 15:16:20 2012 +0200"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Fri Nov 09 14:11:39 2012 +0100"
      },
      "message": "drbd: panic on delayed completion of aborted requests\n\n\"aborting\" requests, or force-detaching the disk, is intended for\ncompletely blocked/hung local backing devices which do no longer\ncomplete requests at all, not even do error completions.  In this\nsituation, usually a hard-reset and failover is the only way out.\n\nBy \"aborting\", basically faking a local error-completion,\nwe allow for a more graceful swichover by cleanly migrating services.\nStill the affected node has to be rebooted \"soon\".\n\nBy completing these requests, we allow the upper layers to re-use\nthe associated data pages.\n\nIf later the local backing device \"recovers\", and now DMAs some data\nfrom disk into the original request pages, in the best case it will\njust put random data into unused pages; but typically it will corrupt\nmeanwhile completely unrelated data, causing all sorts of damage.\n\nWhich means delayed successful completion,\nespecially for READ requests,\nis a reason to panic().\n\nWe assume that a delayed *error* completion is OK,\nthough we still will complain noisily about it.\n\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "a3025a273700fc51dd561c7b2941f3c9db9be90a",
      "tree": "e4fc182421eb57b8863c3ba0aa4b6c2fa6e975ef",
      "parents": [
        "1393b59f8c46001c8dbd47078881483cf97813c3"
      ],
      "author": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Mon Sep 03 15:39:01 2012 +0200"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Fri Nov 09 14:11:38 2012 +0100"
      },
      "message": "drbd: Fix comparison of is_valid_transition()\u0027s return code\n\nis_valid_transition() might return SS_NOTHING_TO_DO.\n\nThe condition function _req_st_cond() returned SS_NOTHING_TO_DO, which\ncaused the wait_event to abort too early. Therefore drbd_req_state()\ndid not consume the next CL_ST_CHG_SUCCESS or SS_CW_FAILED_BY_PEER\ncausing serve disruption of the state machine logic...\n\nDetaching from a single volue was one way to trigger this bug.\n\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "1393b59f8c46001c8dbd47078881483cf97813c3",
      "tree": "0093ab8ecaab9d125e21c01acb58d7309b161270",
      "parents": [
        "70f17b6bd18dfe33f40db7573baa663b866be6ba"
      ],
      "author": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Mon Sep 03 14:04:23 2012 +0200"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Fri Nov 09 14:11:38 2012 +0100"
      },
      "message": "drbd: Remove duplicate code\n\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "70f17b6bd18dfe33f40db7573baa663b866be6ba",
      "tree": "43e12531930774a6b1814a065441ca0ee1fce7df",
      "parents": [
        "76590cd1fc338fd1c50f7121636db421deb8b881"
      ],
      "author": {
        "name": "Lars Ellenberg",
        "email": "lars.ellenberg@linbit.com",
        "time": "Mon Sep 03 14:08:35 2012 +0200"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Fri Nov 09 14:11:37 2012 +0100"
      },
      "message": "drbd: differentiate early and later \"postponing\" of requests\n\nWe use the RQ_POSTPONED flag to mark a request for several reasons.\n\nIt may be a conflicting request in a dual-primary setup,\nwhere conflict detection and resolution on the peer decided that\nthis request needs to be re-submitted, it needs to re-enter\ndrbd_make_request() to fix the data divergence caused by these\nconflicting, partially overlapping, quasi-simultaneous requests.\n\nIn this case we need to mark the corresponding area as out-of-sync,\nbefore we call drbd_al_complete_io().\n\nWe also use the RQ_POSTPONED flag to just \"push back\" a request,\nbefore even processing it, if IO is suspended for some reason.\nIn this case, as this request was neither submitted nor sent yet,\nwe must not touch the bitmap.\n\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "76590cd1fc338fd1c50f7121636db421deb8b881",
      "tree": "b73e77a7594fbdf2f4250e2c4700b273e3625899",
      "parents": [
        "19fffd7b0303e8843aa2decfd43fa57c9d511409"
      ],
      "author": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Wed Aug 29 15:23:14 2012 +0200"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Fri Nov 09 14:11:37 2012 +0100"
      },
      "message": "drbd: Fix postponed requests\n\nA postponed request might has RQ_IN_ACT_LOG already set, but\nis POSTPONED before it gets something in the RQ_LOCAL_MASK\nset. Up to now this caused a left-over active extent.\n\nFix that by only testing for the RQ_IN_ACT_LOG bit in drbd_req_destroy()\n\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "19fffd7b0303e8843aa2decfd43fa57c9d511409",
      "tree": "19ac111fafeec46eac2b0e8cee4f41f4327a1129",
      "parents": [
        "d76440181d0e05826f228189b74b4dbf64b68981"
      ],
      "author": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Tue Aug 28 16:48:03 2012 +0200"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Fri Nov 09 14:11:08 2012 +0100"
      },
      "message": "drbd: Call drbd_md_sync() explicitly after a state change on the connection\n\nWithout this, the meta-data gets updates after 5 seconds by the\nmd_sync_timer. Better to do it immeditaly after a state change.\n\nIf the asender detects a network failure, it may take a bit until\nthe worker processes the according after-conn-state-change work item.\n\n  The worker might be blocked in sending something, i.e. it\n  takes until it gets into its timeout. That is 6 seconds by\n  default which is longer than the 5 seconds of the md_sync_timer.\n\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "d76440181d0e05826f228189b74b4dbf64b68981",
      "tree": "1cd13320a3174aea469984a3a584d4df025a77ec",
      "parents": [
        "4ae98b4db3d0e9336d0b771636b7d053a1460805"
      ],
      "author": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Tue Aug 28 14:39:44 2012 +0200"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Fri Nov 09 14:08:24 2012 +0100"
      },
      "message": "drbd: Fix postponed requests\n\n* Postponed requests should not set or clear out-of-sync marks\n* When a request gets postponed we need to drop its reference\n  mdev-\u003elocal_cnt (put_ldev()).\n\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "4ae98b4db3d0e9336d0b771636b7d053a1460805",
      "tree": "00f409c059b6f910911df3a975c2a81e0be7e99e",
      "parents": [
        "797020117761eee21ef284cea90c51c690fca169"
      ],
      "author": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Tue Aug 28 11:46:22 2012 +0200"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Fri Nov 09 14:08:24 2012 +0100"
      },
      "message": "drbd: Imporve the error reporting of failed conn state changes\n\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "797020117761eee21ef284cea90c51c690fca169",
      "tree": "f631b73335e5a2211525a692ac57901d4c48b126",
      "parents": [
        "07fc96197aec46f7ad4f08a4b2a1ea426112e24d"
      ],
      "author": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Tue Aug 28 11:33:35 2012 +0200"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Fri Nov 09 14:08:23 2012 +0100"
      },
      "message": "drbd: Fix the way the STATE_SENT bit is cleared\n\nWith merging the commit\n\u0027drbd: Delay/reject other state changes while establishing a connection\u0027\nthe condition check for clearing the flag was wrong.\n\nMove the bit clearing to the __drbd_set_state() function\nin order to have it already cleared for the other parts of\nthe function. I.e. clearing the susp_fen in the after_state_ch() function.\n\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "07fc96197aec46f7ad4f08a4b2a1ea426112e24d",
      "tree": "b1cb7a0f46bf938cd994515e91ed814f5f3ef976",
      "parents": [
        "892fdd1aee35803bfa41ccf4df850ddb70f0811c"
      ],
      "author": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Tue Aug 28 11:07:56 2012 +0200"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Fri Nov 09 14:08:23 2012 +0100"
      },
      "message": "drbd: Do not check aspects that are not subject to change in _conn_requests_state()\n\nWhen _conn_requests_state() is used to change other parts of the state\nthan the connection, do not check for a valid connection transition.\n\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "892fdd1aee35803bfa41ccf4df850ddb70f0811c",
      "tree": "da4150805ff7aa465af7668b138384407b0b09e7",
      "parents": [
        "88f79ec4ae22a82d7b9a0cd4c9f3ee1def2a382c"
      ],
      "author": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Mon Aug 27 17:20:12 2012 +0200"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Fri Nov 09 14:08:22 2012 +0100"
      },
      "message": "drbd: Improve readability of IO resuming after freeze due to no data access\n\nThe previous way of doing the state change was also okay since the\nstate change on the susp flag gets propagated from the mdev\nto the tconn.\n\nFortunately all this goes away in drbd-9.0\n\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "88f79ec4ae22a82d7b9a0cd4c9f3ee1def2a382c",
      "tree": "387eef2b1f43e8c09514b288fd9570f8cde8e6b0",
      "parents": [
        "b792b655cdf79d4d90b4d46fa37e260ba0296850"
      ],
      "author": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Mon Aug 27 17:16:21 2012 +0200"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Fri Nov 09 14:08:22 2012 +0100"
      },
      "message": "drbd: Fix IO resuming after connection was established while executing the fence handler\n\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "b792b655cdf79d4d90b4d46fa37e260ba0296850",
      "tree": "3880fc3b0a90a1d83ab8e53c31efc10ff856bedc",
      "parents": [
        "bc317a9ecd641b78a4b237cb22b30ecf11443c77"
      ],
      "author": {
        "name": "Lars Ellenberg",
        "email": "lars.ellenberg@linbit.com",
        "time": "Wed Aug 22 14:59:06 2012 +0200"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Fri Nov 09 14:08:21 2012 +0100"
      },
      "message": "drbd: fix potential list_add corruption\n\nIf the md_sync_timer triggers a second time,\nwhile the work queued during the first time is still pending,\nthis could result in list_add() of an already added item,\nand corrupt the work item list.\n\nThis likely only triggered because of the erroneous\nbatch-dequeueing of work items fixed with\n  drbd: dequeue single work items in wait_for_work()\n\nStill, skip queueing if md_sync_work is already queued.\n\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "bc317a9ecd641b78a4b237cb22b30ecf11443c77",
      "tree": "a7c97ada41d22ff2f7fb7aae8bd025818e79a458",
      "parents": [
        "c02abda2b28734a7e97e15db866507b3cb92b7d0"
      ],
      "author": {
        "name": "Lars Ellenberg",
        "email": "lars.ellenberg@linbit.com",
        "time": "Wed Aug 22 11:47:14 2012 +0200"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Fri Nov 09 14:08:21 2012 +0100"
      },
      "message": "drbd: dequeue single work items in wait_for_work()\n\nAs long as we still use drbd_queue_work_front(),\nwe must only dequeue the single first item during normal operation.\n\nThe comment in drbd_worker() even says so,\nbut bc8a5a1 drbd: remove struct drbd_tl_epoch objects (barrier works)\nintroduced the batch dequeueing again via list_splice_init() in\nwait_for_work().\n\nChange back to list_move() of the first item, if any.\n\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "c02abda2b28734a7e97e15db866507b3cb92b7d0",
      "tree": "c85af57b2f3e9689d4374895c125da37d7ae7fad",
      "parents": [
        "c1fd29a11f433ca8ae37723768016ffe6cdd487b"
      ],
      "author": {
        "name": "Lars Ellenberg",
        "email": "lars.ellenberg@linbit.com",
        "time": "Wed Aug 22 16:15:26 2012 +0200"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Fri Nov 09 14:08:21 2012 +0100"
      },
      "message": "drbd: mutex_unlock \"... must no be used in interrupt context\"\n\nDocumentation of mutex_unlock says\nwe must not use it in interrupt context.\nSo do not call it while holding the spin_lock_irq,\nbut give up the spinlock temporarily.\n\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "c1fd29a11f433ca8ae37723768016ffe6cdd487b",
      "tree": "d297c9ee730f292a2a789f9bbeceffde075afc26",
      "parents": [
        "0ee98e2eb0c85f27b6f24a15d59fb54f99a93840"
      ],
      "author": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Tue Aug 21 20:34:07 2012 +0200"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Fri Nov 09 14:08:20 2012 +0100"
      },
      "message": "drbd: Fix a race condition that can lead to a BUG()\n\nIf the preconditions for a state change change after the wait_event() we\nmight hit the BUG() statement in conn_set_state().\n\nWith holding the spin_lock while evaluating the condition AND until the\nactual state change we ensure the the preconditions can not change anymore.\n\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "0ee98e2eb0c85f27b6f24a15d59fb54f99a93840",
      "tree": "bc3a3a0f737c6c7fa246047d35e9b1c2337bb418",
      "parents": [
        "4eb9b3cba00471a01699cceb0f4b1f0cb8111ee2"
      ],
      "author": {
        "name": "Lars Ellenberg",
        "email": "lars.ellenberg@linbit.com",
        "time": "Mon Aug 20 14:54:48 2012 +0200"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Fri Nov 09 14:08:20 2012 +0100"
      },
      "message": "drbd: temporarily suspend io in drbd_adm_disk_opts\n\ndrbd_adm_disk_opts() does\n\twait_event(mdev-\u003eal_wait, lc_try_lock(mdev-\u003eact_log));\n\tdrbd_al_shrink(mdev);\n\nIf the device is very busy, this can take a very long time to succeed.\nFix this by temporarily suspending IO,\nthen quickly change the settings, and resume.\n\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "4eb9b3cba00471a01699cceb0f4b1f0cb8111ee2",
      "tree": "55ee26423ac7d71efc76d8436622563ea272a549",
      "parents": [
        "08332d73250eec349b055843a503d45a9b5c13b6"
      ],
      "author": {
        "name": "Lars Ellenberg",
        "email": "lars.ellenberg@linbit.com",
        "time": "Mon Aug 20 11:05:23 2012 +0200"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Fri Nov 09 14:08:19 2012 +0100"
      },
      "message": "drbd: don\u0027t send out P_BARRIER with stale information\n\nWe must only send P_BARRIER for epochs we actually sent P_DATA in.\n\nIf we (re-)establish a connection, we reinitialized the\nsend.current_epoch_nr, but forgot to reset send.current_epoch_writes.\n\nThis could result in a spurious P_BARRIER with stale epoch information,\nand a disconnect/reconnect cycle once the then \"unexpected\"\nP_BARRIER_ACK is received:\n  BAD! BarrierAck #28823 received, expected #28829!\n\nIntroduce re_init_if_first_write() and maybe_send_barrier() helpers,\nand call them appropriately for read/write/set-out-of-sync requests.\n\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "08332d73250eec349b055843a503d45a9b5c13b6",
      "tree": "ec23064ccd2e5f0e21ee883793d0682c5e9a784a",
      "parents": [
        "155522df5b8ac24ee66a903e51d5b3023b2a76f9"
      ],
      "author": {
        "name": "Lars Ellenberg",
        "email": "lars.ellenberg@linbit.com",
        "time": "Fri Aug 17 15:09:13 2012 +0200"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Fri Nov 09 14:08:19 2012 +0100"
      },
      "message": "drbd: properly call drbd_rs_cancel_all() in drbd_disconnected()\n\ndrbd_disconnected() is supposed to clear the resync lru cache,\nby calling drbd_rs_cancel_all().\n\nWe must do so before we call drbd_flush_workqueue(), as at least the\ncallback w_restart_disk_io() may wait for resync progres, and would\notherwise deadlock.\n\ndrbd_finish_peer_reqs() may again populate that cache, which will\nthen potentially be stale after the next resync handshake and bitmap\nexchange, we have to do it again after that.\n\nA stale resync lru cache causes no harm but ugly messages like this:\n BAD! sector\u003d196608s enr\u003d6 rs_left\u003d-256 rs_failed\u003d0 count\u003d256 cstate\u003dSyncTarget\n\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "155522df5b8ac24ee66a903e51d5b3023b2a76f9",
      "tree": "65df69345129f3ce142507f7bfa7667ea4bbb2c0",
      "parents": [
        "b66623e33efbbf55717df7bfc49882371118b866"
      ],
      "author": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Wed Aug 08 21:19:09 2012 +0200"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Fri Nov 09 14:08:19 2012 +0100"
      },
      "message": "drbd: Remove dead code\n\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "b66623e33efbbf55717df7bfc49882371118b866",
      "tree": "3f345827c8fab3b4aa8f2b7cf7bd760c704483af",
      "parents": [
        "39a1aa7f49dc8eae5c8d3a4bf759eb7abeabe6c0"
      ],
      "author": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Wed Aug 08 21:19:09 2012 +0200"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Fri Nov 09 14:08:18 2012 +0100"
      },
      "message": "drbd: Avoid NetworkFailure state during disconnect\n\nDisconnecting is a cluster wide state change. In case the peer node agrees\nto the state transition, it sends back the fact on the meta-data connection\nand closes both sockets.\n\nIn case the node node that initiated the state transfer sees the closing\naction on the data-socket, before the P_STATE_CHG_REPLY packet, it was\ngoing into one of the network failure states.\n\nAt least with the fencing option set to something else thatn \"dont-care\",\nthe unclean shutdown of the connection causes a short IO freeze or\na fence operation.\n\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "39a1aa7f49dc8eae5c8d3a4bf759eb7abeabe6c0",
      "tree": "d75405087a78c53b95c99ab5e2e52230a5e8cc5a",
      "parents": [
        "fef45d297e447d710abcf0cd0bdbf8738ff469eb"
      ],
      "author": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Wed Aug 08 21:19:09 2012 +0200"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Fri Nov 09 14:08:04 2012 +0100"
      },
      "message": "drbd: Protect accesses to the uuid set with a spinlock\n\nThere is at least the worker context, the receiver context, the context of\nreceiving netlink packts.\n\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "fef45d297e447d710abcf0cd0bdbf8738ff469eb",
      "tree": "d4200c3cb2b5168d33566d6f9bf48da36d91f231",
      "parents": [
        "5af2e8ce2b463c2cc8e4a074f9d8f660ae7c1d8f"
      ],
      "author": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Tue Aug 14 11:46:59 2012 +0200"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Fri Nov 09 14:05:51 2012 +0100"
      },
      "message": "drbd: Write all pages of the bitmap after an online resize\n\nWe need to write the whole bitmap after we moved the meta data\ndue to an online resize operation.\n\nWith the support for one peta byte devices bitmap IO was optimized\nto only write out touched pages. This optimization must be turned\noff when writing the bitmap after an online resize.\n\nThis issue was introduced with drbd-8.3.10.\n\nThe impact of this bug is that after an online resize, the next\nresync could become larger than expected.\n\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "5af2e8ce2b463c2cc8e4a074f9d8f660ae7c1d8f",
      "tree": "17e450ce313e0fa63096c61acf57536f4e40f533",
      "parents": [
        "715306f69d85f7ea21eaef4efe75b8364cfea1d5"
      ],
      "author": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Tue Aug 14 11:28:52 2012 +0200"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Fri Nov 09 14:05:50 2012 +0100"
      },
      "message": "drbd: Fix completion of requests while the device is suspended\n\nIn various places (E.g. CONNECTION_LOST_WHILE_PENDING) the\nRQ_COMPLETION_SUSP mask is passed in the clear set to mod_rq_state().\n\nThe issue was that it tried to clear the RQ_COMPLETION_SUSP bit\nout of the state mask first, and eventuelly set it afterwards,\nin the drbd_req_put_completion_ref() function.\n\nFixed that by moving the reference getting out of\ndrbd_req_put_completion_ref() into the mod_rq_state(), before the place\nwhere the extra reference might be put.\n\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "715306f69d85f7ea21eaef4efe75b8364cfea1d5",
      "tree": "f6abd1f0a94aab0d2e097b72743f7dbe9ef9deaa",
      "parents": [
        "eb12010e9af119c84e6b2214064a98681027e0e3"
      ],
      "author": {
        "name": "Andreas Gruenbacher",
        "email": "agruen@linbit.com",
        "time": "Fri Aug 10 17:00:30 2012 +0200"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Fri Nov 09 14:05:50 2012 +0100"
      },
      "message": "drbd: Don\u0027t unregister socket state_change callback from within the callback\n\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "eb12010e9af119c84e6b2214064a98681027e0e3",
      "tree": "47fba4ebbf2a2a54137362b9d1e489a8cfcd3086",
      "parents": [
        "427c0434fc52f15bd762ddc6611e874df6cc5b8d"
      ],
      "author": {
        "name": "Lars Ellenberg",
        "email": "lars.ellenberg@linbit.com",
        "time": "Wed Aug 01 12:46:20 2012 +0200"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Fri Nov 09 14:05:50 2012 +0100"
      },
      "message": "drbd: disambiguation, s/ERR_DISCARD/ERR_DISCARD_IMPOSSIBLE/\n\nIf for some reason (typically \"split-brained\" cluster manager)\ndrbd replica data has diverged, we can chose a victim,\nand reconnect using \"--discard-my-data\", causing the victim\nto become sync-target, fetching all changed blocks from the peer.\n\nIf we are Primary, we are potentially in use, and we refuse to\n\"roll back\" changes to the data below the page cache and other users.\n\nRename the error symbol for this to ERR_DISCARD_IMPOSSIBLE.\n\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "427c0434fc52f15bd762ddc6611e874df6cc5b8d",
      "tree": "5d83c132fd0809884f5199a48ec6bbb9c7690ece",
      "parents": [
        "d4dabbe22d38752674c582e5bb40716a72397355"
      ],
      "author": {
        "name": "Lars Ellenberg",
        "email": "lars.ellenberg@linbit.com",
        "time": "Wed Aug 01 12:43:01 2012 +0200"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Fri Nov 09 14:05:49 2012 +0100"
      },
      "message": "drbd: disambiguation, s/DISCARD_CONCURRENT/RESOLVE_CONFLICTS/\n\nWe don\u0027t discard anything here, really.\nWe resolve conflicting, concurrent writes to overlapping data blocks.\n\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "d4dabbe22d38752674c582e5bb40716a72397355",
      "tree": "51a89e48ba52a80fa93b3c37390e5b772a2b7bb8",
      "parents": [
        "232fd3f4a01f45d5402c2e03f7c8815d80bec25b"
      ],
      "author": {
        "name": "Lars Ellenberg",
        "email": "lars.ellenberg@linbit.com",
        "time": "Wed Aug 01 12:33:51 2012 +0200"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Fri Nov 09 14:05:49 2012 +0100"
      },
      "message": "drbd: disambiguation, s/P_DISCARD_WRITE/P_SUPERSEDED/\n\nTo avoid confusion with REQ_DISCARD aka TRIM, rename our\n\"discard concurrent write acks\" from P_DISCARD_WRITE to P_SUPERSEDED.\n\nAt the same time, rename the drbd request event DISCARD_WRITE\nto CONFLICT_RESOLVED. It already triggers both successful completion\nor restart of the request, depending on our RQ_POSTPONED flag.\n\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "232fd3f4a01f45d5402c2e03f7c8815d80bec25b",
      "tree": "87bd7813812dee1bef5d278b981f3f4b463a3875",
      "parents": [
        "46e21bbadb2f4770199f2343f311f8833e5bf495"
      ],
      "author": {
        "name": "Lars Ellenberg",
        "email": "lars.ellenberg@linbit.com",
        "time": "Wed Aug 01 12:30:26 2012 +0200"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Fri Nov 09 14:05:48 2012 +0100"
      },
      "message": "drbd: cleanup, drop unused struct\n\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "46e21bbadb2f4770199f2343f311f8833e5bf495",
      "tree": "4214c97cdd9e65effd4df11760b7342c64a8f920",
      "parents": [
        "99b4d8fe6d12dcb49126df7153961fbc4de05f2a"
      ],
      "author": {
        "name": "Lars Ellenberg",
        "email": "lars.ellenberg@linbit.com",
        "time": "Tue Aug 07 06:47:14 2012 +0200"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Fri Nov 09 14:05:48 2012 +0100"
      },
      "message": "drbd: NEG_ACK does not imply a barrier-ack\n\nDon\u0027t drop a request from the transfer log just because it was NEG_ACKED.\nWe need it around to be able to verify P_BARRIER_ACKs against the\ntransver log.\n\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "99b4d8fe6d12dcb49126df7153961fbc4de05f2a",
      "tree": "6e9f8f96b8264f7d1ce801d32526ec47b99de051",
      "parents": [
        "8a0bab2a6dd05ee35777370be892daba01750712"
      ],
      "author": {
        "name": "Lars Ellenberg",
        "email": "lars.ellenberg@linbit.com",
        "time": "Tue Aug 07 06:42:09 2012 +0200"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Fri Nov 09 14:05:47 2012 +0100"
      },
      "message": "drbd: only start a new epoch, if the current epoch contains writes\n\nAlmost all code paths calling start_new_tl_epoch() guarded it with\n\tif (... current_tle_writes \u003e 0 ... ).\nJust move that inside start_new_tl_epoch().\n\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "8a0bab2a6dd05ee35777370be892daba01750712",
      "tree": "b3111de93bd73df69ee330551c5f55636ae0c0e9",
      "parents": [
        "e959d08d3ef6e48bc3b726bcc07a4ebb9989be94"
      ],
      "author": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Tue Aug 07 13:28:00 2012 +0200"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Fri Nov 09 14:05:47 2012 +0100"
      },
      "message": "drbd: Finish requests that completed while IO was frozen\n\nRequests of an acked epoch are stored on the barrier_acked_requests list. In\ncase the private bio of such a request completes while IO on the drbd device\nis suspended [req_mod(completed_ok)] then the request stays there.\n\nWhen thawing IO because the fence_peer handler returned, then we use\ntl_clear() to apply the connection_lost_while_pending event to all requests\non the transfer-log and the barrier_acked_requests list.\n\nUp to now the connection_lost_while_pending event was not applied\non requests on the barrier_acked_requests list. Fixed that.\n\nI.e. now the connection_lost_while_pending and resend events are\napplied to requests on the barrier_acked_requests list. For that\nit is necessary that the resend event finishes (local only)\nREADS correctly.\n\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "e959d08d3ef6e48bc3b726bcc07a4ebb9989be94",
      "tree": "df3abd787e46ed66c1bdfe1a2be1f8b256c54988",
      "parents": [
        "519b6d3eac823e4ceec10484bc06f239047cebbf"
      ],
      "author": {
        "name": "Lars Ellenberg",
        "email": "lars.ellenberg@linbit.com",
        "time": "Sat Aug 04 01:07:55 2012 +0200"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Fri Nov 09 14:05:47 2012 +0100"
      },
      "message": "drbd: Fix a potential issue with the DISCARD_CONCURRENT flag\n\nThe DISCARD_CONCURRENT flag should be set on one node and cleared on the\nother node.\nAs the code was before it was theoretical possible that a node accepts the\nmeta socket, but has to close it later on, and keeps the DISCARD_CONCURRENT\nflag.\nCorrect this by moving the clear_bit(DISCARD_CONCURRENT) where the packet\ngets sent.\n\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "519b6d3eac823e4ceec10484bc06f239047cebbf",
      "tree": "e3aeff3d85e0b75cf474bd717fd184c4b50e4cf4",
      "parents": [
        "80c6eed49d5da3ba97cff4dc316ff051486cd1fc"
      ],
      "author": {
        "name": "Lars Ellenberg",
        "email": "lars.ellenberg@linbit.com",
        "time": "Fri Aug 03 02:19:09 2012 +0200"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Fri Nov 09 14:05:46 2012 +0100"
      },
      "message": "drbd: fix drbd wire compatibility for empty flushes\n\nDRBD has a concept of request epochs or reorder-domains,\nwhich are separated on the wire by P_BARRIER packets.\n\nOlder DRBD is not able to handle zero-sized requests at all,\nso we need to map empty flushes to these drbd barriers.\n\nThese are the equivalent of empty flushes, and\nby default trigger flushes on the receiving side anyways\n(unless not supported or explicitly disabled),\nso there is no need to handle this differently in newer drbd either.\n\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "80c6eed49d5da3ba97cff4dc316ff051486cd1fc",
      "tree": "07fa8b9e16aa3913aef1698a57203b049def33c7",
      "parents": [
        "92f14951c044198306f098e76c56a944cf88867a"
      ],
      "author": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Wed Aug 01 14:53:39 2012 +0200"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Fri Nov 09 14:05:46 2012 +0100"
      },
      "message": "drbd: More random to the connect logic\n\nSince the listening socket is open all the time, it was possible to\nget into stable \"initial packet S crossed\" loops.\n\n* when both sides realize in the drbd_socket_okay() call at the end\n  of the loop that the other side closed the main socket you had\n  the chance to get into a stable loop with repeated \"packet S crossed\"\n  messages.\n\n* when both sides do not realize with the drbd_socket_okay() call at the end\n  of the loop that the other side closed the main socket you had\n  the chance to get into a stable loop with alternating \"packet S crossed\"\n  \"packet M crossed\" messages.\n\nIn order to break out these stable loops randomize the behaviour if\nsuch a crossing of P_INITIAL_DATA or P_INITIAL_META packets is detected.\n\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "92f14951c044198306f098e76c56a944cf88867a",
      "tree": "2dc02501ff9736b0691065e859f5eabe2b822828",
      "parents": [
        "b666dbf819f9157a4afef2094ec961d216d802b5"
      ],
      "author": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Wed Aug 01 11:41:01 2012 +0200"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Fri Nov 09 14:05:45 2012 +0100"
      },
      "message": "drbd: Try to connec to peer only once per cycle\n\nSince now our listening socket is open all the time we will get\nconnection tries of the peer always in. No need to try it three\ntimes.\n\nThis is valid when connecting to older peers as well, it simply\nincreases the probability that the new version DRBD will accept\na connection instead that it will establish one.\n\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "b666dbf819f9157a4afef2094ec961d216d802b5",
      "tree": "8adfc3059d6fc0d2e2e223244c6945e68c200c07",
      "parents": [
        "3174f8c5045ad247563434c4b4897bd89313eafc"
      ],
      "author": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Thu Jul 26 14:12:59 2012 +0200"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Fri Nov 09 14:05:45 2012 +0100"
      },
      "message": "drbd: Remove redundant and wrong test for NULL simplification in conn_connect()\n\nSince the drbd_socket_okay() function itself tests if the the\nsocket is NULL, the explicit test \"if (sock.socket \u0026\u0026 \u0026msock.socket)\"\nwas redundent.\nApart from that the address opperator (\u0027\u0026\u0027) before msock.socket rendered\nthe test pointless.\n\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "3174f8c5045ad247563434c4b4897bd89313eafc",
      "tree": "20bab45dd8e5e7a57f45c03e6e0dfa673f213324",
      "parents": [
        "81a3537a9730116dfaafeed728f2d460c872c0d5"
      ],
      "author": {
        "name": "Philipp Marek",
        "email": "philipp.marek@linbit.com",
        "time": "Sat Mar 03 21:04:30 2012 +0100"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Fri Nov 09 14:05:45 2012 +0100"
      },
      "message": "drbd: pass some more information to userspace.\n\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "81a3537a9730116dfaafeed728f2d460c872c0d5",
      "tree": "44d6e0672f13830aa4a468818a0c2ce425a1cfac",
      "parents": [
        "58ffa580a748dd16b1e5ab260bea39cdbd1e94ef"
      ],
      "author": {
        "name": "Lars Ellenberg",
        "email": "lars.ellenberg@linbit.com",
        "time": "Mon Jul 30 09:00:54 2012 +0200"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Fri Nov 09 14:05:44 2012 +0100"
      },
      "message": "drbd: announce FLUSH/FUA capability to upper layers\n\nIn 8.4, we may have bios spanning two activity log extents.\nFixup drbd_al_begin_io() and drbd_al_complete_io() to deal with zero sized bios.\n\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "58ffa580a748dd16b1e5ab260bea39cdbd1e94ef",
      "tree": "4155bcde6d49f50545bcb1312b6470c64e823d72",
      "parents": [
        "970fbde1f1ebae0c85bbaed3de83684a58d60fad"
      ],
      "author": {
        "name": "Lars Ellenberg",
        "email": "lars.ellenberg@linbit.com",
        "time": "Thu Jul 26 14:09:49 2012 +0200"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Fri Nov 09 14:05:32 2012 +0100"
      },
      "message": "drbd: introduce stop-sector to online verify\n\nWe now can schedule only a specific range of sectors for online verify,\nor interrupt a running verify without interrupting the connection.\n\nHad to bump the protocol version differently, we are now 101.\nAdded verify_can_do_stop_sector() { protocol \u003e\u003d 97 \u0026\u0026 protocol !\u003d 100; }\n\nAlso, the return value convention for worker callbacks has changed,\nwe returned \"true/false\" for \"keep the connection up\" in 8.3,\nwe return 0 for success and \u003c\u003d for failure in 8.4.\nAffected: receive_state()\n\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "970fbde1f1ebae0c85bbaed3de83684a58d60fad",
      "tree": "b0b61dd455f63fd7cbad4d26bbc6f6a50cd7c9dc",
      "parents": [
        "6f1a656325ea01638de44f8d40bb77c73181b275"
      ],
      "author": {
        "name": "Lars Ellenberg",
        "email": "lars.ellenberg@linbit.com",
        "time": "Mon Jul 30 09:11:38 2012 +0200"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Thu Nov 08 16:58:41 2012 +0100"
      },
      "message": "drbd: flush drbd work queue before invalidate/invalidate remote\n\nIf you do back to back wait-sync/invalidate on a Primary in a tight loop,\nduring application IO load, you could trigger a race:\n  kernel: block drbd6: FIXME going to queue \u0027set_n_write from StartingSync\u0027\n    but \u0027write from resync_finished\u0027 still pending?\n\nFix this by changing the order of the drbd_queue_work() and\nthe wake_up() in dec_ap_pending(), and adding the additional\ndrbd_flush_workqueue() before requesting the full sync.\n\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "6f1a656325ea01638de44f8d40bb77c73181b275",
      "tree": "71de4b2fed373c3b6cff6f24f5ea91441e14b1fc",
      "parents": [
        "a324896b173e569fb831c5caa04ccd02ec0bc9ca"
      ],
      "author": {
        "name": "Lars Ellenberg",
        "email": "lars.ellenberg@linbit.com",
        "time": "Mon Jul 30 09:11:01 2012 +0200"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Thu Nov 08 16:58:40 2012 +0100"
      },
      "message": "drbd: call local-io-error handler early\n\nIn case we want to hard-reset from the local-io-error handler,\nwe need to call it before notifying the peer or aborting local IO.\nOtherwise the peer will advance its data generation UUIDs even\nif secondary.\n\nThis way, local io error looks like a \"regular\" node crash,\nwhich reduces the number of different failure cases.\nThis may be useful in a bigger picture where crashed or otherwise\n\"misbehaving\" nodes are automatically re-deployed.\n\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "a324896b173e569fb831c5caa04ccd02ec0bc9ca",
      "tree": "fedb4c82e66c304c6ced91a9e83538af735ddb45",
      "parents": [
        "8a943170711b7a4d63528ea8eb6a41cc91e79309"
      ],
      "author": {
        "name": "Lars Ellenberg",
        "email": "lars.ellenberg@linbit.com",
        "time": "Mon Jul 30 09:10:41 2012 +0200"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Thu Nov 08 16:58:40 2012 +0100"
      },
      "message": "drbd: do not reset rs_pending_cnt too early\n\nFix asserts like\n  block drbd0: in got_BlockAck:4634: rs_pending_cnt \u003d -35 \u003c 0 !\n\nWe reset the resync lru cache and related information (rs_pending_cnt),\nonce we successfully finished a resync or online verify, or if the\nreplication connection is lost.\n\nWe also need to reset it if a resync or online verify is aborted\nbecause a lower level disk failed.\n\nIn that case the replication link is still established,\nand we may still have packets queued in the network buffers\nwhich want to touch rs_pending_cnt.\n\nWe do not have any synchronization mechanism to know for sure when all\nsuch pending resync related packets have been drained.\n\nTo avoid this counter to go negative (and violate the ASSERT that it\nwill always be \u003e\u003d 0), just do not reset it when we lose a disk.\n\nIt is good enough to make sure it is re-initialized before the next\nresync can start: reset it when we re-attach a disk.\n\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "8a943170711b7a4d63528ea8eb6a41cc91e79309",
      "tree": "78d320ada007a1c98c5896fa158d5d23b4778de7",
      "parents": [
        "6f3465ed82b10922effe364676103cbd4f2bcd81"
      ],
      "author": {
        "name": "Lars Ellenberg",
        "email": "lars.ellenberg@linbit.com",
        "time": "Mon Jul 30 09:09:36 2012 +0200"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Thu Nov 08 16:58:39 2012 +0100"
      },
      "message": "drbd: reset congestion information before reporting it in /proc/drbd\n\nWe cache the congestion status in mdev-\u003econgestion_reason whenever\ndrbd_congested() was called.\nReset this cached info before reporting it when reading /proc/drbd.\n\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "6f3465ed82b10922effe364676103cbd4f2bcd81",
      "tree": "9dc3f63d3faffecd49cac56a3affc55b1df08ae8",
      "parents": [
        "0c849666016cbf541c1030eec55f5f8dd1fba513"
      ],
      "author": {
        "name": "Lars Ellenberg",
        "email": "lars.ellenberg@linbit.com",
        "time": "Mon Jul 30 09:08:25 2012 +0200"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Thu Nov 08 16:58:39 2012 +0100"
      },
      "message": "drbd: report congestion if we are waiting for some userland callback\n\nIf the drbd worker thread is synchronously waiting for some userland\ncallback, we don\u0027t want some casual pageout to block on us.\nHave drbd_congested() report congestion in that case.\n\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "0c849666016cbf541c1030eec55f5f8dd1fba513",
      "tree": "35a49ef17d65375947404bd81759fc815bf09d5d",
      "parents": [
        "bf709c8552bcbbbc66ecc11555a781e814a037d8"
      ],
      "author": {
        "name": "Lars Ellenberg",
        "email": "lars.ellenberg@linbit.com",
        "time": "Mon Jul 30 09:07:28 2012 +0200"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Thu Nov 08 16:58:39 2012 +0100"
      },
      "message": "drbd: differentiate between normal and forced detach\n\nAborting local requests (not waiting for completion from the lower level\ndisk) is dangerous: if the master bio has been completed to upper\nlayers, data pages may be re-used for other things already.\nIf local IO is still pending and later completes,\nthis may cause crashes or corrupt unrelated data.\n\nOnly abort local IO if explicitly requested.\nIntended use case is a lower level device that turned into a tarpit,\nnot completing io requests, not even doing error completion.\n\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "bf709c8552bcbbbc66ecc11555a781e814a037d8",
      "tree": "ecaadc10f4c3f472ec682218fc03378f71da6655",
      "parents": [
        "3b9ef85e05f123f535d4ee1c5041b80f80648e50"
      ],
      "author": {
        "name": "Lars Ellenberg",
        "email": "lars.ellenberg@linbit.com",
        "time": "Mon Jul 30 09:07:04 2012 +0200"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Thu Nov 08 16:58:38 2012 +0100"
      },
      "message": "drbd: cleanup, remove two unused global flags\n\nThe two unused \"global flags\" in 8.3 are \"per volume\" flags in 8.4.\nStill, they are unused, so lose them.\n\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "3b9ef85e05f123f535d4ee1c5041b80f80648e50",
      "tree": "48ef1eeef5aa653171f68d7c4f0e57e138d3d74a",
      "parents": [
        "27012382bc221a8cf6ca67ced19df699b0ba8e78"
      ],
      "author": {
        "name": "Lars Ellenberg",
        "email": "lars.ellenberg@linbit.com",
        "time": "Mon Jul 30 09:06:26 2012 +0200"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Thu Nov 08 16:58:38 2012 +0100"
      },
      "message": "drbd: fix null pointer dereference with on-congestion policy when diskless\n\nWe must not look at mdev-\u003eactlog, unless we have a get_ldev() reference.\nIt also does not make much sense to try to disconnect or pull-ahead of\nthe peer, if we don\u0027t have good local data.\n\nOnly even consider congestion policies, if our local disk is D_UP_TO_DATE.\n\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "27012382bc221a8cf6ca67ced19df699b0ba8e78",
      "tree": "06f9e5d186a4c236f79cdd7166819ea3cc0744f6",
      "parents": [
        "9a278a7906066a1b4f37fff9b5e27a92af0ca3ce"
      ],
      "author": {
        "name": "Lars Ellenberg",
        "email": "lars.ellenberg@linbit.com",
        "time": "Tue Jul 24 10:13:55 2012 +0200"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Thu Nov 08 16:58:37 2012 +0100"
      },
      "message": "drbd: take error path in drbd_adm_down if interrupted by signal\n\ndrbd_adm_down() does adm_detach(), which can fail with various error\ncodes, or be interrupted by a signal.\n\nThe interrupted by signal case was not properly handled,\nleading to\n\tblock drbd0: ASSERT( mdev-\u003estate.disk \u003d\u003d D_DISKLESS \u0026\u0026\n\t                     mdev-\u003estate.conn \u003d\u003d C_STANDALONE ) in drbd/drbd_worker.c\nand further to destroying objects while still in use, and resulting crashes.\n\nDetect the interruption, and take the error path out.\n\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "9a278a7906066a1b4f37fff9b5e27a92af0ca3ce",
      "tree": "8dd98edd53bc8e0c17f2681e4418b96ffb7af736",
      "parents": [
        "934722a2dbf87b43d39c787441e511157d5add94"
      ],
      "author": {
        "name": "Lars Ellenberg",
        "email": "lars.ellenberg@linbit.com",
        "time": "Tue Jul 24 10:12:36 2012 +0200"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Thu Nov 08 16:58:37 2012 +0100"
      },
      "message": "drbd: allow read requests to be retried after force-detach\n\nSometimes, a lower level block device turns into a tar-pit,\nnot completing requests at all, not even doing error completion.\n\nWe can force-detach from such a tar-pit block device,\neither by disk-timeout, or by drbdadm detach --force.\n\nQueueing for retry only from the request destruction path (kref hit 0)\nmakes it impossible to retry affected read requests from the peer,\nuntil the local IO completion happened, as the locally submitted\nbio holds a reference on the drbd request object.\n\nIf we can only complete READs when the local completion finally\nhappens, we would not need to force-detach in the first place.\n\nInstead, queue for retry where we otherwise had done the error completion.\n\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "934722a2dbf87b43d39c787441e511157d5add94",
      "tree": "c41a5b34433473068596cf237176dba269af1d5f",
      "parents": [
        "a0d856dfaed16efb9600b2a7d147cb6dbc11ff94"
      ],
      "author": {
        "name": "Lars Ellenberg",
        "email": "lars.ellenberg@linbit.com",
        "time": "Tue Jul 24 09:31:18 2012 +0200"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Thu Nov 08 16:58:37 2012 +0100"
      },
      "message": "drbd: __req_mod: make DISCARD_WRITE and independend case\n\ncherry-picked and adapted from drbd 9 devel branch\n\nThis looks cleaner to me,\nand also gets rid of the other ugly if-inside-case-fall-through.\n\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "a0d856dfaed16efb9600b2a7d147cb6dbc11ff94",
      "tree": "48b11d912c045a0bf7ff2eed3cfd1abe62c9e31f",
      "parents": [
        "b406777e6496de346e8ee12fa64e1fe0adc02a78"
      ],
      "author": {
        "name": "Lars Ellenberg",
        "email": "lars.ellenberg@linbit.com",
        "time": "Tue Jan 24 17:19:42 2012 +0100"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Thu Nov 08 16:58:36 2012 +0100"
      },
      "message": "drbd: base completion and destruction of requests on ref counts\n\ncherry-picked and adapted from drbd 9 devel branch\n\nThe logic for when to get or put a reference is in mod_rq_state().\n\nTo not get confused in the freeze/thaw respectively resend/restart\npaths, or when cleaning up requests waiting for P_BARRIER_ACK, this\nalso introduces additional state flags:\nRQ_COMPLETION_SUSP, and RQ_EXP_BARR_ACK.\n\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "b406777e6496de346e8ee12fa64e1fe0adc02a78",
      "tree": "8768b007631a8f2e57639bb1f80b158cfa49af3a",
      "parents": [
        "5df69ece6e93cfd4e09b14bf32bd101df6cbde38"
      ],
      "author": {
        "name": "Lars Ellenberg",
        "email": "lars.ellenberg@linbit.com",
        "time": "Tue Jan 24 16:58:11 2012 +0100"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Thu Nov 08 16:58:36 2012 +0100"
      },
      "message": "drbd: introduce completion_ref and kref to struct drbd_request\n\ncherry-picked and adapted from drbd 9 devel branch\n\ncompletion_ref will count pending events necessary for completion.\nkref is for destruction.\n\nThis only introduces these new members of struct drbd_request,\na followup patch will make actual use of them.\n\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "5df69ece6e93cfd4e09b14bf32bd101df6cbde38",
      "tree": "415a402956088609d20ba15f77015b9c8c073705",
      "parents": [
        "5da9c8364443797ece9393670fb7ab69cff055ed"
      ],
      "author": {
        "name": "Lars Ellenberg",
        "email": "lars.ellenberg@linbit.com",
        "time": "Tue Jan 24 16:49:58 2012 +0100"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Thu Nov 08 16:58:35 2012 +0100"
      },
      "message": "drbd: __drbd_make_request() is now void\n\nThe previous commit causes __drbd_make_request() to always return 0.\nChange it to void.\n\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "5da9c8364443797ece9393670fb7ab69cff055ed",
      "tree": "90a7206ac7e446c46863ad6caefbd014c94ec1d8",
      "parents": [
        "b6dd1a89767bc33e9c98b3195f8925b46c5c95f3"
      ],
      "author": {
        "name": "Lars Ellenberg",
        "email": "lars.ellenberg@linbit.com",
        "time": "Thu Mar 29 17:04:14 2012 +0200"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Thu Nov 08 16:58:35 2012 +0100"
      },
      "message": "drbd: better separate WRITE and READ code paths in drbd_make_request\n\ncherry-picked and adapted from drbd 9 devel branch\n\nREADs will be interesting to at most one connection,\nWRITEs should be interesting for all established connections.\n\nIntroduce some helper functions to hopefully make this easier to follow.\n\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "b6dd1a89767bc33e9c98b3195f8925b46c5c95f3",
      "tree": "e82371062171f5cade79cb0c4a6cd22486b5f082",
      "parents": [
        "d5b27b01f17ef1f0badc45f9eea521be3457c9cb"
      ],
      "author": {
        "name": "Lars Ellenberg",
        "email": "lars.ellenberg@linbit.com",
        "time": "Mon Nov 28 15:04:49 2011 +0100"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Thu Nov 08 16:58:35 2012 +0100"
      },
      "message": "drbd: remove struct drbd_tl_epoch objects (barrier works)\n\ncherry-picked and adapted from drbd 9 devel branch\n\nDRBD requests (struct drbd_request) are already on the per resource\ntransfer log list, and carry their epoch number. We do not need to\nadditionally link them on other ring lists in other structs.\n\nThe drbd sender thread can recognize itself when to send a P_BARRIER,\nby tracking the currently processed epoch, and how many writes\nhave been processed for that epoch.\n\nIf the epoch of the request to be processed does not match the currently\nprocessed epoch, any writes have been processed in it, a P_BARRIER for\nthis last processed epoch is send out first.\nThe new epoch then becomes the currently processed epoch.\n\nTo not get stuck in drbd_al_begin_io() waiting for P_BARRIER_ACK,\nthe sender thread also needs to handle the case when the current\nepoch was closed already, but no new requests are queued yet,\nand send out P_BARRIER as soon as possible.\n\nThis is done by comparing the per resource \"current transfer log epoch\"\n(tconn-\u003ecurrent_tle_nr) with the per connection \"currently processed\nepoch number\" (tconn-\u003esend.current_epoch_nr), while waiting for\nnew requests to be processed in wait_for_work().\n\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "d5b27b01f17ef1f0badc45f9eea521be3457c9cb",
      "tree": "e0760531801c0b5b51ea8b3f05f9c0c5d85ff60e",
      "parents": [
        "8c0785a5c9a0f2472aff68dc32247be01728c416"
      ],
      "author": {
        "name": "Lars Ellenberg",
        "email": "lars.ellenberg@linbit.com",
        "time": "Mon Nov 14 15:42:37 2011 +0100"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Thu Nov 08 16:58:34 2012 +0100"
      },
      "message": "drbd: move the drbd_work_queue from drbd_socket to drbd_connection\n\ncherry-picked and adapted from drbd 9 devel branch\nIn 8.4, we don\u0027t distinguish between \"resource work\" and \"connection\nwork\" yet, we have one worker for both, as we still have only one connection.\n\nWe only ever used the \"data.work\",\nno need to keep the \"meta.work\" around.\n\nMove tconn-\u003edata.work to tconn-\u003esender_work.\n\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "8c0785a5c9a0f2472aff68dc32247be01728c416",
      "tree": "adb036acb283550aab1a1860bff454a86eb446d5",
      "parents": [
        "b379c41ed78e83c4443fca4dbfbc358c19e4f24c"
      ],
      "author": {
        "name": "Lars Ellenberg",
        "email": "lars.ellenberg@linbit.com",
        "time": "Wed Oct 19 11:50:57 2011 +0200"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Thu Nov 08 16:58:34 2012 +0100"
      },
      "message": "drbd: allow to dequeue batches of work at a time\n\ncherry-picked and adapted from drbd 9 devel branch\n\nIn 8.4, we still use drbd_queue_work_front(),\nso in normal operation, we can not dequeue batches,\nbut only single items.\n\nStill, followup commits will wake the worker\nwithout explicitly queueing a work item,\nso up() is replaced by a simple wake_up().\n\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "b379c41ed78e83c4443fca4dbfbc358c19e4f24c",
      "tree": "4e5a3d472c67835406e4c511ada0277b97798c26",
      "parents": [
        "9d05e7c4e7069180370ce9c2c121fd6f7810c5a3"
      ],
      "author": {
        "name": "Lars Ellenberg",
        "email": "lars.ellenberg@linbit.com",
        "time": "Thu Nov 17 11:49:46 2011 +0100"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Thu Nov 08 16:58:33 2012 +0100"
      },
      "message": "drbd: transfer log epoch numbers are now per resource\n\ncherry-picked from drbd 9 devel branch.\n\nIn preparation of multiple connections, the \"barrier number\" or\n\"epoch number\" needs to be tracked per-resource, not per connection.\nThe sequence number space will not be reset anymore.\n\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "9d05e7c4e7069180370ce9c2c121fd6f7810c5a3",
      "tree": "83c9de6f5f47dbeefd0926a1347d44a48f510b29",
      "parents": [
        "629663c94242cfcff45abed61a019304ab85420c"
      ],
      "author": {
        "name": "Lars Ellenberg",
        "email": "lars.ellenberg@linbit.com",
        "time": "Tue Jul 17 10:05:04 2012 +0200"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Thu Nov 08 16:58:33 2012 +0100"
      },
      "message": "drbd: rename drbd_restart_write to drbd_restart_request\n\nMeanwhile, this is used to restart failed READ requests as well.\n\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "629663c94242cfcff45abed61a019304ab85420c",
      "tree": "d5ec1aab6a2cd8a7d77fb6e13d07982cc34e0492",
      "parents": [
        "ab53b90e89eb2421a607655cab426232fdd82f6f"
      ],
      "author": {
        "name": "Lars Ellenberg",
        "email": "lars.ellenberg@linbit.com",
        "time": "Fri Jun 08 16:39:24 2012 +0200"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Thu Nov 08 16:58:33 2012 +0100"
      },
      "message": "drbd: fix wrong assert in completion/retry path of failed local reads\n\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "ab53b90e89eb2421a607655cab426232fdd82f6f",
      "tree": "02474e043a62020e39d98beb4eadf30c846a9aa5",
      "parents": [
        "1b6f19740da8e7ed2d1216dc69a972d10de4f0e9"
      ],
      "author": {
        "name": "Lars Ellenberg",
        "email": "lars.ellenberg@linbit.com",
        "time": "Fri Jun 08 16:30:30 2012 +0200"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Thu Nov 08 16:58:32 2012 +0100"
      },
      "message": "drbd: fix local read error hung forever\n\nThe commit\n    drbd: simplify retry path of failed READ requests\nsimplified it too much:\nit just did not do anything for local read errors.\n\nAdd the missing req_may_be_completed_not_susp() to the\nREAD_COMPLETED_WITH_ERROR case.\n\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "1b6f19740da8e7ed2d1216dc69a972d10de4f0e9",
      "tree": "1eac22ae669adf6c80465128943bcbf1baa21614",
      "parents": [
        "7a426fd8d5af1d5e71cfcdf5ecbefbbad47a81fd"
      ],
      "author": {
        "name": "Lars Ellenberg",
        "email": "lars.ellenberg@linbit.com",
        "time": "Fri Jun 08 15:06:39 2012 +0200"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Thu Nov 08 16:58:32 2012 +0100"
      },
      "message": "drbd: fix access of unallocated pages and kernel panic\n\nBUG: unable to handle kernel NULL pointer dereference at (null)\n...\n [\u003cd1e17561\u003e] ? _drbd_bm_set_bits+0x151/0x240 [drbd]\n [\u003cd1e236f8\u003e] ? receive_bitmap+0x4f8/0xbc0 [drbd]\n\nThis fixes an off-by-one error in the receive_bitmap() path,\nif run-length encoded bitmap transfer is enabled.\n\nIf the bitmap is an exact multiple of PAGE_SIZE, which means the visible\ncapacity of the drbd device is an exact multiple of 128 MiB (for 4k page\nsize), and bitmap compression (use-rle) is enabled (which became default\nwith 8.4), and the very last bit is dirty and reported in an rle\ncomressed bitmap packet, we ended up trying to kmap_atomic a page pointer\nthat does not exist (bitmap-\u003ebm_pages[last index + 1]).\n\nbug introduced by:\n    Date:   Fri Jul 24 15:33:24 2009 +0200\n    set bits: optimize for complete last word, fix off-by-one-word corner case\n\nmade effective by:\n    Date:   Thu Dec 16 00:32:38 2010 +0100\n    drbd: get rid of unused debug code\n\n    Long time ago, we had paranoia code in the bitmap that allocated one\n    extra word, assigned a magic value, and checked on every occasion that\n    the magic value was still unchanged.\n\n    That debug code is unused, the extra long word complicates code a bit.\n    Get rid of it.\n\nNo-one triggered this bug in the last few years, because a large subset\nof our userbase is unaffected:\n * typically the last few blocks of a device are not modified\n   frequently, and remain unset\n * use-rle was disabled by default in drbd \u003c 8.4\n * those with slightly \"odd\" device sizes, or\n * drbd internal meta data (which will skew the device size slightly,\n   thus makes it harder to have a bug relevant device size)\n\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "7a426fd8d5af1d5e71cfcdf5ecbefbbad47a81fd",
      "tree": "06174b9f6f35fce19e9b74a69ca30fc89065f434",
      "parents": [
        "1f3e509b761d6d8f91acbf7da39624d086e1f2eb"
      ],
      "author": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Thu Jul 12 14:22:37 2012 +0200"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Thu Nov 08 16:58:31 2012 +0100"
      },
      "message": "drbd: Keep the listening socket open while trying to connect to the peer\n\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "1f3e509b761d6d8f91acbf7da39624d086e1f2eb",
      "tree": "6bdf8d7a07d7fa4d97de1620223635f94b85a8e0",
      "parents": [
        "9a51ab1c1b3c1e21f076cdd571bbe6ca7d1b504c"
      ],
      "author": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Thu Jul 12 11:08:34 2012 +0200"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Thu Nov 08 16:58:31 2012 +0100"
      },
      "message": "drbd: pull prepare_listen_socket() out of drbd_wait_for_connect()\n\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "9a51ab1c1b3c1e21f076cdd571bbe6ca7d1b504c",
      "tree": "863ba573f9a803d5f64979dae566a89ea22bbe5f",
      "parents": [
        "26ec92871be1e6bd48d0be9ab38ee1ebbeea49f1"
      ],
      "author": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Mon Feb 20 21:53:28 2012 +0100"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Thu Nov 08 16:58:31 2012 +0100"
      },
      "message": "drbd: New disk option al-updates\n\nBy disabling al-updates one might increase performace. The price for\nthat is that in case a crashed primary (that had al-updates disabled)\nis reintegraded, it will receive a full-resync instead of a bitmap\nbased resync.\n\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "26ec92871be1e6bd48d0be9ab38ee1ebbeea49f1",
      "tree": "b6fa9987833a838778b37209bf21b9a4ee4f76c6",
      "parents": [
        "7e0f096b8d3ffcf04955c239e80993ec451c9a1a"
      ],
      "author": {
        "name": "Andreas Gruenbacher",
        "email": "agruen@linbit.com",
        "time": "Wed Jul 11 20:36:03 2012 +0200"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Thu Nov 08 16:58:30 2012 +0100"
      },
      "message": "drbd: Stop using NLA_PUT*().\n\nThese macros no longer exist in kernel version v3.5-rc1.\n\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "7e0f096b8d3ffcf04955c239e80993ec451c9a1a",
      "tree": "dd80f52ca201f19d7f0a684a87e11d6cb2a48426",
      "parents": [
        "2820fd396940756904bd7e4136115f493c63d369"
      ],
      "author": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Thu Jul 12 10:25:35 2012 +0200"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Thu Nov 08 16:58:30 2012 +0100"
      },
      "message": "drbd: Remove drbd_accept() and use kernel_accept() instead\n\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "2820fd396940756904bd7e4136115f493c63d369",
      "tree": "88eb8980212dd39620917a703126b73597567668",
      "parents": [
        "c5b005ab7091c9ef4ca9b47569a8e27e54588933"
      ],
      "author": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Thu Jul 12 10:22:48 2012 +0200"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Thu Nov 08 16:58:29 2012 +0100"
      },
      "message": "drbd: Move the call to listen() out of drbd_accept()\n\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "c5b005ab7091c9ef4ca9b47569a8e27e54588933",
      "tree": "12cf37f22adc30396c75b8373d2ac10e103e6698",
      "parents": [
        "1882e22df7850b7ff74395aa955066f5405020d6"
      ],
      "author": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Mon Apr 30 12:53:52 2012 +0200"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Thu Nov 08 16:58:29 2012 +0100"
      },
      "message": "drbd: use bitmap_parse instead of __bitmap_parse\n\nThe buffer \u0027sc.cpu_mask\u0027 is a kernel buffer.  If bitmap_parse is used\ninstead of __bitmap_parse the extra parameter that indicates a kernel\nbuffer is not needed.\n\nSigned-off-by: H Hartley Sweeten \u003chsweeten@visionengravers.com\u003e\nCc: Lars Ellenberg \u003cdrbd-dev@lists.linbit.com\u003e\nCc: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nCc: Jens Axboe \u003caxboe@kernel.dk\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "1882e22df7850b7ff74395aa955066f5405020d6",
      "tree": "3d3bb2b925fa2b77e36c89c9b5b6169d5b3adb92",
      "parents": [
        "f66ee69746f6413cae41bdc8b26260e653f62402"
      ],
      "author": {
        "name": "Lars Ellenberg",
        "email": "lars.ellenberg@linbit.com",
        "time": "Mon May 07 13:09:00 2012 +0200"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Thu Nov 08 16:58:29 2012 +0100"
      },
      "message": "drbd: grammar fix in log message\n\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "f66ee69746f6413cae41bdc8b26260e653f62402",
      "tree": "443a6380ff790fbd1580284b9fe90eb4907aab45",
      "parents": [
        "a220d291804233e3a5e3425abf79fa1e62e7bd35"
      ],
      "author": {
        "name": "Lars Ellenberg",
        "email": "lars.ellenberg@linbit.com",
        "time": "Mon May 07 13:04:03 2012 +0200"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Thu Nov 08 16:58:28 2012 +0100"
      },
      "message": "drbd: bm_page_async_io: properly initialize page-\u003eprivate\n\nIf bm_page_async_io is advised to use a new page for I/O\n(BM_AIO_COPY_PAGES is set), it will get it from a mempool.\nOnce the mempool has to dip into its reserves the page is\nnot reinitialized, i.e. page-\u003eprivate contains garbage, which\nwill lead to various problems once the I/O completes (dereferences\nof NULL pointers, the submitting thread getting stuck in D-state,\n ...).\n\nSigned-off-by: Arne Redlich \u003carne.redlich@googlemail.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "a220d291804233e3a5e3425abf79fa1e62e7bd35",
      "tree": "1a1c851e0a21de3acbff2a780bfb2d3ce5dd8760",
      "parents": [
        "5016b82a49eb06cbe2002db7bd8a5501ba4ef6d1"
      ],
      "author": {
        "name": "Lars Ellenberg",
        "email": "lars.ellenberg@linbit.com",
        "time": "Mon May 07 12:07:18 2012 +0200"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Thu Nov 08 16:58:28 2012 +0100"
      },
      "message": "drbd: allow bitmap to change during writeout from resync_finished\n\nSymptom: messages similar to\n \"FIXME asender in bm_change_bits_to,\n  bitmap locked for \u0027write from resync_finished\u0027 by worker\"\n\nIf a resync or verify is finished (or aborted), a full bitmap writeout\nis triggered.  If we have ongoing local IO, the bitmap may still change\nduring that writeout, pending and not yet processed acks may cause bits\nto be cleared, while new writes may cause bits to be to be set.\n\nTo fix this, introduce the drbd_bm_write_copy_pages() variant.\n\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "5016b82a49eb06cbe2002db7bd8a5501ba4ef6d1",
      "tree": "63b88abacaf6048a64531daced95ef47b6888e03",
      "parents": [
        "07be15b12c41dbc5ceae130be2e0b655f7611691"
      ],
      "author": {
        "name": "Lars Ellenberg",
        "email": "lars.ellenberg@linbit.com",
        "time": "Mon May 07 12:00:56 2012 +0200"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Thu Nov 08 16:58:27 2012 +0100"
      },
      "message": "drbd: fix race between drbdadm invalidate/verify and finishing resync\n\nWhen a resync or online verify is finished or aborted,\ndrbd does a bulk write-out of changed bitmap pages.\n\nIf *in that very moment* a new verify or resync is triggered,\nthis can race:\n ASSERT( !test_bit(BITMAP_IO, \u0026mdev-\u003eflags) ) in drbd_main.c\n FIXME going to queue \u0027set_n_write from StartingSync\u0027 but \u0027write from resync_finished\u0027 still pending?\nand similar.\n\nThis can be observed with e.g. tight invalidate loops in test scripts,\nand probably has no real-life implication.\n\nStill, that race can be solved by first quiescen the device,\nbefore starting a new resync or verify.\n\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "07be15b12c41dbc5ceae130be2e0b655f7611691",
      "tree": "afe16c611f46a62fa9ed50fa138ddf00e8f7f547",
      "parents": [
        "3ea35df83fe5e081c793a65361f912ec0835213b"
      ],
      "author": {
        "name": "Lars Ellenberg",
        "email": "lars.ellenberg@linbit.com",
        "time": "Mon May 07 11:53:08 2012 +0200"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Thu Nov 08 16:58:27 2012 +0100"
      },
      "message": "drbd: fix resend/resubmit of frozen IO\n\nDRBD can freeze IO, due to fencing policy (fencing resource-and-stonith),\nor because we lost access to data (on-no-data-accessible suspend-io).\n\nResuming from there (re-connect, or re-attach, or explicit admin\nintervention) should \"just work\".\n\nUnfortunately, if the re-attach/re-connect did not happen within\nthe timeout, since the commit\n\n  drbd: Implemented real timeout checking for request processing time\n\nif so configured, the request_timer_fn() would timeout and\ndetach/disconnect virtually immediately.\n\nThis change tracks the most recent attach and connect, and does not\ntimeout within \u003cconfigured timeout interval\u003e after attach/connect.\n\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "3ea35df83fe5e081c793a65361f912ec0835213b",
      "tree": "548815972aeee106445c5fd8934845a6c1d03642",
      "parents": [
        "e4bad1bcacd82b3d7727e30db26be3580bdc722a"
      ],
      "author": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Fri Apr 06 12:13:18 2012 +0200"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Thu Nov 08 16:58:27 2012 +0100"
      },
      "message": "drbd: fix spelling, remove boring development log message\n\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "e4bad1bcacd82b3d7727e30db26be3580bdc722a",
      "tree": "8c276ba45b16777b72002d05fdf64f3bccd2eb02",
      "parents": [
        "a1096a6e9da7885ec9e11d93aa459685a33fa4d9"
      ],
      "author": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Fri Apr 06 12:08:51 2012 +0200"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Thu Nov 08 16:58:26 2012 +0100"
      },
      "message": "drbd: Ensure that data_size is not 0 before using data_size-1 as index\n\nThis could be exploited by a peer which runs modified code.\n\nReported-by: Dan Carpenter \u003cdan.carpenter@oracle.com\u003e\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    },
    {
      "commit": "a1096a6e9da7885ec9e11d93aa459685a33fa4d9",
      "tree": "36ee9aba8823ed51b0c71176df5f2b891ba0c06a",
      "parents": [
        "27eb13e99b515c52ba5a151a1acce6afb8a9b2b6"
      ],
      "author": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Fri Apr 06 12:07:34 2012 +0200"
      },
      "committer": {
        "name": "Philipp Reisner",
        "email": "philipp.reisner@linbit.com",
        "time": "Thu Nov 08 16:58:26 2012 +0100"
      },
      "message": "drbd: Delay/reject other state changes while establishing a connection\n\nChanges to the role and disk state should be delayed or rejected\nwhile we establish a connection.\n\nThis is necessary, since the peer will base its resync decision\non the UUIDs and the state we sent in the drbd_connect() function.\n\nThe most prominent example for this race is becoming primary after\nsending state and UUIDs and before the state changes to C_WF_CONNECTION.\n\nSigned-off-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nSigned-off-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\n"
    }
  ],
  "next": "27eb13e99b515c52ba5a151a1acce6afb8a9b2b6"
}
