)]}'
{
  "commit": "d7811e623dd4be3e3bdba2d6330f7f15541ee45f",
  "tree": "f43bafe2e8d7e43b2cc3f4cb7dcda4c5e8815630",
  "parents": [
    "cbe21d8fefca605b90e34f0f019505e599712f9b"
  ],
  "author": {
    "name": "Herbert Xu",
    "email": "herbert@gondor.apana.org.au",
    "time": "Mon Sep 18 00:22:30 2006 -0700"
  },
  "committer": {
    "name": "David S. Miller",
    "email": "davem@davemloft.net",
    "time": "Mon Sep 18 00:22:30 2006 -0700"
  },
  "message": "[NET]: Drop tx lock in dev_watchdog_up\n\nFix lockdep warning with GRE, iptables and Speedtouch ADSL, PPP over ATM.\n\nOn Sat, Sep 02, 2006 at 08:39:28PM +0000, Krzysztof Halasa wrote:\n\u003e \n\u003e \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\u003e [ INFO: possible circular locking dependency detected ]\n\u003e -------------------------------------------------------\n\u003e swapper/0 is trying to acquire lock:\n\u003e  (\u0026dev-\u003equeue_lock){-+..}, at: [\u003cc02c8c46\u003e] dev_queue_xmit+0x56/0x290\n\u003e \n\u003e but task is already holding lock:\n\u003e  (\u0026dev-\u003e_xmit_lock){-+..}, at: [\u003cc02c8e14\u003e] dev_queue_xmit+0x224/0x290\n\u003e \n\u003e which lock already depends on the new lock.\n\nThis turns out to be a genuine bug.  The queue lock and xmit lock are\nintentionally taken out of order.  Two things are supposed to prevent\ndead-locks from occuring:\n\n1) When we hold the queue_lock we\u0027re supposed to only do try_lock on the\ntx_lock.\n\n2) We always drop the queue_lock after taking the tx_lock and before doing\nanything else.\n\n\u003e \n\u003e the existing dependency chain (in reverse order) is:\n\u003e \n\u003e -\u003e #1 (\u0026dev-\u003e_xmit_lock){-+..}:\n\u003e        [\u003cc012e7b6\u003e] lock_acquire+0x76/0xa0\n\u003e        [\u003cc0336241\u003e] _spin_lock_bh+0x31/0x40\n\u003e        [\u003cc02d25a9\u003e] dev_activate+0x69/0x120\n\nThis path obviously breaks assumption 1) and therefore can lead to ABBA\ndead-locks.\n\nI\u0027ve looked at the history and there seems to be no reason for the lock\nto be held at all in dev_watchdog_up.  The lock appeared in day one and\neven there it was unnecessary.  In fact, people added __dev_watchdog_up\nprecisely in order to get around the tx lock there.\n\nThe function dev_watchdog_up is already serialised by rtnl_lock since\nits only caller dev_activate is always called under it.\n\nSo here is a simple patch to remove the tx lock from dev_watchdog_up.\nIn 2.6.19 we can eliminate the unnecessary __dev_watchdog_up and\nreplace it with dev_watchdog_up.\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": "0834c2ee917408286d3cf366645c6bd6b3e8fc43",
      "old_mode": 33188,
      "old_path": "net/sched/sch_generic.c",
      "new_id": "6f91518997951cbd13056373f36a98c0f87136b2",
      "new_mode": 33188,
      "new_path": "net/sched/sch_generic.c"
    }
  ]
}
