)]}'
{
  "commit": "96e4dac66f69d28af2b736e723364efbbdf9fdee",
  "tree": "cc21efe7b885bf5ac276650e4d554aa705079412",
  "parents": [
    "6af8652849a15e407b458a271ef9154e472f6dd4"
  ],
  "author": {
    "name": "Alex Elder",
    "email": "elder@inktank.com",
    "time": "Wed May 22 20:54:25 2013 -0500"
  },
  "committer": {
    "name": "Sage Weil",
    "email": "sage@inktank.com",
    "time": "Wed Jul 03 15:32:37 2013 -0700"
  },
  "message": "libceph: add lingering request reference when registered\n\nWhen an osd request is set to linger, the osd client holds onto the\nrequest so it can be re-submitted following certain osd map changes.\nThe osd client holds a reference to the request until it is\nunregistered.  This is used by rbd for watch requests.\n\nCurrently, the reference is taken when the request is marked with\nthe linger flag.  This means that if an error occurs after that\ntime but before the the request completes successfully, that\nreference is leaked.\n\nThere\u0027s really no reason to take the reference until the request is\nregistered in the the osd client\u0027s list of lingering requests, and\nthat only happens when the lingering (watch) request completes\nsuccessfully.\n\nSo take that reference only when it gets registered following\nsuccesful completion, and drop it (as before) when the request\ngets unregistered.  This avoids the reference problem on error\nin rbd.\n\nRearrange ceph_osdc_unregister_linger_request() to avoid using\nthe request pointer after it may have been freed.\n\nAnd hold an extra reference in kick_requests() while handling\na linger request that has not yet been registered, to ensure\nit doesn\u0027t go away.\n\nThis resolves:\n    http://tracker.ceph.com/issues/3859\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "3a246a6cab473496e58275cbb367485acbbda4d8",
      "old_mode": 33188,
      "old_path": "net/ceph/osd_client.c",
      "new_id": "e0abb83b520e7478bb4eb73f9475f1fae6fe9c81",
      "new_mode": 33188,
      "new_path": "net/ceph/osd_client.c"
    }
  ]
}
