)]}'
{
  "commit": "9bea7f23952d5948f8e5dfdff4de09bb9981fb5f",
  "tree": "9cb7231bcf901fe4198142b9b054ce5ae6ce34c8",
  "parents": [
    "be593f4ce4eb1bd40e38fdc403371f149f6f12eb"
  ],
  "author": {
    "name": "Rusty Russell",
    "email": "rusty@rustcorp.com.au",
    "time": "Sat Jun 05 11:17:37 2010 -0600"
  },
  "committer": {
    "name": "Rusty Russell",
    "email": "rusty@rustcorp.com.au",
    "time": "Sat Jun 05 11:17:37 2010 +0930"
  },
  "message": "module: fix bne2 \"gave up waiting for init of module libcrc32c\"\n\nProblem: it\u0027s hard to avoid an init routine stumbling over a\nrequest_module these days.  And it\u0027s not clear it\u0027s always a bad idea:\nfor example, a module like kvm with dynamic dependencies on kvm-intel\nor kvm-amd would be neater if it could simply request_module the right\none.\n\nIn this particular case, it\u0027s libcrc32c:\n\n\tlibcrc32c_mod_init\n\t crypto_alloc_shash\n\t  crypto_alloc_tfm\n\t   crypto_find_alg\n\t    crypto_alg_mod_lookup\n\t     crypto_larval_lookup\n\t      request_module\n\nIf another module is waiting inside resolve_symbol() for libcrc32c to\nfinish initializing (ie. bne2 depends on libcrc32c) then it does so\nholding the module lock, and our request_module() can\u0027t make progress\nuntil that is released.\n\nWaiting inside resolve_symbol() without the lock isn\u0027t all that hard:\nwe just need to pass the -EBUSY up the call chain so we can sleep\nwhere we don\u0027t hold the lock.  Error reporting is a bit trickier: we\nneed to copy the name of the unfinished module before releasing the\nlock.\n\nOther notes:\n1) This also fixes a theoretical issue where a weak dependency would allow\n   symbol version mismatches to be ignored.\n2) We rename use_module to ref_module to make life easier for the only\n   external user (the out-of-tree ksplice patches).\n\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\nCc: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\nCc: Tim Abbot \u003ctabbott@ksplice.com\u003e\nTested-by: Brandon Philips \u003cbphilips@suse.de\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "f99558e1945a9b9450dee8f31d41a5b5ce5561fd",
      "old_mode": 33188,
      "old_path": "kernel/module.c",
      "new_id": "8c6b42840dd19fa942919aa8e052bf400911a2a4",
      "new_mode": 33188,
      "new_path": "kernel/module.c"
    }
  ]
}
