)]}'
{
  "commit": "518fbf9cdf17875d808596afd77fc115a6f942ca",
  "tree": "608d2b518feafdfeade863774e14fc6e37ca31dd",
  "parents": [
    "5414fc12e32a0e0833ec61ba8be864c46cd19966"
  ],
  "author": {
    "name": "Eric Dumazet",
    "email": "edumazet@google.com",
    "time": "Sat Apr 28 23:21:56 2012 +0000"
  },
  "committer": {
    "name": "David S. Miller",
    "email": "davem@davemloft.net",
    "time": "Mon Apr 30 13:37:59 2012 -0400"
  },
  "message": "net: fix sk_sockets_allocated_read_positive\n\nDenys Fedoryshchenko reported frequent crashes on a proxy server and kindly\nprovided a lockdep report that explains it all :\n\n  [  762.903868]\n  [  762.903880] \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  [  762.903890] [ INFO: inconsistent lock state ]\n  [  762.903903] 3.3.4-build-0061 #8 Not tainted\n  [  762.904133] ---------------------------------\n  [  762.904344] inconsistent {IN-SOFTIRQ-W} -\u003e {SOFTIRQ-ON-W} usage.\n  [  762.904542] squid/1603 [HC0[0]:SC0[0]:HE1:SE1] takes:\n  [  762.904542]  (key#3){+.?...}, at: [\u003cc0232cc4\u003e]\n__percpu_counter_sum+0xd/0x58\n  [  762.904542] {IN-SOFTIRQ-W} state was registered at:\n  [  762.904542]   [\u003cc0158b84\u003e] __lock_acquire+0x284/0xc26\n  [  762.904542]   [\u003cc01598e8\u003e] lock_acquire+0x71/0x85\n  [  762.904542]   [\u003cc0349765\u003e] _raw_spin_lock+0x33/0x40\n  [  762.904542]   [\u003cc0232c93\u003e] __percpu_counter_add+0x58/0x7c\n  [  762.904542]   [\u003cc02cfde1\u003e] sk_clone_lock+0x1e5/0x200\n  [  762.904542]   [\u003cc0303ee4\u003e] inet_csk_clone_lock+0xe/0x78\n  [  762.904542]   [\u003cc0315778\u003e] tcp_create_openreq_child+0x1b/0x404\n  [  762.904542]   [\u003cc031339c\u003e] tcp_v4_syn_recv_sock+0x32/0x1c1\n  [  762.904542]   [\u003cc031615a\u003e] tcp_check_req+0x1fd/0x2d7\n  [  762.904542]   [\u003cc0313f77\u003e] tcp_v4_do_rcv+0xab/0x194\n  [  762.904542]   [\u003cc03153bb\u003e] tcp_v4_rcv+0x3b3/0x5cc\n  [  762.904542]   [\u003cc02fc0c4\u003e] ip_local_deliver_finish+0x13a/0x1e9\n  [  762.904542]   [\u003cc02fc539\u003e] NF_HOOK.clone.11+0x46/0x4d\n  [  762.904542]   [\u003cc02fc652\u003e] ip_local_deliver+0x41/0x45\n  [  762.904542]   [\u003cc02fc4d1\u003e] ip_rcv_finish+0x31a/0x33c\n  [  762.904542]   [\u003cc02fc539\u003e] NF_HOOK.clone.11+0x46/0x4d\n  [  762.904542]   [\u003cc02fc857\u003e] ip_rcv+0x201/0x23e\n  [  762.904542]   [\u003cc02daa3a\u003e] __netif_receive_skb+0x319/0x368\n  [  762.904542]   [\u003cc02dac07\u003e] netif_receive_skb+0x4e/0x7d\n  [  762.904542]   [\u003cc02dacf6\u003e] napi_skb_finish+0x1e/0x34\n  [  762.904542]   [\u003cc02db122\u003e] napi_gro_receive+0x20/0x24\n  [  762.904542]   [\u003cf85d1743\u003e] e1000_receive_skb+0x3f/0x45 [e1000e]\n  [  762.904542]   [\u003cf85d3464\u003e] e1000_clean_rx_irq+0x1f9/0x284 [e1000e]\n  [  762.904542]   [\u003cf85d3926\u003e] e1000_clean+0x62/0x1f4 [e1000e]\n  [  762.904542]   [\u003cc02db228\u003e] net_rx_action+0x90/0x160\n  [  762.904542]   [\u003cc012a445\u003e] __do_softirq+0x7b/0x118\n  [  762.904542] irq event stamp: 156915469\n  [  762.904542] hardirqs last  enabled at (156915469): [\u003cc019b4f4\u003e]\n__slab_alloc.clone.58.clone.63+0xc4/0x2de\n  [  762.904542] hardirqs last disabled at (156915468): [\u003cc019b452\u003e]\n__slab_alloc.clone.58.clone.63+0x22/0x2de\n  [  762.904542] softirqs last  enabled at (156915466): [\u003cc02ce677\u003e]\nlock_sock_nested+0x64/0x6c\n  [  762.904542] softirqs last disabled at (156915464): [\u003cc0349914\u003e]\n_raw_spin_lock_bh+0xe/0x45\n  [  762.904542]\n  [  762.904542] other info that might help us debug this:\n  [  762.904542]  Possible unsafe locking scenario:\n  [  762.904542]\n  [  762.904542]        CPU0\n  [  762.904542]        ----\n  [  762.904542]   lock(key#3);\n  [  762.904542]   \u003cInterrupt\u003e\n  [  762.904542]     lock(key#3);\n  [  762.904542]\n  [  762.904542]  *** DEADLOCK ***\n  [  762.904542]\n  [  762.904542] 1 lock held by squid/1603:\n  [  762.904542]  #0:  (sk_lock-AF_INET){+.+.+.}, at: [\u003cc03055c0\u003e]\nlock_sock+0xa/0xc\n  [  762.904542]\n  [  762.904542] stack backtrace:\n  [  762.904542] Pid: 1603, comm: squid Not tainted 3.3.4-build-0061 #8\n  [  762.904542] Call Trace:\n  [  762.904542]  [\u003cc0347b73\u003e] ? printk+0x18/0x1d\n  [  762.904542]  [\u003cc015873a\u003e] valid_state+0x1f6/0x201\n  [  762.904542]  [\u003cc0158816\u003e] mark_lock+0xd1/0x1bb\n  [  762.904542]  [\u003cc015876b\u003e] ? mark_lock+0x26/0x1bb\n  [  762.904542]  [\u003cc015805d\u003e] ? check_usage_forwards+0x77/0x77\n  [  762.904542]  [\u003cc0158bf8\u003e] __lock_acquire+0x2f8/0xc26\n  [  762.904542]  [\u003cc0159b8e\u003e] ? mark_held_locks+0x5d/0x7b\n  [  762.904542]  [\u003cc0159cf6\u003e] ? trace_hardirqs_on+0xb/0xd\n  [  762.904542]  [\u003cc0158dd4\u003e] ? __lock_acquire+0x4d4/0xc26\n  [  762.904542]  [\u003cc01598e8\u003e] lock_acquire+0x71/0x85\n  [  762.904542]  [\u003cc0232cc4\u003e] ? __percpu_counter_sum+0xd/0x58\n  [  762.904542]  [\u003cc0349765\u003e] _raw_spin_lock+0x33/0x40\n  [  762.904542]  [\u003cc0232cc4\u003e] ? __percpu_counter_sum+0xd/0x58\n  [  762.904542]  [\u003cc0232cc4\u003e] __percpu_counter_sum+0xd/0x58\n  [  762.904542]  [\u003cc02cebc4\u003e] __sk_mem_schedule+0xdd/0x1c7\n  [  762.904542]  [\u003cc02d178d\u003e] ? __alloc_skb+0x76/0x100\n  [  762.904542]  [\u003cc0305e8e\u003e] sk_wmem_schedule+0x21/0x2d\n  [  762.904542]  [\u003cc0306370\u003e] sk_stream_alloc_skb+0x42/0xaa\n  [  762.904542]  [\u003cc0306567\u003e] tcp_sendmsg+0x18f/0x68b\n  [  762.904542]  [\u003cc031f3dc\u003e] ? ip_fast_csum+0x30/0x30\n  [  762.904542]  [\u003cc0320193\u003e] inet_sendmsg+0x53/0x5a\n  [  762.904542]  [\u003cc02cb633\u003e] sock_aio_write+0xd2/0xda\n  [  762.904542]  [\u003cc015876b\u003e] ? mark_lock+0x26/0x1bb\n  [  762.904542]  [\u003cc01a1017\u003e] do_sync_write+0x9f/0xd9\n  [  762.904542]  [\u003cc01a2111\u003e] ? file_free_rcu+0x2f/0x2f\n  [  762.904542]  [\u003cc01a17a1\u003e] vfs_write+0x8f/0xab\n  [  762.904542]  [\u003cc01a284d\u003e] ? fget_light+0x75/0x7c\n  [  762.904542]  [\u003cc01a1900\u003e] sys_write+0x3d/0x5e\n  [  762.904542]  [\u003cc0349ec9\u003e] syscall_call+0x7/0xb\n  [  762.904542]  [\u003cc0340000\u003e] ? rp_sidt+0x41/0x83\n\nBug is that sk_sockets_allocated_read_positive() calls\npercpu_counter_sum_positive() without BH being disabled.\n\nThis bug was added in commit 180d8cd942ce33\n(foundations of per-cgroup memory pressure controlling.), since previous\ncode was using percpu_counter_read_positive() which is IRQ safe.\n\nIn __sk_mem_schedule() we dont need the precise count of allocated\nsockets and can revert to previous behavior.\n\nReported-by: Denys Fedoryshchenko \u003cdenys@visp.net.lb\u003e\nSined-off-by: Eric Dumazet \u003cedumazet@google.com\u003e\nCc: Glauber Costa \u003cglommer@parallels.com\u003e\nAcked-by: Neal Cardwell \u003cncardwell@google.com\u003e\n\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "188532ee88b66649837b0a9771f2dc3f2b4a3b00",
      "old_mode": 33188,
      "old_path": "include/net/sock.h",
      "new_id": "5a0a58ac4126c47517ea5a4da0fdb051cc88daba",
      "new_mode": 33188,
      "new_path": "include/net/sock.h"
    }
  ]
}
