21 Apr, 2010
1 commit
-
Define a new function to return the waitqueue of a "struct sock".
static inline wait_queue_head_t *sk_sleep(struct sock *sk)
{
return sk->sk_sleep;
}Change all read occurrences of sk_sleep by a call to this function.
Needed for a future RCU conversion. sk_sleep wont be a field directly
available.Signed-off-by: Eric Dumazet
Signed-off-by: David S. Miller
20 Apr, 2010
16 commits
-
Since netdev_chain is guarded by rtnl_lock, ASSERT_RTNL should be
present here to make sure that all callers of call_netdevice_notifiers
does the locking properly.Signed-off-by: Jiri Pirko
Signed-off-by: David S. Miller -
In case we compute a software skb->rxhash, we can generate a consistent
hash : Its value will be the same in both flow directions.This helps some workloads, like conntracking, since the same state needs
to be accessed in both directions.tbench + RFS + this patch gives better results than tbench with default
kernel configuration (no RPS, no RFS)Also fixed some sparse warnings.
Signed-off-by: Eric Dumazet
Signed-off-by: David S. Miller -
struct softnet_data holds many queues, so consistent use "sd" name
instead of "queue" is better.Adds a rps_ipi_queued() helper to cleanup enqueue_to_backlog()
Adds a _and_irq_disable suffix to net_rps_action() name, as David
suggested.incr_input_queue_head() becomes input_queue_head_incr()
Signed-off-by: Eric Dumazet
Signed-off-by: David S. Miller -
store_rps_map() & store_rps_dev_flow_table_cnt() are static.
Signed-off-by: Eric Dumazet
Signed-off-by: David S. Miller -
net_rps_action() is a bit expensive on NR_CPUS=64..4096 kernels, even if
RPS is not active.Tom Herbert used two bitmasks to hold information needed to send IPI,
but a single LIFO list seems more appropriate.Move all RPS logic into net_rps_action() to cleanup net_rx_action() code
(remove two ifdefs)Move rps_remote_softirq_cpus into softnet_data to share its first cache
line, filling an existing hole.In a future patch, we could call net_rps_action() from process_backlog()
to make sure we send IPI before handling this cpu backlog.Signed-off-by: Eric Dumazet
Signed-off-by: David S. Miller -
Set version to 1.52.53-1.
Signed-off-by: Vladislav Zolotarov
Signed-off-by: Eilon Greenstein
Signed-off-by: David S. Miller -
Author: Yaniv Rosner
Signed-off-by: Yaniv Rosner
Signed-off-by: Vladislav Zolotarov
Signed-off-by: Eilon Greenstein
Signed-off-by: David S. Miller -
Move "don't shut down the power" logic into bnx2x_set_power_state() to make the code cleaner.
Signed-off-by: Vladislav Zolotarov
Signed-off-by: Eilon Greenstein
Signed-off-by: David S. Miller -
Properly mask the value to be written to the register (according to the register size) during the self-test.
Otherwise immediate parity error would be generated.Signed-off-by: Vladislav Zolotarov
Signed-off-by: Eilon Greenstein
Signed-off-by: David S. Miller -
Try to enable less MSI-X vectors if initial request has failed.
Author: Dmitry Kravkov
Signed-off-by: Dmitry Kravkov
Signed-off-by: Vladislav Zolotarov
Signed-off-by: Eilon Greenstein
Signed-off-by: David S. Miller -
Added total_mcast/bcast_pkts_transmitted statistics.
Author: Dmitry Kravkov
Signed-off-by: Dmitry Kravkov
Signed-off-by: Vladislav Zolotarov
Signed-off-by: Eilon Greenstein
Signed-off-by: David S. Miller -
White spaces, code readability and prints.
Signed-off-by: Vladislav Zolotarov
Signed-off-by: Eilon Greenstein
Signed-off-by: David S. Miller -
Don't run code that can't be run if MCP is not present.
This will prevent NULL pointer dereferencing.Signed-off-by: Vladislav Zolotarov
Signed-off-by: Eilon Greenstein
Signed-off-by: David S. Miller -
Increase DMAE max write size for 57711 to the maximum allowed value.
Signed-off-by: Vladislav Zolotarov
Signed-off-by: Eilon Greenstein
Signed-off-by: David S. Miller -
Author: Dmitry Kravkov
Signed-off-by: Dmitry Kravkov
Signed-off-by: Vladislav Zolotarov
Signed-off-by: Eilon Greenstein
Signed-off-by: David S. Miller -
This patch introduces the parity errors handling code for 57710 and 57711 chips.
HW is configured to stop all DMA transactions to the host and sending packets to the network
once parity error is detected, which is meant to prevent silent data corruption.
At the same time HW generates the attention interrupt to every function of the device where parity
has been detected so that driver can start the recovery flow.The recovery is actually resetting the chip and restarting the driver on all active functions
of the chip where the parity error has been reported.Signed-off-by: Vladislav Zolotarov
Signed-off-by: Eilon Greenstein
Signed-off-by: David S. Miller
18 Apr, 2010
2 commits
-
Transmitted skb might be attached to a socket and a destructor, for
memory accounting purposes.Traditionally, this destructor is called at tx completion time, when skb
is freed.When tx completion is performed by another cpu than the sender, this
forces some cache lines to change ownership. XPS was an attempt to give
tx completion to initial cpu.David idea is to call destructor right before giving skb to device (call
to ndo_start_xmit()). Because device queues are usually small, orphaning
skb before tx completion is not a big deal. Some drivers already do
this, we could do it in upper level.There is one known exception to this early orphaning, called tx
timestamping. It needs to keep a reference to socket until device can
give a hardware or software timestamp.This patch adds a skb_orphan_try() helper, to centralize all exceptions
to early orphaning in one spot, and use it in dev_hard_start_xmit()."tbench 16" results on a Nehalem machine (2 X5570 @ 2.93GHz)
before: Throughput 4428.9 MB/sec 16 procs
after: Throughput 4448.14 MB/sec 16 procsUDP should get even better results, its destructor being more complex,
since SOCK_USE_WRITE_QUEUE is not set (four atomic ops instead of one)Signed-off-by: Eric Dumazet
Signed-off-by: David S. Miller -
- There is no point to enforce a time limit in process_backlog(), since
other napi instances dont follow same rule. We can exit after only one
packet processed...
The normal quota of 64 packets per napi instance should be the norm, and
net_rx_action() already has its own time limit.
Note : /proc/net/core/dev_weight can be used to tune this 64 default
value.- Use DEFINE_PER_CPU_ALIGNED for softnet_data definition.
Signed-off-by: Eric Dumazet
Signed-off-by: David S. Miller
17 Apr, 2010
2 commits
-
Signed-off-by: Eric Dumazet
Signed-off-by: David S. Miller -
This patch implements receive flow steering (RFS). RFS steers
received packets for layer 3 and 4 processing to the CPU where
the application for the corresponding flow is running. RFS is an
extension of Receive Packet Steering (RPS).The basic idea of RFS is that when an application calls recvmsg
(or sendmsg) the application's running CPU is stored in a hash
table that is indexed by the connection's rxhash which is stored in
the socket structure. The rxhash is passed in skb's received on
the connection from netif_receive_skb. For each received packet,
the associated rxhash is used to look up the CPU in the hash table,
if a valid CPU is set then the packet is steered to that CPU using
the RPS mechanisms.The convolution of the simple approach is that it would potentially
allow OOO packets. If threads are thrashing around CPUs or multiple
threads are trying to read from the same sockets, a quickly changing
CPU value in the hash table could cause rampant OOO packets--
we consider this a non-starter.To avoid OOO packets, this solution implements two types of hash
tables: rps_sock_flow_table and rps_dev_flow_table.rps_sock_table is a global hash table. Each entry is just a CPU
number and it is populated in recvmsg and sendmsg as described above.
This table contains the "desired" CPUs for flows.rps_dev_flow_table is specific to each device queue. Each entry
contains a CPU and a tail queue counter. The CPU is the "current"
CPU for a matching flow. The tail queue counter holds the value
of a tail queue counter for the associated CPU's backlog queue at
the time of last enqueue for a flow matching the entry.Each backlog queue has a queue head counter which is incremented
on dequeue, and so a queue tail counter is computed as queue head
count + queue length. When a packet is enqueued on a backlog queue,
the current value of the queue tail counter is saved in the hash
entry of the rps_dev_flow_table.And now the trick: when selecting the CPU for RPS (get_rps_cpu)
the rps_sock_flow table and the rps_dev_flow table for the RX queue
are consulted. When the desired CPU for the flow (found in the
rps_sock_flow table) does not match the current CPU (found in the
rps_dev_flow table), the current CPU is changed to the desired CPU
if one of the following is true:- The current CPU is unset (equal to RPS_NO_CPU)
- Current CPU is offline
- The current CPU's queue head counter >= queue tail counter in the
rps_dev_flow table. This checks if the queue tail has advanced
beyond the last packet that was enqueued using this table entry.
This guarantees that all packets queued using this entry have been
dequeued, thus preserving in order delivery.Making each queue have its own rps_dev_flow table has two advantages:
1) the tail queue counters will be written on each receive, so
keeping the table local to interrupting CPU s good for locality. 2)
this allows lockless access to the table-- the CPU number and queue
tail counter need to be accessed together under mutual exclusion
from netif_receive_skb, we assume that this is only called from
device napi_poll which is non-reentrant.This patch implements RFS for TCP and connected UDP sockets.
It should be usable for other flow oriented protocols.There are two configuration parameters for RFS. The
"rps_flow_entries" kernel init parameter sets the number of
entries in the rps_sock_flow_table, the per rxqueue sysfs entry
"rps_flow_cnt" contains the number of entries in the rps_dev_flow
table for the rxqueue. Both are rounded to power of two.The obvious benefit of RFS (over just RPS) is that it achieves
CPU locality between the receive processing for a flow and the
applications processing; this can result in increased performance
(higher pps, lower latency).The benefits of RFS are dependent on cache hierarchy, application
load, and other factors. On simple benchmarks, we don't necessarily
see improvement and sometimes see degradation. However, for more
complex benchmarks and for applications where cache pressure is
much higher this technique seems to perform very well.Below are some benchmark results which show the potential benfit of
this patch. The netperf test has 500 instances of netperf TCP_RR
test with 1 byte req. and resp. The RPC test is an request/response
test similar in structure to netperf RR test ith 100 threads on
each host, but does more work in userspace that netperf.e1000e on 8 core Intel
No RFS or RPS 104K tps at 30% CPU
No RFS (best RPS config): 290K tps at 63% CPU
RFS 303K tps at 61% CPURPC test tps CPU% 50/90/99% usec latency Latency StdDev
No RFS/RPS 103K 48% 757/900/3185 4472.35
RPS only: 174K 73% 415/993/2468 491.66
RFS 223K 73% 379/651/1382 315.61Signed-off-by: Tom Herbert
Signed-off-by: Eric Dumazet
Signed-off-by: David S. Miller
16 Apr, 2010
7 commits
-
ip6_xmit() is used by upper transport protocol.
Signed-off-by: Shan Wei
Signed-off-by: David S. Miller -
As Herbert Xu said: we should be able to simply replace ipfragok
with skb->local_df. commit f88037(sctp: Drop ipfargok in sctp_xmit function)
has droped ipfragok and set local_df value properly.The patch kills the ipfragok parameter of .queue_xmit().
Signed-off-by: Shan Wei
Signed-off-by: David S. Miller -
commit f88037(sctp: Drop ipfargok in sctp_xmit function)
has droped ipfragok and set local_df value properly.So the change of commit 77e2f1(ipv6: Fix ip6_xmit to
send fragments if ipfragok is true) is not needed.
So the patch remove them.Signed-off-by: Shan Wei
Signed-off-by: David S. Miller -
Signed-off-by: Joe Perches
Acked-by: James Chapman
Signed-off-by: David S. Miller -
…wireless-next-2.6 into for-davem
Conflicts:
Documentation/feature-removal-schedule.txt
drivers/net/wireless/ath/ath5k/phy.c
drivers/net/wireless/wl12xx/wl1271_main.c
15 Apr, 2010
12 commits
-
Fix an oversight in ipmr_destroy_unres() - the net pointer is
unconditionally initialized to NULL, resulting in a NULL pointer
dereference later on.Fix by adding a net pointer to struct mr_table and using it in
ipmr_destroy_unres().Signed-off-by: Patrick McHardy
-
The patch to convert struct mfc_cache to list_heads (ipv4: ipmr: convert
struct mfc_cache to struct list_head) introduced a bug when adding new
cache entries that don't match any unresolved entries.The unres queue is searched for a matching entry, which is then resolved.
When no matching entry is present, the iterator points to the head of the
list, but is treated as a matching entry. Use a seperate variable to
indicate that a matching entry was found.Signed-off-by: Patrick McHardy
-
IP_MROUTE_MULTIPLE_TABLES should depend on IP_MROUTE.
Signed-off-by: Patrick McHardy
-
Signed-off-by: Changli Gao
Signed-off-by: David S. Miller -
Eric Paris reported netif_rx() is calling smp_processor_id() from
preemptible context, in particular when caller is
ip_dev_loopback_xmit().RPS commit added this smp_processor_id() call, this patch makes sure
preemption is disabled. rps_get_cpus() wants rcu_read_lock() anyway, we
can dot it a bit earlier.Reported-by: Eric Paris
Signed-off-by: Eric Dumazet
Signed-off-by: David S. Miller -
The ixgbe driver was setting up 82598 hardware correctly, so that
when promiscuous mode was enabled hardware stripping was turned
off. But on 82599 the logic to disable/enable hardware stripping
is different, and the code was not updated correctly when the
hardware vlan stripping was enabled as default.This change comprises the creation of two new helper functions
and calling them from the right locations to disable and enable
hardware stripping of vlan tags at appropriate times.Signed-off-by: Jesse Brandeburg
Signed-off-by: Jeff Kirsher
Signed-off-by: David S. Miller -
replaces (skb->len - skb->data_len) occurrences by skb_headlen(skb)
Signed-off-by: Eric Dumazet
Signed-off-by: David S. Miller -
A very useful information was provided by Sitecom R&D guys:
Please find the information regarding our latest Ralink adapters below;
WL-302 - VID: 0x0DF6, PID: 0x002D - Ralink RT2771
WL-315 - VID: 0x0DF6, PID: 0x0039 - Ralink RT2770
WL-319 - VID: 0x182D, PID: 0x0037 - Ralink RT2860
WL-321 - VID: 0x0DF6, PID: 0x003B - Ralink RT2770
WL-324 - VID: 0x0DF6, PID: 0x003D - Ralink RT2870
WL-329 - VID: 0x0DF6, PID: 0x0041 - Ralink RT3572
WL-343 - VID: 0x0DF6, PID: 0x003E - Ralink RT3070
WL-344 - VID: 0x0DF6, PID: 0x0040 - Ralink RT3071
WL-345 - VID: 0x0DF6, PID: 0x0042 - Ralink RT3072
WL-608 - VID: 0x0DF6, PID: 0x003F - Ralink RT2070Note:
PID: 0x003C, 0x004A, and 0x004D: --these products do not exist; devices were never produced/shipped--The WL-349v4 USB dongle (0x0df6,0x0050) will be shipped soon (it isn't available yet), and uses a Ralink RT3370 chipset.
Signed-off-by: Xose Vazquez Perez
Acked-by: Gertjan van Wingerde
Signed-off-by: John W. Linville -
This patch adds the following 5 entries to the usbid device table:
* Netgear WNA1000
* Proxim ORiNOCO Dual Band 802.11n USB Adapter
* 3Com Dual Band 802.11n USB Adapter
* H3C Dual Band 802.11n USB Adapter
* WNC Generic 11n USB dongleCC:
Signed-off-by: Christian Lamparter
Signed-off-by: John W. Linville -
If EEPROM is used, NVS data is now loaded but ignored.
Stop loading it to avoid need of dummy NVS file for modules with EEPROM.Signed-off-by: Grazvydas Ignotas
Acked-by: Kalle Valo
Signed-off-by: John W. Linville -
This patch fixes two warnings below after unplugging ar9271 usb device:
-one is a kernel warning[1]
-another is a lockdep warning[2]The root reason is that __skb_queue_purge can't be executed in hardirq
context, so the patch forks ath9k_skb_queue_purge(ath9k version of _skb_queue_purge),
which frees skb with dev_kfree_skb_any which can be run in hardirq
context safely, then prevent the lockdep warning and kernel warning after
unplugging ar9271 usb device.[1] kernel warning
[ 602.894005] ------------[ cut here ]------------
[ 602.894005] WARNING: at net/core/skbuff.c:398 skb_release_head_state+0x71/0x87()
[ 602.894005] Hardware name: 6475EK2
[ 602.894005] Modules linked in: ath9k_htc ath9k ath9k_common ath9k_hw ath bridge stp llc sunrpc ipv6 cpufreq_ondemand acpi_cpufreq freq_table kvm_intel kvm arc4 ecb mac80211 snd_hda_codec_conexant snd_hda_intel snd_hda_codec snd_hwdep thinkpad_acpi snd_pcm snd_timer hwmon iTCO_wdt snd e1000e pcspkr i2c_i801 usbhid iTCO_vendor_support wmi cfg80211 yenta_socket rsrc_nonstatic pata_acpi snd_page_alloc soundcore uhci_hcd ohci_hcd ehci_hcd usbcore i915 drm_kms_helper drm i2c_algo_bit i2c_core video output [last unloaded: ath]
[ 602.894005] Pid: 2506, comm: ping Tainted: G W 2.6.34-rc3-wl #20
[ 602.894005] Call Trace:
[ 602.894005] [] warn_slowpath_common+0x7c/0x94
[ 602.894005] [] ? __skb_queue_purge+0x43/0x4a [ath9k_htc]
[ 602.894005] [] warn_slowpath_null+0x14/0x16
[ 602.894005] [] skb_release_head_state+0x71/0x87
[ 602.894005] [] __kfree_skb+0x16/0x81
[ 602.894005] [] kfree_skb+0x7e/0x86
[ 602.894005] [] __skb_queue_purge+0x43/0x4a [ath9k_htc]
[ 602.894005] [] __hif_usb_tx+0x1c1/0x21b [ath9k_htc]
[ 602.894005] [] hif_usb_tx_cb+0x12f/0x154 [ath9k_htc]
[ 602.894005] [] usb_hcd_giveback_urb+0x91/0xc5 [usbcore]
[ 602.894005] [] ehci_urb_done+0x7a/0x8b [ehci_hcd]
[ 602.894005] [] qh_completions+0x2ee/0x376 [ehci_hcd]
[ 602.894005] [] ehci_work+0x95/0x76e [ehci_hcd]
[ 602.894005] [] ? ehci_irq+0x2f/0x1d4 [ehci_hcd]
[ 602.894005] [] ehci_irq+0x1a6/0x1d4 [ehci_hcd]
[ 602.894005] [] ? __rcu_process_callbacks+0x7a/0x2df
[ 602.894005] [] ? handle_fasteoi_irq+0x22/0xd2
[ 602.894005] [] usb_hcd_irq+0x4a/0xa7 [usbcore]
[ 602.894005] [] handle_IRQ_event+0x77/0x14f
[ 602.894005] [] ? skb_release_data+0xc9/0xce
[ 602.894005] [] handle_fasteoi_irq+0x92/0xd2
[ 602.894005] [] handle_irq+0x88/0x91
[ 602.894005] [] do_IRQ+0x63/0xc9
[ 602.894005] [] ? ip_flush_pending_frames+0x4d/0x5c
[ 602.894005] [] ret_from_intr+0x0/0x16
[ 602.894005] [] ? __delete_object+0x5a/0xb1
[ 602.894005] [] ? _raw_write_unlock_irqrestore+0x47/0x7e
[ 602.894005] [] ? _raw_write_unlock_irqrestore+0x4c/0x7e
[ 602.894005] [] __delete_object+0x5a/0xb1
[ 602.894005] [] delete_object_full+0x25/0x31
[ 602.894005] [] kmemleak_free+0x26/0x45
[ 602.894005] [] kfree+0xaa/0x149
[ 602.894005] [] ? sock_def_write_space+0x84/0x89
[ 602.894005] [] ? ip_flush_pending_frames+0x4d/0x5c
[ 602.894005] [] skb_release_data+0xc9/0xce
[ 602.894005] [] __kfree_skb+0x1e/0x81
[ 602.894005] [] kfree_skb+0x7e/0x86
[ 602.894005] [] ip_flush_pending_frames+0x4d/0x5c
[ 602.894005] [] raw_sendmsg+0x653/0x709
[ 602.894005] [] inet_sendmsg+0x54/0x5d
[ 602.894005] [] ? sock_recvmsg+0xc6/0xdf
[ 602.894005] [] sock_sendmsg+0xc0/0xd9
[ 602.894005] [] ? might_fault+0x68/0xb8
[ 602.894005] [] ? might_fault+0xb1/0xb8
[ 602.894005] [] ? copy_from_user+0x2f/0x31
[ 602.894005] [] ? verify_iovec+0x54/0x91
[ 602.894005] [] sys_sendmsg+0x1da/0x241
[ 602.894005] [] ? finish_task_switch+0x0/0xc9
[ 602.894005] [] ? finish_task_switch+0x0/0xc9
[ 602.894005] [] ? trace_hardirqs_on_caller+0x16/0x150
[ 602.894005] [] ? _raw_spin_unlock_irq+0x56/0x63
[ 602.894005] [] ? finish_task_switch+0xa4/0xc9
[ 602.894005] [] ? finish_task_switch+0x0/0xc9
[ 602.894005] [] ? need_resched+0x23/0x2d
[ 602.894005] [] ? trace_hardirqs_on_caller+0x16/0x150
[ 602.894005] [] ? trace_hardirqs_on_thunk+0x3a/0x3f
[ 602.894005] [] system_call_fastpath+0x16/0x1b
[ 602.894005] ---[ end trace 91ba2d8dc7826839 ]---[2] lockdep warning
[ 169.363215] ======================================================
[ 169.365390] [ INFO: HARDIRQ-safe -> HARDIRQ-unsafe lock order detected ]
[ 169.366334] 2.6.34-rc3-wl #20
[ 169.366872] ------------------------------------------------------
[ 169.366872] khubd/78 [HC0[0]:SC0[0]:HE0:SE1] is trying to acquire:
[ 169.366872] (clock-AF_INET){++.?..}, at: [] sock_def_write_space+0x1e/0x89
[ 169.366872]
[ 169.366872] and this task is already holding:
[ 169.366872] (&(&hif_dev->tx.tx_lock)->rlock){-.-...}, at: [] hif_usb_stop+0x24/0x53 [ath9k_htc]
[ 169.366872] which would create a new lock dependency:
[ 169.366872] (&(&hif_dev->tx.tx_lock)->rlock){-.-...} -> (clock-AF_INET){++.?..}
[ 169.366872]
[ 169.366872] but this new dependency connects a HARDIRQ-irq-safe lock:
[ 169.366872] (&(&hif_dev->tx.tx_lock)->rlock){-.-...}
[ 169.366872] ... which became HARDIRQ-irq-safe at:
[ 169.366872] [] __lock_acquire+0x2c6/0xd2b
[ 169.366872] [] lock_acquire+0xec/0x119
[ 169.366872] [] _raw_spin_lock+0x40/0x73
[ 169.366872] [] hif_usb_tx_cb+0x5e/0x154 [ath9k_htc]
[ 169.366872] [] usb_hcd_giveback_urb+0x91/0xc5 [usbcore]
[ 169.366872] [] ehci_urb_done+0x7a/0x8b [ehci_hcd]
[ 169.366872] [] qh_completions+0x2ee/0x376 [ehci_hcd]
[ 169.366872] [] ehci_work+0x95/0x76e [ehci_hcd]
[ 169.366872] [] ehci_irq+0x1a6/0x1d4 [ehci_hcd]
[ 169.366872] [] usb_hcd_irq+0x4a/0xa7 [usbcore]
[ 169.366872] [] handle_IRQ_event+0x77/0x14f
[ 169.366872] [] handle_fasteoi_irq+0x92/0xd2
[ 169.366872] [] handle_irq+0x88/0x91
[ 169.366872] [] do_IRQ+0x63/0xc9
[ 169.366872] [] ret_from_intr+0x0/0x16
[ 169.366872] [] cpuidle_idle_call+0xa7/0x115
[ 169.366872] [] cpu_idle+0x68/0xc4
[ 169.366872] [] rest_init+0x104/0x10b
[ 169.366872] [] start_kernel+0x3f1/0x3fc
[ 169.366872] [] x86_64_start_reservations+0xb3/0xb7
[ 169.366872] [] x86_64_start_kernel+0xf8/0x107
[ 169.366872]
[ 169.366872] to a HARDIRQ-irq-unsafe lock:
[ 169.366872] (clock-AF_INET){++.?..}
[ 169.366872] ... which became HARDIRQ-irq-unsafe at:
[ 169.366872] ... [] __lock_acquire+0x33a/0xd2b
[ 169.366872] [] lock_acquire+0xec/0x119
[ 169.366872] [] _raw_write_lock_bh+0x45/0x7a
[ 169.366872] [] tcp_close+0x165/0x34d
[ 169.366872] [] inet_release+0x55/0x5c
[ 169.366872] [] sock_release+0x1f/0x6e
[ 169.366872] [] sock_close+0x27/0x2b
[ 169.366872] [] __fput+0x125/0x1ca
[ 169.366872] [] fput+0x1a/0x1c
[ 169.366872] [] filp_close+0x68/0x72
[ 169.366872] [] sys_close+0xad/0xe7
[ 169.366872] [] system_call_fastpath+0x16/0x1b(Trimmed at the "other info that might help us debug this" line in
the interest of brevity... -- JWL)Signed-off-by: Ming Lei
Acked-by: Sujith
Signed-off-by: John W. Linville