)]}'
{
  "commit": "99932a6cf52725a912c9b6b355b8821d4d62d4dd",
  "tree": "9411715142e45d893e46154b1a5f686d6d3625a5",
  "parents": [
    "59a5912569f51e802dfd6f63269c72e57b530d67"
  ],
  "author": {
    "name": "Barret Rhoden",
    "email": "brho@cs.berkeley.edu",
    "time": "Fri Jul 20 10:20:56 2018 -0400"
  },
  "committer": {
    "name": "Barret Rhoden",
    "email": "brho@cs.berkeley.edu",
    "time": "Fri Jul 20 10:25:54 2018 -0400"
  },
  "message": "Don\u0027t chan_release() from an RCU callback\n\nRCU callbacks are not allowed to block.  chan_release(), which is triggered\nby decreffing a chan, can be triggered from an RCU callback.\n\nHere\u0027s an example of a callchain that would have panicked:\n\n #01 [\u003c0xffffffffc200b7c2\u003e] in sem_down  (block here)\n #02 [\u003c0xffffffffc200c221\u003e] in cv_wait\n #03 [\u003c0xffffffffc204ee05\u003e] in rendez_sleep (this actually panics now)\n #04 [\u003c0xffffffffc2039fa4\u003e] in __qbread\n #05 [\u003c0xffffffffc207c014\u003e] in doread\n #06 [\u003c0xffffffffc207c901\u003e] in mntrpcread\n #07 [\u003c0xffffffffc207d1a5\u003e] in mountio\n #08 [\u003c0xffffffffc207d3b5\u003e] in mountrpc\n #09 [\u003c0xffffffffc207dbfd\u003e] in mntclunk\n #10 [\u003c0xffffffffc2031448\u003e] in chan_release\n #11 [\u003c0xffffffffc2030bcb\u003e] in kref_put\n #12 [\u003c0xffffffffc2078be0\u003e] in gtfs_tf_free\n #13 [\u003c0xffffffffc2042125\u003e] in __tf_free\n #14 [\u003c0xffffffffc204f7e2\u003e] in rcu_mgmt_ktask\n #15 [\u003c0xffffffffc200acc0\u003e] in __ktask_wrapper\n #16 [\u003c0xffffffffc205981f\u003e] in process_routine_kmsg\n #17 [\u003c0xffffffffc20534a8\u003e] in __smp_idle\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "9e42ff96ed02852eaed7de058f6546b426d0866c",
      "old_mode": 33188,
      "old_path": "kern/src/ns/chan.c",
      "new_id": "b7d6a1d8d8a01461c51595e3320b2d2da6f9ce19",
      "new_mode": 33188,
      "new_path": "kern/src/ns/chan.c"
    }
  ]
}
