)]}'
{
  "log": [
    {
      "commit": "dfae3b3451c6da14df1fa62d76c8a4345d21bdb2",
      "tree": "d674f1e1998b9ae902ab74f235e1bd39d31525d4",
      "parents": [
        "73bba6fc44591587254fec8e867a99b5a2a28ba7"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Mon Sep 24 20:59:48 2012 -0700"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:44 2012 -0800"
      },
      "message": "libceph: check for invalid mapping\n\n(cherry picked from commit d63b77f4c552cc3a20506871046ab0fcbc332609)\n\nIf we encounter an invalid (e.g., zeroed) mapping, return an error\nand avoid a divide by zero.\n\nSigned-off-by: Sage Weil \u003csage@inktank.com\u003e\nReviewed-by: Alex Elder \u003celder@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "73bba6fc44591587254fec8e867a99b5a2a28ba7",
      "tree": "6bd5dd48eb63fc4ecffc5c1fe006ed2ef58fc2a9",
      "parents": [
        "631015e45ee3bdcde1fe75e7d04fdfece6e42016"
      ],
      "author": {
        "name": "Yan, Zheng",
        "email": "zheng.z.yan@intel.com",
        "time": "Thu Sep 20 17:42:25 2012 +0800"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:44 2012 -0800"
      },
      "message": "ceph: Fix oops when handling mdsmap that decreases max_mds\n\n(cherry picked from commit 3e8f43a089f06279c5f76a9ccd42578eebf7bfa5)\n\nWhen i \u003e\u003d newmap-\u003em_max_mds, ceph_mdsmap_get_addr(newmap, i) return\nNULL. Passing NULL to memcmp() triggers oops.\n\nSigned-off-by: Yan, Zheng \u003czheng.z.yan@intel.com\u003e\nSigned-off-by: Sage Weil \u003csage@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "631015e45ee3bdcde1fe75e7d04fdfece6e42016",
      "tree": "14b91e053f35fe5a15eae14d61107d72d572dae1",
      "parents": [
        "a872024581f2e73edbea6eece56361ce508ea881"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Wed Oct 24 16:12:58 2012 -0700"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:43 2012 -0800"
      },
      "message": "libceph: avoid NULL kref_put when osd reset races with alloc_msg\n\n(cherry picked from commit 9bd952615a42d7e2ce3fa2c632e808e804637a1a)\n\nThe ceph_on_in_msg_alloc() method drops con-\u003emutex while it allocates a\nmessage.  If that races with a timeout that resends a zillion messages and\nresets the connection, and the -\u003ealloc_msg() method returns a NULL message,\nit will call ceph_msg_put(NULL) and BUG.\n\nFix by only calling put if msg is non-NULL.\n\nFixes http://tracker.newdream.net/issues/3142\n\nSigned-off-by: Sage Weil \u003csage@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "a872024581f2e73edbea6eece56361ce508ea881",
      "tree": "187dfd29a02badb7576b932ca6ed83e45acea20d",
      "parents": [
        "21e292e34c48c03fb6638c2d1295ca12dac97b03"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Mon Oct 08 20:37:30 2012 -0700"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:43 2012 -0800"
      },
      "message": "rbd: reset BACKOFF if unable to re-queue\n\n(cherry picked from commit 588377d6199034c36d335e7df5818b731fea072c)\n\nIf ceph_fault() is unable to queue work after a delay, it sets the\nBACKOFF connection flag so con_work() will attempt to do so.\n\nIn con_work(), when BACKOFF is set, if queue_delayed_work() doesn\u0027t\nresult in newly-queued work, it simply ignores this condition and\nproceeds as if no backoff delay were desired.  There are two\nproblems with this--one of which is a bug.\n\nThe first problem is simply that the intended behavior is to back\noff, and if we aren\u0027t able queue the work item to run after a delay\nwe\u0027re not doing that.\n\nThe only reason queue_delayed_work() won\u0027t queue work is if the\nprovided work item is already queued.  In the messenger, this\nmeans that con_work() is already scheduled to be run again.  So\nif we simply set the BACKOFF flag again when this occurs, we know\nthe next con_work() call will again attempt to hold off activity\non the connection until after the delay.\n\nThe second problem--the bug--is a leak of a reference count.  If\nqueue_delayed_work() returns 0 in con_work(), con-\u003eops-\u003eput() drops\nthe connection reference held on entry to con_work().  However,\nprocessing is (was) allowed to continue, and at the end of the\nfunction a second con-\u003eops-\u003eput() is called.\n\nThis patch fixes both problems.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Sage Weil \u003csage@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "21e292e34c48c03fb6638c2d1295ca12dac97b03",
      "tree": "ba7de4f8fdac94c211b946544cd6a35cf9bd74e0",
      "parents": [
        "76cb69279f83889cf98fd9f16f5d50bcc2779442"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Fri Sep 21 17:59:58 2012 -0500"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:43 2012 -0800"
      },
      "message": "libceph: only kunmap kmapped pages\n\n(cherry picked from commit 5ce765a540f34d1e2005e1210f49f67fdf11e997)\n\nIn write_partial_msg_pages(), pages need to be kmapped in order to\nperform a CRC-32c calculation on them.  As an artifact of the way\nthis code used to be structured, the kunmap() call was separated\nfrom the kmap() call and both were done conditionally.  But the\nconditions under which the kmap() and kunmap() calls were made\ndiffered, so there was a chance a kunmap() call would be done on a\npage that had not been mapped.\n\nThe symptom of this was tripping a BUG() in kunmap_high() when\npkmap_count[nr] became 0.\n\nReported-by: Bryan K. Wright \u003cbryan@virginia.edu\u003e\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Sage Weil \u003csage@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "76cb69279f83889cf98fd9f16f5d50bcc2779442",
      "tree": "06e827efbfa9ad7ad36b3962b7dfac7c507ecbcd",
      "parents": [
        "523693067608f067bcbe94f23a4feb4dfcfa2db8"
      ],
      "author": {
        "name": "Jim Schutt",
        "email": "jaschut@sandia.gov",
        "time": "Fri Aug 10 10:37:38 2012 -0700"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:43 2012 -0800"
      },
      "message": "libceph: avoid truncation due to racing banners\n\n(cherry picked from commit 6d4221b53707486dfad3f5bfe568d2ce7f4c9863)\n\nBecause the Ceph client messenger uses a non-blocking connect, it is\npossible for the sending of the client banner to race with the\narrival of the banner sent by the peer.\n\nWhen ceph_sock_state_change() notices the connect has completed, it\nschedules work to process the socket via con_work().  During this\ntime the peer is writing its banner, and arrival of the peer banner\nraces with con_work().\n\nIf con_work() calls try_read() before the peer banner arrives, there\nis nothing for it to do, after which con_work() calls try_write() to\nsend the client\u0027s banner.  In this case Ceph\u0027s protocol negotiation\ncan complete succesfully.\n\nThe server-side messenger immediately sends its banner and addresses\nafter accepting a connect request, *before* actually attempting to\nread or verify the banner from the client.  As a result, it is\npossible for the banner from the server to arrive before con_work()\ncalls try_read().  If that happens, try_read() will read the banner\nand prepare protocol negotiation info via prepare_write_connect().\nprepare_write_connect() calls con_out_kvec_reset(), which discards\nthe as-yet-unsent client banner.  Next, con_work() calls\ntry_write(), which sends the protocol negotiation info rather than\nthe banner that the peer is expecting.\n\nThe result is that the peer sees an invalid banner, and the client\nreports \"negotiation failed\".\n\nFix this by moving con_out_kvec_reset() out of\nprepare_write_connect() to its callers at all locations except the\none where the banner might still need to be sent.\n\n[elder@inktak.com: added note about server-side behavior]\n\nSigned-off-by: Jim Schutt \u003cjaschut@sandia.gov\u003e\nReviewed-by: Alex Elder \u003celder@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "523693067608f067bcbe94f23a4feb4dfcfa2db8",
      "tree": "c32daf4e0d6f08870763c8773d597e489985a76f",
      "parents": [
        "b8e03e320f9156e870f8cc66b0d9fca9f24d36c8"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Sun Aug 19 12:29:16 2012 -0700"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:43 2012 -0800"
      },
      "message": "libceph: delay debugfs initialization until we learn global_id\n\n(cherry picked from commit d1c338a509cea5378df59629ad47382810c38623)\n\nThe debugfs directory includes the cluster fsid and our unique global_id.\nWe need to delay the initialization of the debug entry until we have\nlearned both the fsid and our global_id from the monitor or else the\nsecond client can\u0027t create its debugfs entry and will fail (and multiple\nclient instances aren\u0027t properly reflected in debugfs).\n\nReported by: Yan, Zheng \u003czheng.z.yan@intel.com\u003e\nSigned-off-by: Sage Weil \u003csage@inktank.com\u003e\nReviewed-by: Yehuda Sadeh \u003cyehuda@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "b8e03e320f9156e870f8cc66b0d9fca9f24d36c8",
      "tree": "230886a24e185f2f8e2120f05456c823d47c62f9",
      "parents": [
        "59238927cc8ea6c1e4a8a1136e17598648832db0"
      ],
      "author": {
        "name": "Sylvain Munaut",
        "email": "tnt@246tNt.com",
        "time": "Thu Aug 02 09:12:59 2012 -0700"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:42 2012 -0800"
      },
      "message": "libceph: fix crypto key null deref, memory leak\n\n(cherry picked from commit f0666b1ac875ff32fe290219b150ec62eebbe10e)\n\nAvoid crashing if the crypto key payload was NULL, as when it was not correctly\nallocated and initialized.  Also, avoid leaking it.\n\nSigned-off-by: Sylvain Munaut \u003ctnt@246tNt.com\u003e\nSigned-off-by: Sage Weil \u003csage@inktank.com\u003e\nReviewed-by: Alex Elder \u003celder@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "59238927cc8ea6c1e4a8a1136e17598648832db0",
      "tree": "b2039951363d52164113f84a84823be816758e18",
      "parents": [
        "7389a76f02bf56340f26fa933b9fc6a1dece9148"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Mon Jul 30 18:19:45 2012 -0700"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:42 2012 -0800"
      },
      "message": "libceph: recheck con state after allocating incoming message\n\n(cherry picked from commit 6139919133377652992a5fe134e22abce3e9c25e)\n\nWe drop the lock when calling the -\u003ealloc_msg() con op, which means\nwe need to (a) not clobber con-\u003ein_msg without the mutex held, and (b)\nwe need to verify that we are still in the OPEN state when we retake\nit to avoid causing any mayhem.  If the state does change, -EAGAIN\nwill get us back to con_work() and loop.\n\nSigned-off-by: Sage Weil \u003csage@inktank.com\u003e\nReviewed-by: Alex Elder \u003celder@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "7389a76f02bf56340f26fa933b9fc6a1dece9148",
      "tree": "0c4fbaaf31b0e51b8f1e745a92c23980b1309a31",
      "parents": [
        "328677c24bbae17f3f91ffce3b2351a27933741c"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Mon Jul 30 18:19:30 2012 -0700"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:42 2012 -0800"
      },
      "message": "libceph: change ceph_con_in_msg_alloc convention to be less weird\n\n(cherry picked from commit 4740a623d20c51d167da7f752b63e2b8714b2543)\n\nThis function\u0027s calling convention is very limiting.  In particular,\nwe can\u0027t return any error other than ENOMEM (and only implicitly),\nwhich is a problem (see next patch).\n\nInstead, return an normal 0 or error code, and make the skip a pointer\noutput parameter.  Drop the useless in_hdr argument (we have the con\npointer).\n\nSigned-off-by: Sage Weil \u003csage@inktank.com\u003e\nReviewed-by: Alex Elder \u003celder@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "328677c24bbae17f3f91ffce3b2351a27933741c",
      "tree": "1260cfe3b6af6134d91a342c419206fb9cff3249",
      "parents": [
        "900fbd910f53a417a6b0859bd2cde7ae48ac4bb2"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Mon Jul 30 18:17:13 2012 -0700"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:42 2012 -0800"
      },
      "message": "libceph: avoid dropping con mutex before fault\n\n(cherry picked from commit 8636ea672f0c5ab7478c42c5b6705ebd1db7eb6a)\n\nThe ceph_fault() function takes the con mutex, so we should avoid\ndropping it before calling it.  This fixes a potential race with\nanother thread calling ceph_con_close(), or _open(), or similar (we\ndon\u0027t reverify con-\u003estate after retaking the lock).\n\nAdd annotation so that lockdep realizes we will drop the mutex before\nreturning.\n\nSigned-off-by: Sage Weil \u003csage@inktank.com\u003e\nReviewed-by: Alex Elder \u003celder@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "900fbd910f53a417a6b0859bd2cde7ae48ac4bb2",
      "tree": "eed8fb8ac93d796b0e8b58c96be9d2fcac65d8ea",
      "parents": [
        "da75ae3c0d4c40587fa7583952b98072d811a7d2"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Mon Jul 30 18:16:56 2012 -0700"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:42 2012 -0800"
      },
      "message": "libceph: verify state after retaking con lock after dispatch\n\n(cherry picked from commit 7b862e07b1a4d5c963d19027f10ea78085f27f9b)\n\nWe drop the con mutex when delivering a message.  When we retake the\nlock, we need to verify we are still in the OPEN state before\npreparing to read the next tag, or else we risk stepping on a\nconnection that has been closed.\n\nSigned-off-by: Sage Weil \u003csage@inktank.com\u003e\nReviewed-by: Alex Elder \u003celder@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "da75ae3c0d4c40587fa7583952b98072d811a7d2",
      "tree": "e385de76be9881ae001899c7615b2f360e5ca5ee",
      "parents": [
        "6cdaef1be27bc05ab4197b3ab4e3ee1d326cf04c"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Mon Jul 30 18:16:40 2012 -0700"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:42 2012 -0800"
      },
      "message": "libceph: revoke mon_client messages on session restart\n\n(cherry picked from commit 4f471e4a9c7db0256834e1b376ea50c82e345c3c)\n\nRevoke all mon_client messages when we shut down the old connection.\nThis is mostly moot since we are re-using the same ceph_connection,\nbut it is cleaner.\n\nSigned-off-by: Sage Weil \u003csage@inktank.com\u003e\nReviewed-by: Alex Elder \u003celder@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "6cdaef1be27bc05ab4197b3ab4e3ee1d326cf04c",
      "tree": "275f9277dbf50f31e26e37122cb11244797e3fa3",
      "parents": [
        "8992551d85934e0dc4683068612758831d1d4899"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Mon Jul 30 18:16:16 2012 -0700"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:41 2012 -0800"
      },
      "message": "libceph: fix handling of immediate socket connect failure\n\n(cherry picked from commit 8007b8d626b49c34fb146ec16dc639d8b10c862f)\n\nIf the connect() call immediately fails such that sock \u003d\u003d NULL, we\nstill need con_close_socket() to reset our socket state to CLOSED.\n\nSigned-off-by: Sage Weil \u003csage@inktank.com\u003e\nReviewed-by: Alex Elder \u003celder@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "8992551d85934e0dc4683068612758831d1d4899",
      "tree": "6062a1b0e92bbc7ac8268a3e494e23536ed096d1",
      "parents": [
        "63c1362476141f4fb340e8236d41674be9fc1983"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Fri Jul 20 17:30:40 2012 -0700"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:41 2012 -0800"
      },
      "message": "libceph: clear all flags on con_close\n\nSigned-off-by: Sage Weil \u003csage@inktank.com\u003e\n(cherry picked from commit 43c7427d100769451601b8a36988ac0528ce0124)\n"
    },
    {
      "commit": "63c1362476141f4fb340e8236d41674be9fc1983",
      "tree": "13be911ab412f8e02ec6cdfa2688bc5b4296c0a2",
      "parents": [
        "265fb7c177f9db75d628b3479b6223c1c8110e67"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Fri Jul 20 17:29:55 2012 -0700"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:41 2012 -0800"
      },
      "message": "libceph: clean up con flags\n\n(cherry picked from commit 4a8616920860920abaa51193146fe36b38ef09aa)\n\nRename flags with CON_FLAG prefix, move the definitions into the c file,\nand (better) document their meaning.\n\nSigned-off-by: Sage Weil \u003csage@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "265fb7c177f9db75d628b3479b6223c1c8110e67",
      "tree": "85f85c837e89f7d09041a26bb60a5b35495afc93",
      "parents": [
        "cb9f8855591613dff0909c99d46a29e10eb39b25"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Fri Jul 20 17:24:40 2012 -0700"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:41 2012 -0800"
      },
      "message": "libceph: replace connection state bits with states\n\n(cherry picked from commit 8dacc7da69a491c515851e68de6036f21b5663ce)\n\nUse a simple set of 6 enumerated values for the socket states (CON_STATE_*)\nand use those instead of the state bits.  All of the con-\u003estate checks are\nnow under the protection of the con mutex, so this is safe.  It also\nsimplifies many of the state checks because we can check for anything other\nthan the expected state instead of various bits for races we can think of.\n\nThis appears to hold up well to stress testing both with and without socket\nfailure injection on the server side.\n\nSigned-off-by: Sage Weil \u003csage@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "cb9f8855591613dff0909c99d46a29e10eb39b25",
      "tree": "b9ecd8498d938908b7faf945fd5ecde58621cbff",
      "parents": [
        "3b5a9ead0b4845aaa7e80fcd6166f2c6740a1c6f"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Fri Jul 20 17:19:43 2012 -0700"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:41 2012 -0800"
      },
      "message": "libceph: drop unnecessary CLOSED check in socket state change callback\n\n(cherry picked from commit d7353dd5aaf22ed611fbcd0d4a4a12fb30659290)\n\n\nIf we are CLOSED, the socket is closed and we won\u0027t get these.\n\nSigned-off-by: Sage Weil \u003csage@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "3b5a9ead0b4845aaa7e80fcd6166f2c6740a1c6f",
      "tree": "df27875914d29620a7e921726b8d699267cfadf7",
      "parents": [
        "1c5b33b852ab372d4538821db998561d5e4d7212"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Fri Jul 20 16:45:49 2012 -0700"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:40 2012 -0800"
      },
      "message": "libceph: close socket directly from ceph_con_close()\n\n(cherry picked from commit ee76e0736db8455e3b11827d6899bd2a4e1d0584)\n\nIt is simpler to do this immediately, since we already hold the con mutex.\nIt also avoids the need to deal with a not-quite-CLOSED socket in con_work.\n\nSigned-off-by: Sage Weil \u003csage@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "1c5b33b852ab372d4538821db998561d5e4d7212",
      "tree": "dcf41fdf7db2bb2e9a32ddfe66b07121ee2eb903",
      "parents": [
        "5d0f354b3183d005024d43b567335701d928995a"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Fri Jul 20 15:40:04 2012 -0700"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:40 2012 -0800"
      },
      "message": "libceph: drop gratuitous socket close calls in con_work\n\n(cherry picked from commit 2e8cb10063820af7ed7638e3fd9013eee21266e7)\n\nIf the state is CLOSED or OPENING, we shouldn\u0027t have a socket.\n\nSigned-off-by: Sage Weil \u003csage@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "5d0f354b3183d005024d43b567335701d928995a",
      "tree": "afbed7bedca43cb872c092dcfe84d94c0d8ccc46",
      "parents": [
        "67c6fc1932a705f61f98d8092375622b8dffea6a"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Fri Jul 20 15:34:04 2012 -0700"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:40 2012 -0800"
      },
      "message": "libceph: move ceph_con_send() closed check under the con mutex\n\n(cherry picked from commit a59b55a602b6c741052d79c1e3643f8440cddd27)\n\nTake the con mutex before checking whether the connection is closed to\navoid racing with someone else closing it.\n\nSigned-off-by: Sage Weil \u003csage@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "67c6fc1932a705f61f98d8092375622b8dffea6a",
      "tree": "c4beb1b0c263cdc031770a2e917cec3c95c976fb",
      "parents": [
        "da6a81eb5a2671f12551953d1843a0f53416d185"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Fri Jul 20 15:33:04 2012 -0700"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:40 2012 -0800"
      },
      "message": "libceph: move msgr clear_standby under con mutex protection\n\n(cherry picked from commit 00650931e52e97fe64096bec167f5a6780dfd94a)\n\nAvoid dropping and retaking con-\u003emutex in the ceph_con_send() case by\nleaving locking up to the caller.\n\nSigned-off-by: Sage Weil \u003csage@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "da6a81eb5a2671f12551953d1843a0f53416d185",
      "tree": "7e9c02adeba67b0bb55e103dd68517734f6dec3a",
      "parents": [
        "ed447f04ee3240371aa8a199588107fd521240d3"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Fri Jul 20 15:22:53 2012 -0700"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:40 2012 -0800"
      },
      "message": "libceph: fix fault locking; close socket on lossy fault\n\n(cherry picked from commit 3b5ede07b55b52c3be27749d183d87257d032065)\n\nIf we fault on a lossy connection, we should still close the socket\nimmediately, and do so under the con mutex.\n\nWe should also take the con mutex before printing out the state bits in\nthe debug output.\n\nSigned-off-by: Sage Weil \u003csage@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "ed447f04ee3240371aa8a199588107fd521240d3",
      "tree": "f43b55fc04fd8bf8bf1aca9b6db91818cc1de620",
      "parents": [
        "eea8ed97626254429d4679c567035effdf9983a8"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Mon Jul 30 16:22:05 2012 -0700"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:39 2012 -0800"
      },
      "message": "libceph: reset connection retry on successfully negotiation\n\n(cherry picked from commit 85effe183dd45854d1ad1a370b88cddb403c4c91)\n\nWe exponentially back off when we encounter connection errors.  If several\nerrors accumulate, we will eventually wait ages before even trying to\nreconnect.\n\nFix this by resetting the backoff counter after a successful negotiation/\nconnection with the remote node.  Fixes ceph issue #2802.\n\nSigned-off-by: Sage Weil \u003csage@inktank.com\u003e\nReviewed-by: Yehuda Sadeh \u003cyehuda@inktank.com\u003e\nReviewed-by: Alex Elder \u003celder@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "eea8ed97626254429d4679c567035effdf9983a8",
      "tree": "a3697630e0c1136abfb4d2f4fe694a3c79151b67",
      "parents": [
        "175c4c20d29322b9e882c052025e72644ca00e2d"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Mon Jul 30 16:21:40 2012 -0700"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:39 2012 -0800"
      },
      "message": "libceph: protect ceph_con_open() with mutex\n\n(cherry picked from commit 5469155f2bc83bb2c88b0a0370c3d54d87eed06e)\n\nTake the con mutex while we are initiating a ceph open.  This is necessary\nbecause the may have previously been in use and then closed, which could\nresult in a racing workqueue running con_work().\n\nSigned-off-by: Sage Weil \u003csage@inktank.com\u003e\nReviewed-by: Yehuda Sadeh \u003cyehuda@inktank.com\u003e\nReviewed-by: Alex Elder \u003celder@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "175c4c20d29322b9e882c052025e72644ca00e2d",
      "tree": "a146aa8afa8ac1560ed5350c11bda105e95ea274",
      "parents": [
        "d43841ef768a78f2cbc7e819f1a2838a4838f566"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Mon Jul 30 16:20:25 2012 -0700"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:39 2012 -0800"
      },
      "message": "libceph: (re)initialize bio_iter on start of message receive\n\n(cherry picked from commit a4107026976f06c9a6ce8cc84a763564ee39d901)\n\nPreviously, we were opportunistically initializing the bio_iter if it\nappeared to be uninitialized in the middle of the read path.  The problem\nis that a sequence like:\n\n - start reading message\n - initialize bio_iter\n - read half a message\n - messenger fault, reconnect\n - restart reading message\n - ** bio_iter now non-NULL, not reinitialized **\n - read past end of bio, crash\n\nInstead, initialize the bio_iter unconditionally when we allocate/claim\nthe message for read.\n\nSigned-off-by: Sage Weil \u003csage@inktank.com\u003e\nReviewed-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Yehuda Sadeh \u003cyehuda@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "d43841ef768a78f2cbc7e819f1a2838a4838f566",
      "tree": "b3f195efcd5f9fedd8a1b6fdbffc801278f30e8d",
      "parents": [
        "7621822a64ee40c0ab4181e7281ef06f241782cb"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Mon Jul 30 16:19:28 2012 -0700"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:39 2012 -0800"
      },
      "message": "libceph: resubmit linger ops when pg mapping changes\n\n(cherry picked from commit 6194ea895e447fdf4adfd23f67873a32bf4f15ae)\n\nThe linger op registration (i.e., watch) modifies the object state.  As\nsuch, the OSD will reply with success if it has already applied without\ndoing the associated side-effects (setting up the watch session state).\nIf we lose the ACK and resubmit, we will see success but the watch will not\nbe correctly registered and we won\u0027t get notifies.\n\nTo fix this, always resubmit the linger op with a new tid.  We accomplish\nthis by re-registering as a linger (i.e., \u0027registered\u0027) if we are not yet\nregistered.  Then the second loop will treat this just like a normal\ncase of re-registering.\n\nThis mirrors a similar fix on the userland ceph.git, commit 5dd68b95, and\nceph bug #2796.\n\nSigned-off-by: Sage Weil \u003csage@inktank.com\u003e\nReviewed-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Yehuda Sadeh \u003cyehuda@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "7621822a64ee40c0ab4181e7281ef06f241782cb",
      "tree": "ce0342a33cd1c508ee1707108ca72b7bc2dfe328",
      "parents": [
        "b3fd00b73452353444c768b19bb175ec95410c8f"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Mon Jul 30 16:24:37 2012 -0700"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:39 2012 -0800"
      },
      "message": "libceph: fix mutex coverage for ceph_con_close\n\n(cherry picked from commit 8c50c817566dfa4581f82373aac39f3e608a7dc8)\n\nHold the mutex while twiddling all of the state bits to avoid possible\nraces.  While we\u0027re here, make not of why we cannot close the socket\ndirectly.\n\nSigned-off-by: Sage Weil \u003csage@inktank.com\u003e\nReviewed-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Yehuda Sadeh \u003cyehuda@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "b3fd00b73452353444c768b19bb175ec95410c8f",
      "tree": "50931fcc448eac85d3eca1ca27ba04f8b4141254",
      "parents": [
        "59d02721bb2838893596d5617659fe907dd45518"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Mon Jul 30 16:24:21 2012 -0700"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:39 2012 -0800"
      },
      "message": "libceph: report socket read/write error message\n\n(cherry picked from commit 3a140a0d5c4b9e35373b016e41dfc85f1e526bdb)\n\nWe need to set error_msg to something useful before calling ceph_fault();\ndo so here for try_{read,write}().  This is more informative than\n\nlibceph: osd0 192.168.106.220:6801 (null)\n\nSigned-off-by: Sage Weil \u003csage@inktank.com\u003e\nReviewed-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Yehuda Sadeh \u003cyehuda@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "59d02721bb2838893596d5617659fe907dd45518",
      "tree": "126ac6b7dba3ef26cb4c6e32b7bc2faf74c1c35d",
      "parents": [
        "9beb73fcb83317786226b4203d7e56c6b0f43adb"
      ],
      "author": {
        "name": "Guanjun He",
        "email": "gjhe@suse.com",
        "time": "Sun Jul 08 19:50:33 2012 -0700"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:38 2012 -0800"
      },
      "message": "libceph: prevent the race of incoming work during teardown\n\n(cherry picked from commit a2a3258417eb6a1799cf893350771428875a8287)\n\nAdd an atomic variable \u0027stopping\u0027 as flag in struct ceph_messenger,\nset this flag to 1 in function ceph_destroy_client(), and add the condition code\nin function ceph_data_ready() to test the flag value, if true(1), just return.\n\nSigned-off-by: Guanjun He \u003cgjhe@suse.com\u003e\nReviewed-by: Sage Weil \u003csage@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "9beb73fcb83317786226b4203d7e56c6b0f43adb",
      "tree": "625dd1aa57201317108b56b11ae83195655d7939",
      "parents": [
        "d92d11da1dd8531150823ff429ae29a0cf5e438d"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Mon Jul 09 14:22:34 2012 -0700"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:38 2012 -0800"
      },
      "message": "libceph: initialize msgpool message types\n\n(cherry picked from commit d50b409fb8698571d8209e5adfe122e287e31290)\n\nInitialize the type field for messages in a msgpool.  The caller was doing\nthis for osd ops, but not for the reply messages.\n\nReported-by: Alex Elder \u003celder@inktank.com\u003e\nSigned-off-by: Sage Weil \u003csage@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "d92d11da1dd8531150823ff429ae29a0cf5e438d",
      "tree": "15869cdd857ccb36d8a9d592694daa3a175ce061",
      "parents": [
        "a5b0662bb814837139bb73249463e199528101b5"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Wed Jun 27 12:31:02 2012 -0700"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:38 2012 -0800"
      },
      "message": "libceph: allow sock transition from CONNECTING to CLOSED\n\n(cherry picked from commit fbb85a478f6d4cce6942f1c25c6a68ec5b1e7e7f)\n\nIt is possible to close a socket that is in the OPENING state.  For\nexample, it can happen if ceph_con_close() is called on the con before\nthe TCP connection is established.  con_work() will come around and shut\ndown the socket.\n\nSigned-off-by: Sage Weil \u003csage@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "a5b0662bb814837139bb73249463e199528101b5",
      "tree": "db88aff4007d86eeaf5c25b0e43e5dc5bd364562",
      "parents": [
        "638ba1765d03bdc3a972bfca69fd0a4a4eda717c"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Wed Jun 27 12:24:34 2012 -0700"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:38 2012 -0800"
      },
      "message": "libceph: initialize mon_client con only once\n\n(cherry picked from commit 735a72ef952d42a256f79ae3e6dc1c17a45c041b)\n\nDo not re-initialize the con on every connection attempt.  When we\nceph_con_close, there may still be work queued on the socket (e.g., to\nclose it), and re-initializing will clobber the work_struct state.\n\nSigned-off-by: Sage Weil \u003csage@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "638ba1765d03bdc3a972bfca69fd0a4a4eda717c",
      "tree": "75da2d47d2997f1a2800dbc7bea2f4d5520f47bf",
      "parents": [
        "db90f992eb77188ce3e2b95d36f99ba194e04e66"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Wed Jun 27 12:24:08 2012 -0700"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:37 2012 -0800"
      },
      "message": "libceph: set peer name on con_open, not init\n\n(cherry picked from commit b7a9e5dd40f17a48a72f249b8bbc989b63bae5fd)\n\nThe peer name may change on each open attempt, even when the connection is\nreused.\n\nSigned-off-by: Sage Weil \u003csage@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "db90f992eb77188ce3e2b95d36f99ba194e04e66",
      "tree": "9f3e121e70ae6fb8260db9c64b29b0f077b60465",
      "parents": [
        "a8651271bb5d77402251bf35554d1f320463c949"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Wed Jun 20 21:53:53 2012 -0500"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:28 2012 -0800"
      },
      "message": "libceph: add some fine ASCII art\n\n(cherry picked from commit bc18f4b1c850ab355e38373fbb60fd28568d84b5)\n\nSage liked the state diagram I put in my commit description so\nI\u0027m putting it in with the code.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Sage Weil \u003csage@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "a8651271bb5d77402251bf35554d1f320463c949",
      "tree": "60805b823e098a6a40f1c2f8fdcbc4d3ae1e2f47",
      "parents": [
        "8a0566f6aac534a20ed436e3bed56b736cef4c40"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Mon Jun 11 14:57:13 2012 -0500"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:28 2012 -0800"
      },
      "message": "libceph: small changes to messenger.c\n\n(cherry picked from commit 5821bd8ccdf5d17ab2c391c773756538603838c3)\n\nThis patch gathers a few small changes in \"net/ceph/messenger.c\":\n  out_msg_pos_next()\n    - small logic change that mostly affects indentation\n  write_partial_msg_pages().\n    - use a local variable trail_off to represent the offset into\n      a message of the trail portion of the data (if present)\n    - once we are in the trail portion we will always be there, so we\n      don\u0027t always need to check against our data position\n    - avoid computing len twice after we\u0027ve reached the trail\n    - get rid of the variable tmpcrc, which is not needed\n    - trail_off and trail_len never change so mark them const\n    - update some comments\n  read_partial_message_bio()\n    - bio_iovec_idx() will never return an error, so don\u0027t bother\n      checking for it\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Sage Weil \u003csage@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "8a0566f6aac534a20ed436e3bed56b736cef4c40",
      "tree": "f71c7dc5081ace4fa2116086da676a6bc1338b1b",
      "parents": [
        "05a24ecce18262f17aa0b28a6bf1191a2a456975"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Thu May 24 11:55:03 2012 -0500"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:28 2012 -0800"
      },
      "message": "libceph: distinguish two phases of connect sequence\n\n(cherry picked from commit 7593af920baac37752190a0db703d2732bed4a3b)\n\nCurrently a ceph connection enters a \"CONNECTING\" state when it\nbegins the process of (re-)connecting with its peer.  Once the two\nends have successfully exchanged their banner and addresses, an\nadditional NEGOTIATING bit is set in the ceph connection\u0027s state to\nindicate the connection information exhange has begun.  The\nCONNECTING bit/state continues to be set during this phase.\n\nRather than have the CONNECTING state continue while the NEGOTIATING\nbit is set, interpret these two phases as distinct states.  In other\nwords, when NEGOTIATING is set, clear CONNECTING.  That way only\none of them will be active at a time.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Sage Weil \u003csage@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "05a24ecce18262f17aa0b28a6bf1191a2a456975",
      "tree": "ff14157d6e199ae34932a21fe21d142c1591227d",
      "parents": [
        "a94af04be86f81d5e3973a37e6a861f329418f1e"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Thu May 31 11:37:29 2012 -0500"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:28 2012 -0800"
      },
      "message": "libceph: separate banner and connect writes\n\n(cherry picked from commit ab166d5aa3bc036fba7efaca6e4e43a7e9510acf)\n\nThere are two phases in the process of linking together the two ends\nof a ceph connection.  The first involves exchanging a banner and\nIP addresses, and if that is successful a second phase exchanges\nsome detail about each side\u0027s connection capabilities.\n\nWhen initiating a connection, the client side now queues to send\nits information for both phases of this process at the same time.\nThis is probably a bit more efficient, but it is slightly messier\nfrom a layering perspective in the code.\n\nSo rearrange things so that the client doesn\u0027t send the connection\ninformation until it has received and processed the response in the\ninitial banner phase (in process_banner()).\n\nMove the code (in the (con-\u003esock \u003d\u003d NULL) case in try_write()) that\nprepares for writing the connection information, delaying doing that\nuntil the banner exchange has completed.  Move the code that begins\nthe transition to this second \"NEGOTIATING\" phase out of\nprocess_banner() and into its caller, so preparing to write the\nconnection information and preparing to read the response are\nadjacent to each other.\n\nFinally, preparing to write the connection information now requires\nthe output kvec to be reset in all cases, so move that into the\nprepare_write_connect() and delete it from all callers.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Sage Weil \u003csage@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "a94af04be86f81d5e3973a37e6a861f329418f1e",
      "tree": "f9894d5ba822a10d31b1cf310dfd14f47c214bb6",
      "parents": [
        "abb46df87f784b398bcdb5091175d24456e42f11"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Wed May 23 14:35:23 2012 -0500"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:28 2012 -0800"
      },
      "message": "libceph: define and use an explicit CONNECTED state\n\n(cherry picked from commit e27947c767f5bed15048f4e4dad3e2eb69133697)\n\nThere is no state explicitly defined when a ceph connection is fully\noperational.  So define one.\n\nIt\u0027s set when the connection sequence completes successfully, and is\ncleared when the connection gets closed.\n\nBe a little more careful when examining the old state when a socket\ndisconnect event is reported.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Sage Weil \u003csage@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "abb46df87f784b398bcdb5091175d24456e42f11",
      "tree": "fe74a12cb1cf4517e02cf64274e176125d9c1841",
      "parents": [
        "2a281c7aa696af085db44154d053a169e4b07449"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Wed May 23 14:35:23 2012 -0500"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:28 2012 -0800"
      },
      "message": "libceph: clear NEGOTIATING when done\n\n(cherry picked from commit 3ec50d1868a9e0493046400bb1fdd054c7f64ebd)\n\nA connection state\u0027s NEGOTIATING bit gets set while in CONNECTING\nstate after we have successfully exchanged a ceph banner and IP\naddresses with the connection\u0027s peer (the server).  But that bit\nis not cleared again--at least not until another connection attempt\nis initiated.\n\nInstead, clear it as soon as the connection is fully established.\nAlso, clear it when a socket connection gets prematurely closed\nin the midst of establishing a ceph connection (in case we had\nreached the point where it was set).\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Sage Weil \u003csage@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "2a281c7aa696af085db44154d053a169e4b07449",
      "tree": "aa7d31e193a964f885e66e0ff1083786a60f5d64",
      "parents": [
        "8a62c3339d5455c46c1da1e9fb9b60df20e59905"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Wed Jun 20 21:53:53 2012 -0500"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:27 2012 -0800"
      },
      "message": "libceph: clear CONNECTING in ceph_con_close()\n\n(cherry picked from commit bb9e6bba5d8b85b631390f8dbe8a24ae1ff5b48a)\n\nA connection that is closed will no longer be connecting.  So\nclear the CONNECTING state bit in ceph_con_close().  Similarly,\nif the socket has been closed we no longer are in connecting\nstate (a new connect sequence will need to be initiated).\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Sage Weil \u003csage@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "8a62c3339d5455c46c1da1e9fb9b60df20e59905",
      "tree": "8cabebaa63de6c8f237cd7edc50ab813912571ad",
      "parents": [
        "70b06043cd9aebf15319ce3917196ff032dc20dd"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Wed Jun 20 21:53:53 2012 -0500"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:27 2012 -0800"
      },
      "message": "libceph: don\u0027t touch con state in con_close_socket()\n\n(cherry picked from commit 456ea46865787283088b23a8a7f69244513b95f0)\n\nIn con_close_socket(), a connection\u0027s SOCK_CLOSED flag gets set and\nthen cleared while its shutdown method is called and its reference\ngets dropped.\n\nPreviously, that flag got set only if it had not already been set,\nso setting it in con_close_socket() might have prevented additional\nprocessing being done on a socket being shut down.  We no longer set\nSOCK_CLOSED in the socket event routine conditionally, so setting\nthat bit here no longer provides whatever benefit it might have\nprovided before.\n\nA race condition could still leave the SOCK_CLOSED bit set even\nafter we\u0027ve issued the call to con_close_socket(), so we still clear\nthat bit after shutting the socket down.  Add a comment explaining\nthe reason for this.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Sage Weil \u003csage@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "70b06043cd9aebf15319ce3917196ff032dc20dd",
      "tree": "fc9b36a43c1ac3b6cc2f2756a5e0129eac47b03f",
      "parents": [
        "54942c5326f039a40c407a251175cd3925ce2951"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Wed Jun 20 21:53:53 2012 -0500"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:27 2012 -0800"
      },
      "message": "libceph: just set SOCK_CLOSED when state changes\n\n(cherry picked from commit d65c9e0b9eb43d14ece9dd843506ccba06162ee7)\n\nWhen a TCP_CLOSE or TCP_CLOSE_WAIT event occurs, the SOCK_CLOSED\nconnection flag bit is set, and if it had not been previously set\nqueue_con() is called to ensure con_work() will get a chance to\nhandle the changed state.\n\ncon_work() atomically checks--and if set, clears--the SOCK_CLOSED\nbit if it was set.  This means that even if the bit were set\nrepeatedly, the related processing in con_work() only gets called\nonce per transition of the bit from 0 to 1.\n\nWhat\u0027s important then is that we ensure con_work() gets called *at\nleast* once when a socket close event occurs, not that it gets\ncalled *exactly* once.\n\nThe work queue mechanism already takes care of queueing work\nonly if it is not already queued, so there\u0027s no need for us\nto call queue_con() conditionally.\n\nSo this patch just makes it so the SOCK_CLOSED flag gets set\nunconditionally in ceph_sock_state_change().\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Sage Weil \u003csage@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "54942c5326f039a40c407a251175cd3925ce2951",
      "tree": "18d7ff6bda683e39ce7d6a468c7c6753deb116a1",
      "parents": [
        "eb8c5642db57af9577ebfea7ff9e96eadbf596b8"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Wed Jun 20 21:53:53 2012 -0500"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:27 2012 -0800"
      },
      "message": "libceph: don\u0027t change socket state on sock event\n\n(cherry picked from commit 188048bce311ee41e5178bc3255415d0eae28423)\n\nCurrently the socket state change event handler records an error\nmessage on a connection to distinguish a close while connecting from\na close while a connection was already established.\n\nChanging connection information during handling of a socket event is\nnot very clean, so instead move this assignment inside con_work(),\nwhere it can be done during normal connection-level processing (and\nunder protection of the connection mutex as well).\n\nMove the handling of a socket closed event up to the top of the\nprocessing loop in con_work(); there\u0027s no point in handling backoff\netc. if we have a newly-closed socket to take care of.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Sage Weil \u003csage@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "eb8c5642db57af9577ebfea7ff9e96eadbf596b8",
      "tree": "329a1bcd8af8036db9941af76df4f5dec68aba70",
      "parents": [
        "f8920642ec1913872f1af07aa8bcb3570bf6ec77"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Wed Jun 20 21:53:53 2012 -0500"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:27 2012 -0800"
      },
      "message": "libceph: SOCK_CLOSED is a flag, not a state\n\n(cherry picked from commit a8d00e3cdef4c1c4f194414b72b24cd995439a05)\n\nThe following commit changed it so SOCK_CLOSED bit was stored in\na connection\u0027s new \"flags\" field rather than its \"state\" field.\n\n    libceph: start separating connection flags from state\n    commit 928443cd\n\nThat bit is used in con_close_socket() to protect against setting an\nerror message more than once in the socket event handler function.\n\nUnfortunately, the field being operated on in that function was not\nupdated to be \"flags\" as it should have been.  This fixes that\nerror.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Sage Weil \u003csage@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "f8920642ec1913872f1af07aa8bcb3570bf6ec77",
      "tree": "14438e4819573dd64faf0c204a358d5865d8e23d",
      "parents": [
        "67e5007aca705782360373d36613827ebe9e2f36"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Mon Jun 11 14:57:13 2012 -0500"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:26 2012 -0800"
      },
      "message": "libceph: don\u0027t use bio_iter as a flag\n\n(cherry picked from commit abdaa6a849af1d63153682c11f5bbb22dacb1f6b)\n\nRecently a bug was fixed in which the bio_iter field in a ceph\nmessage was not being properly re-initialized when a message got\nre-transmitted:\n    commit 43643528cce60ca184fe8197efa8e8da7c89a037\n    Author: Yan, Zheng \u003czheng.z.yan@intel.com\u003e\n    rbd: Clear ceph_msg-\u003ebio_iter for retransmitted message\n\nWe are now only initializing the bio_iter field when we are about to\nstart to write message data (in prepare_write_message_data()),\nrather than every time we are attempting to write any portion of the\nmessage data (in write_partial_msg_pages()).  This means we no\nlonger need to use the msg-\u003ebio_iter field as a flag.\n\nSo just don\u0027t do that any more.  Trust prepare_write_message_data()\nto ensure msg-\u003ebio_iter is properly initialized, every time we are\nabout to begin writing (or re-writing) a message\u0027s bio data.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Sage Weil \u003csage@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "67e5007aca705782360373d36613827ebe9e2f36",
      "tree": "963aa49fd34ec6b45ea4a92304ec12d1ef52e89f",
      "parents": [
        "ec53635e8f11ddf452f69d93eb562c3c5eada75f"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Mon Jun 11 14:57:13 2012 -0500"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:26 2012 -0800"
      },
      "message": "libceph: move init of bio_iter\n\n(cherry picked from commit 572c588edadaa3da3992bd8a0fed830bbcc861f8)\n\nIf a message has a non-null bio pointer, its bio_iter field is\ninitialized in write_partial_msg_pages() if this has not been done\nalready.  This is really a one-time setup operation for sending a\nmessage\u0027s (bio) data, so move that initialization code into\nprepare_write_message_data() which serves that purpose.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Sage Weil \u003csage@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "ec53635e8f11ddf452f69d93eb562c3c5eada75f",
      "tree": "b24f29c2eb6c8bea4ecc810dcd8ba5338bc85520",
      "parents": [
        "3b17b0bb2b1dcfa3e8aee9ce7ee5c239b1109b72"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Mon Jun 11 14:57:13 2012 -0500"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:26 2012 -0800"
      },
      "message": "libceph: move init_bio_*() functions up\n\n(cherry picked from commit df6ad1f97342ebc4270128222e896541405eecdb)\n\nMove init_bio_iter() and iter_bio_next() up in their source file so\nthe\u0027ll be defined before they\u0027re needed.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Sage Weil \u003csage@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "3b17b0bb2b1dcfa3e8aee9ce7ee5c239b1109b72",
      "tree": "7c8a643b3726250e1b4558af067041db318e53eb",
      "parents": [
        "3c968ed12fad908a5d3676b8d3150b9ac167841c"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Mon Jun 11 14:57:13 2012 -0500"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:26 2012 -0800"
      },
      "message": "libceph: don\u0027t mark footer complete before it is\n\n(cherry picked from commit fd154f3c75465abd83b7a395033e3755908a1e6e)\n\nThis is a nit, but prepare_write_message() sets the FOOTER_COMPLETE\nflag before the CRC for the data portion (recorded in the footer)\nhas been completely computed.  Hold off setting the complete flag\nuntil we\u0027ve decided it\u0027s ready to send.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Sage Weil \u003csage@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "3c968ed12fad908a5d3676b8d3150b9ac167841c",
      "tree": "530e7165bb7b972f0de3cb8f5b4a65bd0f2d199e",
      "parents": [
        "4ecff48cef44be80eccfa0b3864d55f446006dc5"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Mon Jun 11 14:57:13 2012 -0500"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:26 2012 -0800"
      },
      "message": "libceph: encapsulate advancing msg page\n\n(cherry picked from commit 84ca8fc87fcf4ab97bb8acdb59bf97bb4820cb14)\n\nIn write_partial_msg_pages(), once all the data from a page has been\nsent we advance to the next one.  Put the code that takes care of\nthis into its own function.\n\nWhile modifying write_partial_msg_pages(), make its local variable\n\"in_trail\" be Boolean, and use the local variable \"msg\" (which is\njust the connection\u0027s current out_msg pointer) consistently.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Sage Weil \u003csage@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "4ecff48cef44be80eccfa0b3864d55f446006dc5",
      "tree": "5692002e1dddc870fcc04aa3f53c418256ffb2aa",
      "parents": [
        "9021a42c794bf96156be9ad556ef707814a361ff"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Mon Jun 11 14:57:13 2012 -0500"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:25 2012 -0800"
      },
      "message": "libceph: encapsulate out message data setup\n\n(cherry picked from commit 739c905baa018c99003564ebc367d93aa44d4861)\n\nMove the code that prepares to write the data portion of a message\ninto its own function.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Sage Weil \u003csage@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "9021a42c794bf96156be9ad556ef707814a361ff",
      "tree": "54475c6baca932d1eb1272038a380a5e474e8e52",
      "parents": [
        "1c623b046a6c72666d81afa004f8bf7f70cd4391"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Thu Jun 21 12:49:23 2012 -0700"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:25 2012 -0800"
      },
      "message": "libceph: drop ceph_con_get/put helpers and nref member\n\n(cherry picked from commit d59315ca8c0de00df9b363f94a2641a30961ca1c)\n\nThese are no longer used.  Every ceph_connection instance is embedded in\nanother structure, and refcounts manipulated via the get/put ops.\n\nSigned-off-by: Sage Weil \u003csage@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "1c623b046a6c72666d81afa004f8bf7f70cd4391",
      "tree": "8fa31cb8a39ff8ec6abf75013662797345f95653",
      "parents": [
        "8124d55a2d2c8d738c6ac5b95e6171fe3d1b5af3"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Thu Jun 21 12:47:08 2012 -0700"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:25 2012 -0800"
      },
      "message": "libceph: use con get/put methods\n\n(cherry picked from commit 36eb71aa57e6a33d61fd90a2fd87f00c6844bc86)\n\nThe ceph_con_get/put() helpers manipulate the embedded con ref\ncount, which isn\u0027t used now that ceph_connections are embedded in\nother structures.\n\nSigned-off-by: Sage Weil \u003csage@inktank.com\u003e\nReviewed-by: Alex Elder \u003celder@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "8124d55a2d2c8d738c6ac5b95e6171fe3d1b5af3",
      "tree": "a34dd9e393a2bd8ca5d0f98a4fdf91134a0651b3",
      "parents": [
        "fccbf066b35a05606cdb96eb574eaf310c422125"
      ],
      "author": {
        "name": "Dan Carpenter",
        "email": "dan.carpenter@oracle.com",
        "time": "Tue Jun 19 08:52:33 2012 -0500"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:25 2012 -0800"
      },
      "message": "libceph: fix NULL dereference in reset_connection()\n\n(cherry picked from commit 26ce171915f348abd1f41da1ed139d93750d987f)\n\nWe dereference \"con-\u003ein_msg\" on the line after it was set to NULL.\n\nSigned-off-by: Dan Carpenter \u003cdan.carpenter@oracle.com\u003e\nReviewed-by: Alex Elder \u003celder@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "fccbf066b35a05606cdb96eb574eaf310c422125",
      "tree": "e0c0b8e93f49891c1af5bcc548892a13d204bb06",
      "parents": [
        "f4d29a959aa619f3d46e2b685cfb8acac41503db"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Sat Jun 09 14:19:21 2012 -0700"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:25 2012 -0800"
      },
      "message": "libceph: transition socket state prior to actual connect\n\n(cherry picked from commit 89a86be0ce20022f6ede8bccec078dbb3d63caaa)\n\nOnce we call -\u003econnect(), we are racing against the actual\nconnection, and a subsequent transition from CONNECTING -\u003e\nCONNECTED.  Set the state to CONNECTING before that, under the\nprotection of the mutex, to avoid the race.\n\nThis was introduced in 928443cd9644e7cfd46f687dbeffda2d1a357ff9,\nwith the original socket state code.\n\nSigned-off-by: Sage Weil \u003csage@inktank.com\u003e\nReviewed-by: Alex Elder \u003celder@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "f4d29a959aa619f3d46e2b685cfb8acac41503db",
      "tree": "58c304c854c909c6143a2be3055353db624e3dc3",
      "parents": [
        "6b71f61c321b1fe8d35b75ab573ff46c51e59acc"
      ],
      "author": {
        "name": "Xi Wang",
        "email": "xi.wang@gmail.com",
        "time": "Wed Jun 06 19:35:55 2012 -0500"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:24 2012 -0800"
      },
      "message": "libceph: fix overflow in osdmap_apply_incremental()\n\n(cherry picked from commit a5506049500b30dbc5edb4d07a3577477c1f3643)\n\nOn 32-bit systems, a large `pglen\u0027 would overflow `pglen*sizeof(u32)\u0027\nand bypass the check ceph_decode_need(p, end, pglen*sizeof(u32), bad).\nIt would also overflow the subsequent kmalloc() size, leading to\nout-of-bounds write.\n\nSigned-off-by: Xi Wang \u003cxi.wang@gmail.com\u003e\nReviewed-by: Alex Elder \u003celder@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "6b71f61c321b1fe8d35b75ab573ff46c51e59acc",
      "tree": "8cf3da5771f2fb1d98fdaa84bde7ceeab4056630",
      "parents": [
        "c66a9c7c10955499d96df63ffd87feaee6b01754"
      ],
      "author": {
        "name": "Xi Wang",
        "email": "xi.wang@gmail.com",
        "time": "Wed Jun 06 19:35:55 2012 -0500"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:24 2012 -0800"
      },
      "message": "libceph: fix overflow in osdmap_decode()\n\n(cherry picked from commit e91a9b639a691e0982088b5954eaafb5a25c8f1c)\n\nOn 32-bit systems, a large `n\u0027 would overflow `n * sizeof(u32)\u0027 and bypass\nthe check ceph_decode_need(p, end, n * sizeof(u32), bad).  It would also\noverflow the subsequent kmalloc() size, leading to out-of-bounds write.\n\nSigned-off-by: Xi Wang \u003cxi.wang@gmail.com\u003e\nReviewed-by: Alex Elder \u003celder@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "c66a9c7c10955499d96df63ffd87feaee6b01754",
      "tree": "4276bd716521f0a4c14ed641aab6d2700309bf2c",
      "parents": [
        "ce4516fbb42d2ad5adba4699ebc1703d4e08e821"
      ],
      "author": {
        "name": "Xi Wang",
        "email": "xi.wang@gmail.com",
        "time": "Wed Jun 06 19:35:55 2012 -0500"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:24 2012 -0800"
      },
      "message": "libceph: fix overflow in __decode_pool_names()\n\n(cherry picked from commit ad3b904c07dfa88603689bf9a67bffbb9b99beb5)\n\n`len\u0027 is read from network and thus needs validation.  Otherwise a\nlarge `len\u0027 would cause out-of-bounds access via the memcpy() call.\nIn addition, len \u003d 0xffffffff would overflow the kmalloc() size,\nleading to out-of-bounds write.\n\nThis patch adds a check of `len\u0027 via ceph_decode_need().  Also use\nkstrndup rather than kmalloc/memcpy.\n\n[elder@inktank.com: added -ENOMEM return for null kstrndup() result]\n\nSigned-off-by: Xi Wang \u003cxi.wang@gmail.com\u003e\nReviewed-by: Alex Elder \u003celder@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "ce4516fbb42d2ad5adba4699ebc1703d4e08e821",
      "tree": "19b4f581d776e60440b57de8400a976c4facddd8",
      "parents": [
        "ae048538ab62c31f67d42e00a3183b8870809a3c"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Fri Jun 01 14:56:43 2012 -0500"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:24 2012 -0800"
      },
      "message": "libceph: make ceph_con_revoke_message() a msg op\n\n(cherry picked from commit 8921d114f5574c6da2cdd00749d185633ecf88f3)\n\nceph_con_revoke_message() is passed both a message and a ceph\nconnection.  A ceph_msg allocated for incoming messages on a\nconnection always has a pointer to that connection, so there\u0027s no\nneed to provide the connection when revoking such a message.\n\nNote that the existing logic does not preclude the message supplied\nbeing a null/bogus message pointer.  The only user of this interface\nis the OSD client, and the only value an osd client passes is a\nrequest\u0027s r_reply field.  That is always non-null (except briefly in\nan error path in ceph_osdc_alloc_request(), and that drops the\nonly reference so the request won\u0027t ever have a reply to revoke).\nSo we can safely assume the passed-in message is non-null, but add a\nBUG_ON() to make it very obvious we are imposing this restriction.\n\nRename the function ceph_msg_revoke_incoming() to reflect that it is\nreally an operation on an incoming message.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Sage Weil \u003csage@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "ae048538ab62c31f67d42e00a3183b8870809a3c",
      "tree": "f77272ada51185c3892dab22dba5775b827be59c",
      "parents": [
        "bfd357201d3ffc6cc621e4c69fd47e7d457e5f3a"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Fri Jun 01 14:56:43 2012 -0500"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:24 2012 -0800"
      },
      "message": "libceph: make ceph_con_revoke() a msg operation\n\n(cherry picked from commit 6740a845b2543cc46e1902ba21bac743fbadd0dc)\n\nceph_con_revoke() is passed both a message and a ceph connection.\nNow that any message associated with a connection holds a pointer\nto that connection, there\u0027s no need to provide the connection when\nrevoking a message.\n\nThis has the added benefit of precluding the possibility of the\nproviding the wrong connection pointer.  If the message\u0027s connection\npointer is null, it is not being tracked by any connection, so\nrevoking it is a no-op.  This is supported as a convenience for\nupper layers, so they can revoke a message that is not actually\n\"in flight.\"\n\nRename the function ceph_msg_revoke() to reflect that it is really\nan operation on a message, not a connection.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Sage Weil \u003csage@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "bfd357201d3ffc6cc621e4c69fd47e7d457e5f3a",
      "tree": "64f63fc3f2d0da1ac2abc43e095111fa9332f9c3",
      "parents": [
        "e84e066e5c8c858d3954b2ef1da25c14309e4cef"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Mon Jun 04 14:43:33 2012 -0500"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:23 2012 -0800"
      },
      "message": "libceph: have messages take a connection reference\n\n(cherry picked from commit 92ce034b5a740046cc643a21ea21eaad589e0043)\n\nThere are essentially two types of ceph messages: incoming and\noutgoing.  Outgoing messages are always allocated via ceph_msg_new(),\nand at the time of their allocation they are not associated with any\nparticular connection.  Incoming messages are always allocated via\nceph_con_in_msg_alloc(), and they are initially associated with the\nconnection from which incoming data will be placed into the message.\n\nWhen an outgoing message gets sent, it becomes associated with a\nconnection and remains that way until the message is successfully\nsent.  The association of an incoming message goes away at the point\nit is sent to an upper layer via a con-\u003eops-\u003edispatch method.\n\nThis patch implements reference counting for all ceph messages, such\nthat every message holds a reference (and a pointer) to a connection\nif and only if it is associated with that connection (as described\nabove).\n\nFor background, here is an explanation of the ceph message\nlifecycle, emphasizing when an association exists between a message\nand a connection.\n\nOutgoing Messages\nAn outgoing message is \"owned\" by its allocator, from the time it is\nallocated in ceph_msg_new() up to the point it gets queued for\nsending in ceph_con_send().  Prior to that point the message\u0027s\nmsg-\u003econ pointer is null; at the point it is queued for sending its\nmessage pointer is assigned to refer to the connection.  At that\ntime the message is inserted into a connection\u0027s out_queue list.\n\nWhen a message on the out_queue list has been sent to the socket\nlayer to be put on the wire, it is transferred out of that list and\ninto the connection\u0027s out_sent list.  At that point it is still owned\nby the connection, and will remain so until an acknowledgement is\nreceived from the recipient that indicates the message was\nsuccessfully transferred.  When such an acknowledgement is received\n(in process_ack()), the message is removed from its list (in\nceph_msg_remove()), at which point it is no longer associated with\nthe connection.\n\nSo basically, any time a message is on one of a connection\u0027s lists,\nit is associated with that connection.  Reference counting outgoing\nmessages can thus be done at the points a message is added to the\nout_queue (in ceph_con_send()) and the point it is removed from\neither its two lists (in ceph_msg_remove())--at which point its\nconnection pointer becomes null.\n\nIncoming Messages\nWhen an incoming message on a connection is getting read (in\nread_partial_message()) and there is no message in con-\u003ein_msg,\na new one is allocated using ceph_con_in_msg_alloc().  At that\npoint the message is associated with the connection.  Once that\nmessage has been completely and successfully read, it is passed to\nupper layer code using the connection\u0027s con-\u003eops-\u003edispatch method.\nAt that point the association between the message and the connection\nno longer exists.\n\nReference counting of connections for incoming messages can be done\nby taking a reference to the connection when the message gets\nallocated, and releasing that reference when it gets handed off\nusing the dispatch method.\n\nWe should never fail to get a connection reference for a\nmessage--the since the caller should already hold one.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Sage Weil \u003csage@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "e84e066e5c8c858d3954b2ef1da25c14309e4cef",
      "tree": "fa927a404b1bdd81fb9102824549cc04dee8f875",
      "parents": [
        "35067a20685e5f51513c3633256e658fc71e847e"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Fri Jun 01 14:56:43 2012 -0500"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:23 2012 -0800"
      },
      "message": "libceph: have messages point to their connection\n\n(cherry picked from commit 38941f8031bf042dba3ced6394ba3a3b16c244ea)\n\nWhen a ceph message is queued for sending it is placed on a list of\npending messages (ceph_connection-\u003eout_queue).  When they are\nactually sent over the wire, they are moved from that list to\nanother (ceph_connection-\u003eout_sent).  When acknowledgement for the\nmessage is received, it is removed from the sent messages list.\n\nDuring that entire time the message is \"in the possession\" of a\nsingle ceph connection.  Keep track of that connection in the\nmessage.  This will be used in the next patch (and is a helpful\nbit of information for debugging anyway).\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Sage Weil \u003csage@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "35067a20685e5f51513c3633256e658fc71e847e",
      "tree": "5c1837a2a781a18c8aaa458cdce9a0e300a188d0",
      "parents": [
        "6880138c03448b3c375a3d7a8ef6acd688e6fb40"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Mon Jun 04 14:43:32 2012 -0500"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:23 2012 -0800"
      },
      "message": "libceph: tweak ceph_alloc_msg()\n\n(cherry picked from commit 1c20f2d26795803fc4f5155fe4fca5717a5944b6)\n\nThe function ceph_alloc_msg() is only used to allocate a message\nthat will be assigned to a connection\u0027s in_msg pointer.  Rename the\nfunction so this implied usage is more clear.\n\nIn addition, make that assignment inside the function (again, since\nthat\u0027s precisely what it\u0027s intended to be used for).  This allows us\nto return what is now provided via the passed-in address of a \"skip\"\nvariable.  The return type is now Boolean to be explicit that there\nare only two possible outcomes.\n\nMake sure the result of an -\u003ealloc_msg method call always sets the\nvalue of *skip properly.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Sage Weil \u003csage@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "6880138c03448b3c375a3d7a8ef6acd688e6fb40",
      "tree": "32fcab0d28584b1ba13756cbdfd4f870065ecd69",
      "parents": [
        "9403ae33bf946342b23cfe3dbf3e4c9b86860c97"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Sat May 26 23:26:43 2012 -0500"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:23 2012 -0800"
      },
      "message": "libceph: fully initialize connection in con_init()\n\n(cherry picked from commit 1bfd89f4e6e1adc6a782d94aa5d4c53be1e404d7)\n\nMove the initialization of a ceph connection\u0027s private pointer,\noperations vector pointer, and peer name information into\nceph_con_init().  Rearrange the arguments so the connection pointer\nis first.  Hide the byte-swapping of the peer entity number inside\nceph_con_init()\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Sage Weil \u003csage@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "9403ae33bf946342b23cfe3dbf3e4c9b86860c97",
      "tree": "54a62262c4c310b065f28a716df47c511e426ef6",
      "parents": [
        "a2b87615e2acfb851ec43603d0061f631381301a"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Sat May 26 23:26:43 2012 -0500"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:23 2012 -0800"
      },
      "message": "libceph: init monitor connection when opening\n\n(cherry picked from commit 20581c1faf7b15ae1f8b80c0ec757877b0b53151)\n\nHold off initializing a monitor client\u0027s connection until just\nbefore it gets opened for use.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Sage Weil \u003csage@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "a2b87615e2acfb851ec43603d0061f631381301a",
      "tree": "29b5330ac144a2a44fe04e06f2b03346b4e766dd",
      "parents": [
        "31a84d83433edc79151e28762c1992c0708b222c"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Thu May 31 20:27:50 2012 -0700"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:22 2012 -0800"
      },
      "message": "libceph: drop connection refcounting for mon_client\n\n(cherry picked from commit ec87ef4309d33bd9c87a53bb5152a86ae7a65f25)\n\nAll references to the embedded ceph_connection come from the msgr\nworkqueue, which is drained prior to mon_client destruction.  That\nmeans we can ignore con refcounting entirely.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\nReviewed-by: Alex Elder \u003celder@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "31a84d83433edc79151e28762c1992c0708b222c",
      "tree": "4be92156c4e1ee9c363f83fc6c2596cf608b8199",
      "parents": [
        "51588ed26f489e50bfd2359d55abcb4d907149bc"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Sat May 26 23:26:43 2012 -0500"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:22 2012 -0800"
      },
      "message": "libceph: embed ceph connection structure in mon_client\n\n(cherry picked from commit 67130934fb579fdf0f2f6d745960264378b57dc8)\n\nA monitor client has a pointer to a ceph connection structure in it.\nThis is the only one of the three ceph client types that do it this\nway; the OSD and MDS clients embed the connection into their main\nstructures.  There is always exactly one ceph connection for a\nmonitor client, so there is no need to allocate it separate from the\nmonitor client structure.\n\nSo switch the ceph_mon_client structure to embed its\nceph_connection structure.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Sage Weil \u003csage@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "51588ed26f489e50bfd2359d55abcb4d907149bc",
      "tree": "b4f266e3164be1b650c89718af7048743f903309",
      "parents": [
        "d39319ee9b0381848a7e2261d53914e2732191d7"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Tue May 29 11:04:58 2012 -0500"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:22 2012 -0800"
      },
      "message": "libceph: set CLOSED state bit in con_init\n\n(cherry picked from commit a5988c490ef66cb04ea2f610681949b25c773b3c)\n\nOnce a connection is fully initialized, it is really in a CLOSED\nstate, so make that explicit by setting the bit in its state field.\n\nIt is possible for a connection in NEGOTIATING state to get a\nfailure, leading to ceph_fault() and ultimately ceph_con_close().\nClear that bits if it is set in that case, to reflect that the\nconnection truly is closed and is no longer participating in a\nconnect sequence.\n\nIssue a warning if ceph_con_open() is called on a connection that\nis not in CLOSED state.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Sage Weil \u003csage@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "d39319ee9b0381848a7e2261d53914e2732191d7",
      "tree": "b8ca102f48696f3f734fad41051fc6d814ff21da",
      "parents": [
        "0bcd15777405bf024a3ec591731582f7263ea1c0"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Sat May 26 23:26:43 2012 -0500"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:22 2012 -0800"
      },
      "message": "libceph: provide osd number when creating osd\n\n(cherry picked from commit e10006f807ffc4d5b1d861305d18d9e8145891ca)\n\nPass the osd number to the create_osd() routine, and move the\ninitialization of fields that depend on it therein.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Sage Weil \u003csage@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "0bcd15777405bf024a3ec591731582f7263ea1c0",
      "tree": "e6e909ce1c506b160a4f8121701681fd5a697778",
      "parents": [
        "bc327474a0c9f3477be61b2d3e33833ef7b01bf9"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Tue May 22 22:15:49 2012 -0500"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:22 2012 -0800"
      },
      "message": "libceph: start tracking connection socket state\n\n(cherry picked from commit ce2c8903e76e690846a00a0284e4bd9ee954d680)\n\nStart explicitly keeping track of the state of a ceph connection\u0027s\nsocket, separate from the state of the connection itself.  Create\nplaceholder functions to encapsulate the state transitions.\n\n    --------\n    | NEW* |  transient initial state\n    --------\n        | con_sock_state_init()\n        v\n    ----------\n    | CLOSED |  initialized, but no socket (and no\n    ----------  TCP connection)\n     ^      \\\n     |       \\ con_sock_state_connecting()\n     |        ----------------------\n     |                              \\\n     + con_sock_state_closed()       \\\n     |\\                               \\\n     | \\                               \\\n     |  -----------                     \\\n     |  | CLOSING |  socket event;       \\\n     |  -----------  await close          \\\n     |       ^                            |\n     |       |                            |\n     |       + con_sock_state_closing()   |\n     |      / \\                           |\n     |     /   ---------------            |\n     |    /                   \\           v\n     |   /                    --------------\n     |  /    -----------------| CONNECTING |  socket created, TCP\n     |  |   /                 --------------  connect initiated\n     |  |   | con_sock_state_connected()\n     |  |   v\n    -------------\n    | CONNECTED |  TCP connection established\n    -------------\n\nMake the socket state an atomic variable, reinforcing that it\u0027s a\ndistinct transtion with no possible \"intermediate/both\" states.\nThis is almost certainly overkill at this point, though the\ntransitions into CONNECTED and CLOSING state do get called via\nsocket callback (the rest of the transitions occur with the\nconnection mutex held).  We can back out the atomicity later.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Sage Weil\u003csage@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "bc327474a0c9f3477be61b2d3e33833ef7b01bf9",
      "tree": "fabf603a635c91daf1afd423f48fbc7574fa0400",
      "parents": [
        "d910c114b6da5b78c88889eff1b3f9e83c6f81cb"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Tue May 22 11:41:43 2012 -0500"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:21 2012 -0800"
      },
      "message": "libceph: start separating connection flags from state\n\n(cherry picked from commit 928443cd9644e7cfd46f687dbeffda2d1a357ff9)\n\nA ceph_connection holds a mixture of connection state (as in \"state\nmachine\" state) and connection flags in a single \"state\" field.  To\nmake the distinction more clear, define a new \"flags\" field and use\nit rather than the \"state\" field to hold Boolean flag values.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Sage Weil\u003csage@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "d910c114b6da5b78c88889eff1b3f9e83c6f81cb",
      "tree": "3bef4800c3888c84e61436de727ddba440eeb33b",
      "parents": [
        "4874ba9c07e2fa418cd7272d657f5cc883efd35a"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Sat May 26 23:26:43 2012 -0500"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:21 2012 -0800"
      },
      "message": "libceph: embed ceph messenger structure in ceph_client\n\n(cherry picked from commit 15d9882c336db2db73ccf9871ae2398e452f694c)\n\nA ceph client has a pointer to a ceph messenger structure in it.\nThere is always exactly one ceph messenger for a ceph client, so\nthere is no need to allocate it separate from the ceph client\nstructure.\n\nSwitch the ceph_client structure to embed its ceph_messenger\nstructure.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Yehuda Sadeh \u003cyehuda@inktank.com\u003e\nReviewed-by: Sage Weil \u003csage@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "4874ba9c07e2fa418cd7272d657f5cc883efd35a",
      "tree": "609dcda18f69095b25ec649f854462fb13b410af",
      "parents": [
        "f5e79a443054452866bba4856ed243faf502d708"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Wed May 23 14:35:23 2012 -0500"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:21 2012 -0800"
      },
      "message": "libceph: rename kvec_reset and kvec_add functions\n\n(cherry picked from commit e22004235a900213625acd6583ac913d5a30c155)\n\nThe functions ceph_con_out_kvec_reset() and ceph_con_out_kvec_add()\nare entirely private functions, so drop the \"ceph_\" prefix in their\nname to make them slightly more wieldy.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Yehuda Sadeh \u003cyehuda@inktank.com\u003e\nReviewed-by: Sage Weil \u003csage@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "f5e79a443054452866bba4856ed243faf502d708",
      "tree": "a8e1559509c6f6f71c84b64d58476bae0a148441",
      "parents": [
        "809c58f1bd5fa3d3e9ff1d3614c00c1a1239abf1"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Tue May 22 11:41:43 2012 -0500"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:21 2012 -0800"
      },
      "message": "libceph: rename socket callbacks\n\n(cherry picked from commit 327800bdc2cb9b71f4b458ca07aa9d522668dde0)\n\nChange the names of the three socket callback functions to make it\nmore obvious they\u0027re specifically associated with a connection\u0027s\nsocket (not the ceph connection that uses it).\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Yehuda Sadeh \u003cyehuda@inktank.com\u003e\nReviewed-by: Sage Weil \u003csage@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "809c58f1bd5fa3d3e9ff1d3614c00c1a1239abf1",
      "tree": "b706507a913b80898d6fd4a870189c96763f3c1f",
      "parents": [
        "ac7a42681718cd7474cec70f198f0684ba7444eb"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Tue May 29 21:47:38 2012 -0500"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:21 2012 -0800"
      },
      "message": "libceph: kill bad_proto ceph connection op\n\n(cherry picked from commit 6384bb8b8e88a9c6bf2ae0d9517c2c0199177c34)\n\nNo code sets a bad_proto method in its ceph connection operations\nvector, so just get rid of it.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Yehuda Sadeh \u003cyehuda@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "ac7a42681718cd7474cec70f198f0684ba7444eb",
      "tree": "30312de527b0b0a602b29b5c9d9c925e48d7f463",
      "parents": [
        "e7fda85c9dab7396c5ed7345ab7c6fcdf4ffc366"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Tue May 22 11:41:43 2012 -0500"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:20 2012 -0800"
      },
      "message": "libceph: eliminate connection state \"DEAD\"\n\n(cherry picked from commit e5e372da9a469dfe3ece40277090a7056c566838)\n\nThe ceph connection state \"DEAD\" is never set and is therefore not\nneeded.  Eliminate it.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Yehuda Sadeh \u003cyehuda@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "e7fda85c9dab7396c5ed7345ab7c6fcdf4ffc366",
      "tree": "4295dee66c02db5d5e4b56e1b9e60fe675b602e7",
      "parents": [
        "9923ad77a69ab565af2746262989cc0340943668"
      ],
      "author": {
        "name": "Yan, Zheng",
        "email": "zheng.z.yan@intel.com",
        "time": "Mon May 28 14:44:30 2012 +0800"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:20 2012 -0800"
      },
      "message": "ceph: check PG_Private flag before accessing page-\u003eprivate\n\n(cherry picked from commit 28c0254ede13ab575d2df5c6585ed3d4817c3e6b)\n\nI got lots of NULL pointer dereference Oops when compiling kernel on ceph.\nThe bug is because the kernel page migration routine replaces some pages\nin the page cache with new pages, these new pages\u0027 private can be non-zero.\n\nSigned-off-by: Zheng Yan \u003czheng.z.yan@intel.com\u003e\nSigned-off-by: Sage Weil \u003csage@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "9923ad77a69ab565af2746262989cc0340943668",
      "tree": "d72bc1c24fa9093177907b4e47931b9c0cc787a5",
      "parents": [
        "6448acf6e6b603c4fa21697931cd400ebee21d4a"
      ],
      "author": {
        "name": "Yan, Zheng",
        "email": "zheng.z.yan@intel.com",
        "time": "Wed Jun 06 09:15:33 2012 -0500"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:10 2012 -0800"
      },
      "message": "rbd: Fix ceph_snap_context size calculation\n\n(cherry picked from commit f9f9a1904467816452fc70740165030e84c2c659)\n\nceph_snap_context-\u003esnaps is an u64 array\n\nSigned-off-by: Zheng Yan \u003czheng.z.yan@intel.com\u003e\nReviewed-by: Alex Elder \u003celder@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "6448acf6e6b603c4fa21697931cd400ebee21d4a",
      "tree": "e0c2f7588518946fae0d302c1ff81af81e2b41cf",
      "parents": [
        "45739514727c294e843269d515b952d5dbd911bf"
      ],
      "author": {
        "name": "Josh Durgin",
        "email": "josh.durgin@dreamhost.com",
        "time": "Mon Nov 21 13:04:42 2011 -0800"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:10 2012 -0800"
      },
      "message": "rbd: store snapshot id instead of index\n\n(cherry picked from commit 77dfe99fe3cb0b2b0545e19e2d57b7a9134ee3c0)\n\nWhen a device was open at a snapshot, and snapshots were deleted or\nadded, data from the wrong snapshot could be read. Instead of\nassuming the snap context is constant, store the actual snap id when\nthe device is initialized, and rely on the OSDs to signal an error\nif we try reading from a snapshot that was deleted.\n\nSigned-off-by: Josh Durgin \u003cjosh.durgin@dreamhost.com\u003e\nReviewed-by: Alex Elder \u003celder@dreamhost.com\u003e\nReviewed-by: Yehuda Sadeh \u003cyehuda@hq.newdream.net\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "45739514727c294e843269d515b952d5dbd911bf",
      "tree": "96021d986c838adf85f6799d40e3583ce026eddf",
      "parents": [
        "095cb2142dfb10daea5a3351ed9646d3178a6823"
      ],
      "author": {
        "name": "Josh Durgin",
        "email": "josh.durgin@dreamhost.com",
        "time": "Mon Dec 05 10:47:13 2011 -0800"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:10 2012 -0800"
      },
      "message": "rbd: protect read of snapshot sequence number\n\n(cherry picked from commit 403f24d3d51760a8b9368d595fa5f48c309f1a0f)\n\nThis is updated whenever a snapshot is added or deleted, and the\nsnapc pointer is changed with every refresh of the header.\n\nSigned-off-by: Josh Durgin \u003cjosh.durgin@dreamhost.com\u003e\nReviewed-by: Alex Elder \u003celder@dreamhost.com\u003e\nReviewed-by: Yehuda Sadeh \u003cyehuda@hq.newdream.net\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "095cb2142dfb10daea5a3351ed9646d3178a6823",
      "tree": "32290c2d2277d3a95e3f40b1825295ab3dd215e9",
      "parents": [
        "49da293c7dc4401c2c7963a2c70f633b1c8fa8c5"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Wed Apr 04 13:35:44 2012 -0500"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:10 2012 -0800"
      },
      "message": "rbd: don\u0027t hold spinlock during messenger flush\n\n(cherry picked from commit cd9d9f5df6098c50726200d4185e9e8da32785b3)\n\nA recent change made changes to the rbd_client_list be protected by\na spinlock.  Unfortunately in rbd_put_client(), the lock is taken\nbefore possibly dropping the last reference to an rbd_client, and on\nthe last reference that eventually calls flush_workqueue() which can\nsleep.\n\nThe problem was flagged by a debug spinlock warning:\n    BUG: spinlock wrong CPU on CPU#3, rbd/27814\n\nThe solution is to move the spinlock acquisition and release inside\nrbd_client_release(), which is the spot where it\u0027s really needed for\nprotecting the removal of the rbd_client from the client list.\n\nSigned-off-by: Alex Elder \u003celder@dreamhost.com\u003e\nReviewed-by: Sage Weil \u003csage@newdream.net\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "49da293c7dc4401c2c7963a2c70f633b1c8fa8c5",
      "tree": "7e61b4bfd7e2c192ba47b8db4866f3f9e7c039c2",
      "parents": [
        "21cbad59b07693104dda76ee4afef41302b2b8fb"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Tue Jul 10 11:53:34 2012 -0700"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:10 2012 -0800"
      },
      "message": "libceph: fix messenger retry\n\n(cherry picked from commit 5bdca4e0768d3e0f4efa43d9a2cc8210aeb91ab9)\n\nIn ancient times, the messenger could both initiate and accept connections.\nAn artifact if that was data structures to store/process an incoming\nceph_msg_connect request and send an outgoing ceph_msg_connect_reply.\nSadly, the negotiation code was referencing those structures and ignoring\nimportant information (like the peer\u0027s connect_seq) from the correct ones.\n\nAmong other things, this fixes tight reconnect loops where the server sends\nRETRY_SESSION and we (the client) retries with the same connect_seq as last\ntime.  This bug pretty easily triggered by injecting socket failures on the\nMDS and running some fs workload like workunits/direct_io/test_sync_io.\n\nSigned-off-by: Sage Weil \u003csage@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "21cbad59b07693104dda76ee4afef41302b2b8fb",
      "tree": "abc235870afd39ee9a90ec98d923ad2d07c678a9",
      "parents": [
        "576e428b246271f0f078079c68a9f11679c7db8a"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Sun Jun 10 20:43:56 2012 -0700"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:09 2012 -0800"
      },
      "message": "libceph: flush msgr queue during mon_client shutdown\n\n(cherry picked from commit f3dea7edd3d449fe7a6d402c1ce56a294b985261)\n(cherry picked from commit 642c0dbde32f34baa7886e988a067089992adc8f)\n\nWe need to flush the msgr workqueue during mon_client shutdown to\nensure that any work affecting our embedded ceph_connection is\nfinished so that we can be safely destroyed.\n\nPreviously, we were flushing the work queue after osd_client\nshutdown and before mon_client shutdown to ensure that any osd\nconnection refs to authorizers are flushed.  Remove the redundant\nflush, and document in the comment that the mon_client flush is\nneeded to cover that case as well.\n\nSigned-off-by: Sage Weil \u003csage@inktank.com\u003e\nReviewed-by: Alex Elder \u003celder@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "576e428b246271f0f078079c68a9f11679c7db8a",
      "tree": "147e2fb1c6899ddda780f84196581c6f6c0cba2a",
      "parents": [
        "acecca48781a79040dca822cf96d505904c282c3"
      ],
      "author": {
        "name": "Yan, Zheng",
        "email": "zheng.z.yan@intel.com",
        "time": "Wed Jun 06 19:35:55 2012 -0500"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:09 2012 -0800"
      },
      "message": "rbd: Clear ceph_msg-\u003ebio_iter for retransmitted message\n\n(cherry picked from commit 43643528cce60ca184fe8197efa8e8da7c89a037)\n(cherry picked from commit b132cf4c733f91bb4dd2277ea049243cf16e8b66)\n\nThe bug can cause NULL pointer dereference in write_partial_msg_pages\n\nSigned-off-by: Zheng Yan \u003czheng.z.yan@intel.com\u003e\nReviewed-by: Alex Elder \u003celder@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "acecca48781a79040dca822cf96d505904c282c3",
      "tree": "53dbd32dc578652bc989b2f29a40a432a307784a",
      "parents": [
        "40971fcf1578d743cde0272ad20539f5ea34725a"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Thu May 31 20:22:18 2012 -0700"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:09 2012 -0800"
      },
      "message": "libceph: use con get/put ops from osd_client\n\n(cherry picked from commit 0d47766f14211a73eaf54cab234db134ece79f49)\n\nThere were a few direct calls to ceph_con_{get,put}() instead of the con\nops from osd_client.c.  This is a bug since those ops aren\u0027t defined to\nbe ceph_con_get/put.\n\nThis breaks refcounting on the ceph_osd structs that contain the\nceph_connections, and could lead to all manner of strangeness.\n\nThe purpose of the -\u003eget and -\u003eput methods in a ceph connection are\nto allow the connection to indicate it has a reference to something\nexternal to the messaging system, *not* to indicate something\nexternal has a reference to the connection.\n\n[elder@inktank.com: added that last sentence]\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\nReviewed-by: Alex Elder \u003celder@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n(cherry picked from commit 88ed6ea0b295f8e2383d599a04027ec596cdf97b)\n"
    },
    {
      "commit": "40971fcf1578d743cde0272ad20539f5ea34725a",
      "tree": "a56cfebbb5155355bb053e8403f3f253c983c687",
      "parents": [
        "1c201dffa3f4ef8e53dca7bffb8987a43e3e9139"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Mon Jun 04 14:43:32 2012 -0500"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:09 2012 -0800"
      },
      "message": "libceph: osd_client: don\u0027t drop reply reference too early\n\n(cherry picked from commit ab8cb34a4b2f60281a4b18b1f1ad23bc2313d91b)\n\nIn ceph_osdc_release_request(), a reference to the r_reply message\nis dropped.  But just after that, that same message is revoked if it\nwas in use to receive an incoming reply.  Reorder these so we are\nsure we hold a reference until we\u0027re actually done with the message.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Sage Weil \u003csage@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n(cherry picked from commit 680584fab05efff732b5ae16ad601ba994d7b505)\n"
    },
    {
      "commit": "1c201dffa3f4ef8e53dca7bffb8987a43e3e9139",
      "tree": "0956508a8ec07169a20c7714477a1ca211da9bb6",
      "parents": [
        "15ba38ebcee664a5a5de57300ee721e0d65b2dd5"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Mon May 21 09:45:23 2012 -0700"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:09 2012 -0800"
      },
      "message": "libceph: fix pg_temp updates\n\n(cherry picked from commit 6bd9adbdf9ca6a052b0b7455ac67b925eb38cfad)\n\nUsually, we are adding pg_temp entries or removing them.  Occasionally they\nupdate.  In that case, osdmap_apply_incremental() was failing because the\nrbtree entry already exists.\n\nFix by removing the existing entry before inserting a new one.\n\nFixes http://tracker.newdream.net/issues/2446\n\nSigned-off-by: Sage Weil \u003csage@inktank.com\u003e\nReviewed-by: Alex Elder \u003celder@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "15ba38ebcee664a5a5de57300ee721e0d65b2dd5",
      "tree": "f88717a58c67b838ca063aa097e807a30e3be131",
      "parents": [
        "1d3df0e26616d97a798950eb5fb908b14b1839da"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Wed May 16 15:16:38 2012 -0500"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:08 2012 -0800"
      },
      "message": "libceph: avoid unregistering osd request when not registered\n\n(cherry picked from commit 35f9f8a09e1e88e31bd34a1e645ca0e5f070dd5c)\n\nThere is a race between two __unregister_request() callers: the\nreply path and the ceph_osdc_wait_request().  If we get a reply\n*and* the timeout expires at roughly the same time, both callers\nwill try to unregister the request, and the second one will do bad\nthings.\n\nSimply check if the request is still already unregistered; if so,\nreturn immediately and do nothing.\n\nFixes http://tracker.newdream.net/issues/2420\n\nSigned-off-by: Sage Weil \u003csage@inktank.com\u003e\nReviewed-by: Alex Elder \u003celder@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "1d3df0e26616d97a798950eb5fb908b14b1839da",
      "tree": "4be641c4f8d4a5695b85b99b3496130d69165e32",
      "parents": [
        "3f13447d2c90842c9ea5ceb6b4f8b8b7737f04da"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Wed May 16 15:16:39 2012 -0500"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:08 2012 -0800"
      },
      "message": "ceph: add auth buf in prepare_write_connect()\n\n(cherry picked from commit 3da54776e2c0385c32d143fd497a7f40a88e29dd)\n\nMove the addition of the authorizer buffer to a connection\u0027s\nout_kvec out of get_connect_authorizer() and into its caller.  This\nway, the caller--prepare_write_connect()--can avoid adding the\nconnect header to out_kvec before it has been fully initialized.\n\nPrior to this patch, it was possible for a connect header to be\nsent over the wire before the authorizer protocol or buffer length\nfields were initialized.  An authorizer buffer associated with that\nheader could also be queued to send only after the connection header\nthat describes it was on the wire.\n\nFixes http://tracker.newdream.net/issues/2424\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Sage Weil \u003csage@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "3f13447d2c90842c9ea5ceb6b4f8b8b7737f04da",
      "tree": "67c5a7e81ce5737a29ab0ac8e4d3e2313790a264",
      "parents": [
        "8d19055c84e89980a0e60604bd925bf7cf4cb9e4"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Wed May 16 15:16:39 2012 -0500"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:08 2012 -0800"
      },
      "message": "ceph: rename prepare_connect_authorizer()\n\n(cherry picked from commit dac1e716c60161867a47745bca592987ca3a9cb2)\n\nChange the name of prepare_connect_authorizer().  The next\npatch is going to make this function no longer add anything to the\nconnection\u0027s out_kvec, so it will no longer fit the pattern of\nthe rest of the prepare_connect_*() functions.\n\nIn addition, pass the address of a variable that will hold the\nauthorization protocol to use.  Move the assignment of that to the\nconnection\u0027s out_connect structure into prepare_write_connect().\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Sage Weil \u003csage@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "8d19055c84e89980a0e60604bd925bf7cf4cb9e4",
      "tree": "215315a62381ddd56e9ceec5fa85d82790b7d9c9",
      "parents": [
        "ed35fbcd3cf73dfbff59bf8c20c772925562bc45"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Wed May 16 15:16:39 2012 -0500"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:08 2012 -0800"
      },
      "message": "ceph: return pointer from prepare_connect_authorizer()\n\n(cherry picked from commit 729796be9190f57ca40ccca315e8ad34a1eb8fef)\n\nChange prepare_connect_authorizer() so it returns a pointer (or\npointer-coded error).\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Sage Weil \u003csage@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "ed35fbcd3cf73dfbff59bf8c20c772925562bc45",
      "tree": "7a93030aa0bd809eb111d339cd82a0c29b32be74",
      "parents": [
        "4f33c7ed3796a5078cd9eef0d3af4ebf8f7e1b99"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Wed May 16 15:16:39 2012 -0500"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:08 2012 -0800"
      },
      "message": "ceph: use info returned by get_authorizer\n\n(cherry picked from commit 8f43fb53894079bf0caab6e348ceaffe7adc651a)\n\nRather than passing a bunch of arguments to be filled in with the\ncontent of the ceph_auth_handshake buffer now returned by the\nget_authorizer method, just use the returned information in the\ncaller, and drop the unnecessary arguments.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Sage Weil \u003csage@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "4f33c7ed3796a5078cd9eef0d3af4ebf8f7e1b99",
      "tree": "04ad359931118b3023e230b48dbba1a2184e8ad4",
      "parents": [
        "83d28f7956228e0dd1774aed1096392d3bfc0597"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Wed May 16 15:16:39 2012 -0500"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:07 2012 -0800"
      },
      "message": "ceph: have get_authorizer methods return pointers\n\n(cherry picked from commit a3530df33eb91d787d08c7383a0a9982690e42d0)\n\nHave the get_authorizer auth_client method return a ceph_auth\npointer rather than an integer, pointer-encoding any returned\nerror value.  This is to pave the way for making use of the\nreturned value in an upcoming patch.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Sage Weil \u003csage@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "83d28f7956228e0dd1774aed1096392d3bfc0597",
      "tree": "c0d9780e35f34d0732bfbaa161f2ca3bd5f53768",
      "parents": [
        "018a2a13f3cb5e205618b1357124ff25eb3a8223"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Wed May 16 15:16:39 2012 -0500"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:07 2012 -0800"
      },
      "message": "ceph: ensure auth ops are defined before use\n\n(cherry picked from commit a255651d4cad89f1a606edd36135af892ada4f20)\n\nIn the create_authorizer method for both the mds and osd clients,\nthe auth_client-\u003eops pointer is blindly dereferenced.  There is no\nobvious guarantee that this pointer has been assigned.  And\nfurthermore, even if the ops pointer is non-null there is definitely\nno guarantee that the create_authorizer or destroy_authorizer\nmethods are defined.\n\nAdd checks in both routines to make sure they are defined (non-null)\nbefore use.  Add similar checks in a few other spots in these files\nwhile we\u0027re at it.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Sage Weil \u003csage@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "018a2a13f3cb5e205618b1357124ff25eb3a8223",
      "tree": "cdbe7ee5776a748574c31d42721b97870ac2fad1",
      "parents": [
        "0f56a54fced6bee6e56a8b84f9adb65a41032866"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Wed May 16 15:16:39 2012 -0500"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:07 2012 -0800"
      },
      "message": "ceph: messenger: reduce args to create_authorizer\n\n(cherry picked from commit 74f1869f76d043bad12ec03b4d5f04a8c3d1f157)\n\nMake use of the new ceph_auth_handshake structure in order to reduce\nthe number of arguments passed to the create_authorizor method in\nceph_auth_client_ops.  Use a local variable of that type as a\nshorthand in the get_authorizer method definitions.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Sage Weil \u003csage@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "0f56a54fced6bee6e56a8b84f9adb65a41032866",
      "tree": "fbe92f0375167e2f0b17ce0159b464a89cc667d4",
      "parents": [
        "33f0577a991d6d00805450ea29da5a91f6acd1a8"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Wed May 16 15:16:38 2012 -0500"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:07 2012 -0800"
      },
      "message": "ceph: define ceph_auth_handshake type\n\n(cherry picked from commit 6c4a19158b96ea1fb8acbe0c1d5493d9dcd2f147)\n\nThe definitions for the ceph_mds_session and ceph_osd both contain\nfive fields related only to \"authorizers.\"  Encapsulate those fields\ninto their own struct type, allowing for better isolation in some\nupcoming patches.\n\nFix the #includes in \"linux/ceph/osd_client.h\" to lay out their more\ncomplete canonical path.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Sage Weil \u003csage@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "33f0577a991d6d00805450ea29da5a91f6acd1a8",
      "tree": "cd649ef62a7c738b2ca8078d50eef6276a79fd0f",
      "parents": [
        "29e1a95eb5de3d6745e6eebb7d22dfaea437783c"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Wed May 16 15:16:38 2012 -0500"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:06 2012 -0800"
      },
      "message": "ceph: messenger: check return from get_authorizer\n\n(cherry picked from commit ed96af646011412c2bf1ffe860db170db355fae5)\n\nIn prepare_connect_authorizer(), a connection\u0027s get_authorizer\nmethod is called but ignores its return value.  This function can\nreturn an error, so check for it and return it if that ever occurs.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Sage Weil \u003csage@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "29e1a95eb5de3d6745e6eebb7d22dfaea437783c",
      "tree": "16524e923867f0f5c648e53a99b4a498df5efa95",
      "parents": [
        "59336e08468a9485e499b1449ebc3d68331233db"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Wed May 16 15:16:38 2012 -0500"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:06 2012 -0800"
      },
      "message": "ceph: messenger: rework prepare_connect_authorizer()\n\n(cherry picked from commit b1c6b9803f5491e94041e6da96bc9dec3870e792)\n\nChange prepare_connect_authorizer() so it returns without dropping\nthe connection mutex if the connection has no get_authorizer method.\n\nUse the symbolic CEPH_AUTH_UNKNOWN instead of 0 when assigning\nauthorization protocols.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Sage Weil \u003csage@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "59336e08468a9485e499b1449ebc3d68331233db",
      "tree": "84731369e7a200ab49f42fe484ed28e3b721398f",
      "parents": [
        "59a521ebc05d2bd826d19c4a9a6fb00c313f6a52"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Wed May 16 21:51:59 2012 -0500"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:06 2012 -0800"
      },
      "message": "ceph: messenger: check prepare_write_connect() result\n\n(cherry picked from commit 5a0f8fdd8a0ebe320952a388331dc043d7e14ced)\n\nprepare_write_connect() can return an error, but only one of its\ncallers checks for it.  All the rest are in functions that already\nreturn errors, so it should be fine to return the error if one\ngets returned.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Sage Weil \u003csage@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    },
    {
      "commit": "59a521ebc05d2bd826d19c4a9a6fb00c313f6a52",
      "tree": "49c30f119f8a9be076ee63355b9baf63e881e8a2",
      "parents": [
        "7dd07ab6bdc7634e99747557d6ba342b639b13d9"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Wed May 16 15:16:38 2012 -0500"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Nov 26 11:38:05 2012 -0800"
      },
      "message": "ceph: don\u0027t set WRITE_PENDING too early\n\n(cherry picked from commit e10c758e4031a801ea4d2f8fb39bf14c2658d74b)\n\nprepare_write_connect() prepares a connect message, then sets\nWRITE_PENDING on the connection.  Then *after* this, it calls\nprepare_connect_authorizer(), which updates the content of the\nconnection buffer already queued for sending.  It\u0027s also possible it\nwill result in prepare_write_connect() returning -EAGAIN despite the\nWRITE_PENDING big getting set.\n\nFix this by preparing the connect authorizer first, setting the\nWRITE_PENDING bit only after that is done.\n\nPartially addresses http://tracker.newdream.net/issues/2424\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Sage Weil \u003csage@inktank.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n"
    }
  ],
  "next": "7dd07ab6bdc7634e99747557d6ba342b639b13d9"
}
