)]}'
{
  "commit": "480b02df3aa9f07d1c7df0cd8be7a5ca73893455",
  "tree": "27b51ecc15bb30b0d79bb0c702a0124c8b4848fc",
  "parents": [
    "fedb3d27d9e8606b3867b5ae49d6258458a07a72"
  ],
  "author": {
    "name": "Rusty Russell",
    "email": "rusty@rustcorp.com.au",
    "time": "Wed May 19 17:33:39 2010 -0600"
  },
  "committer": {
    "name": "Rusty Russell",
    "email": "rusty@rustcorp.com.au",
    "time": "Wed May 19 17:33:39 2010 +0930"
  },
  "message": "module: drop the lock while waiting for module to complete initialization.\n\nThis fixes \"gave up waiting for init of module libcrc32c.\" which\nhappened at boot time due to multiple parallel module loads.\n\nThe problem was a deadlock: we wait for a module to finish\ninitializing, but we keep the module_lock mutex so it can\u0027t complete.\nIn particular, this could reasonably happen if a module does a\nrequest_module() in its initialization routine.\n\nSo we change use_module() to return an errno rather than a bool, and if\nit\u0027s -EBUSY we drop the lock and wait in the caller, then reaquire the\nlock.\n\nReported-by: Brandon Philips \u003cbrandon@ifup.org\u003e\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\nTested-by: Brandon Philips \u003cbrandon@ifup.org\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "e2564580f3f113ec9d391a7ad45beea842d39620",
      "old_mode": 33188,
      "old_path": "kernel/module.c",
      "new_id": "970d773aec625bf42dfc90909a176c6b85c59484",
      "new_mode": 33188,
      "new_path": "kernel/module.c"
    }
  ]
}
