Magellan Linux

Contents of /trunk/kernel-alx/patches-3.12/0103-3.12.4-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2423 - (show annotations) (download)
Tue Mar 25 12:29:50 2014 UTC (10 years, 1 month ago) by niro
File size: 152481 byte(s)
-added 3.12 branch
1 diff --git a/Documentation/networking/ip-sysctl.txt b/Documentation/networking/ip-sysctl.txt
2 index a46d78583ae1..7d8dc93fe2eb 100644
3 --- a/Documentation/networking/ip-sysctl.txt
4 +++ b/Documentation/networking/ip-sysctl.txt
5 @@ -588,9 +588,6 @@ tcp_limit_output_bytes - INTEGER
6 typical pfifo_fast qdiscs.
7 tcp_limit_output_bytes limits the number of bytes on qdisc
8 or device to reduce artificial RTT/cwnd and reduce bufferbloat.
9 - Note: For GSO/TSO enabled flows, we try to have at least two
10 - packets in flight. Reducing tcp_limit_output_bytes might also
11 - reduce the size of individual GSO packet (64KB being the max)
12 Default: 131072
13
14 tcp_challenge_ack_limit - INTEGER
15 diff --git a/Makefile b/Makefile
16 index b28bc57d1769..3b7165eb4734 100644
17 --- a/Makefile
18 +++ b/Makefile
19 @@ -1,6 +1,6 @@
20 VERSION = 3
21 PATCHLEVEL = 12
22 -SUBLEVEL = 3
23 +SUBLEVEL = 4
24 EXTRAVERSION =
25 NAME = One Giant Leap for Frogkind
26
27 diff --git a/arch/x86/net/bpf_jit_comp.c b/arch/x86/net/bpf_jit_comp.c
28 index 516593e1ce33..26328e800869 100644
29 --- a/arch/x86/net/bpf_jit_comp.c
30 +++ b/arch/x86/net/bpf_jit_comp.c
31 @@ -788,5 +788,7 @@ void bpf_jit_free(struct sk_filter *fp)
32 if (fp->bpf_func != sk_run_filter) {
33 INIT_WORK(&fp->work, bpf_jit_free_deferred);
34 schedule_work(&fp->work);
35 + } else {
36 + kfree(fp);
37 }
38 }
39 diff --git a/block/blk-core.c b/block/blk-core.c
40 index 0c611d89d748..fce4b9387f36 100644
41 --- a/block/blk-core.c
42 +++ b/block/blk-core.c
43 @@ -741,9 +741,17 @@ blk_init_allocated_queue(struct request_queue *q, request_fn_proc *rfn,
44
45 q->sg_reserved_size = INT_MAX;
46
47 + /* Protect q->elevator from elevator_change */
48 + mutex_lock(&q->sysfs_lock);
49 +
50 /* init elevator */
51 - if (elevator_init(q, NULL))
52 + if (elevator_init(q, NULL)) {
53 + mutex_unlock(&q->sysfs_lock);
54 return NULL;
55 + }
56 +
57 + mutex_unlock(&q->sysfs_lock);
58 +
59 return q;
60 }
61 EXPORT_SYMBOL(blk_init_allocated_queue);
62 diff --git a/block/elevator.c b/block/elevator.c
63 index 2bcbd8cc14d4..b7ff2861b6bd 100644
64 --- a/block/elevator.c
65 +++ b/block/elevator.c
66 @@ -186,6 +186,12 @@ int elevator_init(struct request_queue *q, char *name)
67 struct elevator_type *e = NULL;
68 int err;
69
70 + /*
71 + * q->sysfs_lock must be held to provide mutual exclusion between
72 + * elevator_switch() and here.
73 + */
74 + lockdep_assert_held(&q->sysfs_lock);
75 +
76 if (unlikely(q->elevator))
77 return 0;
78
79 @@ -959,7 +965,7 @@ fail_init:
80 /*
81 * Switch this queue to the given IO scheduler.
82 */
83 -int elevator_change(struct request_queue *q, const char *name)
84 +static int __elevator_change(struct request_queue *q, const char *name)
85 {
86 char elevator_name[ELV_NAME_MAX];
87 struct elevator_type *e;
88 @@ -981,6 +987,18 @@ int elevator_change(struct request_queue *q, const char *name)
89
90 return elevator_switch(q, e);
91 }
92 +
93 +int elevator_change(struct request_queue *q, const char *name)
94 +{
95 + int ret;
96 +
97 + /* Protect q->elevator from elevator_init() */
98 + mutex_lock(&q->sysfs_lock);
99 + ret = __elevator_change(q, name);
100 + mutex_unlock(&q->sysfs_lock);
101 +
102 + return ret;
103 +}
104 EXPORT_SYMBOL(elevator_change);
105
106 ssize_t elv_iosched_store(struct request_queue *q, const char *name,
107 @@ -991,7 +1009,7 @@ ssize_t elv_iosched_store(struct request_queue *q, const char *name,
108 if (!q->elevator)
109 return count;
110
111 - ret = elevator_change(q, name);
112 + ret = __elevator_change(q, name);
113 if (!ret)
114 return count;
115
116 diff --git a/crypto/algif_hash.c b/crypto/algif_hash.c
117 index 0262210cad38..850246206b12 100644
118 --- a/crypto/algif_hash.c
119 +++ b/crypto/algif_hash.c
120 @@ -114,6 +114,9 @@ static ssize_t hash_sendpage(struct socket *sock, struct page *page,
121 struct hash_ctx *ctx = ask->private;
122 int err;
123
124 + if (flags & MSG_SENDPAGE_NOTLAST)
125 + flags |= MSG_MORE;
126 +
127 lock_sock(sk);
128 sg_init_table(ctx->sgl.sg, 1);
129 sg_set_page(ctx->sgl.sg, page, size, offset);
130 @@ -161,8 +164,6 @@ static int hash_recvmsg(struct kiocb *unused, struct socket *sock,
131 else if (len < ds)
132 msg->msg_flags |= MSG_TRUNC;
133
134 - msg->msg_namelen = 0;
135 -
136 lock_sock(sk);
137 if (ctx->more) {
138 ctx->more = 0;
139 diff --git a/crypto/algif_skcipher.c b/crypto/algif_skcipher.c
140 index a1c4f0a55583..a19c027b29bd 100644
141 --- a/crypto/algif_skcipher.c
142 +++ b/crypto/algif_skcipher.c
143 @@ -378,6 +378,9 @@ static ssize_t skcipher_sendpage(struct socket *sock, struct page *page,
144 struct skcipher_sg_list *sgl;
145 int err = -EINVAL;
146
147 + if (flags & MSG_SENDPAGE_NOTLAST)
148 + flags |= MSG_MORE;
149 +
150 lock_sock(sk);
151 if (!ctx->more && ctx->used)
152 goto unlock;
153 @@ -432,7 +435,6 @@ static int skcipher_recvmsg(struct kiocb *unused, struct socket *sock,
154 long copied = 0;
155
156 lock_sock(sk);
157 - msg->msg_namelen = 0;
158 for (iov = msg->msg_iov, iovlen = msg->msg_iovlen; iovlen > 0;
159 iovlen--, iov++) {
160 unsigned long seglen = iov->iov_len;
161 diff --git a/drivers/atm/idt77252.c b/drivers/atm/idt77252.c
162 index 272f00927761..1bdf104e90bb 100644
163 --- a/drivers/atm/idt77252.c
164 +++ b/drivers/atm/idt77252.c
165 @@ -3511,7 +3511,7 @@ static int init_card(struct atm_dev *dev)
166 tmp = dev_get_by_name(&init_net, tname); /* jhs: was "tmp = dev_get(tname);" */
167 if (tmp) {
168 memcpy(card->atmdev->esi, tmp->dev_addr, 6);
169 -
170 + dev_put(tmp);
171 printk("%s: ESI %pM\n", card->name, card->atmdev->esi);
172 }
173 /*
174 diff --git a/drivers/connector/cn_proc.c b/drivers/connector/cn_proc.c
175 index c73fc2b74de2..18c5b9b16645 100644
176 --- a/drivers/connector/cn_proc.c
177 +++ b/drivers/connector/cn_proc.c
178 @@ -32,11 +32,23 @@
179 #include <linux/atomic.h>
180 #include <linux/pid_namespace.h>
181
182 -#include <asm/unaligned.h>
183 -
184 #include <linux/cn_proc.h>
185
186 -#define CN_PROC_MSG_SIZE (sizeof(struct cn_msg) + sizeof(struct proc_event))
187 +/*
188 + * Size of a cn_msg followed by a proc_event structure. Since the
189 + * sizeof struct cn_msg is a multiple of 4 bytes, but not 8 bytes, we
190 + * add one 4-byte word to the size here, and then start the actual
191 + * cn_msg structure 4 bytes into the stack buffer. The result is that
192 + * the immediately following proc_event structure is aligned to 8 bytes.
193 + */
194 +#define CN_PROC_MSG_SIZE (sizeof(struct cn_msg) + sizeof(struct proc_event) + 4)
195 +
196 +/* See comment above; we test our assumption about sizeof struct cn_msg here. */
197 +static inline struct cn_msg *buffer_to_cn_msg(__u8 *buffer)
198 +{
199 + BUILD_BUG_ON(sizeof(struct cn_msg) != 20);
200 + return (struct cn_msg *)(buffer + 4);
201 +}
202
203 static atomic_t proc_event_num_listeners = ATOMIC_INIT(0);
204 static struct cb_id cn_proc_event_id = { CN_IDX_PROC, CN_VAL_PROC };
205 @@ -56,19 +68,19 @@ void proc_fork_connector(struct task_struct *task)
206 {
207 struct cn_msg *msg;
208 struct proc_event *ev;
209 - __u8 buffer[CN_PROC_MSG_SIZE];
210 + __u8 buffer[CN_PROC_MSG_SIZE] __aligned(8);
211 struct timespec ts;
212 struct task_struct *parent;
213
214 if (atomic_read(&proc_event_num_listeners) < 1)
215 return;
216
217 - msg = (struct cn_msg *)buffer;
218 + msg = buffer_to_cn_msg(buffer);
219 ev = (struct proc_event *)msg->data;
220 memset(&ev->event_data, 0, sizeof(ev->event_data));
221 get_seq(&msg->seq, &ev->cpu);
222 ktime_get_ts(&ts); /* get high res monotonic timestamp */
223 - put_unaligned(timespec_to_ns(&ts), (__u64 *)&ev->timestamp_ns);
224 + ev->timestamp_ns = timespec_to_ns(&ts);
225 ev->what = PROC_EVENT_FORK;
226 rcu_read_lock();
227 parent = rcu_dereference(task->real_parent);
228 @@ -91,17 +103,17 @@ void proc_exec_connector(struct task_struct *task)
229 struct cn_msg *msg;
230 struct proc_event *ev;
231 struct timespec ts;
232 - __u8 buffer[CN_PROC_MSG_SIZE];
233 + __u8 buffer[CN_PROC_MSG_SIZE] __aligned(8);
234
235 if (atomic_read(&proc_event_num_listeners) < 1)
236 return;
237
238 - msg = (struct cn_msg *)buffer;
239 + msg = buffer_to_cn_msg(buffer);
240 ev = (struct proc_event *)msg->data;
241 memset(&ev->event_data, 0, sizeof(ev->event_data));
242 get_seq(&msg->seq, &ev->cpu);
243 ktime_get_ts(&ts); /* get high res monotonic timestamp */
244 - put_unaligned(timespec_to_ns(&ts), (__u64 *)&ev->timestamp_ns);
245 + ev->timestamp_ns = timespec_to_ns(&ts);
246 ev->what = PROC_EVENT_EXEC;
247 ev->event_data.exec.process_pid = task->pid;
248 ev->event_data.exec.process_tgid = task->tgid;
249 @@ -117,14 +129,14 @@ void proc_id_connector(struct task_struct *task, int which_id)
250 {
251 struct cn_msg *msg;
252 struct proc_event *ev;
253 - __u8 buffer[CN_PROC_MSG_SIZE];
254 + __u8 buffer[CN_PROC_MSG_SIZE] __aligned(8);
255 struct timespec ts;
256 const struct cred *cred;
257
258 if (atomic_read(&proc_event_num_listeners) < 1)
259 return;
260
261 - msg = (struct cn_msg *)buffer;
262 + msg = buffer_to_cn_msg(buffer);
263 ev = (struct proc_event *)msg->data;
264 memset(&ev->event_data, 0, sizeof(ev->event_data));
265 ev->what = which_id;
266 @@ -145,7 +157,7 @@ void proc_id_connector(struct task_struct *task, int which_id)
267 rcu_read_unlock();
268 get_seq(&msg->seq, &ev->cpu);
269 ktime_get_ts(&ts); /* get high res monotonic timestamp */
270 - put_unaligned(timespec_to_ns(&ts), (__u64 *)&ev->timestamp_ns);
271 + ev->timestamp_ns = timespec_to_ns(&ts);
272
273 memcpy(&msg->id, &cn_proc_event_id, sizeof(msg->id));
274 msg->ack = 0; /* not used */
275 @@ -159,17 +171,17 @@ void proc_sid_connector(struct task_struct *task)
276 struct cn_msg *msg;
277 struct proc_event *ev;
278 struct timespec ts;
279 - __u8 buffer[CN_PROC_MSG_SIZE];
280 + __u8 buffer[CN_PROC_MSG_SIZE] __aligned(8);
281
282 if (atomic_read(&proc_event_num_listeners) < 1)
283 return;
284
285 - msg = (struct cn_msg *)buffer;
286 + msg = buffer_to_cn_msg(buffer);
287 ev = (struct proc_event *)msg->data;
288 memset(&ev->event_data, 0, sizeof(ev->event_data));
289 get_seq(&msg->seq, &ev->cpu);
290 ktime_get_ts(&ts); /* get high res monotonic timestamp */
291 - put_unaligned(timespec_to_ns(&ts), (__u64 *)&ev->timestamp_ns);
292 + ev->timestamp_ns = timespec_to_ns(&ts);
293 ev->what = PROC_EVENT_SID;
294 ev->event_data.sid.process_pid = task->pid;
295 ev->event_data.sid.process_tgid = task->tgid;
296 @@ -186,17 +198,17 @@ void proc_ptrace_connector(struct task_struct *task, int ptrace_id)
297 struct cn_msg *msg;
298 struct proc_event *ev;
299 struct timespec ts;
300 - __u8 buffer[CN_PROC_MSG_SIZE];
301 + __u8 buffer[CN_PROC_MSG_SIZE] __aligned(8);
302
303 if (atomic_read(&proc_event_num_listeners) < 1)
304 return;
305
306 - msg = (struct cn_msg *)buffer;
307 + msg = buffer_to_cn_msg(buffer);
308 ev = (struct proc_event *)msg->data;
309 memset(&ev->event_data, 0, sizeof(ev->event_data));
310 get_seq(&msg->seq, &ev->cpu);
311 ktime_get_ts(&ts); /* get high res monotonic timestamp */
312 - put_unaligned(timespec_to_ns(&ts), (__u64 *)&ev->timestamp_ns);
313 + ev->timestamp_ns = timespec_to_ns(&ts);
314 ev->what = PROC_EVENT_PTRACE;
315 ev->event_data.ptrace.process_pid = task->pid;
316 ev->event_data.ptrace.process_tgid = task->tgid;
317 @@ -221,17 +233,17 @@ void proc_comm_connector(struct task_struct *task)
318 struct cn_msg *msg;
319 struct proc_event *ev;
320 struct timespec ts;
321 - __u8 buffer[CN_PROC_MSG_SIZE];
322 + __u8 buffer[CN_PROC_MSG_SIZE] __aligned(8);
323
324 if (atomic_read(&proc_event_num_listeners) < 1)
325 return;
326
327 - msg = (struct cn_msg *)buffer;
328 + msg = buffer_to_cn_msg(buffer);
329 ev = (struct proc_event *)msg->data;
330 memset(&ev->event_data, 0, sizeof(ev->event_data));
331 get_seq(&msg->seq, &ev->cpu);
332 ktime_get_ts(&ts); /* get high res monotonic timestamp */
333 - put_unaligned(timespec_to_ns(&ts), (__u64 *)&ev->timestamp_ns);
334 + ev->timestamp_ns = timespec_to_ns(&ts);
335 ev->what = PROC_EVENT_COMM;
336 ev->event_data.comm.process_pid = task->pid;
337 ev->event_data.comm.process_tgid = task->tgid;
338 @@ -248,18 +260,18 @@ void proc_coredump_connector(struct task_struct *task)
339 {
340 struct cn_msg *msg;
341 struct proc_event *ev;
342 - __u8 buffer[CN_PROC_MSG_SIZE];
343 + __u8 buffer[CN_PROC_MSG_SIZE] __aligned(8);
344 struct timespec ts;
345
346 if (atomic_read(&proc_event_num_listeners) < 1)
347 return;
348
349 - msg = (struct cn_msg *)buffer;
350 + msg = buffer_to_cn_msg(buffer);
351 ev = (struct proc_event *)msg->data;
352 memset(&ev->event_data, 0, sizeof(ev->event_data));
353 get_seq(&msg->seq, &ev->cpu);
354 ktime_get_ts(&ts); /* get high res monotonic timestamp */
355 - put_unaligned(timespec_to_ns(&ts), (__u64 *)&ev->timestamp_ns);
356 + ev->timestamp_ns = timespec_to_ns(&ts);
357 ev->what = PROC_EVENT_COREDUMP;
358 ev->event_data.coredump.process_pid = task->pid;
359 ev->event_data.coredump.process_tgid = task->tgid;
360 @@ -275,18 +287,18 @@ void proc_exit_connector(struct task_struct *task)
361 {
362 struct cn_msg *msg;
363 struct proc_event *ev;
364 - __u8 buffer[CN_PROC_MSG_SIZE];
365 + __u8 buffer[CN_PROC_MSG_SIZE] __aligned(8);
366 struct timespec ts;
367
368 if (atomic_read(&proc_event_num_listeners) < 1)
369 return;
370
371 - msg = (struct cn_msg *)buffer;
372 + msg = buffer_to_cn_msg(buffer);
373 ev = (struct proc_event *)msg->data;
374 memset(&ev->event_data, 0, sizeof(ev->event_data));
375 get_seq(&msg->seq, &ev->cpu);
376 ktime_get_ts(&ts); /* get high res monotonic timestamp */
377 - put_unaligned(timespec_to_ns(&ts), (__u64 *)&ev->timestamp_ns);
378 + ev->timestamp_ns = timespec_to_ns(&ts);
379 ev->what = PROC_EVENT_EXIT;
380 ev->event_data.exit.process_pid = task->pid;
381 ev->event_data.exit.process_tgid = task->tgid;
382 @@ -312,18 +324,18 @@ static void cn_proc_ack(int err, int rcvd_seq, int rcvd_ack)
383 {
384 struct cn_msg *msg;
385 struct proc_event *ev;
386 - __u8 buffer[CN_PROC_MSG_SIZE];
387 + __u8 buffer[CN_PROC_MSG_SIZE] __aligned(8);
388 struct timespec ts;
389
390 if (atomic_read(&proc_event_num_listeners) < 1)
391 return;
392
393 - msg = (struct cn_msg *)buffer;
394 + msg = buffer_to_cn_msg(buffer);
395 ev = (struct proc_event *)msg->data;
396 memset(&ev->event_data, 0, sizeof(ev->event_data));
397 msg->seq = rcvd_seq;
398 ktime_get_ts(&ts); /* get high res monotonic timestamp */
399 - put_unaligned(timespec_to_ns(&ts), (__u64 *)&ev->timestamp_ns);
400 + ev->timestamp_ns = timespec_to_ns(&ts);
401 ev->cpu = -1;
402 ev->what = PROC_EVENT_NONE;
403 ev->event_data.ack.err = err;
404 diff --git a/drivers/gpu/drm/radeon/r600_hdmi.c b/drivers/gpu/drm/radeon/r600_hdmi.c
405 index 06022e3b9c3b..615c5b290e78 100644
406 --- a/drivers/gpu/drm/radeon/r600_hdmi.c
407 +++ b/drivers/gpu/drm/radeon/r600_hdmi.c
408 @@ -24,6 +24,7 @@
409 * Authors: Christian König
410 */
411 #include <linux/hdmi.h>
412 +#include <linux/gcd.h>
413 #include <drm/drmP.h>
414 #include <drm/radeon_drm.h>
415 #include "radeon.h"
416 @@ -57,35 +58,57 @@ enum r600_hdmi_iec_status_bits {
417 static const struct radeon_hdmi_acr r600_hdmi_predefined_acr[] = {
418 /* 32kHz 44.1kHz 48kHz */
419 /* Clock N CTS N CTS N CTS */
420 - { 25175, 4576, 28125, 7007, 31250, 6864, 28125 }, /* 25,20/1.001 MHz */
421 + { 25175, 4096, 25175, 28224, 125875, 6144, 25175 }, /* 25,20/1.001 MHz */
422 { 25200, 4096, 25200, 6272, 28000, 6144, 25200 }, /* 25.20 MHz */
423 { 27000, 4096, 27000, 6272, 30000, 6144, 27000 }, /* 27.00 MHz */
424 { 27027, 4096, 27027, 6272, 30030, 6144, 27027 }, /* 27.00*1.001 MHz */
425 { 54000, 4096, 54000, 6272, 60000, 6144, 54000 }, /* 54.00 MHz */
426 { 54054, 4096, 54054, 6272, 60060, 6144, 54054 }, /* 54.00*1.001 MHz */
427 - { 74176, 11648, 210937, 17836, 234375, 11648, 140625 }, /* 74.25/1.001 MHz */
428 + { 74176, 4096, 74176, 5733, 75335, 6144, 74176 }, /* 74.25/1.001 MHz */
429 { 74250, 4096, 74250, 6272, 82500, 6144, 74250 }, /* 74.25 MHz */
430 - { 148352, 11648, 421875, 8918, 234375, 5824, 140625 }, /* 148.50/1.001 MHz */
431 + { 148352, 4096, 148352, 5733, 150670, 6144, 148352 }, /* 148.50/1.001 MHz */
432 { 148500, 4096, 148500, 6272, 165000, 6144, 148500 }, /* 148.50 MHz */
433 - { 0, 4096, 0, 6272, 0, 6144, 0 } /* Other */
434 };
435
436 +
437 /*
438 - * calculate CTS value if it's not found in the table
439 + * calculate CTS and N values if they are not found in the table
440 */
441 -static void r600_hdmi_calc_cts(uint32_t clock, int *CTS, int N, int freq)
442 +static void r600_hdmi_calc_cts(uint32_t clock, int *CTS, int *N, int freq)
443 {
444 - u64 n;
445 - u32 d;
446 -
447 - if (*CTS == 0) {
448 - n = (u64)clock * (u64)N * 1000ULL;
449 - d = 128 * freq;
450 - do_div(n, d);
451 - *CTS = n;
452 - }
453 - DRM_DEBUG("Using ACR timing N=%d CTS=%d for frequency %d\n",
454 - N, *CTS, freq);
455 + int n, cts;
456 + unsigned long div, mul;
457 +
458 + /* Safe, but overly large values */
459 + n = 128 * freq;
460 + cts = clock * 1000;
461 +
462 + /* Smallest valid fraction */
463 + div = gcd(n, cts);
464 +
465 + n /= div;
466 + cts /= div;
467 +
468 + /*
469 + * The optimal N is 128*freq/1000. Calculate the closest larger
470 + * value that doesn't truncate any bits.
471 + */
472 + mul = ((128*freq/1000) + (n-1))/n;
473 +
474 + n *= mul;
475 + cts *= mul;
476 +
477 + /* Check that we are in spec (not always possible) */
478 + if (n < (128*freq/1500))
479 + printk(KERN_WARNING "Calculated ACR N value is too small. You may experience audio problems.\n");
480 + if (n > (128*freq/300))
481 + printk(KERN_WARNING "Calculated ACR N value is too large. You may experience audio problems.\n");
482 +
483 + *N = n;
484 + *CTS = cts;
485 +
486 + DRM_DEBUG("Calculated ACR timing N=%d CTS=%d for frequency %d\n",
487 + *N, *CTS, freq);
488 }
489
490 struct radeon_hdmi_acr r600_hdmi_acr(uint32_t clock)
491 @@ -93,15 +116,16 @@ struct radeon_hdmi_acr r600_hdmi_acr(uint32_t clock)
492 struct radeon_hdmi_acr res;
493 u8 i;
494
495 - for (i = 0; r600_hdmi_predefined_acr[i].clock != clock &&
496 - r600_hdmi_predefined_acr[i].clock != 0; i++)
497 - ;
498 - res = r600_hdmi_predefined_acr[i];
499 + /* Precalculated values for common clocks */
500 + for (i = 0; i < ARRAY_SIZE(r600_hdmi_predefined_acr); i++) {
501 + if (r600_hdmi_predefined_acr[i].clock == clock)
502 + return r600_hdmi_predefined_acr[i];
503 + }
504
505 - /* In case some CTS are missing */
506 - r600_hdmi_calc_cts(clock, &res.cts_32khz, res.n_32khz, 32000);
507 - r600_hdmi_calc_cts(clock, &res.cts_44_1khz, res.n_44_1khz, 44100);
508 - r600_hdmi_calc_cts(clock, &res.cts_48khz, res.n_48khz, 48000);
509 + /* And odd clocks get manually calculated */
510 + r600_hdmi_calc_cts(clock, &res.cts_32khz, &res.n_32khz, 32000);
511 + r600_hdmi_calc_cts(clock, &res.cts_44_1khz, &res.n_44_1khz, 44100);
512 + r600_hdmi_calc_cts(clock, &res.cts_48khz, &res.n_48khz, 48000);
513
514 return res;
515 }
516 diff --git a/drivers/hid/hid-elo.c b/drivers/hid/hid-elo.c
517 index f042a6cf8b18..55e4920f967b 100644
518 --- a/drivers/hid/hid-elo.c
519 +++ b/drivers/hid/hid-elo.c
520 @@ -181,7 +181,40 @@ fail:
521 */
522 static bool elo_broken_firmware(struct usb_device *dev)
523 {
524 - return use_fw_quirk && le16_to_cpu(dev->descriptor.bcdDevice) == 0x10d;
525 + struct usb_device *hub = dev->parent;
526 + struct usb_device *child = NULL;
527 + u16 fw_lvl = le16_to_cpu(dev->descriptor.bcdDevice);
528 + u16 child_vid, child_pid;
529 + int i;
530 +
531 + if (!use_fw_quirk)
532 + return false;
533 + if (fw_lvl != 0x10d)
534 + return false;
535 +
536 + /* iterate sibling devices of the touch controller */
537 + usb_hub_for_each_child(hub, i, child) {
538 + child_vid = le16_to_cpu(child->descriptor.idVendor);
539 + child_pid = le16_to_cpu(child->descriptor.idProduct);
540 +
541 + /*
542 + * If one of the devices below is present attached as a sibling of
543 + * the touch controller then this is a newer IBM 4820 monitor that
544 + * does not need the IBM-requested workaround if fw level is
545 + * 0x010d - aka 'M'.
546 + * No other HW can have this combination.
547 + */
548 + if (child_vid==0x04b3) {
549 + switch (child_pid) {
550 + case 0x4676: /* 4820 21x Video */
551 + case 0x4677: /* 4820 51x Video */
552 + case 0x4678: /* 4820 2Lx Video */
553 + case 0x4679: /* 4820 5Lx Video */
554 + return false;
555 + }
556 + }
557 + }
558 + return true;
559 }
560
561 static int elo_probe(struct hid_device *hdev, const struct hid_device_id *id)
562 diff --git a/drivers/hid/hid-lg.c b/drivers/hid/hid-lg.c
563 index 1bfd292cac8f..06eb45fa6331 100644
564 --- a/drivers/hid/hid-lg.c
565 +++ b/drivers/hid/hid-lg.c
566 @@ -47,6 +47,7 @@
567 #define DFP_RDESC_ORIG_SIZE 97
568 #define FV_RDESC_ORIG_SIZE 130
569 #define MOMO_RDESC_ORIG_SIZE 87
570 +#define MOMO2_RDESC_ORIG_SIZE 87
571
572 /* Fixed report descriptors for Logitech Driving Force (and Pro)
573 * wheel controllers
574 @@ -284,6 +285,54 @@ static __u8 momo_rdesc_fixed[] = {
575 0xC0 /* End Collection */
576 };
577
578 +static __u8 momo2_rdesc_fixed[] = {
579 +0x05, 0x01, /* Usage Page (Desktop), */
580 +0x09, 0x04, /* Usage (Joystik), */
581 +0xA1, 0x01, /* Collection (Application), */
582 +0xA1, 0x02, /* Collection (Logical), */
583 +0x95, 0x01, /* Report Count (1), */
584 +0x75, 0x0A, /* Report Size (10), */
585 +0x15, 0x00, /* Logical Minimum (0), */
586 +0x26, 0xFF, 0x03, /* Logical Maximum (1023), */
587 +0x35, 0x00, /* Physical Minimum (0), */
588 +0x46, 0xFF, 0x03, /* Physical Maximum (1023), */
589 +0x09, 0x30, /* Usage (X), */
590 +0x81, 0x02, /* Input (Variable), */
591 +0x95, 0x0A, /* Report Count (10), */
592 +0x75, 0x01, /* Report Size (1), */
593 +0x25, 0x01, /* Logical Maximum (1), */
594 +0x45, 0x01, /* Physical Maximum (1), */
595 +0x05, 0x09, /* Usage Page (Button), */
596 +0x19, 0x01, /* Usage Minimum (01h), */
597 +0x29, 0x0A, /* Usage Maximum (0Ah), */
598 +0x81, 0x02, /* Input (Variable), */
599 +0x06, 0x00, 0xFF, /* Usage Page (FF00h), */
600 +0x09, 0x00, /* Usage (00h), */
601 +0x95, 0x04, /* Report Count (4), */
602 +0x81, 0x02, /* Input (Variable), */
603 +0x95, 0x01, /* Report Count (1), */
604 +0x75, 0x08, /* Report Size (8), */
605 +0x26, 0xFF, 0x00, /* Logical Maximum (255), */
606 +0x46, 0xFF, 0x00, /* Physical Maximum (255), */
607 +0x09, 0x01, /* Usage (01h), */
608 +0x81, 0x02, /* Input (Variable), */
609 +0x05, 0x01, /* Usage Page (Desktop), */
610 +0x09, 0x31, /* Usage (Y), */
611 +0x81, 0x02, /* Input (Variable), */
612 +0x09, 0x32, /* Usage (Z), */
613 +0x81, 0x02, /* Input (Variable), */
614 +0x06, 0x00, 0xFF, /* Usage Page (FF00h), */
615 +0x09, 0x00, /* Usage (00h), */
616 +0x81, 0x02, /* Input (Variable), */
617 +0xC0, /* End Collection, */
618 +0xA1, 0x02, /* Collection (Logical), */
619 +0x09, 0x02, /* Usage (02h), */
620 +0x95, 0x07, /* Report Count (7), */
621 +0x91, 0x02, /* Output (Variable), */
622 +0xC0, /* End Collection, */
623 +0xC0 /* End Collection */
624 +};
625 +
626 /*
627 * Certain Logitech keyboards send in report #3 keys which are far
628 * above the logical maximum described in descriptor. This extends
629 @@ -343,6 +392,15 @@ static __u8 *lg_report_fixup(struct hid_device *hdev, __u8 *rdesc,
630 }
631 break;
632
633 + case USB_DEVICE_ID_LOGITECH_MOMO_WHEEL2:
634 + if (*rsize == MOMO2_RDESC_ORIG_SIZE) {
635 + hid_info(hdev,
636 + "fixing up Logitech Momo Racing Force (Black) report descriptor\n");
637 + rdesc = momo2_rdesc_fixed;
638 + *rsize = sizeof(momo2_rdesc_fixed);
639 + }
640 + break;
641 +
642 case USB_DEVICE_ID_LOGITECH_VIBRATION_WHEEL:
643 if (*rsize == FV_RDESC_ORIG_SIZE) {
644 hid_info(hdev,
645 diff --git a/drivers/iommu/intel-iommu.c b/drivers/iommu/intel-iommu.c
646 index 15e9b57e9cf0..40203ada635e 100644
647 --- a/drivers/iommu/intel-iommu.c
648 +++ b/drivers/iommu/intel-iommu.c
649 @@ -782,7 +782,11 @@ static struct dma_pte *pfn_to_dma_pte(struct dmar_domain *domain,
650 int offset;
651
652 BUG_ON(!domain->pgd);
653 - BUG_ON(addr_width < BITS_PER_LONG && pfn >> addr_width);
654 +
655 + if (addr_width < BITS_PER_LONG && pfn >> addr_width)
656 + /* Address beyond IOMMU's addressing capabilities. */
657 + return NULL;
658 +
659 parent = domain->pgd;
660
661 while (level > 0) {
662 diff --git a/drivers/iommu/intel_irq_remapping.c b/drivers/iommu/intel_irq_remapping.c
663 index f71673dbb23d..b97d70b1abe0 100644
664 --- a/drivers/iommu/intel_irq_remapping.c
665 +++ b/drivers/iommu/intel_irq_remapping.c
666 @@ -525,12 +525,13 @@ static int __init intel_irq_remapping_supported(void)
667 if (disable_irq_remap)
668 return 0;
669 if (irq_remap_broken) {
670 - WARN_TAINT(1, TAINT_FIRMWARE_WORKAROUND,
671 - "This system BIOS has enabled interrupt remapping\n"
672 - "on a chipset that contains an erratum making that\n"
673 - "feature unstable. To maintain system stability\n"
674 - "interrupt remapping is being disabled. Please\n"
675 - "contact your BIOS vendor for an update\n");
676 + printk(KERN_WARNING
677 + "This system BIOS has enabled interrupt remapping\n"
678 + "on a chipset that contains an erratum making that\n"
679 + "feature unstable. To maintain system stability\n"
680 + "interrupt remapping is being disabled. Please\n"
681 + "contact your BIOS vendor for an update\n");
682 + add_taint(TAINT_FIRMWARE_WORKAROUND, LOCKDEP_STILL_OK);
683 disable_irq_remap = 1;
684 return 0;
685 }
686 diff --git a/drivers/isdn/isdnloop/isdnloop.c b/drivers/isdn/isdnloop/isdnloop.c
687 index baf2686aa8eb..02125e6a9109 100644
688 --- a/drivers/isdn/isdnloop/isdnloop.c
689 +++ b/drivers/isdn/isdnloop/isdnloop.c
690 @@ -1083,8 +1083,10 @@ isdnloop_start(isdnloop_card *card, isdnloop_sdef *sdefp)
691 spin_unlock_irqrestore(&card->isdnloop_lock, flags);
692 return -ENOMEM;
693 }
694 - for (i = 0; i < 3; i++)
695 - strcpy(card->s0num[i], sdef.num[i]);
696 + for (i = 0; i < 3; i++) {
697 + strlcpy(card->s0num[i], sdef.num[i],
698 + sizeof(card->s0num[0]));
699 + }
700 break;
701 case ISDN_PTYPE_1TR6:
702 if (isdnloop_fake(card, "DRV1.04TC-1TR6-CAPI-CNS-BASIS-29.11.95",
703 @@ -1097,7 +1099,7 @@ isdnloop_start(isdnloop_card *card, isdnloop_sdef *sdefp)
704 spin_unlock_irqrestore(&card->isdnloop_lock, flags);
705 return -ENOMEM;
706 }
707 - strcpy(card->s0num[0], sdef.num[0]);
708 + strlcpy(card->s0num[0], sdef.num[0], sizeof(card->s0num[0]));
709 card->s0num[1][0] = '\0';
710 card->s0num[2][0] = '\0';
711 break;
712 diff --git a/drivers/isdn/mISDN/socket.c b/drivers/isdn/mISDN/socket.c
713 index e47dcb9d1e91..5cefb479c707 100644
714 --- a/drivers/isdn/mISDN/socket.c
715 +++ b/drivers/isdn/mISDN/socket.c
716 @@ -117,7 +117,6 @@ mISDN_sock_recvmsg(struct kiocb *iocb, struct socket *sock,
717 {
718 struct sk_buff *skb;
719 struct sock *sk = sock->sk;
720 - struct sockaddr_mISDN *maddr;
721
722 int copied, err;
723
724 @@ -135,9 +134,9 @@ mISDN_sock_recvmsg(struct kiocb *iocb, struct socket *sock,
725 if (!skb)
726 return err;
727
728 - if (msg->msg_namelen >= sizeof(struct sockaddr_mISDN)) {
729 - msg->msg_namelen = sizeof(struct sockaddr_mISDN);
730 - maddr = (struct sockaddr_mISDN *)msg->msg_name;
731 + if (msg->msg_name) {
732 + struct sockaddr_mISDN *maddr = msg->msg_name;
733 +
734 maddr->family = AF_ISDN;
735 maddr->dev = _pms(sk)->dev->id;
736 if ((sk->sk_protocol == ISDN_P_LAPD_TE) ||
737 @@ -150,11 +149,7 @@ mISDN_sock_recvmsg(struct kiocb *iocb, struct socket *sock,
738 maddr->sapi = _pms(sk)->ch.addr & 0xFF;
739 maddr->tei = (_pms(sk)->ch.addr >> 8) & 0xFF;
740 }
741 - } else {
742 - if (msg->msg_namelen)
743 - printk(KERN_WARNING "%s: too small namelen %d\n",
744 - __func__, msg->msg_namelen);
745 - msg->msg_namelen = 0;
746 + msg->msg_namelen = sizeof(*maddr);
747 }
748
749 copied = skb->len + MISDN_HEADER_LEN;
750 diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c
751 index e4109f618c7b..8a0665d04567 100644
752 --- a/drivers/md/raid5.c
753 +++ b/drivers/md/raid5.c
754 @@ -5214,15 +5214,18 @@ raid5_show_group_thread_cnt(struct mddev *mddev, char *page)
755 return 0;
756 }
757
758 -static int alloc_thread_groups(struct r5conf *conf, int cnt);
759 +static int alloc_thread_groups(struct r5conf *conf, int cnt,
760 + int *group_cnt,
761 + int *worker_cnt_per_group,
762 + struct r5worker_group **worker_groups);
763 static ssize_t
764 raid5_store_group_thread_cnt(struct mddev *mddev, const char *page, size_t len)
765 {
766 struct r5conf *conf = mddev->private;
767 unsigned long new;
768 int err;
769 - struct r5worker_group *old_groups;
770 - int old_group_cnt;
771 + struct r5worker_group *new_groups, *old_groups;
772 + int group_cnt, worker_cnt_per_group;
773
774 if (len >= PAGE_SIZE)
775 return -EINVAL;
776 @@ -5238,17 +5241,19 @@ raid5_store_group_thread_cnt(struct mddev *mddev, const char *page, size_t len)
777 mddev_suspend(mddev);
778
779 old_groups = conf->worker_groups;
780 - old_group_cnt = conf->worker_cnt_per_group;
781 -
782 if (old_groups)
783 flush_workqueue(raid5_wq);
784
785 - conf->worker_groups = NULL;
786 - err = alloc_thread_groups(conf, new);
787 - if (err) {
788 - conf->worker_groups = old_groups;
789 - conf->worker_cnt_per_group = old_group_cnt;
790 - } else {
791 + err = alloc_thread_groups(conf, new,
792 + &group_cnt, &worker_cnt_per_group,
793 + &new_groups);
794 + if (!err) {
795 + spin_lock_irq(&conf->device_lock);
796 + conf->group_cnt = group_cnt;
797 + conf->worker_cnt_per_group = worker_cnt_per_group;
798 + conf->worker_groups = new_groups;
799 + spin_unlock_irq(&conf->device_lock);
800 +
801 if (old_groups)
802 kfree(old_groups[0].workers);
803 kfree(old_groups);
804 @@ -5278,33 +5283,36 @@ static struct attribute_group raid5_attrs_group = {
805 .attrs = raid5_attrs,
806 };
807
808 -static int alloc_thread_groups(struct r5conf *conf, int cnt)
809 +static int alloc_thread_groups(struct r5conf *conf, int cnt,
810 + int *group_cnt,
811 + int *worker_cnt_per_group,
812 + struct r5worker_group **worker_groups)
813 {
814 int i, j;
815 ssize_t size;
816 struct r5worker *workers;
817
818 - conf->worker_cnt_per_group = cnt;
819 + *worker_cnt_per_group = cnt;
820 if (cnt == 0) {
821 - conf->worker_groups = NULL;
822 + *group_cnt = 0;
823 + *worker_groups = NULL;
824 return 0;
825 }
826 - conf->group_cnt = num_possible_nodes();
827 + *group_cnt = num_possible_nodes();
828 size = sizeof(struct r5worker) * cnt;
829 - workers = kzalloc(size * conf->group_cnt, GFP_NOIO);
830 - conf->worker_groups = kzalloc(sizeof(struct r5worker_group) *
831 - conf->group_cnt, GFP_NOIO);
832 - if (!conf->worker_groups || !workers) {
833 + workers = kzalloc(size * *group_cnt, GFP_NOIO);
834 + *worker_groups = kzalloc(sizeof(struct r5worker_group) *
835 + *group_cnt, GFP_NOIO);
836 + if (!*worker_groups || !workers) {
837 kfree(workers);
838 - kfree(conf->worker_groups);
839 - conf->worker_groups = NULL;
840 + kfree(*worker_groups);
841 return -ENOMEM;
842 }
843
844 - for (i = 0; i < conf->group_cnt; i++) {
845 + for (i = 0; i < *group_cnt; i++) {
846 struct r5worker_group *group;
847
848 - group = &conf->worker_groups[i];
849 + group = &(*worker_groups)[i];
850 INIT_LIST_HEAD(&group->handle_list);
851 group->conf = conf;
852 group->workers = workers + i * cnt;
853 @@ -5462,6 +5470,8 @@ static struct r5conf *setup_conf(struct mddev *mddev)
854 struct md_rdev *rdev;
855 struct disk_info *disk;
856 char pers_name[6];
857 + int group_cnt, worker_cnt_per_group;
858 + struct r5worker_group *new_group;
859
860 if (mddev->new_level != 5
861 && mddev->new_level != 4
862 @@ -5496,7 +5506,12 @@ static struct r5conf *setup_conf(struct mddev *mddev)
863 if (conf == NULL)
864 goto abort;
865 /* Don't enable multi-threading by default*/
866 - if (alloc_thread_groups(conf, 0))
867 + if (!alloc_thread_groups(conf, 0, &group_cnt, &worker_cnt_per_group,
868 + &new_group)) {
869 + conf->group_cnt = group_cnt;
870 + conf->worker_cnt_per_group = worker_cnt_per_group;
871 + conf->worker_groups = new_group;
872 + } else
873 goto abort;
874 spin_lock_init(&conf->device_lock);
875 seqcount_init(&conf->gen_lock);
876 diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
877 index e883bfe2e727..dd8057d0bae7 100644
878 --- a/drivers/net/bonding/bond_main.c
879 +++ b/drivers/net/bonding/bond_main.c
880 @@ -3395,20 +3395,20 @@ static void bond_set_rx_mode(struct net_device *bond_dev)
881 struct bonding *bond = netdev_priv(bond_dev);
882 struct slave *slave;
883
884 - ASSERT_RTNL();
885 -
886 + rcu_read_lock();
887 if (USES_PRIMARY(bond->params.mode)) {
888 - slave = rtnl_dereference(bond->curr_active_slave);
889 + slave = rcu_dereference(bond->curr_active_slave);
890 if (slave) {
891 dev_uc_sync(slave->dev, bond_dev);
892 dev_mc_sync(slave->dev, bond_dev);
893 }
894 } else {
895 - bond_for_each_slave(bond, slave) {
896 + bond_for_each_slave_rcu(bond, slave) {
897 dev_uc_sync_multiple(slave->dev, bond_dev);
898 dev_mc_sync_multiple(slave->dev, bond_dev);
899 }
900 }
901 + rcu_read_unlock();
902 }
903
904 static int bond_neigh_init(struct neighbour *n)
905 diff --git a/drivers/net/bonding/bond_sysfs.c b/drivers/net/bonding/bond_sysfs.c
906 index c29b836749b6..b60f95b2196e 100644
907 --- a/drivers/net/bonding/bond_sysfs.c
908 +++ b/drivers/net/bonding/bond_sysfs.c
909 @@ -587,8 +587,9 @@ static ssize_t bonding_store_arp_interval(struct device *d,
910 goto out;
911 }
912 if (bond->params.mode == BOND_MODE_ALB ||
913 - bond->params.mode == BOND_MODE_TLB) {
914 - pr_info("%s: ARP monitoring cannot be used with ALB/TLB. Only MII monitoring is supported on %s.\n",
915 + bond->params.mode == BOND_MODE_TLB ||
916 + bond->params.mode == BOND_MODE_8023AD) {
917 + pr_info("%s: ARP monitoring cannot be used with ALB/TLB/802.3ad. Only MII monitoring is supported on %s.\n",
918 bond->dev->name, bond->dev->name);
919 ret = -EINVAL;
920 goto out;
921 @@ -759,6 +760,8 @@ static ssize_t bonding_store_downdelay(struct device *d,
922 int new_value, ret = count;
923 struct bonding *bond = to_bond(d);
924
925 + if (!rtnl_trylock())
926 + return restart_syscall();
927 if (!(bond->params.miimon)) {
928 pr_err("%s: Unable to set down delay as MII monitoring is disabled\n",
929 bond->dev->name);
930 @@ -792,6 +795,7 @@ static ssize_t bonding_store_downdelay(struct device *d,
931 }
932
933 out:
934 + rtnl_unlock();
935 return ret;
936 }
937 static DEVICE_ATTR(downdelay, S_IRUGO | S_IWUSR,
938 @@ -814,6 +818,8 @@ static ssize_t bonding_store_updelay(struct device *d,
939 int new_value, ret = count;
940 struct bonding *bond = to_bond(d);
941
942 + if (!rtnl_trylock())
943 + return restart_syscall();
944 if (!(bond->params.miimon)) {
945 pr_err("%s: Unable to set up delay as MII monitoring is disabled\n",
946 bond->dev->name);
947 @@ -847,6 +853,7 @@ static ssize_t bonding_store_updelay(struct device *d,
948 }
949
950 out:
951 + rtnl_unlock();
952 return ret;
953 }
954 static DEVICE_ATTR(updelay, S_IRUGO | S_IWUSR,
955 diff --git a/drivers/net/ethernet/marvell/mv643xx_eth.c b/drivers/net/ethernet/marvell/mv643xx_eth.c
956 index 2c210ec35d59..f2f6d85f3788 100644
957 --- a/drivers/net/ethernet/marvell/mv643xx_eth.c
958 +++ b/drivers/net/ethernet/marvell/mv643xx_eth.c
959 @@ -2890,6 +2890,8 @@ static int mv643xx_eth_probe(struct platform_device *pdev)
960 PHY_INTERFACE_MODE_GMII);
961 if (!mp->phy)
962 err = -ENODEV;
963 + else
964 + phy_addr_set(mp, mp->phy->addr);
965 } else if (pd->phy_addr != MV643XX_ETH_PHY_NONE) {
966 mp->phy = phy_scan(mp, pd->phy_addr);
967
968 diff --git a/drivers/net/ethernet/mellanox/mlx4/en_main.c b/drivers/net/ethernet/mellanox/mlx4/en_main.c
969 index a071cda2dd04..0d087b03a7b0 100644
970 --- a/drivers/net/ethernet/mellanox/mlx4/en_main.c
971 +++ b/drivers/net/ethernet/mellanox/mlx4/en_main.c
972 @@ -264,6 +264,10 @@ static void *mlx4_en_add(struct mlx4_dev *dev)
973 mlx4_foreach_port(i, dev, MLX4_PORT_TYPE_ETH)
974 mdev->port_cnt++;
975
976 + /* Initialize time stamp mechanism */
977 + if (mdev->dev->caps.flags2 & MLX4_DEV_CAP_FLAG2_TS)
978 + mlx4_en_init_timestamp(mdev);
979 +
980 mlx4_foreach_port(i, dev, MLX4_PORT_TYPE_ETH) {
981 if (!dev->caps.comp_pool) {
982 mdev->profile.prof[i].rx_ring_num =
983 @@ -301,10 +305,6 @@ static void *mlx4_en_add(struct mlx4_dev *dev)
984 mdev->pndev[i] = NULL;
985 }
986
987 - /* Initialize time stamp mechanism */
988 - if (mdev->dev->caps.flags2 & MLX4_DEV_CAP_FLAG2_TS)
989 - mlx4_en_init_timestamp(mdev);
990 -
991 return mdev;
992
993 err_mr:
994 diff --git a/drivers/net/ethernet/realtek/8139cp.c b/drivers/net/ethernet/realtek/8139cp.c
995 index d2e591955bdd..0095af50fb81 100644
996 --- a/drivers/net/ethernet/realtek/8139cp.c
997 +++ b/drivers/net/ethernet/realtek/8139cp.c
998 @@ -678,9 +678,6 @@ static void cp_tx (struct cp_private *cp)
999 le32_to_cpu(txd->opts1) & 0xffff,
1000 PCI_DMA_TODEVICE);
1001
1002 - bytes_compl += skb->len;
1003 - pkts_compl++;
1004 -
1005 if (status & LastFrag) {
1006 if (status & (TxError | TxFIFOUnder)) {
1007 netif_dbg(cp, tx_err, cp->dev,
1008 @@ -702,6 +699,8 @@ static void cp_tx (struct cp_private *cp)
1009 netif_dbg(cp, tx_done, cp->dev,
1010 "tx done, slot %d\n", tx_tail);
1011 }
1012 + bytes_compl += skb->len;
1013 + pkts_compl++;
1014 dev_kfree_skb_irq(skb);
1015 }
1016
1017 diff --git a/drivers/net/ethernet/realtek/r8169.c b/drivers/net/ethernet/realtek/r8169.c
1018 index 3397cee89777..fb3f8dc1b8b1 100644
1019 --- a/drivers/net/ethernet/realtek/r8169.c
1020 +++ b/drivers/net/ethernet/realtek/r8169.c
1021 @@ -3465,6 +3465,11 @@ static void rtl8168g_1_hw_phy_config(struct rtl8169_private *tp)
1022 rtl_writephy(tp, 0x14, 0x9065);
1023 rtl_writephy(tp, 0x14, 0x1065);
1024
1025 + /* Check ALDPS bit, disable it if enabled */
1026 + rtl_writephy(tp, 0x1f, 0x0a43);
1027 + if (rtl_readphy(tp, 0x10) & 0x0004)
1028 + rtl_w1w0_phy(tp, 0x10, 0x0000, 0x0004);
1029 +
1030 rtl_writephy(tp, 0x1f, 0x0000);
1031 }
1032
1033 diff --git a/drivers/net/ethernet/smsc/smc91x.h b/drivers/net/ethernet/smsc/smc91x.h
1034 index 98eedb90cdc3..fc3e25ca7135 100644
1035 --- a/drivers/net/ethernet/smsc/smc91x.h
1036 +++ b/drivers/net/ethernet/smsc/smc91x.h
1037 @@ -46,7 +46,8 @@
1038 defined(CONFIG_MACH_LITTLETON) ||\
1039 defined(CONFIG_MACH_ZYLONITE2) ||\
1040 defined(CONFIG_ARCH_VIPER) ||\
1041 - defined(CONFIG_MACH_STARGATE2)
1042 + defined(CONFIG_MACH_STARGATE2) ||\
1043 + defined(CONFIG_ARCH_VERSATILE)
1044
1045 #include <asm/mach-types.h>
1046
1047 @@ -154,6 +155,8 @@ static inline void SMC_outw(u16 val, void __iomem *ioaddr, int reg)
1048 #define SMC_outl(v, a, r) writel(v, (a) + (r))
1049 #define SMC_insl(a, r, p, l) readsl((a) + (r), p, l)
1050 #define SMC_outsl(a, r, p, l) writesl((a) + (r), p, l)
1051 +#define SMC_insw(a, r, p, l) readsw((a) + (r), p, l)
1052 +#define SMC_outsw(a, r, p, l) writesw((a) + (r), p, l)
1053 #define SMC_IRQ_FLAGS (-1) /* from resource */
1054
1055 /* We actually can't write halfwords properly if not word aligned */
1056 @@ -206,23 +209,6 @@ SMC_outw(u16 val, void __iomem *ioaddr, int reg)
1057 #define RPC_LSA_DEFAULT RPC_LED_TX_RX
1058 #define RPC_LSB_DEFAULT RPC_LED_100_10
1059
1060 -#elif defined(CONFIG_ARCH_VERSATILE)
1061 -
1062 -#define SMC_CAN_USE_8BIT 1
1063 -#define SMC_CAN_USE_16BIT 1
1064 -#define SMC_CAN_USE_32BIT 1
1065 -#define SMC_NOWAIT 1
1066 -
1067 -#define SMC_inb(a, r) readb((a) + (r))
1068 -#define SMC_inw(a, r) readw((a) + (r))
1069 -#define SMC_inl(a, r) readl((a) + (r))
1070 -#define SMC_outb(v, a, r) writeb(v, (a) + (r))
1071 -#define SMC_outw(v, a, r) writew(v, (a) + (r))
1072 -#define SMC_outl(v, a, r) writel(v, (a) + (r))
1073 -#define SMC_insl(a, r, p, l) readsl((a) + (r), p, l)
1074 -#define SMC_outsl(a, r, p, l) writesl((a) + (r), p, l)
1075 -#define SMC_IRQ_FLAGS (-1) /* from resource */
1076 -
1077 #elif defined(CONFIG_MN10300)
1078
1079 /*
1080 diff --git a/drivers/net/ethernet/via/via-velocity.c b/drivers/net/ethernet/via/via-velocity.c
1081 index d022bf936572..ad61d26a44f3 100644
1082 --- a/drivers/net/ethernet/via/via-velocity.c
1083 +++ b/drivers/net/ethernet/via/via-velocity.c
1084 @@ -2172,16 +2172,13 @@ static int velocity_poll(struct napi_struct *napi, int budget)
1085 unsigned int rx_done;
1086 unsigned long flags;
1087
1088 - spin_lock_irqsave(&vptr->lock, flags);
1089 /*
1090 * Do rx and tx twice for performance (taken from the VIA
1091 * out-of-tree driver).
1092 */
1093 - rx_done = velocity_rx_srv(vptr, budget / 2);
1094 - velocity_tx_srv(vptr);
1095 - rx_done += velocity_rx_srv(vptr, budget - rx_done);
1096 + rx_done = velocity_rx_srv(vptr, budget);
1097 + spin_lock_irqsave(&vptr->lock, flags);
1098 velocity_tx_srv(vptr);
1099 -
1100 /* If budget not fully consumed, exit the polling mode */
1101 if (rx_done < budget) {
1102 napi_complete(napi);
1103 @@ -2342,6 +2339,8 @@ static int velocity_change_mtu(struct net_device *dev, int new_mtu)
1104 if (ret < 0)
1105 goto out_free_tmp_vptr_1;
1106
1107 + napi_disable(&vptr->napi);
1108 +
1109 spin_lock_irqsave(&vptr->lock, flags);
1110
1111 netif_stop_queue(dev);
1112 @@ -2362,6 +2361,8 @@ static int velocity_change_mtu(struct net_device *dev, int new_mtu)
1113
1114 velocity_give_many_rx_descs(vptr);
1115
1116 + napi_enable(&vptr->napi);
1117 +
1118 mac_enable_int(vptr->mac_regs);
1119 netif_start_queue(dev);
1120
1121 diff --git a/drivers/net/macvtap.c b/drivers/net/macvtap.c
1122 index 9dccb1edfd2a..dc76670c2f2a 100644
1123 --- a/drivers/net/macvtap.c
1124 +++ b/drivers/net/macvtap.c
1125 @@ -628,6 +628,7 @@ static ssize_t macvtap_get_user(struct macvtap_queue *q, struct msghdr *m,
1126 const struct iovec *iv, unsigned long total_len,
1127 size_t count, int noblock)
1128 {
1129 + int good_linear = SKB_MAX_HEAD(NET_IP_ALIGN);
1130 struct sk_buff *skb;
1131 struct macvlan_dev *vlan;
1132 unsigned long len = total_len;
1133 @@ -670,6 +671,8 @@ static ssize_t macvtap_get_user(struct macvtap_queue *q, struct msghdr *m,
1134
1135 if (m && m->msg_control && sock_flag(&q->sk, SOCK_ZEROCOPY)) {
1136 copylen = vnet_hdr.hdr_len ? vnet_hdr.hdr_len : GOODCOPY_LEN;
1137 + if (copylen > good_linear)
1138 + copylen = good_linear;
1139 linear = copylen;
1140 if (iov_pages(iv, vnet_hdr_len + copylen, count)
1141 <= MAX_SKB_FRAGS)
1142 @@ -678,7 +681,10 @@ static ssize_t macvtap_get_user(struct macvtap_queue *q, struct msghdr *m,
1143
1144 if (!zerocopy) {
1145 copylen = len;
1146 - linear = vnet_hdr.hdr_len;
1147 + if (vnet_hdr.hdr_len > good_linear)
1148 + linear = good_linear;
1149 + else
1150 + linear = vnet_hdr.hdr_len;
1151 }
1152
1153 skb = macvtap_alloc_skb(&q->sk, NET_IP_ALIGN, copylen,
1154 diff --git a/drivers/net/ppp/pppoe.c b/drivers/net/ppp/pppoe.c
1155 index 5f66e30d9823..82ee6ed954cb 100644
1156 --- a/drivers/net/ppp/pppoe.c
1157 +++ b/drivers/net/ppp/pppoe.c
1158 @@ -979,8 +979,6 @@ static int pppoe_recvmsg(struct kiocb *iocb, struct socket *sock,
1159 if (error < 0)
1160 goto end;
1161
1162 - m->msg_namelen = 0;
1163 -
1164 if (skb) {
1165 total_len = min_t(size_t, total_len, skb->len);
1166 error = skb_copy_datagram_iovec(skb, 0, m->msg_iov, total_len);
1167 diff --git a/drivers/net/team/team.c b/drivers/net/team/team.c
1168 index 50e43e64d51d..6327df255404 100644
1169 --- a/drivers/net/team/team.c
1170 +++ b/drivers/net/team/team.c
1171 @@ -1366,6 +1366,8 @@ static int team_user_linkup_option_get(struct team *team,
1172 return 0;
1173 }
1174
1175 +static void __team_carrier_check(struct team *team);
1176 +
1177 static int team_user_linkup_option_set(struct team *team,
1178 struct team_gsetter_ctx *ctx)
1179 {
1180 @@ -1373,6 +1375,7 @@ static int team_user_linkup_option_set(struct team *team,
1181
1182 port->user.linkup = ctx->data.bool_val;
1183 team_refresh_port_linkup(port);
1184 + __team_carrier_check(port->team);
1185 return 0;
1186 }
1187
1188 @@ -1392,6 +1395,7 @@ static int team_user_linkup_en_option_set(struct team *team,
1189
1190 port->user.linkup_enabled = ctx->data.bool_val;
1191 team_refresh_port_linkup(port);
1192 + __team_carrier_check(port->team);
1193 return 0;
1194 }
1195
1196 diff --git a/drivers/net/tun.c b/drivers/net/tun.c
1197 index 7cb105c103fe..782e38bfc1ee 100644
1198 --- a/drivers/net/tun.c
1199 +++ b/drivers/net/tun.c
1200 @@ -981,6 +981,7 @@ static ssize_t tun_get_user(struct tun_struct *tun, struct tun_file *tfile,
1201 struct sk_buff *skb;
1202 size_t len = total_len, align = NET_SKB_PAD, linear;
1203 struct virtio_net_hdr gso = { 0 };
1204 + int good_linear;
1205 int offset = 0;
1206 int copylen;
1207 bool zerocopy = false;
1208 @@ -1021,12 +1022,16 @@ static ssize_t tun_get_user(struct tun_struct *tun, struct tun_file *tfile,
1209 return -EINVAL;
1210 }
1211
1212 + good_linear = SKB_MAX_HEAD(align);
1213 +
1214 if (msg_control) {
1215 /* There are 256 bytes to be copied in skb, so there is
1216 * enough room for skb expand head in case it is used.
1217 * The rest of the buffer is mapped from userspace.
1218 */
1219 copylen = gso.hdr_len ? gso.hdr_len : GOODCOPY_LEN;
1220 + if (copylen > good_linear)
1221 + copylen = good_linear;
1222 linear = copylen;
1223 if (iov_pages(iv, offset + copylen, count) <= MAX_SKB_FRAGS)
1224 zerocopy = true;
1225 @@ -1034,7 +1039,10 @@ static ssize_t tun_get_user(struct tun_struct *tun, struct tun_file *tfile,
1226
1227 if (!zerocopy) {
1228 copylen = len;
1229 - linear = gso.hdr_len;
1230 + if (gso.hdr_len > good_linear)
1231 + linear = good_linear;
1232 + else
1233 + linear = gso.hdr_len;
1234 }
1235
1236 skb = tun_alloc_skb(tfile, align, copylen, linear, noblock);
1237 diff --git a/drivers/net/usb/usbnet.c b/drivers/net/usb/usbnet.c
1238 index 90a429b7ebad..8494bb53ebdc 100644
1239 --- a/drivers/net/usb/usbnet.c
1240 +++ b/drivers/net/usb/usbnet.c
1241 @@ -204,9 +204,6 @@ static void intr_complete (struct urb *urb)
1242 break;
1243 }
1244
1245 - if (!netif_running (dev->net))
1246 - return;
1247 -
1248 status = usb_submit_urb (urb, GFP_ATOMIC);
1249 if (status != 0)
1250 netif_err(dev, timer, dev->net,
1251 diff --git a/drivers/net/wireless/rt2x00/rt2800.h b/drivers/net/wireless/rt2x00/rt2800.h
1252 index fa33b5edf931..e3eb95292a7f 100644
1253 --- a/drivers/net/wireless/rt2x00/rt2800.h
1254 +++ b/drivers/net/wireless/rt2x00/rt2800.h
1255 @@ -52,6 +52,7 @@
1256 * RF3322 2.4G 2T2R(RT3352/RT3371/RT3372/RT3391/RT3392)
1257 * RF3053 2.4G/5G 3T3R(RT3883/RT3563/RT3573/RT3593/RT3662)
1258 * RF5592 2.4G/5G 2T2R
1259 + * RF3070 2.4G 1T1R
1260 * RF5360 2.4G 1T1R
1261 * RF5370 2.4G 1T1R
1262 * RF5390 2.4G 1T1R
1263 @@ -70,6 +71,7 @@
1264 #define RF3322 0x000c
1265 #define RF3053 0x000d
1266 #define RF5592 0x000f
1267 +#define RF3070 0x3070
1268 #define RF3290 0x3290
1269 #define RF5360 0x5360
1270 #define RF5370 0x5370
1271 diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c b/drivers/net/wireless/rt2x00/rt2800lib.c
1272 index 14007870302b..446eadeaaef6 100644
1273 --- a/drivers/net/wireless/rt2x00/rt2800lib.c
1274 +++ b/drivers/net/wireless/rt2x00/rt2800lib.c
1275 @@ -3152,6 +3152,7 @@ static void rt2800_config_channel(struct rt2x00_dev *rt2x00dev,
1276 case RF3322:
1277 rt2800_config_channel_rf3322(rt2x00dev, conf, rf, info);
1278 break;
1279 + case RF3070:
1280 case RF5360:
1281 case RF5370:
1282 case RF5372:
1283 @@ -3166,7 +3167,8 @@ static void rt2800_config_channel(struct rt2x00_dev *rt2x00dev,
1284 rt2800_config_channel_rf2xxx(rt2x00dev, conf, rf, info);
1285 }
1286
1287 - if (rt2x00_rf(rt2x00dev, RF3290) ||
1288 + if (rt2x00_rf(rt2x00dev, RF3070) ||
1289 + rt2x00_rf(rt2x00dev, RF3290) ||
1290 rt2x00_rf(rt2x00dev, RF3322) ||
1291 rt2x00_rf(rt2x00dev, RF5360) ||
1292 rt2x00_rf(rt2x00dev, RF5370) ||
1293 @@ -4264,6 +4266,7 @@ void rt2800_vco_calibration(struct rt2x00_dev *rt2x00dev)
1294 rt2800_rfcsr_write(rt2x00dev, 7, rfcsr);
1295 break;
1296 case RF3053:
1297 + case RF3070:
1298 case RF3290:
1299 case RF5360:
1300 case RF5370:
1301 @@ -7024,6 +7027,7 @@ static int rt2800_init_eeprom(struct rt2x00_dev *rt2x00dev)
1302 case RF3022:
1303 case RF3052:
1304 case RF3053:
1305 + case RF3070:
1306 case RF3290:
1307 case RF3320:
1308 case RF3322:
1309 @@ -7546,6 +7550,7 @@ static int rt2800_probe_hw_mode(struct rt2x00_dev *rt2x00dev)
1310 rt2x00_rf(rt2x00dev, RF2020) ||
1311 rt2x00_rf(rt2x00dev, RF3021) ||
1312 rt2x00_rf(rt2x00dev, RF3022) ||
1313 + rt2x00_rf(rt2x00dev, RF3070) ||
1314 rt2x00_rf(rt2x00dev, RF3290) ||
1315 rt2x00_rf(rt2x00dev, RF3320) ||
1316 rt2x00_rf(rt2x00dev, RF3322) ||
1317 @@ -7674,6 +7679,7 @@ static int rt2800_probe_hw_mode(struct rt2x00_dev *rt2x00dev)
1318 case RF3320:
1319 case RF3052:
1320 case RF3053:
1321 + case RF3070:
1322 case RF3290:
1323 case RF5360:
1324 case RF5370:
1325 diff --git a/drivers/net/xen-netback/netback.c b/drivers/net/xen-netback/netback.c
1326 index 900da4b243ad..625585034ef4 100644
1327 --- a/drivers/net/xen-netback/netback.c
1328 +++ b/drivers/net/xen-netback/netback.c
1329 @@ -39,6 +39,7 @@
1330 #include <linux/udp.h>
1331
1332 #include <net/tcp.h>
1333 +#include <net/ip6_checksum.h>
1334
1335 #include <xen/xen.h>
1336 #include <xen/events.h>
1337 diff --git a/drivers/usb/musb/davinci.c b/drivers/usb/musb/davinci.c
1338 index ed0834e2b72e..ab69245f86dc 100644
1339 --- a/drivers/usb/musb/davinci.c
1340 +++ b/drivers/usb/musb/davinci.c
1341 @@ -509,7 +509,7 @@ static u64 davinci_dmamask = DMA_BIT_MASK(32);
1342
1343 static int davinci_probe(struct platform_device *pdev)
1344 {
1345 - struct resource musb_resources[2];
1346 + struct resource musb_resources[3];
1347 struct musb_hdrc_platform_data *pdata = dev_get_platdata(&pdev->dev);
1348 struct platform_device *musb;
1349 struct davinci_glue *glue;
1350 @@ -567,6 +567,15 @@ static int davinci_probe(struct platform_device *pdev)
1351 musb_resources[1].end = pdev->resource[1].end;
1352 musb_resources[1].flags = pdev->resource[1].flags;
1353
1354 + /*
1355 + * For DM6467 3 resources are passed. A placeholder for the 3rd
1356 + * resource is always there, so it's safe to always copy it...
1357 + */
1358 + musb_resources[2].name = pdev->resource[2].name;
1359 + musb_resources[2].start = pdev->resource[2].start;
1360 + musb_resources[2].end = pdev->resource[2].end;
1361 + musb_resources[2].flags = pdev->resource[2].flags;
1362 +
1363 ret = platform_device_add_resources(musb, musb_resources,
1364 ARRAY_SIZE(musb_resources));
1365 if (ret) {
1366 diff --git a/drivers/usb/wusbcore/wa-xfer.c b/drivers/usb/wusbcore/wa-xfer.c
1367 index 6ad02f57c366..3dcf66f345e9 100644
1368 --- a/drivers/usb/wusbcore/wa-xfer.c
1369 +++ b/drivers/usb/wusbcore/wa-xfer.c
1370 @@ -91,7 +91,8 @@
1371 #include "wusbhc.h"
1372
1373 enum {
1374 - WA_SEGS_MAX = 255,
1375 + /* [WUSB] section 8.3.3 allocates 7 bits for the segment index. */
1376 + WA_SEGS_MAX = 128,
1377 };
1378
1379 enum wa_seg_status {
1380 @@ -446,7 +447,7 @@ static ssize_t __wa_xfer_setup_sizes(struct wa_xfer *xfer,
1381 }
1382 xfer->seg_size = (xfer->seg_size / maxpktsize) * maxpktsize;
1383 xfer->segs = DIV_ROUND_UP(urb->transfer_buffer_length, xfer->seg_size);
1384 - if (xfer->segs >= WA_SEGS_MAX) {
1385 + if (xfer->segs > WA_SEGS_MAX) {
1386 dev_err(dev, "BUG? ops, number of segments %d bigger than %d\n",
1387 (int)(urb->transfer_buffer_length / xfer->seg_size),
1388 WA_SEGS_MAX);
1389 diff --git a/drivers/video/kyro/fbdev.c b/drivers/video/kyro/fbdev.c
1390 index 6157f74ac600..ec7fc87fa5ab 100644
1391 --- a/drivers/video/kyro/fbdev.c
1392 +++ b/drivers/video/kyro/fbdev.c
1393 @@ -625,15 +625,15 @@ static int kyrofb_ioctl(struct fb_info *info,
1394 }
1395 break;
1396 case KYRO_IOCTL_UVSTRIDE:
1397 - if (copy_to_user(argp, &deviceInfo.ulOverlayUVStride, sizeof(unsigned long)))
1398 + if (copy_to_user(argp, &deviceInfo.ulOverlayUVStride, sizeof(deviceInfo.ulOverlayUVStride)))
1399 return -EFAULT;
1400 break;
1401 case KYRO_IOCTL_STRIDE:
1402 - if (copy_to_user(argp, &deviceInfo.ulOverlayStride, sizeof(unsigned long)))
1403 + if (copy_to_user(argp, &deviceInfo.ulOverlayStride, sizeof(deviceInfo.ulOverlayStride)))
1404 return -EFAULT;
1405 break;
1406 case KYRO_IOCTL_OVERLAY_OFFSET:
1407 - if (copy_to_user(argp, &deviceInfo.ulOverlayOffset, sizeof(unsigned long)))
1408 + if (copy_to_user(argp, &deviceInfo.ulOverlayOffset, sizeof(deviceInfo.ulOverlayOffset)))
1409 return -EFAULT;
1410 break;
1411 }
1412 diff --git a/fs/aio.c b/fs/aio.c
1413 index 067e3d340c35..6efb7f6cb22e 100644
1414 --- a/fs/aio.c
1415 +++ b/fs/aio.c
1416 @@ -36,10 +36,10 @@
1417 #include <linux/eventfd.h>
1418 #include <linux/blkdev.h>
1419 #include <linux/compat.h>
1420 -#include <linux/anon_inodes.h>
1421 #include <linux/migrate.h>
1422 #include <linux/ramfs.h>
1423 #include <linux/percpu-refcount.h>
1424 +#include <linux/mount.h>
1425
1426 #include <asm/kmap_types.h>
1427 #include <asm/uaccess.h>
1428 @@ -80,6 +80,8 @@ struct kioctx {
1429 struct percpu_ref users;
1430 atomic_t dead;
1431
1432 + struct percpu_ref reqs;
1433 +
1434 unsigned long user_id;
1435
1436 struct __percpu kioctx_cpu *cpu;
1437 @@ -107,7 +109,6 @@ struct kioctx {
1438 struct page **ring_pages;
1439 long nr_pages;
1440
1441 - struct rcu_head rcu_head;
1442 struct work_struct free_work;
1443
1444 struct {
1445 @@ -152,12 +153,67 @@ unsigned long aio_max_nr = 0x10000; /* system wide maximum number of aio request
1446 static struct kmem_cache *kiocb_cachep;
1447 static struct kmem_cache *kioctx_cachep;
1448
1449 +static struct vfsmount *aio_mnt;
1450 +
1451 +static const struct file_operations aio_ring_fops;
1452 +static const struct address_space_operations aio_ctx_aops;
1453 +
1454 +static struct file *aio_private_file(struct kioctx *ctx, loff_t nr_pages)
1455 +{
1456 + struct qstr this = QSTR_INIT("[aio]", 5);
1457 + struct file *file;
1458 + struct path path;
1459 + struct inode *inode = alloc_anon_inode(aio_mnt->mnt_sb);
1460 + if (IS_ERR(inode))
1461 + return ERR_CAST(inode);
1462 +
1463 + inode->i_mapping->a_ops = &aio_ctx_aops;
1464 + inode->i_mapping->private_data = ctx;
1465 + inode->i_size = PAGE_SIZE * nr_pages;
1466 +
1467 + path.dentry = d_alloc_pseudo(aio_mnt->mnt_sb, &this);
1468 + if (!path.dentry) {
1469 + iput(inode);
1470 + return ERR_PTR(-ENOMEM);
1471 + }
1472 + path.mnt = mntget(aio_mnt);
1473 +
1474 + d_instantiate(path.dentry, inode);
1475 + file = alloc_file(&path, FMODE_READ | FMODE_WRITE, &aio_ring_fops);
1476 + if (IS_ERR(file)) {
1477 + path_put(&path);
1478 + return file;
1479 + }
1480 +
1481 + file->f_flags = O_RDWR;
1482 + file->private_data = ctx;
1483 + return file;
1484 +}
1485 +
1486 +static struct dentry *aio_mount(struct file_system_type *fs_type,
1487 + int flags, const char *dev_name, void *data)
1488 +{
1489 + static const struct dentry_operations ops = {
1490 + .d_dname = simple_dname,
1491 + };
1492 + return mount_pseudo(fs_type, "aio:", NULL, &ops, 0xa10a10a1);
1493 +}
1494 +
1495 /* aio_setup
1496 * Creates the slab caches used by the aio routines, panic on
1497 * failure as this is done early during the boot sequence.
1498 */
1499 static int __init aio_setup(void)
1500 {
1501 + static struct file_system_type aio_fs = {
1502 + .name = "aio",
1503 + .mount = aio_mount,
1504 + .kill_sb = kill_anon_super,
1505 + };
1506 + aio_mnt = kern_mount(&aio_fs);
1507 + if (IS_ERR(aio_mnt))
1508 + panic("Failed to create aio fs mount.");
1509 +
1510 kiocb_cachep = KMEM_CACHE(kiocb, SLAB_HWCACHE_ALIGN|SLAB_PANIC);
1511 kioctx_cachep = KMEM_CACHE(kioctx,SLAB_HWCACHE_ALIGN|SLAB_PANIC);
1512
1513 @@ -195,8 +251,10 @@ static void aio_free_ring(struct kioctx *ctx)
1514
1515 put_aio_ring_file(ctx);
1516
1517 - if (ctx->ring_pages && ctx->ring_pages != ctx->internal_pages)
1518 + if (ctx->ring_pages && ctx->ring_pages != ctx->internal_pages) {
1519 kfree(ctx->ring_pages);
1520 + ctx->ring_pages = NULL;
1521 + }
1522 }
1523
1524 static int aio_ring_mmap(struct file *file, struct vm_area_struct *vma)
1525 @@ -283,16 +341,12 @@ static int aio_setup_ring(struct kioctx *ctx)
1526 if (nr_pages < 0)
1527 return -EINVAL;
1528
1529 - file = anon_inode_getfile_private("[aio]", &aio_ring_fops, ctx, O_RDWR);
1530 + file = aio_private_file(ctx, nr_pages);
1531 if (IS_ERR(file)) {
1532 ctx->aio_ring_file = NULL;
1533 return -EAGAIN;
1534 }
1535
1536 - file->f_inode->i_mapping->a_ops = &aio_ctx_aops;
1537 - file->f_inode->i_mapping->private_data = ctx;
1538 - file->f_inode->i_size = PAGE_SIZE * (loff_t)nr_pages;
1539 -
1540 for (i = 0; i < nr_pages; i++) {
1541 struct page *page;
1542 page = find_or_create_page(file->f_inode->i_mapping,
1543 @@ -313,8 +367,10 @@ static int aio_setup_ring(struct kioctx *ctx)
1544 if (nr_pages > AIO_RING_PAGES) {
1545 ctx->ring_pages = kcalloc(nr_pages, sizeof(struct page *),
1546 GFP_KERNEL);
1547 - if (!ctx->ring_pages)
1548 + if (!ctx->ring_pages) {
1549 + put_aio_ring_file(ctx);
1550 return -ENOMEM;
1551 + }
1552 }
1553
1554 ctx->mmap_size = nr_pages * PAGE_SIZE;
1555 @@ -412,26 +468,34 @@ static int kiocb_cancel(struct kioctx *ctx, struct kiocb *kiocb)
1556 return cancel(kiocb);
1557 }
1558
1559 -static void free_ioctx_rcu(struct rcu_head *head)
1560 +static void free_ioctx(struct work_struct *work)
1561 {
1562 - struct kioctx *ctx = container_of(head, struct kioctx, rcu_head);
1563 + struct kioctx *ctx = container_of(work, struct kioctx, free_work);
1564
1565 + pr_debug("freeing %p\n", ctx);
1566 +
1567 + aio_free_ring(ctx);
1568 free_percpu(ctx->cpu);
1569 kmem_cache_free(kioctx_cachep, ctx);
1570 }
1571
1572 +static void free_ioctx_reqs(struct percpu_ref *ref)
1573 +{
1574 + struct kioctx *ctx = container_of(ref, struct kioctx, reqs);
1575 +
1576 + INIT_WORK(&ctx->free_work, free_ioctx);
1577 + schedule_work(&ctx->free_work);
1578 +}
1579 +
1580 /*
1581 * When this function runs, the kioctx has been removed from the "hash table"
1582 * and ctx->users has dropped to 0, so we know no more kiocbs can be submitted -
1583 * now it's safe to cancel any that need to be.
1584 */
1585 -static void free_ioctx(struct work_struct *work)
1586 +static void free_ioctx_users(struct percpu_ref *ref)
1587 {
1588 - struct kioctx *ctx = container_of(work, struct kioctx, free_work);
1589 - struct aio_ring *ring;
1590 + struct kioctx *ctx = container_of(ref, struct kioctx, users);
1591 struct kiocb *req;
1592 - unsigned cpu, avail;
1593 - DEFINE_WAIT(wait);
1594
1595 spin_lock_irq(&ctx->ctx_lock);
1596
1597 @@ -445,54 +509,8 @@ static void free_ioctx(struct work_struct *work)
1598
1599 spin_unlock_irq(&ctx->ctx_lock);
1600
1601 - for_each_possible_cpu(cpu) {
1602 - struct kioctx_cpu *kcpu = per_cpu_ptr(ctx->cpu, cpu);
1603 -
1604 - atomic_add(kcpu->reqs_available, &ctx->reqs_available);
1605 - kcpu->reqs_available = 0;
1606 - }
1607 -
1608 - while (1) {
1609 - prepare_to_wait(&ctx->wait, &wait, TASK_UNINTERRUPTIBLE);
1610 -
1611 - ring = kmap_atomic(ctx->ring_pages[0]);
1612 - avail = (ring->head <= ring->tail)
1613 - ? ring->tail - ring->head
1614 - : ctx->nr_events - ring->head + ring->tail;
1615 -
1616 - atomic_add(avail, &ctx->reqs_available);
1617 - ring->head = ring->tail;
1618 - kunmap_atomic(ring);
1619 -
1620 - if (atomic_read(&ctx->reqs_available) >= ctx->nr_events - 1)
1621 - break;
1622 -
1623 - schedule();
1624 - }
1625 - finish_wait(&ctx->wait, &wait);
1626 -
1627 - WARN_ON(atomic_read(&ctx->reqs_available) > ctx->nr_events - 1);
1628 -
1629 - aio_free_ring(ctx);
1630 -
1631 - pr_debug("freeing %p\n", ctx);
1632 -
1633 - /*
1634 - * Here the call_rcu() is between the wait_event() for reqs_active to
1635 - * hit 0, and freeing the ioctx.
1636 - *
1637 - * aio_complete() decrements reqs_active, but it has to touch the ioctx
1638 - * after to issue a wakeup so we use rcu.
1639 - */
1640 - call_rcu(&ctx->rcu_head, free_ioctx_rcu);
1641 -}
1642 -
1643 -static void free_ioctx_ref(struct percpu_ref *ref)
1644 -{
1645 - struct kioctx *ctx = container_of(ref, struct kioctx, users);
1646 -
1647 - INIT_WORK(&ctx->free_work, free_ioctx);
1648 - schedule_work(&ctx->free_work);
1649 + percpu_ref_kill(&ctx->reqs);
1650 + percpu_ref_put(&ctx->reqs);
1651 }
1652
1653 static int ioctx_add_table(struct kioctx *ctx, struct mm_struct *mm)
1654 @@ -551,6 +569,16 @@ static int ioctx_add_table(struct kioctx *ctx, struct mm_struct *mm)
1655 }
1656 }
1657
1658 +static void aio_nr_sub(unsigned nr)
1659 +{
1660 + spin_lock(&aio_nr_lock);
1661 + if (WARN_ON(aio_nr - nr > aio_nr))
1662 + aio_nr = 0;
1663 + else
1664 + aio_nr -= nr;
1665 + spin_unlock(&aio_nr_lock);
1666 +}
1667 +
1668 /* ioctx_alloc
1669 * Allocates and initializes an ioctx. Returns an ERR_PTR if it failed.
1670 */
1671 @@ -588,8 +616,11 @@ static struct kioctx *ioctx_alloc(unsigned nr_events)
1672
1673 ctx->max_reqs = nr_events;
1674
1675 - if (percpu_ref_init(&ctx->users, free_ioctx_ref))
1676 - goto out_freectx;
1677 + if (percpu_ref_init(&ctx->users, free_ioctx_users))
1678 + goto err;
1679 +
1680 + if (percpu_ref_init(&ctx->reqs, free_ioctx_reqs))
1681 + goto err;
1682
1683 spin_lock_init(&ctx->ctx_lock);
1684 spin_lock_init(&ctx->completion_lock);
1685 @@ -600,10 +631,10 @@ static struct kioctx *ioctx_alloc(unsigned nr_events)
1686
1687 ctx->cpu = alloc_percpu(struct kioctx_cpu);
1688 if (!ctx->cpu)
1689 - goto out_freeref;
1690 + goto err;
1691
1692 if (aio_setup_ring(ctx) < 0)
1693 - goto out_freepcpu;
1694 + goto err;
1695
1696 atomic_set(&ctx->reqs_available, ctx->nr_events - 1);
1697 ctx->req_batch = (ctx->nr_events - 1) / (num_possible_cpus() * 4);
1698 @@ -615,7 +646,8 @@ static struct kioctx *ioctx_alloc(unsigned nr_events)
1699 if (aio_nr + nr_events > (aio_max_nr * 2UL) ||
1700 aio_nr + nr_events < aio_nr) {
1701 spin_unlock(&aio_nr_lock);
1702 - goto out_cleanup;
1703 + err = -EAGAIN;
1704 + goto err_ctx;
1705 }
1706 aio_nr += ctx->max_reqs;
1707 spin_unlock(&aio_nr_lock);
1708 @@ -624,23 +656,20 @@ static struct kioctx *ioctx_alloc(unsigned nr_events)
1709
1710 err = ioctx_add_table(ctx, mm);
1711 if (err)
1712 - goto out_cleanup_put;
1713 + goto err_cleanup;
1714
1715 pr_debug("allocated ioctx %p[%ld]: mm=%p mask=0x%x\n",
1716 ctx, ctx->user_id, mm, ctx->nr_events);
1717 return ctx;
1718
1719 -out_cleanup_put:
1720 - percpu_ref_put(&ctx->users);
1721 -out_cleanup:
1722 - err = -EAGAIN;
1723 +err_cleanup:
1724 + aio_nr_sub(ctx->max_reqs);
1725 +err_ctx:
1726 aio_free_ring(ctx);
1727 -out_freepcpu:
1728 +err:
1729 free_percpu(ctx->cpu);
1730 -out_freeref:
1731 + free_percpu(ctx->reqs.pcpu_count);
1732 free_percpu(ctx->users.pcpu_count);
1733 -out_freectx:
1734 - put_aio_ring_file(ctx);
1735 kmem_cache_free(kioctx_cachep, ctx);
1736 pr_debug("error allocating ioctx %d\n", err);
1737 return ERR_PTR(err);
1738 @@ -675,10 +704,7 @@ static void kill_ioctx(struct mm_struct *mm, struct kioctx *ctx)
1739 * -EAGAIN with no ioctxs actually in use (as far as userspace
1740 * could tell).
1741 */
1742 - spin_lock(&aio_nr_lock);
1743 - BUG_ON(aio_nr - ctx->max_reqs > aio_nr);
1744 - aio_nr -= ctx->max_reqs;
1745 - spin_unlock(&aio_nr_lock);
1746 + aio_nr_sub(ctx->max_reqs);
1747
1748 if (ctx->mmap_size)
1749 vm_munmap(ctx->mmap_base, ctx->mmap_size);
1750 @@ -810,6 +836,8 @@ static inline struct kiocb *aio_get_req(struct kioctx *ctx)
1751 if (unlikely(!req))
1752 goto out_put;
1753
1754 + percpu_ref_get(&ctx->reqs);
1755 +
1756 req->ki_ctx = ctx;
1757 return req;
1758 out_put:
1759 @@ -879,12 +907,6 @@ void aio_complete(struct kiocb *iocb, long res, long res2)
1760 return;
1761 }
1762
1763 - /*
1764 - * Take rcu_read_lock() in case the kioctx is being destroyed, as we
1765 - * need to issue a wakeup after incrementing reqs_available.
1766 - */
1767 - rcu_read_lock();
1768 -
1769 if (iocb->ki_list.next) {
1770 unsigned long flags;
1771
1772 @@ -959,7 +981,7 @@ void aio_complete(struct kiocb *iocb, long res, long res2)
1773 if (waitqueue_active(&ctx->wait))
1774 wake_up(&ctx->wait);
1775
1776 - rcu_read_unlock();
1777 + percpu_ref_put(&ctx->reqs);
1778 }
1779 EXPORT_SYMBOL(aio_complete);
1780
1781 @@ -1370,6 +1392,7 @@ static int io_submit_one(struct kioctx *ctx, struct iocb __user *user_iocb,
1782 return 0;
1783 out_put_req:
1784 put_reqs_available(ctx, 1);
1785 + percpu_ref_put(&ctx->reqs);
1786 kiocb_free(req);
1787 return ret;
1788 }
1789 diff --git a/fs/anon_inodes.c b/fs/anon_inodes.c
1790 index 85c961849953..22f9698a1214 100644
1791 --- a/fs/anon_inodes.c
1792 +++ b/fs/anon_inodes.c
1793 @@ -24,7 +24,6 @@
1794
1795 static struct vfsmount *anon_inode_mnt __read_mostly;
1796 static struct inode *anon_inode_inode;
1797 -static const struct file_operations anon_inode_fops;
1798
1799 /*
1800 * anon_inodefs_dname() is called from d_path().
1801 @@ -39,51 +38,6 @@ static const struct dentry_operations anon_inodefs_dentry_operations = {
1802 .d_dname = anon_inodefs_dname,
1803 };
1804
1805 -/*
1806 - * nop .set_page_dirty method so that people can use .page_mkwrite on
1807 - * anon inodes.
1808 - */
1809 -static int anon_set_page_dirty(struct page *page)
1810 -{
1811 - return 0;
1812 -};
1813 -
1814 -static const struct address_space_operations anon_aops = {
1815 - .set_page_dirty = anon_set_page_dirty,
1816 -};
1817 -
1818 -/*
1819 - * A single inode exists for all anon_inode files. Contrary to pipes,
1820 - * anon_inode inodes have no associated per-instance data, so we need
1821 - * only allocate one of them.
1822 - */
1823 -static struct inode *anon_inode_mkinode(struct super_block *s)
1824 -{
1825 - struct inode *inode = new_inode_pseudo(s);
1826 -
1827 - if (!inode)
1828 - return ERR_PTR(-ENOMEM);
1829 -
1830 - inode->i_ino = get_next_ino();
1831 - inode->i_fop = &anon_inode_fops;
1832 -
1833 - inode->i_mapping->a_ops = &anon_aops;
1834 -
1835 - /*
1836 - * Mark the inode dirty from the very beginning,
1837 - * that way it will never be moved to the dirty
1838 - * list because mark_inode_dirty() will think
1839 - * that it already _is_ on the dirty list.
1840 - */
1841 - inode->i_state = I_DIRTY;
1842 - inode->i_mode = S_IRUSR | S_IWUSR;
1843 - inode->i_uid = current_fsuid();
1844 - inode->i_gid = current_fsgid();
1845 - inode->i_flags |= S_PRIVATE;
1846 - inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME;
1847 - return inode;
1848 -}
1849 -
1850 static struct dentry *anon_inodefs_mount(struct file_system_type *fs_type,
1851 int flags, const char *dev_name, void *data)
1852 {
1853 @@ -92,7 +46,7 @@ static struct dentry *anon_inodefs_mount(struct file_system_type *fs_type,
1854 &anon_inodefs_dentry_operations, ANON_INODE_FS_MAGIC);
1855 if (!IS_ERR(root)) {
1856 struct super_block *s = root->d_sb;
1857 - anon_inode_inode = anon_inode_mkinode(s);
1858 + anon_inode_inode = alloc_anon_inode(s);
1859 if (IS_ERR(anon_inode_inode)) {
1860 dput(root);
1861 deactivate_locked_super(s);
1862 @@ -134,7 +88,7 @@ struct file *anon_inode_getfile_private(const char *name,
1863 if (fops->owner && !try_module_get(fops->owner))
1864 return ERR_PTR(-ENOENT);
1865
1866 - inode = anon_inode_mkinode(anon_inode_mnt->mnt_sb);
1867 + inode = alloc_anon_inode(anon_inode_mnt->mnt_sb);
1868 if (IS_ERR(inode)) {
1869 file = ERR_PTR(-ENOMEM);
1870 goto err_module;
1871 diff --git a/fs/libfs.c b/fs/libfs.c
1872 index 3a3a9b53bf5a..193e0c29fb94 100644
1873 --- a/fs/libfs.c
1874 +++ b/fs/libfs.c
1875 @@ -993,3 +993,46 @@ EXPORT_SYMBOL_GPL(simple_attr_open);
1876 EXPORT_SYMBOL_GPL(simple_attr_release);
1877 EXPORT_SYMBOL_GPL(simple_attr_read);
1878 EXPORT_SYMBOL_GPL(simple_attr_write);
1879 +
1880 +/*
1881 + * nop .set_page_dirty method so that people can use .page_mkwrite on
1882 + * anon inodes.
1883 + */
1884 +static int anon_set_page_dirty(struct page *page)
1885 +{
1886 + return 0;
1887 +};
1888 +
1889 +/*
1890 + * A single inode exists for all anon_inode files. Contrary to pipes,
1891 + * anon_inode inodes have no associated per-instance data, so we need
1892 + * only allocate one of them.
1893 + */
1894 +struct inode *alloc_anon_inode(struct super_block *s)
1895 +{
1896 + static const struct address_space_operations anon_aops = {
1897 + .set_page_dirty = anon_set_page_dirty,
1898 + };
1899 + struct inode *inode = new_inode_pseudo(s);
1900 +
1901 + if (!inode)
1902 + return ERR_PTR(-ENOMEM);
1903 +
1904 + inode->i_ino = get_next_ino();
1905 + inode->i_mapping->a_ops = &anon_aops;
1906 +
1907 + /*
1908 + * Mark the inode dirty from the very beginning,
1909 + * that way it will never be moved to the dirty
1910 + * list because mark_inode_dirty() will think
1911 + * that it already _is_ on the dirty list.
1912 + */
1913 + inode->i_state = I_DIRTY;
1914 + inode->i_mode = S_IRUSR | S_IWUSR;
1915 + inode->i_uid = current_fsuid();
1916 + inode->i_gid = current_fsgid();
1917 + inode->i_flags |= S_PRIVATE;
1918 + inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME;
1919 + return inode;
1920 +}
1921 +EXPORT_SYMBOL(alloc_anon_inode);
1922 diff --git a/fs/xfs/xfs_ioctl.c b/fs/xfs/xfs_ioctl.c
1923 index 668e8f4ccf5e..2e1e6c33841d 100644
1924 --- a/fs/xfs/xfs_ioctl.c
1925 +++ b/fs/xfs/xfs_ioctl.c
1926 @@ -1717,6 +1717,12 @@ xfs_file_ioctl(
1927 if (mp->m_flags & XFS_MOUNT_RDONLY)
1928 return -XFS_ERROR(EROFS);
1929
1930 + if (!capable(CAP_SYS_ADMIN))
1931 + return -EPERM;
1932 +
1933 + if (mp->m_flags & XFS_MOUNT_RDONLY)
1934 + return -XFS_ERROR(EROFS);
1935 +
1936 if (copy_from_user(&eofb, arg, sizeof(eofb)))
1937 return -XFS_ERROR(EFAULT);
1938
1939 diff --git a/include/linux/fs.h b/include/linux/fs.h
1940 index 3f40547ba191..fefa7b00ba42 100644
1941 --- a/include/linux/fs.h
1942 +++ b/include/linux/fs.h
1943 @@ -2562,6 +2562,7 @@ extern int simple_write_begin(struct file *file, struct address_space *mapping,
1944 extern int simple_write_end(struct file *file, struct address_space *mapping,
1945 loff_t pos, unsigned len, unsigned copied,
1946 struct page *page, void *fsdata);
1947 +extern struct inode *alloc_anon_inode(struct super_block *);
1948
1949 extern struct dentry *simple_lookup(struct inode *, struct dentry *, unsigned int flags);
1950 extern ssize_t generic_read_dir(struct file *, char __user *, size_t, loff_t *);
1951 diff --git a/include/linux/net.h b/include/linux/net.h
1952 index 4f27575ce1d6..8bd9d926b3cf 100644
1953 --- a/include/linux/net.h
1954 +++ b/include/linux/net.h
1955 @@ -163,6 +163,14 @@ struct proto_ops {
1956 #endif
1957 int (*sendmsg) (struct kiocb *iocb, struct socket *sock,
1958 struct msghdr *m, size_t total_len);
1959 + /* Notes for implementing recvmsg:
1960 + * ===============================
1961 + * msg->msg_namelen should get updated by the recvmsg handlers
1962 + * iff msg_name != NULL. It is by default 0 to prevent
1963 + * returning uninitialized memory to user space. The recvfrom
1964 + * handlers can assume that msg.msg_name is either NULL or has
1965 + * a minimum size of sizeof(struct sockaddr_storage).
1966 + */
1967 int (*recvmsg) (struct kiocb *iocb, struct socket *sock,
1968 struct msghdr *m, size_t total_len,
1969 int flags);
1970 diff --git a/include/linux/random.h b/include/linux/random.h
1971 index 6312dd9ba449..bf9085e89fb5 100644
1972 --- a/include/linux/random.h
1973 +++ b/include/linux/random.h
1974 @@ -50,9 +50,9 @@ static inline void prandom_seed_state(struct rnd_state *state, u64 seed)
1975 {
1976 u32 i = (seed >> 32) ^ (seed << 10) ^ seed;
1977
1978 - state->s1 = __seed(i, 1);
1979 - state->s2 = __seed(i, 7);
1980 - state->s3 = __seed(i, 15);
1981 + state->s1 = __seed(i, 2);
1982 + state->s2 = __seed(i, 8);
1983 + state->s3 = __seed(i, 16);
1984 }
1985
1986 #ifdef CONFIG_ARCH_RANDOM
1987 diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h
1988 index c2d89335f637..f66f346dd164 100644
1989 --- a/include/linux/skbuff.h
1990 +++ b/include/linux/skbuff.h
1991 @@ -333,11 +333,6 @@ typedef unsigned int sk_buff_data_t;
1992 typedef unsigned char *sk_buff_data_t;
1993 #endif
1994
1995 -#if defined(CONFIG_NF_DEFRAG_IPV4) || defined(CONFIG_NF_DEFRAG_IPV4_MODULE) || \
1996 - defined(CONFIG_NF_DEFRAG_IPV6) || defined(CONFIG_NF_DEFRAG_IPV6_MODULE)
1997 -#define NET_SKBUFF_NF_DEFRAG_NEEDED 1
1998 -#endif
1999 -
2000 /**
2001 * struct sk_buff - socket buffer
2002 * @next: Next buffer in list
2003 @@ -370,7 +365,6 @@ typedef unsigned char *sk_buff_data_t;
2004 * @protocol: Packet protocol from driver
2005 * @destructor: Destruct function
2006 * @nfct: Associated connection, if any
2007 - * @nfct_reasm: netfilter conntrack re-assembly pointer
2008 * @nf_bridge: Saved data about a bridged frame - see br_netfilter.c
2009 * @skb_iif: ifindex of device we arrived on
2010 * @tc_index: Traffic control index
2011 @@ -459,9 +453,6 @@ struct sk_buff {
2012 #if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE)
2013 struct nf_conntrack *nfct;
2014 #endif
2015 -#ifdef NET_SKBUFF_NF_DEFRAG_NEEDED
2016 - struct sk_buff *nfct_reasm;
2017 -#endif
2018 #ifdef CONFIG_BRIDGE_NETFILTER
2019 struct nf_bridge_info *nf_bridge;
2020 #endif
2021 @@ -2605,18 +2596,6 @@ static inline void nf_conntrack_get(struct nf_conntrack *nfct)
2022 atomic_inc(&nfct->use);
2023 }
2024 #endif
2025 -#ifdef NET_SKBUFF_NF_DEFRAG_NEEDED
2026 -static inline void nf_conntrack_get_reasm(struct sk_buff *skb)
2027 -{
2028 - if (skb)
2029 - atomic_inc(&skb->users);
2030 -}
2031 -static inline void nf_conntrack_put_reasm(struct sk_buff *skb)
2032 -{
2033 - if (skb)
2034 - kfree_skb(skb);
2035 -}
2036 -#endif
2037 #ifdef CONFIG_BRIDGE_NETFILTER
2038 static inline void nf_bridge_put(struct nf_bridge_info *nf_bridge)
2039 {
2040 @@ -2635,10 +2614,6 @@ static inline void nf_reset(struct sk_buff *skb)
2041 nf_conntrack_put(skb->nfct);
2042 skb->nfct = NULL;
2043 #endif
2044 -#ifdef NET_SKBUFF_NF_DEFRAG_NEEDED
2045 - nf_conntrack_put_reasm(skb->nfct_reasm);
2046 - skb->nfct_reasm = NULL;
2047 -#endif
2048 #ifdef CONFIG_BRIDGE_NETFILTER
2049 nf_bridge_put(skb->nf_bridge);
2050 skb->nf_bridge = NULL;
2051 @@ -2660,10 +2635,6 @@ static inline void __nf_copy(struct sk_buff *dst, const struct sk_buff *src)
2052 nf_conntrack_get(src->nfct);
2053 dst->nfctinfo = src->nfctinfo;
2054 #endif
2055 -#ifdef NET_SKBUFF_NF_DEFRAG_NEEDED
2056 - dst->nfct_reasm = src->nfct_reasm;
2057 - nf_conntrack_get_reasm(src->nfct_reasm);
2058 -#endif
2059 #ifdef CONFIG_BRIDGE_NETFILTER
2060 dst->nf_bridge = src->nf_bridge;
2061 nf_bridge_get(src->nf_bridge);
2062 @@ -2675,9 +2646,6 @@ static inline void nf_copy(struct sk_buff *dst, const struct sk_buff *src)
2063 #if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE)
2064 nf_conntrack_put(dst->nfct);
2065 #endif
2066 -#ifdef NET_SKBUFF_NF_DEFRAG_NEEDED
2067 - nf_conntrack_put_reasm(dst->nfct_reasm);
2068 -#endif
2069 #ifdef CONFIG_BRIDGE_NETFILTER
2070 nf_bridge_put(dst->nf_bridge);
2071 #endif
2072 diff --git a/include/linux/vm_event_item.h b/include/linux/vm_event_item.h
2073 index 1855f0a22add..c557c6d096de 100644
2074 --- a/include/linux/vm_event_item.h
2075 +++ b/include/linux/vm_event_item.h
2076 @@ -39,6 +39,7 @@ enum vm_event_item { PGPGIN, PGPGOUT, PSWPIN, PSWPOUT,
2077 PAGEOUTRUN, ALLOCSTALL, PGROTATED,
2078 #ifdef CONFIG_NUMA_BALANCING
2079 NUMA_PTE_UPDATES,
2080 + NUMA_HUGE_PTE_UPDATES,
2081 NUMA_HINT_FAULTS,
2082 NUMA_HINT_FAULTS_LOCAL,
2083 NUMA_PAGE_MIGRATE,
2084 diff --git a/include/net/ip.h b/include/net/ip.h
2085 index 5e5268807a1c..301f10c9b563 100644
2086 --- a/include/net/ip.h
2087 +++ b/include/net/ip.h
2088 @@ -464,7 +464,7 @@ extern int compat_ip_getsockopt(struct sock *sk, int level,
2089 int optname, char __user *optval, int __user *optlen);
2090 extern int ip_ra_control(struct sock *sk, unsigned char on, void (*destructor)(struct sock *));
2091
2092 -extern int ip_recv_error(struct sock *sk, struct msghdr *msg, int len);
2093 +extern int ip_recv_error(struct sock *sk, struct msghdr *msg, int len, int *addr_len);
2094 extern void ip_icmp_error(struct sock *sk, struct sk_buff *skb, int err,
2095 __be16 port, u32 info, u8 *payload);
2096 extern void ip_local_error(struct sock *sk, int err, __be32 daddr, __be16 dport,
2097 diff --git a/include/net/ip_vs.h b/include/net/ip_vs.h
2098 index 9c4d37ec45a1..772252ddc115 100644
2099 --- a/include/net/ip_vs.h
2100 +++ b/include/net/ip_vs.h
2101 @@ -109,7 +109,6 @@ extern int ip_vs_conn_tab_size;
2102 struct ip_vs_iphdr {
2103 __u32 len; /* IPv4 simply where L4 starts
2104 IPv6 where L4 Transport Header starts */
2105 - __u32 thoff_reasm; /* Transport Header Offset in nfct_reasm skb */
2106 __u16 fragoffs; /* IPv6 fragment offset, 0 if first frag (or not frag)*/
2107 __s16 protocol;
2108 __s32 flags;
2109 @@ -117,34 +116,12 @@ struct ip_vs_iphdr {
2110 union nf_inet_addr daddr;
2111 };
2112
2113 -/* Dependency to module: nf_defrag_ipv6 */
2114 -#if defined(CONFIG_NF_DEFRAG_IPV6) || defined(CONFIG_NF_DEFRAG_IPV6_MODULE)
2115 -static inline struct sk_buff *skb_nfct_reasm(const struct sk_buff *skb)
2116 -{
2117 - return skb->nfct_reasm;
2118 -}
2119 -static inline void *frag_safe_skb_hp(const struct sk_buff *skb, int offset,
2120 - int len, void *buffer,
2121 - const struct ip_vs_iphdr *ipvsh)
2122 -{
2123 - if (unlikely(ipvsh->fragoffs && skb_nfct_reasm(skb)))
2124 - return skb_header_pointer(skb_nfct_reasm(skb),
2125 - ipvsh->thoff_reasm, len, buffer);
2126 -
2127 - return skb_header_pointer(skb, offset, len, buffer);
2128 -}
2129 -#else
2130 -static inline struct sk_buff *skb_nfct_reasm(const struct sk_buff *skb)
2131 -{
2132 - return NULL;
2133 -}
2134 static inline void *frag_safe_skb_hp(const struct sk_buff *skb, int offset,
2135 int len, void *buffer,
2136 const struct ip_vs_iphdr *ipvsh)
2137 {
2138 return skb_header_pointer(skb, offset, len, buffer);
2139 }
2140 -#endif
2141
2142 static inline void
2143 ip_vs_fill_ip4hdr(const void *nh, struct ip_vs_iphdr *iphdr)
2144 @@ -171,19 +148,12 @@ ip_vs_fill_iph_skb(int af, const struct sk_buff *skb, struct ip_vs_iphdr *iphdr)
2145 (struct ipv6hdr *)skb_network_header(skb);
2146 iphdr->saddr.in6 = iph->saddr;
2147 iphdr->daddr.in6 = iph->daddr;
2148 - /* ipv6_find_hdr() updates len, flags, thoff_reasm */
2149 - iphdr->thoff_reasm = 0;
2150 + /* ipv6_find_hdr() updates len, flags */
2151 iphdr->len = 0;
2152 iphdr->flags = 0;
2153 iphdr->protocol = ipv6_find_hdr(skb, &iphdr->len, -1,
2154 &iphdr->fragoffs,
2155 &iphdr->flags);
2156 - /* get proto from re-assembled packet and it's offset */
2157 - if (skb_nfct_reasm(skb))
2158 - iphdr->protocol = ipv6_find_hdr(skb_nfct_reasm(skb),
2159 - &iphdr->thoff_reasm,
2160 - -1, NULL, NULL);
2161 -
2162 } else
2163 #endif
2164 {
2165 diff --git a/include/net/ipv6.h b/include/net/ipv6.h
2166 index bbf1c8fb8511..1f96efd30816 100644
2167 --- a/include/net/ipv6.h
2168 +++ b/include/net/ipv6.h
2169 @@ -802,8 +802,10 @@ extern int compat_ipv6_getsockopt(struct sock *sk,
2170 extern int ip6_datagram_connect(struct sock *sk,
2171 struct sockaddr *addr, int addr_len);
2172
2173 -extern int ipv6_recv_error(struct sock *sk, struct msghdr *msg, int len);
2174 -extern int ipv6_recv_rxpmtu(struct sock *sk, struct msghdr *msg, int len);
2175 +extern int ipv6_recv_error(struct sock *sk, struct msghdr *msg, int len,
2176 + int *addr_len);
2177 +extern int ipv6_recv_rxpmtu(struct sock *sk, struct msghdr *msg, int len,
2178 + int *addr_len);
2179 extern void ipv6_icmp_error(struct sock *sk, struct sk_buff *skb, int err, __be16 port,
2180 u32 info, u8 *payload);
2181 extern void ipv6_local_error(struct sock *sk, int err, struct flowi6 *fl6, u32 info);
2182 diff --git a/include/net/netfilter/ipv6/nf_defrag_ipv6.h b/include/net/netfilter/ipv6/nf_defrag_ipv6.h
2183 index fd79c9a1779d..17920d847b40 100644
2184 --- a/include/net/netfilter/ipv6/nf_defrag_ipv6.h
2185 +++ b/include/net/netfilter/ipv6/nf_defrag_ipv6.h
2186 @@ -6,10 +6,7 @@ extern void nf_defrag_ipv6_enable(void);
2187 extern int nf_ct_frag6_init(void);
2188 extern void nf_ct_frag6_cleanup(void);
2189 extern struct sk_buff *nf_ct_frag6_gather(struct sk_buff *skb, u32 user);
2190 -extern void nf_ct_frag6_output(unsigned int hooknum, struct sk_buff *skb,
2191 - struct net_device *in,
2192 - struct net_device *out,
2193 - int (*okfn)(struct sk_buff *));
2194 +extern void nf_ct_frag6_consume_orig(struct sk_buff *skb);
2195
2196 struct inet_frags_ctl;
2197
2198 diff --git a/include/net/ping.h b/include/net/ping.h
2199 index 5db0224b73ac..2b496e9f9ebd 100644
2200 --- a/include/net/ping.h
2201 +++ b/include/net/ping.h
2202 @@ -31,7 +31,8 @@
2203
2204 /* Compatibility glue so we can support IPv6 when it's compiled as a module */
2205 struct pingv6_ops {
2206 - int (*ipv6_recv_error)(struct sock *sk, struct msghdr *msg, int len);
2207 + int (*ipv6_recv_error)(struct sock *sk, struct msghdr *msg, int len,
2208 + int *addr_len);
2209 int (*ip6_datagram_recv_ctl)(struct sock *sk, struct msghdr *msg,
2210 struct sk_buff *skb);
2211 int (*icmpv6_err_convert)(u8 type, u8 code, int *err);
2212 diff --git a/include/uapi/linux/pkt_sched.h b/include/uapi/linux/pkt_sched.h
2213 index 9b829134d422..66f925d3c07b 100644
2214 --- a/include/uapi/linux/pkt_sched.h
2215 +++ b/include/uapi/linux/pkt_sched.h
2216 @@ -759,13 +759,14 @@ enum {
2217
2218 TCA_FQ_RATE_ENABLE, /* enable/disable rate limiting */
2219
2220 - TCA_FQ_FLOW_DEFAULT_RATE,/* for sockets with unspecified sk_rate,
2221 - * use the following rate
2222 - */
2223 + TCA_FQ_FLOW_DEFAULT_RATE,/* obsolete, do not use */
2224
2225 TCA_FQ_FLOW_MAX_RATE, /* per flow max rate */
2226
2227 TCA_FQ_BUCKETS_LOG, /* log2(number of buckets) */
2228 +
2229 + TCA_FQ_FLOW_REFILL_DELAY, /* flow credit refill delay in usec */
2230 +
2231 __TCA_FQ_MAX
2232 };
2233
2234 diff --git a/kernel/time/ntp.c b/kernel/time/ntp.c
2235 index bb2215174f05..af8d1d4f3d55 100644
2236 --- a/kernel/time/ntp.c
2237 +++ b/kernel/time/ntp.c
2238 @@ -475,6 +475,7 @@ static void sync_cmos_clock(struct work_struct *work)
2239 * called as close as possible to 500 ms before the new second starts.
2240 * This code is run on a timer. If the clock is set, that timer
2241 * may not expire at the correct time. Thus, we adjust...
2242 + * We want the clock to be within a couple of ticks from the target.
2243 */
2244 if (!ntp_synced()) {
2245 /*
2246 @@ -485,7 +486,7 @@ static void sync_cmos_clock(struct work_struct *work)
2247 }
2248
2249 getnstimeofday(&now);
2250 - if (abs(now.tv_nsec - (NSEC_PER_SEC / 2)) <= tick_nsec / 2) {
2251 + if (abs(now.tv_nsec - (NSEC_PER_SEC / 2)) <= tick_nsec * 5) {
2252 struct timespec adjust = now;
2253
2254 fail = -ENODEV;
2255 diff --git a/lib/random32.c b/lib/random32.c
2256 index 52280d5526be..01e8890d1089 100644
2257 --- a/lib/random32.c
2258 +++ b/lib/random32.c
2259 @@ -141,7 +141,7 @@ void prandom_seed(u32 entropy)
2260 */
2261 for_each_possible_cpu (i) {
2262 struct rnd_state *state = &per_cpu(net_rand_state, i);
2263 - state->s1 = __seed(state->s1 ^ entropy, 1);
2264 + state->s1 = __seed(state->s1 ^ entropy, 2);
2265 }
2266 }
2267 EXPORT_SYMBOL(prandom_seed);
2268 @@ -158,9 +158,9 @@ static int __init prandom_init(void)
2269 struct rnd_state *state = &per_cpu(net_rand_state,i);
2270
2271 #define LCG(x) ((x) * 69069) /* super-duper LCG */
2272 - state->s1 = __seed(LCG(i + jiffies), 1);
2273 - state->s2 = __seed(LCG(state->s1), 7);
2274 - state->s3 = __seed(LCG(state->s2), 15);
2275 + state->s1 = __seed(LCG(i + jiffies), 2);
2276 + state->s2 = __seed(LCG(state->s1), 8);
2277 + state->s3 = __seed(LCG(state->s2), 16);
2278
2279 /* "warm it up" */
2280 prandom_u32_state(state);
2281 @@ -187,9 +187,9 @@ static int __init prandom_reseed(void)
2282 u32 seeds[3];
2283
2284 get_random_bytes(&seeds, sizeof(seeds));
2285 - state->s1 = __seed(seeds[0], 1);
2286 - state->s2 = __seed(seeds[1], 7);
2287 - state->s3 = __seed(seeds[2], 15);
2288 + state->s1 = __seed(seeds[0], 2);
2289 + state->s2 = __seed(seeds[1], 8);
2290 + state->s3 = __seed(seeds[2], 16);
2291
2292 /* mix it in */
2293 prandom_u32_state(state);
2294 diff --git a/mm/mprotect.c b/mm/mprotect.c
2295 index 412ba2b7326a..6c3f56f19275 100644
2296 --- a/mm/mprotect.c
2297 +++ b/mm/mprotect.c
2298 @@ -138,6 +138,7 @@ static inline unsigned long change_pmd_range(struct vm_area_struct *vma,
2299 pmd_t *pmd;
2300 unsigned long next;
2301 unsigned long pages = 0;
2302 + unsigned long nr_huge_updates = 0;
2303 bool all_same_node;
2304
2305 pmd = pmd_offset(pud, addr);
2306 @@ -148,7 +149,8 @@ static inline unsigned long change_pmd_range(struct vm_area_struct *vma,
2307 split_huge_page_pmd(vma, addr, pmd);
2308 else if (change_huge_pmd(vma, pmd, addr, newprot,
2309 prot_numa)) {
2310 - pages++;
2311 + pages += HPAGE_PMD_NR;
2312 + nr_huge_updates++;
2313 continue;
2314 }
2315 /* fall through */
2316 @@ -168,6 +170,9 @@ static inline unsigned long change_pmd_range(struct vm_area_struct *vma,
2317 change_pmd_protnuma(vma->vm_mm, addr, pmd);
2318 } while (pmd++, addr = next, addr != end);
2319
2320 + if (nr_huge_updates)
2321 + count_vm_numa_events(NUMA_HUGE_PTE_UPDATES, nr_huge_updates);
2322 +
2323 return pages;
2324 }
2325
2326 diff --git a/mm/vmstat.c b/mm/vmstat.c
2327 index 9bb314577911..5a442a723d79 100644
2328 --- a/mm/vmstat.c
2329 +++ b/mm/vmstat.c
2330 @@ -812,6 +812,7 @@ const char * const vmstat_text[] = {
2331
2332 #ifdef CONFIG_NUMA_BALANCING
2333 "numa_pte_updates",
2334 + "numa_huge_pte_updates",
2335 "numa_hint_faults",
2336 "numa_hint_faults_local",
2337 "numa_pages_migrated",
2338 diff --git a/net/appletalk/ddp.c b/net/appletalk/ddp.c
2339 index 7fee50d637f9..7d424ac6e760 100644
2340 --- a/net/appletalk/ddp.c
2341 +++ b/net/appletalk/ddp.c
2342 @@ -1735,7 +1735,6 @@ static int atalk_recvmsg(struct kiocb *iocb, struct socket *sock, struct msghdr
2343 size_t size, int flags)
2344 {
2345 struct sock *sk = sock->sk;
2346 - struct sockaddr_at *sat = (struct sockaddr_at *)msg->msg_name;
2347 struct ddpehdr *ddp;
2348 int copied = 0;
2349 int offset = 0;
2350 @@ -1764,14 +1763,13 @@ static int atalk_recvmsg(struct kiocb *iocb, struct socket *sock, struct msghdr
2351 }
2352 err = skb_copy_datagram_iovec(skb, offset, msg->msg_iov, copied);
2353
2354 - if (!err) {
2355 - if (sat) {
2356 - sat->sat_family = AF_APPLETALK;
2357 - sat->sat_port = ddp->deh_sport;
2358 - sat->sat_addr.s_node = ddp->deh_snode;
2359 - sat->sat_addr.s_net = ddp->deh_snet;
2360 - }
2361 - msg->msg_namelen = sizeof(*sat);
2362 + if (!err && msg->msg_name) {
2363 + struct sockaddr_at *sat = msg->msg_name;
2364 + sat->sat_family = AF_APPLETALK;
2365 + sat->sat_port = ddp->deh_sport;
2366 + sat->sat_addr.s_node = ddp->deh_snode;
2367 + sat->sat_addr.s_net = ddp->deh_snet;
2368 + msg->msg_namelen = sizeof(*sat);
2369 }
2370
2371 skb_free_datagram(sk, skb); /* Free the datagram. */
2372 diff --git a/net/atm/common.c b/net/atm/common.c
2373 index 737bef59ce89..7b491006eaf4 100644
2374 --- a/net/atm/common.c
2375 +++ b/net/atm/common.c
2376 @@ -531,8 +531,6 @@ int vcc_recvmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *msg,
2377 struct sk_buff *skb;
2378 int copied, error = -EINVAL;
2379
2380 - msg->msg_namelen = 0;
2381 -
2382 if (sock->state != SS_CONNECTED)
2383 return -ENOTCONN;
2384
2385 diff --git a/net/ax25/af_ax25.c b/net/ax25/af_ax25.c
2386 index 4b4d2b779ec1..78c474f8f615 100644
2387 --- a/net/ax25/af_ax25.c
2388 +++ b/net/ax25/af_ax25.c
2389 @@ -1636,11 +1636,11 @@ static int ax25_recvmsg(struct kiocb *iocb, struct socket *sock,
2390
2391 skb_copy_datagram_iovec(skb, 0, msg->msg_iov, copied);
2392
2393 - if (msg->msg_namelen != 0) {
2394 - struct sockaddr_ax25 *sax = (struct sockaddr_ax25 *)msg->msg_name;
2395 + if (msg->msg_name) {
2396 ax25_digi digi;
2397 ax25_address src;
2398 const unsigned char *mac = skb_mac_header(skb);
2399 + struct sockaddr_ax25 *sax = msg->msg_name;
2400
2401 memset(sax, 0, sizeof(struct full_sockaddr_ax25));
2402 ax25_addr_parse(mac + 1, skb->data - mac - 1, &src, NULL,
2403 diff --git a/net/bluetooth/af_bluetooth.c b/net/bluetooth/af_bluetooth.c
2404 index 9096137c889c..6629cdc134dc 100644
2405 --- a/net/bluetooth/af_bluetooth.c
2406 +++ b/net/bluetooth/af_bluetooth.c
2407 @@ -221,8 +221,6 @@ int bt_sock_recvmsg(struct kiocb *iocb, struct socket *sock,
2408 if (flags & (MSG_OOB))
2409 return -EOPNOTSUPP;
2410
2411 - msg->msg_namelen = 0;
2412 -
2413 skb = skb_recv_datagram(sk, flags, noblock, &err);
2414 if (!skb) {
2415 if (sk->sk_shutdown & RCV_SHUTDOWN)
2416 @@ -287,8 +285,6 @@ int bt_sock_stream_recvmsg(struct kiocb *iocb, struct socket *sock,
2417 if (flags & MSG_OOB)
2418 return -EOPNOTSUPP;
2419
2420 - msg->msg_namelen = 0;
2421 -
2422 BT_DBG("sk %p size %zu", sk, size);
2423
2424 lock_sock(sk);
2425 diff --git a/net/bluetooth/hci_sock.c b/net/bluetooth/hci_sock.c
2426 index 9bd7d959e384..fa4bf6631425 100644
2427 --- a/net/bluetooth/hci_sock.c
2428 +++ b/net/bluetooth/hci_sock.c
2429 @@ -752,8 +752,6 @@ static int hci_sock_recvmsg(struct kiocb *iocb, struct socket *sock,
2430 if (!skb)
2431 return err;
2432
2433 - msg->msg_namelen = 0;
2434 -
2435 copied = skb->len;
2436 if (len < copied) {
2437 msg->msg_flags |= MSG_TRUNC;
2438 diff --git a/net/bluetooth/rfcomm/sock.c b/net/bluetooth/rfcomm/sock.c
2439 index 30b3721dc6d7..c1c6028e389a 100644
2440 --- a/net/bluetooth/rfcomm/sock.c
2441 +++ b/net/bluetooth/rfcomm/sock.c
2442 @@ -608,7 +608,6 @@ static int rfcomm_sock_recvmsg(struct kiocb *iocb, struct socket *sock,
2443
2444 if (test_and_clear_bit(RFCOMM_DEFER_SETUP, &d->flags)) {
2445 rfcomm_dlc_accept(d);
2446 - msg->msg_namelen = 0;
2447 return 0;
2448 }
2449
2450 diff --git a/net/bluetooth/sco.c b/net/bluetooth/sco.c
2451 index 96bd388d93a4..d021e441b6e6 100644
2452 --- a/net/bluetooth/sco.c
2453 +++ b/net/bluetooth/sco.c
2454 @@ -715,7 +715,6 @@ static int sco_sock_recvmsg(struct kiocb *iocb, struct socket *sock,
2455 test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags)) {
2456 sco_conn_defer_accept(pi->conn->hcon, pi->setting);
2457 sk->sk_state = BT_CONFIG;
2458 - msg->msg_namelen = 0;
2459
2460 release_sock(sk);
2461 return 0;
2462 diff --git a/net/bridge/br_if.c b/net/bridge/br_if.c
2463 index c41d5fbb91d0..547504ccba69 100644
2464 --- a/net/bridge/br_if.c
2465 +++ b/net/bridge/br_if.c
2466 @@ -172,6 +172,8 @@ void br_dev_delete(struct net_device *dev, struct list_head *head)
2467 del_nbp(p);
2468 }
2469
2470 + br_fdb_delete_by_port(br, NULL, 1);
2471 +
2472 del_timer_sync(&br->gc_timer);
2473
2474 br_sysfs_delbr(br->dev);
2475 diff --git a/net/caif/caif_socket.c b/net/caif/caif_socket.c
2476 index 05a41c7ec304..d6be3edb7a43 100644
2477 --- a/net/caif/caif_socket.c
2478 +++ b/net/caif/caif_socket.c
2479 @@ -286,8 +286,6 @@ static int caif_seqpkt_recvmsg(struct kiocb *iocb, struct socket *sock,
2480 if (m->msg_flags&MSG_OOB)
2481 goto read_error;
2482
2483 - m->msg_namelen = 0;
2484 -
2485 skb = skb_recv_datagram(sk, flags, 0 , &ret);
2486 if (!skb)
2487 goto read_error;
2488 @@ -361,8 +359,6 @@ static int caif_stream_recvmsg(struct kiocb *iocb, struct socket *sock,
2489 if (flags&MSG_OOB)
2490 goto out;
2491
2492 - msg->msg_namelen = 0;
2493 -
2494 /*
2495 * Lock the socket to prevent queue disordering
2496 * while sleeps in memcpy_tomsg
2497 diff --git a/net/compat.c b/net/compat.c
2498 index 89032580bd1d..dd32e34c1e2c 100644
2499 --- a/net/compat.c
2500 +++ b/net/compat.c
2501 @@ -72,7 +72,7 @@ int get_compat_msghdr(struct msghdr *kmsg, struct compat_msghdr __user *umsg)
2502 __get_user(kmsg->msg_flags, &umsg->msg_flags))
2503 return -EFAULT;
2504 if (kmsg->msg_namelen > sizeof(struct sockaddr_storage))
2505 - return -EINVAL;
2506 + kmsg->msg_namelen = sizeof(struct sockaddr_storage);
2507 kmsg->msg_name = compat_ptr(tmp1);
2508 kmsg->msg_iov = compat_ptr(tmp2);
2509 kmsg->msg_control = compat_ptr(tmp3);
2510 @@ -93,7 +93,8 @@ int verify_compat_iovec(struct msghdr *kern_msg, struct iovec *kern_iov,
2511 if (err < 0)
2512 return err;
2513 }
2514 - kern_msg->msg_name = kern_address;
2515 + if (kern_msg->msg_name)
2516 + kern_msg->msg_name = kern_address;
2517 } else
2518 kern_msg->msg_name = NULL;
2519
2520 diff --git a/net/core/dev.c b/net/core/dev.c
2521 index 3430b1ed12e5..3d1387461279 100644
2522 --- a/net/core/dev.c
2523 +++ b/net/core/dev.c
2524 @@ -1691,13 +1691,9 @@ int dev_forward_skb(struct net_device *dev, struct sk_buff *skb)
2525 kfree_skb(skb);
2526 return NET_RX_DROP;
2527 }
2528 - skb->protocol = eth_type_trans(skb, dev);
2529
2530 - /* eth_type_trans() can set pkt_type.
2531 - * call skb_scrub_packet() after it to clear pkt_type _after_ calling
2532 - * eth_type_trans().
2533 - */
2534 skb_scrub_packet(skb, true);
2535 + skb->protocol = eth_type_trans(skb, dev);
2536
2537 return netif_rx(skb);
2538 }
2539 @@ -4819,7 +4815,7 @@ static void dev_change_rx_flags(struct net_device *dev, int flags)
2540 {
2541 const struct net_device_ops *ops = dev->netdev_ops;
2542
2543 - if ((dev->flags & IFF_UP) && ops->ndo_change_rx_flags)
2544 + if (ops->ndo_change_rx_flags)
2545 ops->ndo_change_rx_flags(dev, flags);
2546 }
2547
2548 diff --git a/net/core/fib_rules.c b/net/core/fib_rules.c
2549 index 2e654138433c..f409e0bd35c0 100644
2550 --- a/net/core/fib_rules.c
2551 +++ b/net/core/fib_rules.c
2552 @@ -460,7 +460,8 @@ static int fib_nl_delrule(struct sk_buff *skb, struct nlmsghdr* nlh)
2553 if (frh->action && (frh->action != rule->action))
2554 continue;
2555
2556 - if (frh->table && (frh_get_table(frh, tb) != rule->table))
2557 + if (frh_get_table(frh, tb) &&
2558 + (frh_get_table(frh, tb) != rule->table))
2559 continue;
2560
2561 if (tb[FRA_PRIORITY] &&
2562 diff --git a/net/core/iovec.c b/net/core/iovec.c
2563 index b77eeecc0011..7d84ea1fbb20 100644
2564 --- a/net/core/iovec.c
2565 +++ b/net/core/iovec.c
2566 @@ -48,7 +48,8 @@ int verify_iovec(struct msghdr *m, struct iovec *iov, struct sockaddr_storage *a
2567 if (err < 0)
2568 return err;
2569 }
2570 - m->msg_name = address;
2571 + if (m->msg_name)
2572 + m->msg_name = address;
2573 } else {
2574 m->msg_name = NULL;
2575 }
2576 diff --git a/net/core/pktgen.c b/net/core/pktgen.c
2577 index 261357a66300..a797fff7f222 100644
2578 --- a/net/core/pktgen.c
2579 +++ b/net/core/pktgen.c
2580 @@ -2527,6 +2527,8 @@ static int process_ipsec(struct pktgen_dev *pkt_dev,
2581 if (x) {
2582 int ret;
2583 __u8 *eth;
2584 + struct iphdr *iph;
2585 +
2586 nhead = x->props.header_len - skb_headroom(skb);
2587 if (nhead > 0) {
2588 ret = pskb_expand_head(skb, nhead, 0, GFP_ATOMIC);
2589 @@ -2548,6 +2550,11 @@ static int process_ipsec(struct pktgen_dev *pkt_dev,
2590 eth = (__u8 *) skb_push(skb, ETH_HLEN);
2591 memcpy(eth, pkt_dev->hh, 12);
2592 *(u16 *) &eth[12] = protocol;
2593 +
2594 + /* Update IPv4 header len as well as checksum value */
2595 + iph = ip_hdr(skb);
2596 + iph->tot_len = htons(skb->len - ETH_HLEN);
2597 + ip_send_check(iph);
2598 }
2599 }
2600 return 1;
2601 diff --git a/net/core/skbuff.c b/net/core/skbuff.c
2602 index d81cff119f73..c28c7fed0d0b 100644
2603 --- a/net/core/skbuff.c
2604 +++ b/net/core/skbuff.c
2605 @@ -580,9 +580,6 @@ static void skb_release_head_state(struct sk_buff *skb)
2606 #if IS_ENABLED(CONFIG_NF_CONNTRACK)
2607 nf_conntrack_put(skb->nfct);
2608 #endif
2609 -#ifdef NET_SKBUFF_NF_DEFRAG_NEEDED
2610 - nf_conntrack_put_reasm(skb->nfct_reasm);
2611 -#endif
2612 #ifdef CONFIG_BRIDGE_NETFILTER
2613 nf_bridge_put(skb->nf_bridge);
2614 #endif
2615 @@ -2758,6 +2755,7 @@ struct sk_buff *skb_segment(struct sk_buff *skb, netdev_features_t features)
2616 struct sk_buff *segs = NULL;
2617 struct sk_buff *tail = NULL;
2618 struct sk_buff *fskb = skb_shinfo(skb)->frag_list;
2619 + skb_frag_t *skb_frag = skb_shinfo(skb)->frags;
2620 unsigned int mss = skb_shinfo(skb)->gso_size;
2621 unsigned int doffset = skb->data - skb_mac_header(skb);
2622 unsigned int offset = doffset;
2623 @@ -2797,16 +2795,38 @@ struct sk_buff *skb_segment(struct sk_buff *skb, netdev_features_t features)
2624 if (hsize > len || !sg)
2625 hsize = len;
2626
2627 - if (!hsize && i >= nfrags) {
2628 - BUG_ON(fskb->len != len);
2629 + if (!hsize && i >= nfrags && skb_headlen(fskb) &&
2630 + (skb_headlen(fskb) == len || sg)) {
2631 + BUG_ON(skb_headlen(fskb) > len);
2632 +
2633 + i = 0;
2634 + nfrags = skb_shinfo(fskb)->nr_frags;
2635 + skb_frag = skb_shinfo(fskb)->frags;
2636 + pos += skb_headlen(fskb);
2637 +
2638 + while (pos < offset + len) {
2639 + BUG_ON(i >= nfrags);
2640 +
2641 + size = skb_frag_size(skb_frag);
2642 + if (pos + size > offset + len)
2643 + break;
2644 +
2645 + i++;
2646 + pos += size;
2647 + skb_frag++;
2648 + }
2649
2650 - pos += len;
2651 nskb = skb_clone(fskb, GFP_ATOMIC);
2652 fskb = fskb->next;
2653
2654 if (unlikely(!nskb))
2655 goto err;
2656
2657 + if (unlikely(pskb_trim(nskb, len))) {
2658 + kfree_skb(nskb);
2659 + goto err;
2660 + }
2661 +
2662 hsize = skb_end_offset(nskb);
2663 if (skb_cow_head(nskb, doffset + headroom)) {
2664 kfree_skb(nskb);
2665 @@ -2850,7 +2870,7 @@ struct sk_buff *skb_segment(struct sk_buff *skb, netdev_features_t features)
2666 nskb->data - tnl_hlen,
2667 doffset + tnl_hlen);
2668
2669 - if (fskb != skb_shinfo(skb)->frag_list)
2670 + if (nskb->len == len + doffset)
2671 goto perform_csum_check;
2672
2673 if (!sg) {
2674 @@ -2868,8 +2888,28 @@ struct sk_buff *skb_segment(struct sk_buff *skb, netdev_features_t features)
2675
2676 skb_shinfo(nskb)->tx_flags = skb_shinfo(skb)->tx_flags & SKBTX_SHARED_FRAG;
2677
2678 - while (pos < offset + len && i < nfrags) {
2679 - *frag = skb_shinfo(skb)->frags[i];
2680 + while (pos < offset + len) {
2681 + if (i >= nfrags) {
2682 + BUG_ON(skb_headlen(fskb));
2683 +
2684 + i = 0;
2685 + nfrags = skb_shinfo(fskb)->nr_frags;
2686 + skb_frag = skb_shinfo(fskb)->frags;
2687 +
2688 + BUG_ON(!nfrags);
2689 +
2690 + fskb = fskb->next;
2691 + }
2692 +
2693 + if (unlikely(skb_shinfo(nskb)->nr_frags >=
2694 + MAX_SKB_FRAGS)) {
2695 + net_warn_ratelimited(
2696 + "skb_segment: too many frags: %u %u\n",
2697 + pos, mss);
2698 + goto err;
2699 + }
2700 +
2701 + *frag = *skb_frag;
2702 __skb_frag_ref(frag);
2703 size = skb_frag_size(frag);
2704
2705 @@ -2882,6 +2922,7 @@ struct sk_buff *skb_segment(struct sk_buff *skb, netdev_features_t features)
2706
2707 if (pos + size <= offset + len) {
2708 i++;
2709 + skb_frag++;
2710 pos += size;
2711 } else {
2712 skb_frag_size_sub(frag, pos + size - (offset + len));
2713 @@ -2891,25 +2932,6 @@ struct sk_buff *skb_segment(struct sk_buff *skb, netdev_features_t features)
2714 frag++;
2715 }
2716
2717 - if (pos < offset + len) {
2718 - struct sk_buff *fskb2 = fskb;
2719 -
2720 - BUG_ON(pos + fskb->len != offset + len);
2721 -
2722 - pos += fskb->len;
2723 - fskb = fskb->next;
2724 -
2725 - if (fskb2->next) {
2726 - fskb2 = skb_clone(fskb2, GFP_ATOMIC);
2727 - if (!fskb2)
2728 - goto err;
2729 - } else
2730 - skb_get(fskb2);
2731 -
2732 - SKB_FRAG_ASSERT(nskb);
2733 - skb_shinfo(nskb)->frag_list = fskb2;
2734 - }
2735 -
2736 skip_fraglist:
2737 nskb->data_len = len - hsize;
2738 nskb->len += nskb->data_len;
2739 diff --git a/net/ieee802154/6lowpan.c b/net/ieee802154/6lowpan.c
2740 index ff41b4d60d30..008f33703a33 100644
2741 --- a/net/ieee802154/6lowpan.c
2742 +++ b/net/ieee802154/6lowpan.c
2743 @@ -957,7 +957,7 @@ lowpan_process_data(struct sk_buff *skb)
2744 * Traffic class carried in-line
2745 * ECN + DSCP (1 byte), Flow Label is elided
2746 */
2747 - case 1: /* 10b */
2748 + case 2: /* 10b */
2749 if (lowpan_fetch_skb_u8(skb, &tmp))
2750 goto drop;
2751
2752 @@ -968,7 +968,7 @@ lowpan_process_data(struct sk_buff *skb)
2753 * Flow Label carried in-line
2754 * ECN + 2-bit Pad + Flow Label (3 bytes), DSCP is elided
2755 */
2756 - case 2: /* 01b */
2757 + case 1: /* 01b */
2758 if (lowpan_fetch_skb_u8(skb, &tmp))
2759 goto drop;
2760
2761 diff --git a/net/ieee802154/dgram.c b/net/ieee802154/dgram.c
2762 index 581a59504bd5..1865fdf5a5a5 100644
2763 --- a/net/ieee802154/dgram.c
2764 +++ b/net/ieee802154/dgram.c
2765 @@ -315,9 +315,8 @@ static int dgram_recvmsg(struct kiocb *iocb, struct sock *sk,
2766 if (saddr) {
2767 saddr->family = AF_IEEE802154;
2768 saddr->addr = mac_cb(skb)->sa;
2769 - }
2770 - if (addr_len)
2771 *addr_len = sizeof(*saddr);
2772 + }
2773
2774 if (flags & MSG_TRUNC)
2775 copied = skb->len;
2776 diff --git a/net/ipv4/datagram.c b/net/ipv4/datagram.c
2777 index b28e863fe0a7..19e36376d2a0 100644
2778 --- a/net/ipv4/datagram.c
2779 +++ b/net/ipv4/datagram.c
2780 @@ -57,7 +57,7 @@ int ip4_datagram_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len)
2781 if (IS_ERR(rt)) {
2782 err = PTR_ERR(rt);
2783 if (err == -ENETUNREACH)
2784 - IP_INC_STATS_BH(sock_net(sk), IPSTATS_MIB_OUTNOROUTES);
2785 + IP_INC_STATS(sock_net(sk), IPSTATS_MIB_OUTNOROUTES);
2786 goto out;
2787 }
2788
2789 diff --git a/net/ipv4/ip_sockglue.c b/net/ipv4/ip_sockglue.c
2790 index d9c4f113d709..23e6ab0a2dc0 100644
2791 --- a/net/ipv4/ip_sockglue.c
2792 +++ b/net/ipv4/ip_sockglue.c
2793 @@ -368,7 +368,7 @@ void ip_local_error(struct sock *sk, int err, __be32 daddr, __be16 port, u32 inf
2794 /*
2795 * Handle MSG_ERRQUEUE
2796 */
2797 -int ip_recv_error(struct sock *sk, struct msghdr *msg, int len)
2798 +int ip_recv_error(struct sock *sk, struct msghdr *msg, int len, int *addr_len)
2799 {
2800 struct sock_exterr_skb *serr;
2801 struct sk_buff *skb, *skb2;
2802 @@ -405,6 +405,7 @@ int ip_recv_error(struct sock *sk, struct msghdr *msg, int len)
2803 serr->addr_offset);
2804 sin->sin_port = serr->port;
2805 memset(&sin->sin_zero, 0, sizeof(sin->sin_zero));
2806 + *addr_len = sizeof(*sin);
2807 }
2808
2809 memcpy(&errhdr.ee, &serr->ee, sizeof(struct sock_extended_err));
2810 diff --git a/net/ipv4/ip_tunnel.c b/net/ipv4/ip_tunnel.c
2811 index 63a6d6d6b875..254f11c24aa5 100644
2812 --- a/net/ipv4/ip_tunnel.c
2813 +++ b/net/ipv4/ip_tunnel.c
2814 @@ -454,6 +454,8 @@ int ip_tunnel_rcv(struct ip_tunnel *tunnel, struct sk_buff *skb,
2815 tstats->rx_bytes += skb->len;
2816 u64_stats_update_end(&tstats->syncp);
2817
2818 + skb_scrub_packet(skb, !net_eq(tunnel->net, dev_net(tunnel->dev)));
2819 +
2820 if (tunnel->dev->type == ARPHRD_ETHER) {
2821 skb->protocol = eth_type_trans(skb, tunnel->dev);
2822 skb_postpull_rcsum(skb, eth_hdr(skb), ETH_HLEN);
2823 @@ -461,8 +463,6 @@ int ip_tunnel_rcv(struct ip_tunnel *tunnel, struct sk_buff *skb,
2824 skb->dev = tunnel->dev;
2825 }
2826
2827 - skb_scrub_packet(skb, !net_eq(tunnel->net, dev_net(tunnel->dev)));
2828 -
2829 gro_cells_receive(&tunnel->gro_cells, skb);
2830 return 0;
2831
2832 diff --git a/net/ipv4/ip_vti.c b/net/ipv4/ip_vti.c
2833 index 6e87f853d033..26847e189c04 100644
2834 --- a/net/ipv4/ip_vti.c
2835 +++ b/net/ipv4/ip_vti.c
2836 @@ -190,6 +190,7 @@ static netdev_tx_t vti_tunnel_xmit(struct sk_buff *skb, struct net_device *dev)
2837 if (!rt->dst.xfrm ||
2838 rt->dst.xfrm->props.mode != XFRM_MODE_TUNNEL) {
2839 dev->stats.tx_carrier_errors++;
2840 + ip_rt_put(rt);
2841 goto tx_error_icmp;
2842 }
2843 tdev = rt->dst.dev;
2844 diff --git a/net/ipv4/ping.c b/net/ipv4/ping.c
2845 index d7d9882d4cae..c482f7c7dd32 100644
2846 --- a/net/ipv4/ping.c
2847 +++ b/net/ipv4/ping.c
2848 @@ -769,7 +769,7 @@ int ping_v4_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
2849 err = PTR_ERR(rt);
2850 rt = NULL;
2851 if (err == -ENETUNREACH)
2852 - IP_INC_STATS_BH(net, IPSTATS_MIB_OUTNOROUTES);
2853 + IP_INC_STATS(net, IPSTATS_MIB_OUTNOROUTES);
2854 goto out;
2855 }
2856
2857 @@ -827,8 +827,6 @@ int ping_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
2858 {
2859 struct inet_sock *isk = inet_sk(sk);
2860 int family = sk->sk_family;
2861 - struct sockaddr_in *sin;
2862 - struct sockaddr_in6 *sin6;
2863 struct sk_buff *skb;
2864 int copied, err;
2865
2866 @@ -838,19 +836,13 @@ int ping_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
2867 if (flags & MSG_OOB)
2868 goto out;
2869
2870 - if (addr_len) {
2871 - if (family == AF_INET)
2872 - *addr_len = sizeof(*sin);
2873 - else if (family == AF_INET6 && addr_len)
2874 - *addr_len = sizeof(*sin6);
2875 - }
2876 -
2877 if (flags & MSG_ERRQUEUE) {
2878 if (family == AF_INET) {
2879 - return ip_recv_error(sk, msg, len);
2880 + return ip_recv_error(sk, msg, len, addr_len);
2881 #if IS_ENABLED(CONFIG_IPV6)
2882 } else if (family == AF_INET6) {
2883 - return pingv6_ops.ipv6_recv_error(sk, msg, len);
2884 + return pingv6_ops.ipv6_recv_error(sk, msg, len,
2885 + addr_len);
2886 #endif
2887 }
2888 }
2889 @@ -874,11 +866,15 @@ int ping_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
2890
2891 /* Copy the address and add cmsg data. */
2892 if (family == AF_INET) {
2893 - sin = (struct sockaddr_in *) msg->msg_name;
2894 - sin->sin_family = AF_INET;
2895 - sin->sin_port = 0 /* skb->h.uh->source */;
2896 - sin->sin_addr.s_addr = ip_hdr(skb)->saddr;
2897 - memset(sin->sin_zero, 0, sizeof(sin->sin_zero));
2898 + struct sockaddr_in *sin = (struct sockaddr_in *)msg->msg_name;
2899 +
2900 + if (sin) {
2901 + sin->sin_family = AF_INET;
2902 + sin->sin_port = 0 /* skb->h.uh->source */;
2903 + sin->sin_addr.s_addr = ip_hdr(skb)->saddr;
2904 + memset(sin->sin_zero, 0, sizeof(sin->sin_zero));
2905 + *addr_len = sizeof(*sin);
2906 + }
2907
2908 if (isk->cmsg_flags)
2909 ip_cmsg_recv(msg, skb);
2910 @@ -887,17 +883,21 @@ int ping_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
2911 } else if (family == AF_INET6) {
2912 struct ipv6_pinfo *np = inet6_sk(sk);
2913 struct ipv6hdr *ip6 = ipv6_hdr(skb);
2914 - sin6 = (struct sockaddr_in6 *) msg->msg_name;
2915 - sin6->sin6_family = AF_INET6;
2916 - sin6->sin6_port = 0;
2917 - sin6->sin6_addr = ip6->saddr;
2918 -
2919 - sin6->sin6_flowinfo = 0;
2920 - if (np->sndflow)
2921 - sin6->sin6_flowinfo = ip6_flowinfo(ip6);
2922 -
2923 - sin6->sin6_scope_id = ipv6_iface_scope_id(&sin6->sin6_addr,
2924 - IP6CB(skb)->iif);
2925 + struct sockaddr_in6 *sin6 =
2926 + (struct sockaddr_in6 *)msg->msg_name;
2927 +
2928 + if (sin6) {
2929 + sin6->sin6_family = AF_INET6;
2930 + sin6->sin6_port = 0;
2931 + sin6->sin6_addr = ip6->saddr;
2932 + sin6->sin6_flowinfo = 0;
2933 + if (np->sndflow)
2934 + sin6->sin6_flowinfo = ip6_flowinfo(ip6);
2935 + sin6->sin6_scope_id =
2936 + ipv6_iface_scope_id(&sin6->sin6_addr,
2937 + IP6CB(skb)->iif);
2938 + *addr_len = sizeof(*sin6);
2939 + }
2940
2941 if (inet6_sk(sk)->rxopt.all)
2942 pingv6_ops.ip6_datagram_recv_ctl(sk, msg, skb);
2943 diff --git a/net/ipv4/raw.c b/net/ipv4/raw.c
2944 index 193db03540ad..7d3db7838e62 100644
2945 --- a/net/ipv4/raw.c
2946 +++ b/net/ipv4/raw.c
2947 @@ -694,11 +694,8 @@ static int raw_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
2948 if (flags & MSG_OOB)
2949 goto out;
2950
2951 - if (addr_len)
2952 - *addr_len = sizeof(*sin);
2953 -
2954 if (flags & MSG_ERRQUEUE) {
2955 - err = ip_recv_error(sk, msg, len);
2956 + err = ip_recv_error(sk, msg, len, addr_len);
2957 goto out;
2958 }
2959
2960 @@ -724,6 +721,7 @@ static int raw_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
2961 sin->sin_addr.s_addr = ip_hdr(skb)->saddr;
2962 sin->sin_port = 0;
2963 memset(&sin->sin_zero, 0, sizeof(sin->sin_zero));
2964 + *addr_len = sizeof(*sin);
2965 }
2966 if (inet->cmsg_flags)
2967 ip_cmsg_recv(msg, skb);
2968 diff --git a/net/ipv4/route.c b/net/ipv4/route.c
2969 index 6011615e810d..62290b5124c8 100644
2970 --- a/net/ipv4/route.c
2971 +++ b/net/ipv4/route.c
2972 @@ -1772,8 +1772,12 @@ local_input:
2973 rth->dst.error= -err;
2974 rth->rt_flags &= ~RTCF_LOCAL;
2975 }
2976 - if (do_cache)
2977 - rt_cache_route(&FIB_RES_NH(res), rth);
2978 + if (do_cache) {
2979 + if (unlikely(!rt_cache_route(&FIB_RES_NH(res), rth))) {
2980 + rth->dst.flags |= DST_NOCACHE;
2981 + rt_add_uncached_list(rth);
2982 + }
2983 + }
2984 skb_dst_set(skb, &rth->dst);
2985 err = 0;
2986 goto out;
2987 diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c
2988 index 6e5617b9f9db..be5246e1d5b6 100644
2989 --- a/net/ipv4/tcp.c
2990 +++ b/net/ipv4/tcp.c
2991 @@ -806,12 +806,6 @@ static unsigned int tcp_xmit_size_goal(struct sock *sk, u32 mss_now,
2992 xmit_size_goal = min_t(u32, gso_size,
2993 sk->sk_gso_max_size - 1 - hlen);
2994
2995 - /* TSQ : try to have at least two segments in flight
2996 - * (one in NIC TX ring, another in Qdisc)
2997 - */
2998 - xmit_size_goal = min_t(u32, xmit_size_goal,
2999 - sysctl_tcp_limit_output_bytes >> 1);
3000 -
3001 xmit_size_goal = tcp_bound_to_half_wnd(tp, xmit_size_goal);
3002
3003 /* We try hard to avoid divides here */
3004 diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c
3005 index b14266bb91eb..5031f68b545d 100644
3006 --- a/net/ipv4/tcp_ipv4.c
3007 +++ b/net/ipv4/tcp_ipv4.c
3008 @@ -177,7 +177,7 @@ int tcp_v4_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len)
3009 if (IS_ERR(rt)) {
3010 err = PTR_ERR(rt);
3011 if (err == -ENETUNREACH)
3012 - IP_INC_STATS_BH(sock_net(sk), IPSTATS_MIB_OUTNOROUTES);
3013 + IP_INC_STATS(sock_net(sk), IPSTATS_MIB_OUTNOROUTES);
3014 return err;
3015 }
3016
3017 diff --git a/net/ipv4/tcp_metrics.c b/net/ipv4/tcp_metrics.c
3018 index 52f3c6b971d2..310711433358 100644
3019 --- a/net/ipv4/tcp_metrics.c
3020 +++ b/net/ipv4/tcp_metrics.c
3021 @@ -659,10 +659,13 @@ void tcp_fastopen_cache_get(struct sock *sk, u16 *mss,
3022 void tcp_fastopen_cache_set(struct sock *sk, u16 mss,
3023 struct tcp_fastopen_cookie *cookie, bool syn_lost)
3024 {
3025 + struct dst_entry *dst = __sk_dst_get(sk);
3026 struct tcp_metrics_block *tm;
3027
3028 + if (!dst)
3029 + return;
3030 rcu_read_lock();
3031 - tm = tcp_get_metrics(sk, __sk_dst_get(sk), true);
3032 + tm = tcp_get_metrics(sk, dst, true);
3033 if (tm) {
3034 struct tcp_fastopen_metrics *tfom = &tm->tcpm_fastopen;
3035
3036 diff --git a/net/ipv4/tcp_offload.c b/net/ipv4/tcp_offload.c
3037 index 533c58a5cfb7..910ab81bc0dd 100644
3038 --- a/net/ipv4/tcp_offload.c
3039 +++ b/net/ipv4/tcp_offload.c
3040 @@ -272,33 +272,32 @@ static struct sk_buff **tcp4_gro_receive(struct sk_buff **head, struct sk_buff *
3041 {
3042 const struct iphdr *iph = skb_gro_network_header(skb);
3043 __wsum wsum;
3044 - __sum16 sum;
3045 +
3046 + /* Don't bother verifying checksum if we're going to flush anyway. */
3047 + if (NAPI_GRO_CB(skb)->flush)
3048 + goto skip_csum;
3049 +
3050 + wsum = skb->csum;
3051
3052 switch (skb->ip_summed) {
3053 + case CHECKSUM_NONE:
3054 + wsum = skb_checksum(skb, skb_gro_offset(skb), skb_gro_len(skb),
3055 + 0);
3056 +
3057 + /* fall through */
3058 +
3059 case CHECKSUM_COMPLETE:
3060 if (!tcp_v4_check(skb_gro_len(skb), iph->saddr, iph->daddr,
3061 - skb->csum)) {
3062 + wsum)) {
3063 skb->ip_summed = CHECKSUM_UNNECESSARY;
3064 break;
3065 }
3066 -flush:
3067 +
3068 NAPI_GRO_CB(skb)->flush = 1;
3069 return NULL;
3070 -
3071 - case CHECKSUM_NONE:
3072 - wsum = csum_tcpudp_nofold(iph->saddr, iph->daddr,
3073 - skb_gro_len(skb), IPPROTO_TCP, 0);
3074 - sum = csum_fold(skb_checksum(skb,
3075 - skb_gro_offset(skb),
3076 - skb_gro_len(skb),
3077 - wsum));
3078 - if (sum)
3079 - goto flush;
3080 -
3081 - skb->ip_summed = CHECKSUM_UNNECESSARY;
3082 - break;
3083 }
3084
3085 +skip_csum:
3086 return tcp_gro_receive(head, skb);
3087 }
3088
3089 diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c
3090 index d46f2143305c..e912634b2f05 100644
3091 --- a/net/ipv4/tcp_output.c
3092 +++ b/net/ipv4/tcp_output.c
3093 @@ -1875,8 +1875,12 @@ static bool tcp_write_xmit(struct sock *sk, unsigned int mss_now, int nonagle,
3094 * - better RTT estimation and ACK scheduling
3095 * - faster recovery
3096 * - high rates
3097 + * Alas, some drivers / subsystems require a fair amount
3098 + * of queued bytes to ensure line rate.
3099 + * One example is wifi aggregation (802.11 AMPDU)
3100 */
3101 - limit = max(skb->truesize, sk->sk_pacing_rate >> 10);
3102 + limit = max_t(unsigned int, sysctl_tcp_limit_output_bytes,
3103 + sk->sk_pacing_rate >> 10);
3104
3105 if (atomic_read(&sk->sk_wmem_alloc) > limit) {
3106 set_bit(TSQ_THROTTLED, &tp->tsq_flags);
3107 @@ -3108,7 +3112,6 @@ void tcp_send_window_probe(struct sock *sk)
3108 {
3109 if (sk->sk_state == TCP_ESTABLISHED) {
3110 tcp_sk(sk)->snd_wl1 = tcp_sk(sk)->rcv_nxt - 1;
3111 - tcp_sk(sk)->snd_nxt = tcp_sk(sk)->write_seq;
3112 tcp_xmit_probe_skb(sk, 0);
3113 }
3114 }
3115 diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c
3116 index 0ca44df51ee9..5e2c2f1a075d 100644
3117 --- a/net/ipv4/udp.c
3118 +++ b/net/ipv4/udp.c
3119 @@ -973,7 +973,7 @@ int udp_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
3120 err = PTR_ERR(rt);
3121 rt = NULL;
3122 if (err == -ENETUNREACH)
3123 - IP_INC_STATS_BH(net, IPSTATS_MIB_OUTNOROUTES);
3124 + IP_INC_STATS(net, IPSTATS_MIB_OUTNOROUTES);
3125 goto out;
3126 }
3127
3128 @@ -1072,6 +1072,9 @@ int udp_sendpage(struct sock *sk, struct page *page, int offset,
3129 struct udp_sock *up = udp_sk(sk);
3130 int ret;
3131
3132 + if (flags & MSG_SENDPAGE_NOTLAST)
3133 + flags |= MSG_MORE;
3134 +
3135 if (!up->pending) {
3136 struct msghdr msg = { .msg_flags = flags|MSG_MORE };
3137
3138 @@ -1209,14 +1212,8 @@ int udp_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
3139 int is_udplite = IS_UDPLITE(sk);
3140 bool slow;
3141
3142 - /*
3143 - * Check any passed addresses
3144 - */
3145 - if (addr_len)
3146 - *addr_len = sizeof(*sin);
3147 -
3148 if (flags & MSG_ERRQUEUE)
3149 - return ip_recv_error(sk, msg, len);
3150 + return ip_recv_error(sk, msg, len, addr_len);
3151
3152 try_again:
3153 skb = __skb_recv_datagram(sk, flags | (noblock ? MSG_DONTWAIT : 0),
3154 @@ -1276,6 +1273,7 @@ try_again:
3155 sin->sin_port = udp_hdr(skb)->source;
3156 sin->sin_addr.s_addr = ip_hdr(skb)->saddr;
3157 memset(sin->sin_zero, 0, sizeof(sin->sin_zero));
3158 + *addr_len = sizeof(*sin);
3159 }
3160 if (inet->cmsg_flags)
3161 ip_cmsg_recv(msg, skb);
3162 diff --git a/net/ipv4/xfrm4_policy.c b/net/ipv4/xfrm4_policy.c
3163 index ccde54248c8c..adf998322bd2 100644
3164 --- a/net/ipv4/xfrm4_policy.c
3165 +++ b/net/ipv4/xfrm4_policy.c
3166 @@ -104,10 +104,14 @@ _decode_session4(struct sk_buff *skb, struct flowi *fl, int reverse)
3167 const struct iphdr *iph = ip_hdr(skb);
3168 u8 *xprth = skb_network_header(skb) + iph->ihl * 4;
3169 struct flowi4 *fl4 = &fl->u.ip4;
3170 + int oif = 0;
3171 +
3172 + if (skb_dst(skb))
3173 + oif = skb_dst(skb)->dev->ifindex;
3174
3175 memset(fl4, 0, sizeof(struct flowi4));
3176 fl4->flowi4_mark = skb->mark;
3177 - fl4->flowi4_oif = skb_dst(skb)->dev->ifindex;
3178 + fl4->flowi4_oif = reverse ? skb->skb_iif : oif;
3179
3180 if (!ip_is_fragment(iph)) {
3181 switch (iph->protocol) {
3182 diff --git a/net/ipv6/af_inet6.c b/net/ipv6/af_inet6.c
3183 index 7c96100b021e..8132b4457b20 100644
3184 --- a/net/ipv6/af_inet6.c
3185 +++ b/net/ipv6/af_inet6.c
3186 @@ -965,10 +965,10 @@ out:
3187
3188 #ifdef CONFIG_SYSCTL
3189 sysctl_fail:
3190 - ipv6_packet_cleanup();
3191 + pingv6_exit();
3192 #endif
3193 pingv6_fail:
3194 - pingv6_exit();
3195 + ipv6_packet_cleanup();
3196 ipv6_packet_fail:
3197 tcpv6_exit();
3198 tcpv6_fail:
3199 diff --git a/net/ipv6/datagram.c b/net/ipv6/datagram.c
3200 index 48b6bd2a9a14..c66c6df6e881 100644
3201 --- a/net/ipv6/datagram.c
3202 +++ b/net/ipv6/datagram.c
3203 @@ -318,7 +318,7 @@ void ipv6_local_rxpmtu(struct sock *sk, struct flowi6 *fl6, u32 mtu)
3204 /*
3205 * Handle MSG_ERRQUEUE
3206 */
3207 -int ipv6_recv_error(struct sock *sk, struct msghdr *msg, int len)
3208 +int ipv6_recv_error(struct sock *sk, struct msghdr *msg, int len, int *addr_len)
3209 {
3210 struct ipv6_pinfo *np = inet6_sk(sk);
3211 struct sock_exterr_skb *serr;
3212 @@ -369,6 +369,7 @@ int ipv6_recv_error(struct sock *sk, struct msghdr *msg, int len)
3213 &sin->sin6_addr);
3214 sin->sin6_scope_id = 0;
3215 }
3216 + *addr_len = sizeof(*sin);
3217 }
3218
3219 memcpy(&errhdr.ee, &serr->ee, sizeof(struct sock_extended_err));
3220 @@ -377,6 +378,7 @@ int ipv6_recv_error(struct sock *sk, struct msghdr *msg, int len)
3221 if (serr->ee.ee_origin != SO_EE_ORIGIN_LOCAL) {
3222 sin->sin6_family = AF_INET6;
3223 sin->sin6_flowinfo = 0;
3224 + sin->sin6_port = 0;
3225 if (skb->protocol == htons(ETH_P_IPV6)) {
3226 sin->sin6_addr = ipv6_hdr(skb)->saddr;
3227 if (np->rxopt.all)
3228 @@ -423,7 +425,8 @@ EXPORT_SYMBOL_GPL(ipv6_recv_error);
3229 /*
3230 * Handle IPV6_RECVPATHMTU
3231 */
3232 -int ipv6_recv_rxpmtu(struct sock *sk, struct msghdr *msg, int len)
3233 +int ipv6_recv_rxpmtu(struct sock *sk, struct msghdr *msg, int len,
3234 + int *addr_len)
3235 {
3236 struct ipv6_pinfo *np = inet6_sk(sk);
3237 struct sk_buff *skb;
3238 @@ -457,6 +460,7 @@ int ipv6_recv_rxpmtu(struct sock *sk, struct msghdr *msg, int len)
3239 sin->sin6_port = 0;
3240 sin->sin6_scope_id = mtu_info.ip6m_addr.sin6_scope_id;
3241 sin->sin6_addr = mtu_info.ip6m_addr.sin6_addr;
3242 + *addr_len = sizeof(*sin);
3243 }
3244
3245 put_cmsg(msg, SOL_IPV6, IPV6_PATHMTU, sizeof(mtu_info), &mtu_info);
3246 diff --git a/net/ipv6/ip6_flowlabel.c b/net/ipv6/ip6_flowlabel.c
3247 index 46e88433ec7d..f0ccdb787100 100644
3248 --- a/net/ipv6/ip6_flowlabel.c
3249 +++ b/net/ipv6/ip6_flowlabel.c
3250 @@ -453,8 +453,10 @@ static int mem_check(struct sock *sk)
3251 if (room > FL_MAX_SIZE - FL_MAX_PER_SOCK)
3252 return 0;
3253
3254 + rcu_read_lock_bh();
3255 for_each_sk_fl_rcu(np, sfl)
3256 count++;
3257 + rcu_read_unlock_bh();
3258
3259 if (room <= 0 ||
3260 ((count >= FL_MAX_PER_SOCK ||
3261 diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c
3262 index 91fb4e8212f5..b6fa35e7425c 100644
3263 --- a/net/ipv6/ip6_output.c
3264 +++ b/net/ipv6/ip6_output.c
3265 @@ -116,8 +116,8 @@ static int ip6_finish_output2(struct sk_buff *skb)
3266 }
3267 rcu_read_unlock_bh();
3268
3269 - IP6_INC_STATS_BH(dev_net(dst->dev),
3270 - ip6_dst_idev(dst), IPSTATS_MIB_OUTNOROUTES);
3271 + IP6_INC_STATS(dev_net(dst->dev),
3272 + ip6_dst_idev(dst), IPSTATS_MIB_OUTNOROUTES);
3273 kfree_skb(skb);
3274 return -EINVAL;
3275 }
3276 @@ -125,7 +125,8 @@ static int ip6_finish_output2(struct sk_buff *skb)
3277 static int ip6_finish_output(struct sk_buff *skb)
3278 {
3279 if ((skb->len > ip6_skb_dst_mtu(skb) && !skb_is_gso(skb)) ||
3280 - dst_allfrag(skb_dst(skb)))
3281 + dst_allfrag(skb_dst(skb)) ||
3282 + (IP6CB(skb)->frag_max_size && skb->len > IP6CB(skb)->frag_max_size))
3283 return ip6_fragment(skb, ip6_finish_output2);
3284 else
3285 return ip6_finish_output2(skb);
3286 diff --git a/net/ipv6/ip6_tunnel.c b/net/ipv6/ip6_tunnel.c
3287 index 583b77e2f69b..c1e11b5d6ccc 100644
3288 --- a/net/ipv6/ip6_tunnel.c
3289 +++ b/net/ipv6/ip6_tunnel.c
3290 @@ -1635,6 +1635,15 @@ static int ip6_tnl_changelink(struct net_device *dev, struct nlattr *tb[],
3291 return ip6_tnl_update(t, &p);
3292 }
3293
3294 +static void ip6_tnl_dellink(struct net_device *dev, struct list_head *head)
3295 +{
3296 + struct net *net = dev_net(dev);
3297 + struct ip6_tnl_net *ip6n = net_generic(net, ip6_tnl_net_id);
3298 +
3299 + if (dev != ip6n->fb_tnl_dev)
3300 + unregister_netdevice_queue(dev, head);
3301 +}
3302 +
3303 static size_t ip6_tnl_get_size(const struct net_device *dev)
3304 {
3305 return
3306 @@ -1699,6 +1708,7 @@ static struct rtnl_link_ops ip6_link_ops __read_mostly = {
3307 .validate = ip6_tnl_validate,
3308 .newlink = ip6_tnl_newlink,
3309 .changelink = ip6_tnl_changelink,
3310 + .dellink = ip6_tnl_dellink,
3311 .get_size = ip6_tnl_get_size,
3312 .fill_info = ip6_tnl_fill_info,
3313 };
3314 @@ -1715,9 +1725,9 @@ static struct xfrm6_tunnel ip6ip6_handler __read_mostly = {
3315 .priority = 1,
3316 };
3317
3318 -static void __net_exit ip6_tnl_destroy_tunnels(struct ip6_tnl_net *ip6n)
3319 +static void __net_exit ip6_tnl_destroy_tunnels(struct net *net)
3320 {
3321 - struct net *net = dev_net(ip6n->fb_tnl_dev);
3322 + struct ip6_tnl_net *ip6n = net_generic(net, ip6_tnl_net_id);
3323 struct net_device *dev, *aux;
3324 int h;
3325 struct ip6_tnl *t;
3326 @@ -1785,10 +1795,8 @@ err_alloc_dev:
3327
3328 static void __net_exit ip6_tnl_exit_net(struct net *net)
3329 {
3330 - struct ip6_tnl_net *ip6n = net_generic(net, ip6_tnl_net_id);
3331 -
3332 rtnl_lock();
3333 - ip6_tnl_destroy_tunnels(ip6n);
3334 + ip6_tnl_destroy_tunnels(net);
3335 rtnl_unlock();
3336 }
3337
3338 diff --git a/net/ipv6/netfilter/nf_conntrack_l3proto_ipv6.c b/net/ipv6/netfilter/nf_conntrack_l3proto_ipv6.c
3339 index d6e4dd8b58df..83ab37cc8e6a 100644
3340 --- a/net/ipv6/netfilter/nf_conntrack_l3proto_ipv6.c
3341 +++ b/net/ipv6/netfilter/nf_conntrack_l3proto_ipv6.c
3342 @@ -169,63 +169,13 @@ out:
3343 return nf_conntrack_confirm(skb);
3344 }
3345
3346 -static unsigned int __ipv6_conntrack_in(struct net *net,
3347 - unsigned int hooknum,
3348 - struct sk_buff *skb,
3349 - const struct net_device *in,
3350 - const struct net_device *out,
3351 - int (*okfn)(struct sk_buff *))
3352 -{
3353 - struct sk_buff *reasm = skb->nfct_reasm;
3354 - const struct nf_conn_help *help;
3355 - struct nf_conn *ct;
3356 - enum ip_conntrack_info ctinfo;
3357 -
3358 - /* This packet is fragmented and has reassembled packet. */
3359 - if (reasm) {
3360 - /* Reassembled packet isn't parsed yet ? */
3361 - if (!reasm->nfct) {
3362 - unsigned int ret;
3363 -
3364 - ret = nf_conntrack_in(net, PF_INET6, hooknum, reasm);
3365 - if (ret != NF_ACCEPT)
3366 - return ret;
3367 - }
3368 -
3369 - /* Conntrack helpers need the entire reassembled packet in the
3370 - * POST_ROUTING hook. In case of unconfirmed connections NAT
3371 - * might reassign a helper, so the entire packet is also
3372 - * required.
3373 - */
3374 - ct = nf_ct_get(reasm, &ctinfo);
3375 - if (ct != NULL && !nf_ct_is_untracked(ct)) {
3376 - help = nfct_help(ct);
3377 - if ((help && help->helper) || !nf_ct_is_confirmed(ct)) {
3378 - nf_conntrack_get_reasm(reasm);
3379 - NF_HOOK_THRESH(NFPROTO_IPV6, hooknum, reasm,
3380 - (struct net_device *)in,
3381 - (struct net_device *)out,
3382 - okfn, NF_IP6_PRI_CONNTRACK + 1);
3383 - return NF_DROP_ERR(-ECANCELED);
3384 - }
3385 - }
3386 -
3387 - nf_conntrack_get(reasm->nfct);
3388 - skb->nfct = reasm->nfct;
3389 - skb->nfctinfo = reasm->nfctinfo;
3390 - return NF_ACCEPT;
3391 - }
3392 -
3393 - return nf_conntrack_in(net, PF_INET6, hooknum, skb);
3394 -}
3395 -
3396 static unsigned int ipv6_conntrack_in(unsigned int hooknum,
3397 struct sk_buff *skb,
3398 const struct net_device *in,
3399 const struct net_device *out,
3400 int (*okfn)(struct sk_buff *))
3401 {
3402 - return __ipv6_conntrack_in(dev_net(in), hooknum, skb, in, out, okfn);
3403 + return nf_conntrack_in(dev_net(in), PF_INET6, hooknum, skb);
3404 }
3405
3406 static unsigned int ipv6_conntrack_local(unsigned int hooknum,
3407 @@ -239,7 +189,7 @@ static unsigned int ipv6_conntrack_local(unsigned int hooknum,
3408 net_notice_ratelimited("ipv6_conntrack_local: packet too short\n");
3409 return NF_ACCEPT;
3410 }
3411 - return __ipv6_conntrack_in(dev_net(out), hooknum, skb, in, out, okfn);
3412 + return nf_conntrack_in(dev_net(out), PF_INET6, hooknum, skb);
3413 }
3414
3415 static struct nf_hook_ops ipv6_conntrack_ops[] __read_mostly = {
3416 diff --git a/net/ipv6/netfilter/nf_conntrack_reasm.c b/net/ipv6/netfilter/nf_conntrack_reasm.c
3417 index dffdc1a389c5..253566a8d55b 100644
3418 --- a/net/ipv6/netfilter/nf_conntrack_reasm.c
3419 +++ b/net/ipv6/netfilter/nf_conntrack_reasm.c
3420 @@ -621,31 +621,16 @@ ret_orig:
3421 return skb;
3422 }
3423
3424 -void nf_ct_frag6_output(unsigned int hooknum, struct sk_buff *skb,
3425 - struct net_device *in, struct net_device *out,
3426 - int (*okfn)(struct sk_buff *))
3427 +void nf_ct_frag6_consume_orig(struct sk_buff *skb)
3428 {
3429 struct sk_buff *s, *s2;
3430 - unsigned int ret = 0;
3431
3432 for (s = NFCT_FRAG6_CB(skb)->orig; s;) {
3433 - nf_conntrack_put_reasm(s->nfct_reasm);
3434 - nf_conntrack_get_reasm(skb);
3435 - s->nfct_reasm = skb;
3436 -
3437 s2 = s->next;
3438 s->next = NULL;
3439 -
3440 - if (ret != -ECANCELED)
3441 - ret = NF_HOOK_THRESH(NFPROTO_IPV6, hooknum, s,
3442 - in, out, okfn,
3443 - NF_IP6_PRI_CONNTRACK_DEFRAG + 1);
3444 - else
3445 - kfree_skb(s);
3446 -
3447 + consume_skb(s);
3448 s = s2;
3449 }
3450 - nf_conntrack_put_reasm(skb);
3451 }
3452
3453 static int nf_ct_net_init(struct net *net)
3454 diff --git a/net/ipv6/netfilter/nf_defrag_ipv6_hooks.c b/net/ipv6/netfilter/nf_defrag_ipv6_hooks.c
3455 index aacd121fe8c5..581dd9ede0de 100644
3456 --- a/net/ipv6/netfilter/nf_defrag_ipv6_hooks.c
3457 +++ b/net/ipv6/netfilter/nf_defrag_ipv6_hooks.c
3458 @@ -75,8 +75,11 @@ static unsigned int ipv6_defrag(unsigned int hooknum,
3459 if (reasm == skb)
3460 return NF_ACCEPT;
3461
3462 - nf_ct_frag6_output(hooknum, reasm, (struct net_device *)in,
3463 - (struct net_device *)out, okfn);
3464 + nf_ct_frag6_consume_orig(reasm);
3465 +
3466 + NF_HOOK_THRESH(NFPROTO_IPV6, hooknum, reasm,
3467 + (struct net_device *) in, (struct net_device *) out,
3468 + okfn, NF_IP6_PRI_CONNTRACK_DEFRAG + 1);
3469
3470 return NF_STOLEN;
3471 }
3472 diff --git a/net/ipv6/ping.c b/net/ipv6/ping.c
3473 index 18f19df4189f..7856e962a3e6 100644
3474 --- a/net/ipv6/ping.c
3475 +++ b/net/ipv6/ping.c
3476 @@ -57,7 +57,8 @@ static struct inet_protosw pingv6_protosw = {
3477
3478
3479 /* Compatibility glue so we can support IPv6 when it's compiled as a module */
3480 -static int dummy_ipv6_recv_error(struct sock *sk, struct msghdr *msg, int len)
3481 +static int dummy_ipv6_recv_error(struct sock *sk, struct msghdr *msg, int len,
3482 + int *addr_len)
3483 {
3484 return -EAFNOSUPPORT;
3485 }
3486 diff --git a/net/ipv6/raw.c b/net/ipv6/raw.c
3487 index a4ed2416399e..430067cb9210 100644
3488 --- a/net/ipv6/raw.c
3489 +++ b/net/ipv6/raw.c
3490 @@ -466,14 +466,11 @@ static int rawv6_recvmsg(struct kiocb *iocb, struct sock *sk,
3491 if (flags & MSG_OOB)
3492 return -EOPNOTSUPP;
3493
3494 - if (addr_len)
3495 - *addr_len=sizeof(*sin6);
3496 -
3497 if (flags & MSG_ERRQUEUE)
3498 - return ipv6_recv_error(sk, msg, len);
3499 + return ipv6_recv_error(sk, msg, len, addr_len);
3500
3501 if (np->rxpmtu && np->rxopt.bits.rxpmtu)
3502 - return ipv6_recv_rxpmtu(sk, msg, len);
3503 + return ipv6_recv_rxpmtu(sk, msg, len, addr_len);
3504
3505 skb = skb_recv_datagram(sk, flags, noblock, &err);
3506 if (!skb)
3507 @@ -507,6 +504,7 @@ static int rawv6_recvmsg(struct kiocb *iocb, struct sock *sk,
3508 sin6->sin6_flowinfo = 0;
3509 sin6->sin6_scope_id = ipv6_iface_scope_id(&sin6->sin6_addr,
3510 IP6CB(skb)->iif);
3511 + *addr_len = sizeof(*sin6);
3512 }
3513
3514 sock_recv_ts_and_drops(msg, sk, skb);
3515 diff --git a/net/ipv6/route.c b/net/ipv6/route.c
3516 index 04e17b3309fb..77308af056bc 100644
3517 --- a/net/ipv6/route.c
3518 +++ b/net/ipv6/route.c
3519 @@ -731,8 +731,11 @@ int rt6_route_rcv(struct net_device *dev, u8 *opt, int len,
3520 prefix = &prefix_buf;
3521 }
3522
3523 - rt = rt6_get_route_info(net, prefix, rinfo->prefix_len, gwaddr,
3524 - dev->ifindex);
3525 + if (rinfo->prefix_len == 0)
3526 + rt = rt6_get_dflt_router(gwaddr, dev);
3527 + else
3528 + rt = rt6_get_route_info(net, prefix, rinfo->prefix_len,
3529 + gwaddr, dev->ifindex);
3530
3531 if (rt && !lifetime) {
3532 ip6_del_rt(rt);
3533 diff --git a/net/ipv6/sit.c b/net/ipv6/sit.c
3534 index 19269453a8ea..b43388452bf8 100644
3535 --- a/net/ipv6/sit.c
3536 +++ b/net/ipv6/sit.c
3537 @@ -1594,6 +1594,15 @@ static const struct nla_policy ipip6_policy[IFLA_IPTUN_MAX + 1] = {
3538 #endif
3539 };
3540
3541 +static void ipip6_dellink(struct net_device *dev, struct list_head *head)
3542 +{
3543 + struct net *net = dev_net(dev);
3544 + struct sit_net *sitn = net_generic(net, sit_net_id);
3545 +
3546 + if (dev != sitn->fb_tunnel_dev)
3547 + unregister_netdevice_queue(dev, head);
3548 +}
3549 +
3550 static struct rtnl_link_ops sit_link_ops __read_mostly = {
3551 .kind = "sit",
3552 .maxtype = IFLA_IPTUN_MAX,
3553 @@ -1605,6 +1614,7 @@ static struct rtnl_link_ops sit_link_ops __read_mostly = {
3554 .changelink = ipip6_changelink,
3555 .get_size = ipip6_get_size,
3556 .fill_info = ipip6_fill_info,
3557 + .dellink = ipip6_dellink,
3558 };
3559
3560 static struct xfrm_tunnel sit_handler __read_mostly = {
3561 @@ -1619,9 +1629,10 @@ static struct xfrm_tunnel ipip_handler __read_mostly = {
3562 .priority = 2,
3563 };
3564
3565 -static void __net_exit sit_destroy_tunnels(struct sit_net *sitn, struct list_head *head)
3566 +static void __net_exit sit_destroy_tunnels(struct net *net,
3567 + struct list_head *head)
3568 {
3569 - struct net *net = dev_net(sitn->fb_tunnel_dev);
3570 + struct sit_net *sitn = net_generic(net, sit_net_id);
3571 struct net_device *dev, *aux;
3572 int prio;
3573
3574 @@ -1696,11 +1707,10 @@ err_alloc_dev:
3575
3576 static void __net_exit sit_exit_net(struct net *net)
3577 {
3578 - struct sit_net *sitn = net_generic(net, sit_net_id);
3579 LIST_HEAD(list);
3580
3581 rtnl_lock();
3582 - sit_destroy_tunnels(sitn, &list);
3583 + sit_destroy_tunnels(net, &list);
3584 unregister_netdevice_many(&list);
3585 rtnl_unlock();
3586 }
3587 diff --git a/net/ipv6/tcpv6_offload.c b/net/ipv6/tcpv6_offload.c
3588 index 2ec6bf6a0aa0..a7a2384b30f5 100644
3589 --- a/net/ipv6/tcpv6_offload.c
3590 +++ b/net/ipv6/tcpv6_offload.c
3591 @@ -37,34 +37,32 @@ static struct sk_buff **tcp6_gro_receive(struct sk_buff **head,
3592 {
3593 const struct ipv6hdr *iph = skb_gro_network_header(skb);
3594 __wsum wsum;
3595 - __sum16 sum;
3596 +
3597 + /* Don't bother verifying checksum if we're going to flush anyway. */
3598 + if (NAPI_GRO_CB(skb)->flush)
3599 + goto skip_csum;
3600 +
3601 + wsum = skb->csum;
3602
3603 switch (skb->ip_summed) {
3604 + case CHECKSUM_NONE:
3605 + wsum = skb_checksum(skb, skb_gro_offset(skb), skb_gro_len(skb),
3606 + wsum);
3607 +
3608 + /* fall through */
3609 +
3610 case CHECKSUM_COMPLETE:
3611 if (!tcp_v6_check(skb_gro_len(skb), &iph->saddr, &iph->daddr,
3612 - skb->csum)) {
3613 + wsum)) {
3614 skb->ip_summed = CHECKSUM_UNNECESSARY;
3615 break;
3616 }
3617 -flush:
3618 +
3619 NAPI_GRO_CB(skb)->flush = 1;
3620 return NULL;
3621 -
3622 - case CHECKSUM_NONE:
3623 - wsum = ~csum_unfold(csum_ipv6_magic(&iph->saddr, &iph->daddr,
3624 - skb_gro_len(skb),
3625 - IPPROTO_TCP, 0));
3626 - sum = csum_fold(skb_checksum(skb,
3627 - skb_gro_offset(skb),
3628 - skb_gro_len(skb),
3629 - wsum));
3630 - if (sum)
3631 - goto flush;
3632 -
3633 - skb->ip_summed = CHECKSUM_UNNECESSARY;
3634 - break;
3635 }
3636
3637 +skip_csum:
3638 return tcp_gro_receive(head, skb);
3639 }
3640
3641 diff --git a/net/ipv6/udp.c b/net/ipv6/udp.c
3642 index 18786098fd41..3d2758d4494e 100644
3643 --- a/net/ipv6/udp.c
3644 +++ b/net/ipv6/udp.c
3645 @@ -374,14 +374,11 @@ int udpv6_recvmsg(struct kiocb *iocb, struct sock *sk,
3646 int is_udp4;
3647 bool slow;
3648
3649 - if (addr_len)
3650 - *addr_len = sizeof(struct sockaddr_in6);
3651 -
3652 if (flags & MSG_ERRQUEUE)
3653 - return ipv6_recv_error(sk, msg, len);
3654 + return ipv6_recv_error(sk, msg, len, addr_len);
3655
3656 if (np->rxpmtu && np->rxopt.bits.rxpmtu)
3657 - return ipv6_recv_rxpmtu(sk, msg, len);
3658 + return ipv6_recv_rxpmtu(sk, msg, len, addr_len);
3659
3660 try_again:
3661 skb = __skb_recv_datagram(sk, flags | (noblock ? MSG_DONTWAIT : 0),
3662 @@ -462,7 +459,7 @@ try_again:
3663 ipv6_iface_scope_id(&sin6->sin6_addr,
3664 IP6CB(skb)->iif);
3665 }
3666 -
3667 + *addr_len = sizeof(*sin6);
3668 }
3669 if (is_udp4) {
3670 if (inet->cmsg_flags)
3671 diff --git a/net/ipv6/udp_offload.c b/net/ipv6/udp_offload.c
3672 index 60559511bd9c..34c6fff3ae84 100644
3673 --- a/net/ipv6/udp_offload.c
3674 +++ b/net/ipv6/udp_offload.c
3675 @@ -88,7 +88,7 @@ static struct sk_buff *udp6_ufo_fragment(struct sk_buff *skb,
3676
3677 /* Check if there is enough headroom to insert fragment header. */
3678 tnl_hlen = skb_tnl_header_len(skb);
3679 - if (skb_headroom(skb) < (tnl_hlen + frag_hdr_sz)) {
3680 + if (skb->mac_header < (tnl_hlen + frag_hdr_sz)) {
3681 if (gso_pskb_expand_head(skb, tnl_hlen + frag_hdr_sz))
3682 goto out;
3683 }
3684 diff --git a/net/ipv6/xfrm6_policy.c b/net/ipv6/xfrm6_policy.c
3685 index 08ed2772b7aa..550b195bb2fc 100644
3686 --- a/net/ipv6/xfrm6_policy.c
3687 +++ b/net/ipv6/xfrm6_policy.c
3688 @@ -135,10 +135,14 @@ _decode_session6(struct sk_buff *skb, struct flowi *fl, int reverse)
3689 struct ipv6_opt_hdr *exthdr;
3690 const unsigned char *nh = skb_network_header(skb);
3691 u8 nexthdr = nh[IP6CB(skb)->nhoff];
3692 + int oif = 0;
3693 +
3694 + if (skb_dst(skb))
3695 + oif = skb_dst(skb)->dev->ifindex;
3696
3697 memset(fl6, 0, sizeof(struct flowi6));
3698 fl6->flowi6_mark = skb->mark;
3699 - fl6->flowi6_oif = skb_dst(skb)->dev->ifindex;
3700 + fl6->flowi6_oif = reverse ? skb->skb_iif : oif;
3701
3702 fl6->daddr = reverse ? hdr->saddr : hdr->daddr;
3703 fl6->saddr = reverse ? hdr->daddr : hdr->saddr;
3704 diff --git a/net/ipx/af_ipx.c b/net/ipx/af_ipx.c
3705 index 7a1e0fc1bd4d..e096025b477f 100644
3706 --- a/net/ipx/af_ipx.c
3707 +++ b/net/ipx/af_ipx.c
3708 @@ -1823,8 +1823,6 @@ static int ipx_recvmsg(struct kiocb *iocb, struct socket *sock,
3709 if (skb->tstamp.tv64)
3710 sk->sk_stamp = skb->tstamp;
3711
3712 - msg->msg_namelen = sizeof(*sipx);
3713 -
3714 if (sipx) {
3715 sipx->sipx_family = AF_IPX;
3716 sipx->sipx_port = ipx->ipx_source.sock;
3717 @@ -1832,6 +1830,7 @@ static int ipx_recvmsg(struct kiocb *iocb, struct socket *sock,
3718 sipx->sipx_network = IPX_SKB_CB(skb)->ipx_source_net;
3719 sipx->sipx_type = ipx->ipx_type;
3720 sipx->sipx_zero = 0;
3721 + msg->msg_namelen = sizeof(*sipx);
3722 }
3723 rc = copied;
3724
3725 diff --git a/net/irda/af_irda.c b/net/irda/af_irda.c
3726 index 0578d4fa00a9..a5e62ef57155 100644
3727 --- a/net/irda/af_irda.c
3728 +++ b/net/irda/af_irda.c
3729 @@ -1385,8 +1385,6 @@ static int irda_recvmsg_dgram(struct kiocb *iocb, struct socket *sock,
3730
3731 IRDA_DEBUG(4, "%s()\n", __func__);
3732
3733 - msg->msg_namelen = 0;
3734 -
3735 skb = skb_recv_datagram(sk, flags & ~MSG_DONTWAIT,
3736 flags & MSG_DONTWAIT, &err);
3737 if (!skb)
3738 @@ -1451,8 +1449,6 @@ static int irda_recvmsg_stream(struct kiocb *iocb, struct socket *sock,
3739 target = sock_rcvlowat(sk, flags & MSG_WAITALL, size);
3740 timeo = sock_rcvtimeo(sk, noblock);
3741
3742 - msg->msg_namelen = 0;
3743 -
3744 do {
3745 int chunk;
3746 struct sk_buff *skb = skb_dequeue(&sk->sk_receive_queue);
3747 diff --git a/net/iucv/af_iucv.c b/net/iucv/af_iucv.c
3748 index 168aff5e60de..c4b7218058b6 100644
3749 --- a/net/iucv/af_iucv.c
3750 +++ b/net/iucv/af_iucv.c
3751 @@ -1324,8 +1324,6 @@ static int iucv_sock_recvmsg(struct kiocb *iocb, struct socket *sock,
3752 int err = 0;
3753 u32 offset;
3754
3755 - msg->msg_namelen = 0;
3756 -
3757 if ((sk->sk_state == IUCV_DISCONN) &&
3758 skb_queue_empty(&iucv->backlog_skb_q) &&
3759 skb_queue_empty(&sk->sk_receive_queue) &&
3760 diff --git a/net/key/af_key.c b/net/key/af_key.c
3761 index 911ef03bf8fb..545f047868ad 100644
3762 --- a/net/key/af_key.c
3763 +++ b/net/key/af_key.c
3764 @@ -3616,7 +3616,6 @@ static int pfkey_recvmsg(struct kiocb *kiocb,
3765 if (flags & ~(MSG_PEEK|MSG_DONTWAIT|MSG_TRUNC|MSG_CMSG_COMPAT))
3766 goto out;
3767
3768 - msg->msg_namelen = 0;
3769 skb = skb_recv_datagram(sk, flags, flags & MSG_DONTWAIT, &err);
3770 if (skb == NULL)
3771 goto out;
3772 diff --git a/net/l2tp/l2tp_ip.c b/net/l2tp/l2tp_ip.c
3773 index 571db8dd2292..da1a1cee1a08 100644
3774 --- a/net/l2tp/l2tp_ip.c
3775 +++ b/net/l2tp/l2tp_ip.c
3776 @@ -518,9 +518,6 @@ static int l2tp_ip_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *m
3777 if (flags & MSG_OOB)
3778 goto out;
3779
3780 - if (addr_len)
3781 - *addr_len = sizeof(*sin);
3782 -
3783 skb = skb_recv_datagram(sk, flags, noblock, &err);
3784 if (!skb)
3785 goto out;
3786 @@ -543,6 +540,7 @@ static int l2tp_ip_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *m
3787 sin->sin_addr.s_addr = ip_hdr(skb)->saddr;
3788 sin->sin_port = 0;
3789 memset(&sin->sin_zero, 0, sizeof(sin->sin_zero));
3790 + *addr_len = sizeof(*sin);
3791 }
3792 if (inet->cmsg_flags)
3793 ip_cmsg_recv(msg, skb);
3794 diff --git a/net/l2tp/l2tp_ip6.c b/net/l2tp/l2tp_ip6.c
3795 index b8a6039314e8..e6e8408c9e36 100644
3796 --- a/net/l2tp/l2tp_ip6.c
3797 +++ b/net/l2tp/l2tp_ip6.c
3798 @@ -665,7 +665,7 @@ static int l2tp_ip6_recvmsg(struct kiocb *iocb, struct sock *sk,
3799 *addr_len = sizeof(*lsa);
3800
3801 if (flags & MSG_ERRQUEUE)
3802 - return ipv6_recv_error(sk, msg, len);
3803 + return ipv6_recv_error(sk, msg, len, addr_len);
3804
3805 skb = skb_recv_datagram(sk, flags, noblock, &err);
3806 if (!skb)
3807 diff --git a/net/l2tp/l2tp_ppp.c b/net/l2tp/l2tp_ppp.c
3808 index 8c46b271064a..44441c0c5037 100644
3809 --- a/net/l2tp/l2tp_ppp.c
3810 +++ b/net/l2tp/l2tp_ppp.c
3811 @@ -197,8 +197,6 @@ static int pppol2tp_recvmsg(struct kiocb *iocb, struct socket *sock,
3812 if (sk->sk_state & PPPOX_BOUND)
3813 goto end;
3814
3815 - msg->msg_namelen = 0;
3816 -
3817 err = 0;
3818 skb = skb_recv_datagram(sk, flags & ~MSG_DONTWAIT,
3819 flags & MSG_DONTWAIT, &err);
3820 diff --git a/net/llc/af_llc.c b/net/llc/af_llc.c
3821 index 6cba486353e8..7b01b9f5846c 100644
3822 --- a/net/llc/af_llc.c
3823 +++ b/net/llc/af_llc.c
3824 @@ -720,8 +720,6 @@ static int llc_ui_recvmsg(struct kiocb *iocb, struct socket *sock,
3825 int target; /* Read at least this many bytes */
3826 long timeo;
3827
3828 - msg->msg_namelen = 0;
3829 -
3830 lock_sock(sk);
3831 copied = -ENOTCONN;
3832 if (unlikely(sk->sk_type == SOCK_STREAM && sk->sk_state == TCP_LISTEN))
3833 diff --git a/net/netfilter/ipvs/ip_vs_core.c b/net/netfilter/ipvs/ip_vs_core.c
3834 index 74fd00c27210..3581736446d5 100644
3835 --- a/net/netfilter/ipvs/ip_vs_core.c
3836 +++ b/net/netfilter/ipvs/ip_vs_core.c
3837 @@ -1139,12 +1139,6 @@ ip_vs_out(unsigned int hooknum, struct sk_buff *skb, int af)
3838 ip_vs_fill_iph_skb(af, skb, &iph);
3839 #ifdef CONFIG_IP_VS_IPV6
3840 if (af == AF_INET6) {
3841 - if (!iph.fragoffs && skb_nfct_reasm(skb)) {
3842 - struct sk_buff *reasm = skb_nfct_reasm(skb);
3843 - /* Save fw mark for coming frags */
3844 - reasm->ipvs_property = 1;
3845 - reasm->mark = skb->mark;
3846 - }
3847 if (unlikely(iph.protocol == IPPROTO_ICMPV6)) {
3848 int related;
3849 int verdict = ip_vs_out_icmp_v6(skb, &related,
3850 @@ -1614,12 +1608,6 @@ ip_vs_in(unsigned int hooknum, struct sk_buff *skb, int af)
3851
3852 #ifdef CONFIG_IP_VS_IPV6
3853 if (af == AF_INET6) {
3854 - if (!iph.fragoffs && skb_nfct_reasm(skb)) {
3855 - struct sk_buff *reasm = skb_nfct_reasm(skb);
3856 - /* Save fw mark for coming frags. */
3857 - reasm->ipvs_property = 1;
3858 - reasm->mark = skb->mark;
3859 - }
3860 if (unlikely(iph.protocol == IPPROTO_ICMPV6)) {
3861 int related;
3862 int verdict = ip_vs_in_icmp_v6(skb, &related, hooknum,
3863 @@ -1671,9 +1659,8 @@ ip_vs_in(unsigned int hooknum, struct sk_buff *skb, int af)
3864 /* sorry, all this trouble for a no-hit :) */
3865 IP_VS_DBG_PKT(12, af, pp, skb, 0,
3866 "ip_vs_in: packet continues traversal as normal");
3867 - if (iph.fragoffs && !skb_nfct_reasm(skb)) {
3868 + if (iph.fragoffs) {
3869 /* Fragment that couldn't be mapped to a conn entry
3870 - * and don't have any pointer to a reasm skb
3871 * is missing module nf_defrag_ipv6
3872 */
3873 IP_VS_DBG_RL("Unhandled frag, load nf_defrag_ipv6\n");
3874 @@ -1756,38 +1743,6 @@ ip_vs_local_request4(unsigned int hooknum, struct sk_buff *skb,
3875 #ifdef CONFIG_IP_VS_IPV6
3876
3877 /*
3878 - * AF_INET6 fragment handling
3879 - * Copy info from first fragment, to the rest of them.
3880 - */
3881 -static unsigned int
3882 -ip_vs_preroute_frag6(unsigned int hooknum, struct sk_buff *skb,
3883 - const struct net_device *in,
3884 - const struct net_device *out,
3885 - int (*okfn)(struct sk_buff *))
3886 -{
3887 - struct sk_buff *reasm = skb_nfct_reasm(skb);
3888 - struct net *net;
3889 -
3890 - /* Skip if not a "replay" from nf_ct_frag6_output or first fragment.
3891 - * ipvs_property is set when checking first fragment
3892 - * in ip_vs_in() and ip_vs_out().
3893 - */
3894 - if (reasm)
3895 - IP_VS_DBG(2, "Fragment recv prop:%d\n", reasm->ipvs_property);
3896 - if (!reasm || !reasm->ipvs_property)
3897 - return NF_ACCEPT;
3898 -
3899 - net = skb_net(skb);
3900 - if (!net_ipvs(net)->enable)
3901 - return NF_ACCEPT;
3902 -
3903 - /* Copy stored fw mark, saved in ip_vs_{in,out} */
3904 - skb->mark = reasm->mark;
3905 -
3906 - return NF_ACCEPT;
3907 -}
3908 -
3909 -/*
3910 * AF_INET6 handler in NF_INET_LOCAL_IN chain
3911 * Schedule and forward packets from remote clients
3912 */
3913 @@ -1924,14 +1879,6 @@ static struct nf_hook_ops ip_vs_ops[] __read_mostly = {
3914 .priority = 100,
3915 },
3916 #ifdef CONFIG_IP_VS_IPV6
3917 - /* After mangle & nat fetch 2:nd fragment and following */
3918 - {
3919 - .hook = ip_vs_preroute_frag6,
3920 - .owner = THIS_MODULE,
3921 - .pf = NFPROTO_IPV6,
3922 - .hooknum = NF_INET_PRE_ROUTING,
3923 - .priority = NF_IP6_PRI_NAT_DST + 1,
3924 - },
3925 /* After packet filtering, change source only for VS/NAT */
3926 {
3927 .hook = ip_vs_reply6,
3928 diff --git a/net/netfilter/ipvs/ip_vs_pe_sip.c b/net/netfilter/ipvs/ip_vs_pe_sip.c
3929 index 9ef22bdce9f1..bed5f7042529 100644
3930 --- a/net/netfilter/ipvs/ip_vs_pe_sip.c
3931 +++ b/net/netfilter/ipvs/ip_vs_pe_sip.c
3932 @@ -65,7 +65,6 @@ static int get_callid(const char *dptr, unsigned int dataoff,
3933 static int
3934 ip_vs_sip_fill_param(struct ip_vs_conn_param *p, struct sk_buff *skb)
3935 {
3936 - struct sk_buff *reasm = skb_nfct_reasm(skb);
3937 struct ip_vs_iphdr iph;
3938 unsigned int dataoff, datalen, matchoff, matchlen;
3939 const char *dptr;
3940 @@ -79,15 +78,10 @@ ip_vs_sip_fill_param(struct ip_vs_conn_param *p, struct sk_buff *skb)
3941 /* todo: IPv6 fragments:
3942 * I think this only should be done for the first fragment. /HS
3943 */
3944 - if (reasm) {
3945 - skb = reasm;
3946 - dataoff = iph.thoff_reasm + sizeof(struct udphdr);
3947 - } else
3948 - dataoff = iph.len + sizeof(struct udphdr);
3949 + dataoff = iph.len + sizeof(struct udphdr);
3950
3951 if (dataoff >= skb->len)
3952 return -EINVAL;
3953 - /* todo: Check if this will mess-up the reasm skb !!! /HS */
3954 retc = skb_linearize(skb);
3955 if (retc < 0)
3956 return retc;
3957 diff --git a/net/netlink/af_netlink.c b/net/netlink/af_netlink.c
3958 index 8df7f64c6db3..613563555515 100644
3959 --- a/net/netlink/af_netlink.c
3960 +++ b/net/netlink/af_netlink.c
3961 @@ -2335,8 +2335,6 @@ static int netlink_recvmsg(struct kiocb *kiocb, struct socket *sock,
3962 }
3963 #endif
3964
3965 - msg->msg_namelen = 0;
3966 -
3967 copied = data_skb->len;
3968 if (len < copied) {
3969 msg->msg_flags |= MSG_TRUNC;
3970 diff --git a/net/netrom/af_netrom.c b/net/netrom/af_netrom.c
3971 index 698814bfa7ad..53c19a35fc6d 100644
3972 --- a/net/netrom/af_netrom.c
3973 +++ b/net/netrom/af_netrom.c
3974 @@ -1179,10 +1179,9 @@ static int nr_recvmsg(struct kiocb *iocb, struct socket *sock,
3975 sax->sax25_family = AF_NETROM;
3976 skb_copy_from_linear_data_offset(skb, 7, sax->sax25_call.ax25_call,
3977 AX25_ADDR_LEN);
3978 + msg->msg_namelen = sizeof(*sax);
3979 }
3980
3981 - msg->msg_namelen = sizeof(*sax);
3982 -
3983 skb_free_datagram(sk, skb);
3984
3985 release_sock(sk);
3986 diff --git a/net/nfc/llcp_sock.c b/net/nfc/llcp_sock.c
3987 index d308402b67d8..824c6056bf82 100644
3988 --- a/net/nfc/llcp_sock.c
3989 +++ b/net/nfc/llcp_sock.c
3990 @@ -807,8 +807,6 @@ static int llcp_sock_recvmsg(struct kiocb *iocb, struct socket *sock,
3991
3992 pr_debug("%p %zu\n", sk, len);
3993
3994 - msg->msg_namelen = 0;
3995 -
3996 lock_sock(sk);
3997
3998 if (sk->sk_state == LLCP_CLOSED &&
3999 diff --git a/net/nfc/rawsock.c b/net/nfc/rawsock.c
4000 index 313bf1bc848a..5d11f4ac3ecb 100644
4001 --- a/net/nfc/rawsock.c
4002 +++ b/net/nfc/rawsock.c
4003 @@ -241,8 +241,6 @@ static int rawsock_recvmsg(struct kiocb *iocb, struct socket *sock,
4004 if (!skb)
4005 return rc;
4006
4007 - msg->msg_namelen = 0;
4008 -
4009 copied = skb->len;
4010 if (len < copied) {
4011 msg->msg_flags |= MSG_TRUNC;
4012 diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c
4013 index 2e8286b47c28..ba2548bd85bf 100644
4014 --- a/net/packet/af_packet.c
4015 +++ b/net/packet/af_packet.c
4016 @@ -244,11 +244,15 @@ static void __fanout_link(struct sock *sk, struct packet_sock *po);
4017 static void register_prot_hook(struct sock *sk)
4018 {
4019 struct packet_sock *po = pkt_sk(sk);
4020 +
4021 if (!po->running) {
4022 - if (po->fanout)
4023 + if (po->fanout) {
4024 __fanout_link(sk, po);
4025 - else
4026 + } else {
4027 dev_add_pack(&po->prot_hook);
4028 + rcu_assign_pointer(po->cached_dev, po->prot_hook.dev);
4029 + }
4030 +
4031 sock_hold(sk);
4032 po->running = 1;
4033 }
4034 @@ -266,10 +270,13 @@ static void __unregister_prot_hook(struct sock *sk, bool sync)
4035 struct packet_sock *po = pkt_sk(sk);
4036
4037 po->running = 0;
4038 - if (po->fanout)
4039 + if (po->fanout) {
4040 __fanout_unlink(sk, po);
4041 - else
4042 + } else {
4043 __dev_remove_pack(&po->prot_hook);
4044 + RCU_INIT_POINTER(po->cached_dev, NULL);
4045 + }
4046 +
4047 __sock_put(sk);
4048
4049 if (sync) {
4050 @@ -432,9 +439,9 @@ static void prb_shutdown_retire_blk_timer(struct packet_sock *po,
4051
4052 pkc = tx_ring ? &po->tx_ring.prb_bdqc : &po->rx_ring.prb_bdqc;
4053
4054 - spin_lock(&rb_queue->lock);
4055 + spin_lock_bh(&rb_queue->lock);
4056 pkc->delete_blk_timer = 1;
4057 - spin_unlock(&rb_queue->lock);
4058 + spin_unlock_bh(&rb_queue->lock);
4059
4060 prb_del_retire_blk_timer(pkc);
4061 }
4062 @@ -2052,12 +2059,24 @@ static int tpacket_fill_skb(struct packet_sock *po, struct sk_buff *skb,
4063 return tp_len;
4064 }
4065
4066 +static struct net_device *packet_cached_dev_get(struct packet_sock *po)
4067 +{
4068 + struct net_device *dev;
4069 +
4070 + rcu_read_lock();
4071 + dev = rcu_dereference(po->cached_dev);
4072 + if (dev)
4073 + dev_hold(dev);
4074 + rcu_read_unlock();
4075 +
4076 + return dev;
4077 +}
4078 +
4079 static int tpacket_snd(struct packet_sock *po, struct msghdr *msg)
4080 {
4081 struct sk_buff *skb;
4082 struct net_device *dev;
4083 __be16 proto;
4084 - bool need_rls_dev = false;
4085 int err, reserve = 0;
4086 void *ph;
4087 struct sockaddr_ll *saddr = (struct sockaddr_ll *)msg->msg_name;
4088 @@ -2070,7 +2089,7 @@ static int tpacket_snd(struct packet_sock *po, struct msghdr *msg)
4089 mutex_lock(&po->pg_vec_lock);
4090
4091 if (saddr == NULL) {
4092 - dev = po->prot_hook.dev;
4093 + dev = packet_cached_dev_get(po);
4094 proto = po->num;
4095 addr = NULL;
4096 } else {
4097 @@ -2084,19 +2103,17 @@ static int tpacket_snd(struct packet_sock *po, struct msghdr *msg)
4098 proto = saddr->sll_protocol;
4099 addr = saddr->sll_addr;
4100 dev = dev_get_by_index(sock_net(&po->sk), saddr->sll_ifindex);
4101 - need_rls_dev = true;
4102 }
4103
4104 err = -ENXIO;
4105 if (unlikely(dev == NULL))
4106 goto out;
4107 -
4108 - reserve = dev->hard_header_len;
4109 -
4110 err = -ENETDOWN;
4111 if (unlikely(!(dev->flags & IFF_UP)))
4112 goto out_put;
4113
4114 + reserve = dev->hard_header_len;
4115 +
4116 size_max = po->tx_ring.frame_size
4117 - (po->tp_hdrlen - sizeof(struct sockaddr_ll));
4118
4119 @@ -2173,8 +2190,7 @@ out_status:
4120 __packet_set_status(po, ph, status);
4121 kfree_skb(skb);
4122 out_put:
4123 - if (need_rls_dev)
4124 - dev_put(dev);
4125 + dev_put(dev);
4126 out:
4127 mutex_unlock(&po->pg_vec_lock);
4128 return err;
4129 @@ -2212,7 +2228,6 @@ static int packet_snd(struct socket *sock,
4130 struct sk_buff *skb;
4131 struct net_device *dev;
4132 __be16 proto;
4133 - bool need_rls_dev = false;
4134 unsigned char *addr;
4135 int err, reserve = 0;
4136 struct virtio_net_hdr vnet_hdr = { 0 };
4137 @@ -2228,7 +2243,7 @@ static int packet_snd(struct socket *sock,
4138 */
4139
4140 if (saddr == NULL) {
4141 - dev = po->prot_hook.dev;
4142 + dev = packet_cached_dev_get(po);
4143 proto = po->num;
4144 addr = NULL;
4145 } else {
4146 @@ -2240,19 +2255,17 @@ static int packet_snd(struct socket *sock,
4147 proto = saddr->sll_protocol;
4148 addr = saddr->sll_addr;
4149 dev = dev_get_by_index(sock_net(sk), saddr->sll_ifindex);
4150 - need_rls_dev = true;
4151 }
4152
4153 err = -ENXIO;
4154 - if (dev == NULL)
4155 + if (unlikely(dev == NULL))
4156 goto out_unlock;
4157 - if (sock->type == SOCK_RAW)
4158 - reserve = dev->hard_header_len;
4159 -
4160 err = -ENETDOWN;
4161 - if (!(dev->flags & IFF_UP))
4162 + if (unlikely(!(dev->flags & IFF_UP)))
4163 goto out_unlock;
4164
4165 + if (sock->type == SOCK_RAW)
4166 + reserve = dev->hard_header_len;
4167 if (po->has_vnet_hdr) {
4168 vnet_hdr_len = sizeof(vnet_hdr);
4169
4170 @@ -2386,15 +2399,14 @@ static int packet_snd(struct socket *sock,
4171 if (err > 0 && (err = net_xmit_errno(err)) != 0)
4172 goto out_unlock;
4173
4174 - if (need_rls_dev)
4175 - dev_put(dev);
4176 + dev_put(dev);
4177
4178 return len;
4179
4180 out_free:
4181 kfree_skb(skb);
4182 out_unlock:
4183 - if (dev && need_rls_dev)
4184 + if (dev)
4185 dev_put(dev);
4186 out:
4187 return err;
4188 @@ -2614,6 +2626,7 @@ static int packet_create(struct net *net, struct socket *sock, int protocol,
4189 po = pkt_sk(sk);
4190 sk->sk_family = PF_PACKET;
4191 po->num = proto;
4192 + RCU_INIT_POINTER(po->cached_dev, NULL);
4193
4194 sk->sk_destruct = packet_sock_destruct;
4195 sk_refcnt_debug_inc(sk);
4196 @@ -2660,7 +2673,6 @@ static int packet_recvmsg(struct kiocb *iocb, struct socket *sock,
4197 struct sock *sk = sock->sk;
4198 struct sk_buff *skb;
4199 int copied, err;
4200 - struct sockaddr_ll *sll;
4201 int vnet_hdr_len = 0;
4202
4203 err = -EINVAL;
4204 @@ -2744,22 +2756,10 @@ static int packet_recvmsg(struct kiocb *iocb, struct socket *sock,
4205 goto out_free;
4206 }
4207
4208 - /*
4209 - * If the address length field is there to be filled in, we fill
4210 - * it in now.
4211 + /* You lose any data beyond the buffer you gave. If it worries
4212 + * a user program they can ask the device for its MTU
4213 + * anyway.
4214 */
4215 -
4216 - sll = &PACKET_SKB_CB(skb)->sa.ll;
4217 - if (sock->type == SOCK_PACKET)
4218 - msg->msg_namelen = sizeof(struct sockaddr_pkt);
4219 - else
4220 - msg->msg_namelen = sll->sll_halen + offsetof(struct sockaddr_ll, sll_addr);
4221 -
4222 - /*
4223 - * You lose any data beyond the buffer you gave. If it worries a
4224 - * user program they can ask the device for its MTU anyway.
4225 - */
4226 -
4227 copied = skb->len;
4228 if (copied > len) {
4229 copied = len;
4230 @@ -2772,9 +2772,20 @@ static int packet_recvmsg(struct kiocb *iocb, struct socket *sock,
4231
4232 sock_recv_ts_and_drops(msg, sk, skb);
4233
4234 - if (msg->msg_name)
4235 + if (msg->msg_name) {
4236 + /* If the address length field is there to be filled
4237 + * in, we fill it in now.
4238 + */
4239 + if (sock->type == SOCK_PACKET) {
4240 + msg->msg_namelen = sizeof(struct sockaddr_pkt);
4241 + } else {
4242 + struct sockaddr_ll *sll = &PACKET_SKB_CB(skb)->sa.ll;
4243 + msg->msg_namelen = sll->sll_halen +
4244 + offsetof(struct sockaddr_ll, sll_addr);
4245 + }
4246 memcpy(msg->msg_name, &PACKET_SKB_CB(skb)->sa,
4247 msg->msg_namelen);
4248 + }
4249
4250 if (pkt_sk(sk)->auxdata) {
4251 struct tpacket_auxdata aux;
4252 diff --git a/net/packet/internal.h b/net/packet/internal.h
4253 index c4e4b4561207..1035fa2d909c 100644
4254 --- a/net/packet/internal.h
4255 +++ b/net/packet/internal.h
4256 @@ -113,6 +113,7 @@ struct packet_sock {
4257 unsigned int tp_loss:1;
4258 unsigned int tp_tx_has_off:1;
4259 unsigned int tp_tstamp;
4260 + struct net_device __rcu *cached_dev;
4261 struct packet_type prot_hook ____cacheline_aligned_in_smp;
4262 };
4263
4264 diff --git a/net/phonet/datagram.c b/net/phonet/datagram.c
4265 index 12c30f3e643e..38946b26e471 100644
4266 --- a/net/phonet/datagram.c
4267 +++ b/net/phonet/datagram.c
4268 @@ -139,9 +139,6 @@ static int pn_recvmsg(struct kiocb *iocb, struct sock *sk,
4269 MSG_CMSG_COMPAT))
4270 goto out_nofree;
4271
4272 - if (addr_len)
4273 - *addr_len = sizeof(sa);
4274 -
4275 skb = skb_recv_datagram(sk, flags, noblock, &rval);
4276 if (skb == NULL)
4277 goto out_nofree;
4278 @@ -162,8 +159,10 @@ static int pn_recvmsg(struct kiocb *iocb, struct sock *sk,
4279
4280 rval = (flags & MSG_TRUNC) ? skb->len : copylen;
4281
4282 - if (msg->msg_name != NULL)
4283 - memcpy(msg->msg_name, &sa, sizeof(struct sockaddr_pn));
4284 + if (msg->msg_name != NULL) {
4285 + memcpy(msg->msg_name, &sa, sizeof(sa));
4286 + *addr_len = sizeof(sa);
4287 + }
4288
4289 out:
4290 skb_free_datagram(sk, skb);
4291 diff --git a/net/rds/recv.c b/net/rds/recv.c
4292 index 9f0f17cf6bf9..de339b24ca14 100644
4293 --- a/net/rds/recv.c
4294 +++ b/net/rds/recv.c
4295 @@ -410,8 +410,6 @@ int rds_recvmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *msg,
4296
4297 rdsdebug("size %zu flags 0x%x timeo %ld\n", size, msg_flags, timeo);
4298
4299 - msg->msg_namelen = 0;
4300 -
4301 if (msg_flags & MSG_OOB)
4302 goto out;
4303
4304 diff --git a/net/rose/af_rose.c b/net/rose/af_rose.c
4305 index e98fcfbe6007..33af77246bfe 100644
4306 --- a/net/rose/af_rose.c
4307 +++ b/net/rose/af_rose.c
4308 @@ -1216,7 +1216,6 @@ static int rose_recvmsg(struct kiocb *iocb, struct socket *sock,
4309 {
4310 struct sock *sk = sock->sk;
4311 struct rose_sock *rose = rose_sk(sk);
4312 - struct sockaddr_rose *srose = (struct sockaddr_rose *)msg->msg_name;
4313 size_t copied;
4314 unsigned char *asmptr;
4315 struct sk_buff *skb;
4316 @@ -1252,8 +1251,11 @@ static int rose_recvmsg(struct kiocb *iocb, struct socket *sock,
4317
4318 skb_copy_datagram_iovec(skb, 0, msg->msg_iov, copied);
4319
4320 - if (srose != NULL) {
4321 - memset(srose, 0, msg->msg_namelen);
4322 + if (msg->msg_name) {
4323 + struct sockaddr_rose *srose;
4324 +
4325 + memset(msg->msg_name, 0, sizeof(struct full_sockaddr_rose));
4326 + srose = msg->msg_name;
4327 srose->srose_family = AF_ROSE;
4328 srose->srose_addr = rose->dest_addr;
4329 srose->srose_call = rose->dest_call;
4330 diff --git a/net/rxrpc/ar-recvmsg.c b/net/rxrpc/ar-recvmsg.c
4331 index 4b48687c3890..898492a8d61b 100644
4332 --- a/net/rxrpc/ar-recvmsg.c
4333 +++ b/net/rxrpc/ar-recvmsg.c
4334 @@ -143,10 +143,13 @@ int rxrpc_recvmsg(struct kiocb *iocb, struct socket *sock,
4335
4336 /* copy the peer address and timestamp */
4337 if (!continue_call) {
4338 - if (msg->msg_name && msg->msg_namelen > 0)
4339 + if (msg->msg_name) {
4340 + size_t len =
4341 + sizeof(call->conn->trans->peer->srx);
4342 memcpy(msg->msg_name,
4343 - &call->conn->trans->peer->srx,
4344 - sizeof(call->conn->trans->peer->srx));
4345 + &call->conn->trans->peer->srx, len);
4346 + msg->msg_namelen = len;
4347 + }
4348 sock_recv_ts_and_drops(msg, &rx->sk, skb);
4349 }
4350
4351 diff --git a/net/sched/sch_fq.c b/net/sched/sch_fq.c
4352 index a9dfdda9ed1d..2e55f8189502 100644
4353 --- a/net/sched/sch_fq.c
4354 +++ b/net/sched/sch_fq.c
4355 @@ -88,7 +88,7 @@ struct fq_sched_data {
4356 struct fq_flow internal; /* for non classified or high prio packets */
4357 u32 quantum;
4358 u32 initial_quantum;
4359 - u32 flow_default_rate;/* rate per flow : bytes per second */
4360 + u32 flow_refill_delay;
4361 u32 flow_max_rate; /* optional max rate per flow */
4362 u32 flow_plimit; /* max packets per flow */
4363 struct rb_root *fq_root;
4364 @@ -115,6 +115,7 @@ static struct fq_flow detached, throttled;
4365 static void fq_flow_set_detached(struct fq_flow *f)
4366 {
4367 f->next = &detached;
4368 + f->age = jiffies;
4369 }
4370
4371 static bool fq_flow_is_detached(const struct fq_flow *f)
4372 @@ -209,21 +210,15 @@ static void fq_gc(struct fq_sched_data *q,
4373 }
4374 }
4375
4376 -static const u8 prio2band[TC_PRIO_MAX + 1] = {
4377 - 1, 2, 2, 2, 1, 2, 0, 0 , 1, 1, 1, 1, 1, 1, 1, 1
4378 -};
4379 -
4380 static struct fq_flow *fq_classify(struct sk_buff *skb, struct fq_sched_data *q)
4381 {
4382 struct rb_node **p, *parent;
4383 struct sock *sk = skb->sk;
4384 struct rb_root *root;
4385 struct fq_flow *f;
4386 - int band;
4387
4388 /* warning: no starvation prevention... */
4389 - band = prio2band[skb->priority & TC_PRIO_MAX];
4390 - if (unlikely(band == 0))
4391 + if (unlikely((skb->priority & TC_PRIO_MAX) == TC_PRIO_CONTROL))
4392 return &q->internal;
4393
4394 if (unlikely(!sk)) {
4395 @@ -372,17 +367,20 @@ static int fq_enqueue(struct sk_buff *skb, struct Qdisc *sch)
4396 }
4397
4398 f->qlen++;
4399 - flow_queue_add(f, skb);
4400 if (skb_is_retransmit(skb))
4401 q->stat_tcp_retrans++;
4402 sch->qstats.backlog += qdisc_pkt_len(skb);
4403 if (fq_flow_is_detached(f)) {
4404 fq_flow_add_tail(&q->new_flows, f);
4405 - if (q->quantum > f->credit)
4406 - f->credit = q->quantum;
4407 + if (time_after(jiffies, f->age + q->flow_refill_delay))
4408 + f->credit = max_t(u32, f->credit, q->quantum);
4409 q->inactive_flows--;
4410 qdisc_unthrottled(sch);
4411 }
4412 +
4413 + /* Note: this overwrites f->age */
4414 + flow_queue_add(f, skb);
4415 +
4416 if (unlikely(f == &q->internal)) {
4417 q->stat_internal_packets++;
4418 qdisc_unthrottled(sch);
4419 @@ -460,7 +458,6 @@ begin:
4420 fq_flow_add_tail(&q->old_flows, f);
4421 } else {
4422 fq_flow_set_detached(f);
4423 - f->age = jiffies;
4424 q->inactive_flows++;
4425 }
4426 goto begin;
4427 @@ -614,6 +611,7 @@ static const struct nla_policy fq_policy[TCA_FQ_MAX + 1] = {
4428 [TCA_FQ_FLOW_DEFAULT_RATE] = { .type = NLA_U32 },
4429 [TCA_FQ_FLOW_MAX_RATE] = { .type = NLA_U32 },
4430 [TCA_FQ_BUCKETS_LOG] = { .type = NLA_U32 },
4431 + [TCA_FQ_FLOW_REFILL_DELAY] = { .type = NLA_U32 },
4432 };
4433
4434 static int fq_change(struct Qdisc *sch, struct nlattr *opt)
4435 @@ -655,7 +653,8 @@ static int fq_change(struct Qdisc *sch, struct nlattr *opt)
4436 q->initial_quantum = nla_get_u32(tb[TCA_FQ_INITIAL_QUANTUM]);
4437
4438 if (tb[TCA_FQ_FLOW_DEFAULT_RATE])
4439 - q->flow_default_rate = nla_get_u32(tb[TCA_FQ_FLOW_DEFAULT_RATE]);
4440 + pr_warn_ratelimited("sch_fq: defrate %u ignored.\n",
4441 + nla_get_u32(tb[TCA_FQ_FLOW_DEFAULT_RATE]));
4442
4443 if (tb[TCA_FQ_FLOW_MAX_RATE])
4444 q->flow_max_rate = nla_get_u32(tb[TCA_FQ_FLOW_MAX_RATE]);
4445 @@ -669,6 +668,12 @@ static int fq_change(struct Qdisc *sch, struct nlattr *opt)
4446 err = -EINVAL;
4447 }
4448
4449 + if (tb[TCA_FQ_FLOW_REFILL_DELAY]) {
4450 + u32 usecs_delay = nla_get_u32(tb[TCA_FQ_FLOW_REFILL_DELAY]) ;
4451 +
4452 + q->flow_refill_delay = usecs_to_jiffies(usecs_delay);
4453 + }
4454 +
4455 if (!err)
4456 err = fq_resize(q, fq_log);
4457
4458 @@ -704,7 +709,7 @@ static int fq_init(struct Qdisc *sch, struct nlattr *opt)
4459 q->flow_plimit = 100;
4460 q->quantum = 2 * psched_mtu(qdisc_dev(sch));
4461 q->initial_quantum = 10 * psched_mtu(qdisc_dev(sch));
4462 - q->flow_default_rate = 0;
4463 + q->flow_refill_delay = msecs_to_jiffies(40);
4464 q->flow_max_rate = ~0U;
4465 q->rate_enable = 1;
4466 q->new_flows.first = NULL;
4467 @@ -731,15 +736,16 @@ static int fq_dump(struct Qdisc *sch, struct sk_buff *skb)
4468 if (opts == NULL)
4469 goto nla_put_failure;
4470
4471 - /* TCA_FQ_FLOW_DEFAULT_RATE is not used anymore,
4472 - * do not bother giving its value
4473 - */
4474 + /* TCA_FQ_FLOW_DEFAULT_RATE is not used anymore */
4475 +
4476 if (nla_put_u32(skb, TCA_FQ_PLIMIT, sch->limit) ||
4477 nla_put_u32(skb, TCA_FQ_FLOW_PLIMIT, q->flow_plimit) ||
4478 nla_put_u32(skb, TCA_FQ_QUANTUM, q->quantum) ||
4479 nla_put_u32(skb, TCA_FQ_INITIAL_QUANTUM, q->initial_quantum) ||
4480 nla_put_u32(skb, TCA_FQ_RATE_ENABLE, q->rate_enable) ||
4481 nla_put_u32(skb, TCA_FQ_FLOW_MAX_RATE, q->flow_max_rate) ||
4482 + nla_put_u32(skb, TCA_FQ_FLOW_REFILL_DELAY,
4483 + jiffies_to_usecs(q->flow_refill_delay)) ||
4484 nla_put_u32(skb, TCA_FQ_BUCKETS_LOG, q->fq_trees_log))
4485 goto nla_put_failure;
4486
4487 diff --git a/net/sched/sch_tbf.c b/net/sched/sch_tbf.c
4488 index 1aaf1b6e51a2..6ddda282f9c7 100644
4489 --- a/net/sched/sch_tbf.c
4490 +++ b/net/sched/sch_tbf.c
4491 @@ -21,6 +21,7 @@
4492 #include <net/netlink.h>
4493 #include <net/sch_generic.h>
4494 #include <net/pkt_sched.h>
4495 +#include <net/tcp.h>
4496
4497
4498 /* Simple Token Bucket Filter.
4499 @@ -117,6 +118,22 @@ struct tbf_sched_data {
4500 };
4501
4502
4503 +/*
4504 + * Return length of individual segments of a gso packet,
4505 + * including all headers (MAC, IP, TCP/UDP)
4506 + */
4507 +static unsigned int skb_gso_seglen(const struct sk_buff *skb)
4508 +{
4509 + unsigned int hdr_len = skb_transport_header(skb) - skb_mac_header(skb);
4510 + const struct skb_shared_info *shinfo = skb_shinfo(skb);
4511 +
4512 + if (likely(shinfo->gso_type & (SKB_GSO_TCPV4 | SKB_GSO_TCPV6)))
4513 + hdr_len += tcp_hdrlen(skb);
4514 + else
4515 + hdr_len += sizeof(struct udphdr);
4516 + return hdr_len + shinfo->gso_size;
4517 +}
4518 +
4519 /* GSO packet is too big, segment it so that tbf can transmit
4520 * each segment in time
4521 */
4522 @@ -136,12 +153,8 @@ static int tbf_segment(struct sk_buff *skb, struct Qdisc *sch)
4523 while (segs) {
4524 nskb = segs->next;
4525 segs->next = NULL;
4526 - if (likely(segs->len <= q->max_size)) {
4527 - qdisc_skb_cb(segs)->pkt_len = segs->len;
4528 - ret = qdisc_enqueue(segs, q->qdisc);
4529 - } else {
4530 - ret = qdisc_reshape_fail(skb, sch);
4531 - }
4532 + qdisc_skb_cb(segs)->pkt_len = segs->len;
4533 + ret = qdisc_enqueue(segs, q->qdisc);
4534 if (ret != NET_XMIT_SUCCESS) {
4535 if (net_xmit_drop_count(ret))
4536 sch->qstats.drops++;
4537 @@ -163,7 +176,7 @@ static int tbf_enqueue(struct sk_buff *skb, struct Qdisc *sch)
4538 int ret;
4539
4540 if (qdisc_pkt_len(skb) > q->max_size) {
4541 - if (skb_is_gso(skb))
4542 + if (skb_is_gso(skb) && skb_gso_seglen(skb) <= q->max_size)
4543 return tbf_segment(skb, sch);
4544 return qdisc_reshape_fail(skb, sch);
4545 }
4546 @@ -316,6 +329,11 @@ static int tbf_change(struct Qdisc *sch, struct nlattr *opt)
4547 if (max_size < 0)
4548 goto done;
4549
4550 + if (max_size < psched_mtu(qdisc_dev(sch)))
4551 + pr_warn_ratelimited("sch_tbf: burst %u is lower than device %s mtu (%u) !\n",
4552 + max_size, qdisc_dev(sch)->name,
4553 + psched_mtu(qdisc_dev(sch)));
4554 +
4555 if (q->qdisc != &noop_qdisc) {
4556 err = fifo_set_limit(q->qdisc, qopt->limit);
4557 if (err)
4558 diff --git a/net/socket.c b/net/socket.c
4559 index c226aceee65b..e83c416708af 100644
4560 --- a/net/socket.c
4561 +++ b/net/socket.c
4562 @@ -221,12 +221,13 @@ static int move_addr_to_user(struct sockaddr_storage *kaddr, int klen,
4563 int err;
4564 int len;
4565
4566 + BUG_ON(klen > sizeof(struct sockaddr_storage));
4567 err = get_user(len, ulen);
4568 if (err)
4569 return err;
4570 if (len > klen)
4571 len = klen;
4572 - if (len < 0 || len > sizeof(struct sockaddr_storage))
4573 + if (len < 0)
4574 return -EINVAL;
4575 if (len) {
4576 if (audit_sockaddr(klen, kaddr))
4577 @@ -1840,8 +1841,10 @@ SYSCALL_DEFINE6(recvfrom, int, fd, void __user *, ubuf, size_t, size,
4578 msg.msg_iov = &iov;
4579 iov.iov_len = size;
4580 iov.iov_base = ubuf;
4581 - msg.msg_name = (struct sockaddr *)&address;
4582 - msg.msg_namelen = sizeof(address);
4583 + /* Save some cycles and don't copy the address if not needed */
4584 + msg.msg_name = addr ? (struct sockaddr *)&address : NULL;
4585 + /* We assume all kernel code knows the size of sockaddr_storage */
4586 + msg.msg_namelen = 0;
4587 if (sock->file->f_flags & O_NONBLOCK)
4588 flags |= MSG_DONTWAIT;
4589 err = sock_recvmsg(sock, &msg, size, flags);
4590 @@ -1970,7 +1973,7 @@ static int copy_msghdr_from_user(struct msghdr *kmsg,
4591 if (copy_from_user(kmsg, umsg, sizeof(struct msghdr)))
4592 return -EFAULT;
4593 if (kmsg->msg_namelen > sizeof(struct sockaddr_storage))
4594 - return -EINVAL;
4595 + kmsg->msg_namelen = sizeof(struct sockaddr_storage);
4596 return 0;
4597 }
4598
4599 @@ -2221,16 +2224,14 @@ static int ___sys_recvmsg(struct socket *sock, struct msghdr __user *msg,
4600 goto out;
4601 }
4602
4603 - /*
4604 - * Save the user-mode address (verify_iovec will change the
4605 - * kernel msghdr to use the kernel address space)
4606 + /* Save the user-mode address (verify_iovec will change the
4607 + * kernel msghdr to use the kernel address space)
4608 */
4609 -
4610 uaddr = (__force void __user *)msg_sys->msg_name;
4611 uaddr_len = COMPAT_NAMELEN(msg);
4612 - if (MSG_CMSG_COMPAT & flags) {
4613 + if (MSG_CMSG_COMPAT & flags)
4614 err = verify_compat_iovec(msg_sys, iov, &addr, VERIFY_WRITE);
4615 - } else
4616 + else
4617 err = verify_iovec(msg_sys, iov, &addr, VERIFY_WRITE);
4618 if (err < 0)
4619 goto out_freeiov;
4620 @@ -2239,6 +2240,9 @@ static int ___sys_recvmsg(struct socket *sock, struct msghdr __user *msg,
4621 cmsg_ptr = (unsigned long)msg_sys->msg_control;
4622 msg_sys->msg_flags = flags & (MSG_CMSG_CLOEXEC|MSG_CMSG_COMPAT);
4623
4624 + /* We assume all kernel code knows the size of sockaddr_storage */
4625 + msg_sys->msg_namelen = 0;
4626 +
4627 if (sock->file->f_flags & O_NONBLOCK)
4628 flags |= MSG_DONTWAIT;
4629 err = (nosec ? sock_recvmsg_nosec : sock_recvmsg)(sock, msg_sys,
4630 diff --git a/net/tipc/socket.c b/net/tipc/socket.c
4631 index 6cc7ddd2fb7c..dffdbeac18ca 100644
4632 --- a/net/tipc/socket.c
4633 +++ b/net/tipc/socket.c
4634 @@ -984,9 +984,6 @@ static int recv_msg(struct kiocb *iocb, struct socket *sock,
4635 goto exit;
4636 }
4637
4638 - /* will be updated in set_orig_addr() if needed */
4639 - m->msg_namelen = 0;
4640 -
4641 timeout = sock_rcvtimeo(sk, flags & MSG_DONTWAIT);
4642 restart:
4643
4644 @@ -1095,9 +1092,6 @@ static int recv_stream(struct kiocb *iocb, struct socket *sock,
4645 goto exit;
4646 }
4647
4648 - /* will be updated in set_orig_addr() if needed */
4649 - m->msg_namelen = 0;
4650 -
4651 target = sock_rcvlowat(sk, flags & MSG_WAITALL, buf_len);
4652 timeout = sock_rcvtimeo(sk, flags & MSG_DONTWAIT);
4653
4654 diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c
4655 index c1f403bed683..01625ccc3ae6 100644
4656 --- a/net/unix/af_unix.c
4657 +++ b/net/unix/af_unix.c
4658 @@ -1754,7 +1754,6 @@ static void unix_copy_addr(struct msghdr *msg, struct sock *sk)
4659 {
4660 struct unix_sock *u = unix_sk(sk);
4661
4662 - msg->msg_namelen = 0;
4663 if (u->addr) {
4664 msg->msg_namelen = u->addr->len;
4665 memcpy(msg->msg_name, u->addr->name, u->addr->len);
4666 @@ -1778,8 +1777,6 @@ static int unix_dgram_recvmsg(struct kiocb *iocb, struct socket *sock,
4667 if (flags&MSG_OOB)
4668 goto out;
4669
4670 - msg->msg_namelen = 0;
4671 -
4672 err = mutex_lock_interruptible(&u->readlock);
4673 if (err) {
4674 err = sock_intr_errno(sock_rcvtimeo(sk, noblock));
4675 @@ -1924,8 +1921,6 @@ static int unix_stream_recvmsg(struct kiocb *iocb, struct socket *sock,
4676 target = sock_rcvlowat(sk, flags&MSG_WAITALL, size);
4677 timeo = sock_rcvtimeo(sk, flags&MSG_DONTWAIT);
4678
4679 - msg->msg_namelen = 0;
4680 -
4681 /* Lock the socket to prevent queue disordering
4682 * while sleeps in memcpy_tomsg
4683 */
4684 diff --git a/net/vmw_vsock/af_vsock.c b/net/vmw_vsock/af_vsock.c
4685 index 545c08b8a1d4..5adfd94c5b85 100644
4686 --- a/net/vmw_vsock/af_vsock.c
4687 +++ b/net/vmw_vsock/af_vsock.c
4688 @@ -1662,8 +1662,6 @@ vsock_stream_recvmsg(struct kiocb *kiocb,
4689 vsk = vsock_sk(sk);
4690 err = 0;
4691
4692 - msg->msg_namelen = 0;
4693 -
4694 lock_sock(sk);
4695
4696 if (sk->sk_state != SS_CONNECTED) {
4697 diff --git a/net/vmw_vsock/vmci_transport.c b/net/vmw_vsock/vmci_transport.c
4698 index 9d6986634e0b..687360da62d9 100644
4699 --- a/net/vmw_vsock/vmci_transport.c
4700 +++ b/net/vmw_vsock/vmci_transport.c
4701 @@ -1746,8 +1746,6 @@ static int vmci_transport_dgram_dequeue(struct kiocb *kiocb,
4702 if (flags & MSG_OOB || flags & MSG_ERRQUEUE)
4703 return -EOPNOTSUPP;
4704
4705 - msg->msg_namelen = 0;
4706 -
4707 /* Retrieve the head sk_buff from the socket's receive queue. */
4708 err = 0;
4709 skb = skb_recv_datagram(&vsk->sk, flags, noblock, &err);
4710 diff --git a/net/x25/af_x25.c b/net/x25/af_x25.c
4711 index 45a3ab5612c1..7622789d3750 100644
4712 --- a/net/x25/af_x25.c
4713 +++ b/net/x25/af_x25.c
4714 @@ -1340,10 +1340,9 @@ static int x25_recvmsg(struct kiocb *iocb, struct socket *sock,
4715 if (sx25) {
4716 sx25->sx25_family = AF_X25;
4717 sx25->sx25_addr = x25->dest_addr;
4718 + msg->msg_namelen = sizeof(*sx25);
4719 }
4720
4721 - msg->msg_namelen = sizeof(struct sockaddr_x25);
4722 -
4723 x25_check_rbuf(sk);
4724 rc = copied;
4725 out_free_dgram: