)]}'
{
  "commit": "58ec3b4db9eb5a28e3aec5f407a54e28f7039c19",
  "tree": "224232795e1a2d5966c27b74008714881682644b",
  "parents": [
    "742201e7baf66c64995fdd033d706220e6208fab"
  ],
  "author": {
    "name": "Herbert Xu",
    "email": "herbert@gondor.apana.org.au",
    "time": "Tue Oct 07 15:50:03 2008 -0700"
  },
  "committer": {
    "name": "David S. Miller",
    "email": "davem@davemloft.net",
    "time": "Tue Oct 07 15:50:03 2008 -0700"
  },
  "message": "net: Fix netdev_run_todo dead-lock\n\nBenjamin Thery tracked down a bug that explains many instances\nof the error\n\nunregister_netdevice: waiting for %s to become free. Usage count \u003d %d\n\nIt turns out that netdev_run_todo can dead-lock with itself if\na second instance of it is run in a thread that will then free\na reference to the device waited on by the first instance.\n\nThe problem is really quite silly.  We were trying to create\nparallelism where none was required.  As netdev_run_todo always\nfollows a RTNL section, and that todo tasks can only be added\nwith the RTNL held, by definition you should only need to wait\nfor the very ones that you\u0027ve added and be done with it.\n\nThere is no need for a second mutex or spinlock.\n\nThis is exactly what the following patch does.\n\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "fd992c0f2717fd57fe0b401b7d50910fd9b0e295",
      "old_mode": 33188,
      "old_path": "net/core/dev.c",
      "new_id": "0ae08d3f57e79730ac893dbb8a046a6678cd622a",
      "new_mode": 33188,
      "new_path": "net/core/dev.c"
    },
    {
      "type": "modify",
      "old_id": "71edb8b36341622df50ec48f32127b1be490b19f",
      "old_mode": 33188,
      "old_path": "net/core/rtnetlink.c",
      "new_id": "d6381c2a46936751b8da284d8191bf0404593597",
      "new_mode": 33188,
      "new_path": "net/core/rtnetlink.c"
    }
  ]
}
