)]}'
{
  "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",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "34e9506be6b2758a09a684a8d848bfef5689e42e",
      "old_mode": 33188,
      "old_path": "include/linux/ceph/messenger.h",
      "new_id": "5f30c81d47461e3e70c7a9fa52026d1de0fb72f3",
      "new_mode": 33188,
      "new_path": "include/linux/ceph/messenger.h"
    },
    {
      "type": "modify",
      "old_id": "27e4e58922b37ce6f7bc34e224578afe07e472cb",
      "old_mode": 33188,
      "old_path": "net/ceph/messenger.c",
      "new_id": "2ad67994e435aa555e815863a1e3eda941bd5f64",
      "new_mode": 33188,
      "new_path": "net/ceph/messenger.c"
    }
  ]
}
