]> git.pld-linux.org Git - packages/kernel.git/blame - kernel-small_fixes.patch
- avoid deadlocks in xfs
[packages/kernel.git] / kernel-small_fixes.patch
CommitLineData
08aa9d92 1--- linux-2.6.33/scripts/mod/modpost.c~ 2010-02-24 19:52:17.000000000 +0100
2+++ linux-2.6.33/scripts/mod/modpost.c 2010-03-07 14:26:47.242168558 +0100
3@@ -15,7 +15,8 @@
4 #include <stdio.h>
5 #include <ctype.h>
6 #include "modpost.h"
7-#include "../../include/generated/autoconf.h"
8+// PLD architectures don't use CONFIG_SYMBOL_PREFIX
9+//#include "../../include/generated/autoconf.h"
10 #include "../../include/linux/license.h"
11
12 /* Some toolchains use a `_' prefix for all user symbols. */
13
2136e199
AM
14--- linux-3.0/scripts/kconfig/lxdialog/check-lxdialog.sh~ 2011-07-22 04:17:23.000000000 +0200
15+++ linux-3.0/scripts/kconfig/lxdialog/check-lxdialog.sh 2011-08-25 21:26:04.799150642 +0200
16@@ -9,6 +9,12 @@
17 $cc -print-file-name=lib${lib}.${ext} | grep -q /
18 if [ $? -eq 0 ]; then
19 echo "-l${lib}"
20+ for libt in tinfow tinfo ; do
21+ $cc -print-file-name=lib${libt}.${ext} | grep -q /
22+ if [ $? -eq 0 ]; then
23+ echo "-l${libt}"
24+ fi
25+ done
26 exit
27 fi
28 done
7e7bde06 29
723407aa
AM
30From 30927520dbae297182990bb21d08762bcc35ce1d Mon Sep 17 00:00:00 2001
31From: Eric Dumazet <edumazet@google.com>
32Date: Wed, 9 Sep 2015 21:55:07 -0700
33Subject: [PATCH] tcp_cubic: better follow cubic curve after idle period
34
35Jana Iyengar found an interesting issue on CUBIC :
36
37The epoch is only updated/reset initially and when experiencing losses.
38The delta "t" of now - epoch_start can be arbitrary large after app idle
39as well as the bic_target. Consequentially the slope (inverse of
40ca->cnt) would be really large, and eventually ca->cnt would be
41lower-bounded in the end to 2 to have delayed-ACK slow-start behavior.
42
43This particularly shows up when slow_start_after_idle is disabled
44as a dangerous cwnd inflation (1.5 x RTT) after few seconds of idle
45time.
46
47Jana initial fix was to reset epoch_start if app limited,
48but Neal pointed out it would ask the CUBIC algorithm to recalculate the
49curve so that we again start growing steeply upward from where cwnd is
50now (as CUBIC does just after a loss). Ideally we'd want the cwnd growth
51curve to be the same shape, just shifted later in time by the amount of
52the idle period.
53
54Reported-by: Jana Iyengar <jri@google.com>
55Signed-off-by: Eric Dumazet <edumazet@google.com>
56Signed-off-by: Yuchung Cheng <ycheng@google.com>
57Signed-off-by: Neal Cardwell <ncardwell@google.com>
58Cc: Stephen Hemminger <stephen@networkplumber.org>
59Cc: Sangtae Ha <sangtae.ha@gmail.com>
60Cc: Lawrence Brakmo <lawrence@brakmo.org>
61Signed-off-by: David S. Miller <davem@davemloft.net>
62---
63 net/ipv4/tcp_cubic.c | 16 ++++++++++++++++
64 1 file changed, 16 insertions(+)
65
66diff --git a/net/ipv4/tcp_cubic.c b/net/ipv4/tcp_cubic.c
67index 28011fb1..c6ded6b 100644
68--- a/net/ipv4/tcp_cubic.c
69+++ b/net/ipv4/tcp_cubic.c
70@@ -151,6 +151,21 @@ static void bictcp_init(struct sock *sk)
71 tcp_sk(sk)->snd_ssthresh = initial_ssthresh;
72 }
73
74+static void bictcp_cwnd_event(struct sock *sk, enum tcp_ca_event event)
75+{
76+ if (event == CA_EVENT_TX_START) {
77+ s32 delta = tcp_time_stamp - tcp_sk(sk)->lsndtime;
78+ struct bictcp *ca = inet_csk_ca(sk);
79+
80+ /* We were application limited (idle) for a while.
81+ * Shift epoch_start to keep cwnd growth to cubic curve.
82+ */
83+ if (ca->epoch_start && delta > 0)
84+ ca->epoch_start += delta;
85+ return;
86+ }
87+}
88+
89 /* calculate the cubic root of x using a table lookup followed by one
90 * Newton-Raphson iteration.
91 * Avg err ~= 0.195%
92@@ -450,6 +465,7 @@ static struct tcp_congestion_ops cubictcp __read_mostly = {
93 .cong_avoid = bictcp_cong_avoid,
94 .set_state = bictcp_state,
95 .undo_cwnd = bictcp_undo_cwnd,
96+ .cwnd_event = bictcp_cwnd_event,
97 .pkts_acked = bictcp_acked,
98 .owner = THIS_MODULE,
99 .name = "cubic",
99992ee3
AM
100From 7a29ac474a47eb8cf212b45917683ae89d6fa13b Mon Sep 17 00:00:00 2001
101From: Chris Mason <clm@fb.com>
102Date: Tue, 10 Nov 2015 10:10:34 +1100
103Subject: xfs: give all workqueues rescuer threads
104
105We're consistently hitting deadlocks here with XFS on recent kernels.
106After some digging through the crash files, it looks like everyone in
107the system is waiting for XFS to reclaim memory.
108
109Something like this:
110
111PID: 2733434 TASK: ffff8808cd242800 CPU: 19 COMMAND: "java"
112 #0 [ffff880019c53588] __schedule at ffffffff818c4df2
113 #1 [ffff880019c535d8] schedule at ffffffff818c5517
114 #2 [ffff880019c535f8] _xfs_log_force_lsn at ffffffff81316348
115 #3 [ffff880019c53688] xfs_log_force_lsn at ffffffff813164fb
116 #4 [ffff880019c536b8] xfs_iunpin_wait at ffffffff8130835e
117 #5 [ffff880019c53728] xfs_reclaim_inode at ffffffff812fd453
118 #6 [ffff880019c53778] xfs_reclaim_inodes_ag at ffffffff812fd8c7
119 #7 [ffff880019c53928] xfs_reclaim_inodes_nr at ffffffff812fe433
120 #8 [ffff880019c53958] xfs_fs_free_cached_objects at ffffffff8130d3b9
121 #9 [ffff880019c53968] super_cache_scan at ffffffff811a6f73
122#10 [ffff880019c539c8] shrink_slab at ffffffff811460e6
123#11 [ffff880019c53aa8] shrink_zone at ffffffff8114a53f
124#12 [ffff880019c53b48] do_try_to_free_pages at ffffffff8114a8ba
125#13 [ffff880019c53be8] try_to_free_pages at ffffffff8114ad5a
126#14 [ffff880019c53c78] __alloc_pages_nodemask at ffffffff8113e1b8
127#15 [ffff880019c53d88] alloc_kmem_pages_node at ffffffff8113e671
128#16 [ffff880019c53dd8] copy_process at ffffffff8104f781
129#17 [ffff880019c53ec8] do_fork at ffffffff8105129c
130#18 [ffff880019c53f38] sys_clone at ffffffff810515b6
131#19 [ffff880019c53f48] stub_clone at ffffffff818c8e4d
132
133xfs_log_force_lsn is waiting for logs to get cleaned, which is waiting
134for IO, which is waiting for workers to complete the IO which is waiting
135for worker threads that don't exist yet:
136
137PID: 2752451 TASK: ffff880bd6bdda00 CPU: 37 COMMAND: "kworker/37:1"
138 #0 [ffff8808d20abbb0] __schedule at ffffffff818c4df2
139 #1 [ffff8808d20abc00] schedule at ffffffff818c5517
140 #2 [ffff8808d20abc20] schedule_timeout at ffffffff818c7c6c
141 #3 [ffff8808d20abcc0] wait_for_completion_killable at ffffffff818c6495
142 #4 [ffff8808d20abd30] kthread_create_on_node at ffffffff8106ec82
143 #5 [ffff8808d20abdf0] create_worker at ffffffff8106752f
144 #6 [ffff8808d20abe40] worker_thread at ffffffff810699be
145 #7 [ffff8808d20abec0] kthread at ffffffff8106ef59
146 #8 [ffff8808d20abf50] ret_from_fork at ffffffff818c8ac8
147
148I think we should be using WQ_MEM_RECLAIM to make sure this thread
149pool makes progress when we're not able to allocate new workers.
150
151[dchinner: make all workqueues WQ_MEM_RECLAIM]
152
153Signed-off-by: Chris Mason <clm@fb.com>
154Reviewed-by: Dave Chinner <dchinner@redhat.com>
155Signed-off-by: Dave Chinner <david@fromorbit.com>
156---
157 fs/xfs/xfs_super.c | 7 ++++---
158 1 file changed, 4 insertions(+), 3 deletions(-)
159
160diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c
161index 29531ec..65fbfb7 100644
162--- a/fs/xfs/xfs_super.c
163+++ b/fs/xfs/xfs_super.c
164@@ -838,17 +838,18 @@ xfs_init_mount_workqueues(
165 goto out_destroy_unwritten;
166
167 mp->m_reclaim_workqueue = alloc_workqueue("xfs-reclaim/%s",
168- WQ_FREEZABLE, 0, mp->m_fsname);
169+ WQ_MEM_RECLAIM|WQ_FREEZABLE, 0, mp->m_fsname);
170 if (!mp->m_reclaim_workqueue)
171 goto out_destroy_cil;
172
173 mp->m_log_workqueue = alloc_workqueue("xfs-log/%s",
174- WQ_FREEZABLE|WQ_HIGHPRI, 0, mp->m_fsname);
175+ WQ_MEM_RECLAIM|WQ_FREEZABLE|WQ_HIGHPRI, 0,
176+ mp->m_fsname);
177 if (!mp->m_log_workqueue)
178 goto out_destroy_reclaim;
179
180 mp->m_eofblocks_workqueue = alloc_workqueue("xfs-eofblocks/%s",
181- WQ_FREEZABLE, 0, mp->m_fsname);
182+ WQ_MEM_RECLAIM|WQ_FREEZABLE, 0, mp->m_fsname);
183 if (!mp->m_eofblocks_workqueue)
184 goto out_destroy_log;
185
186--
187cgit v0.11.2
188
This page took 0.107719 seconds and 4 git commands to generate.