diff options
author | David S. Miller <davem@davemloft.net> | 2013-03-27 13:52:49 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2013-03-27 13:52:49 -0400 |
commit | e2a553dbf18a5177fdebe29495c32a8e7fd3a4db (patch) | |
tree | 5ccb3d498325a7aaf93f49549eca03cb7861ca1c /net | |
parent | 7559d97993ae7d552c96313155286f372cf4cf7c (diff) | |
parent | a8c45289f215e137825bf9630d0abb41c1dc41ff (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Conflicts:
include/net/ipip.h
The changes made to ipip.h in 'net' were already included
in 'net-next' before that header was moved to another location.
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net')
-rw-r--r-- | net/8021q/vlan.c | 14 | ||||
-rw-r--r-- | net/bridge/br_fdb.c | 2 | ||||
-rw-r--r-- | net/core/dev.c | 1 | ||||
-rw-r--r-- | net/ipv4/tcp_input.c | 7 | ||||
-rw-r--r-- | net/ipv6/addrconf.c | 26 | ||||
-rw-r--r-- | net/sunrpc/sched.c | 9 | ||||
-rw-r--r-- | net/unix/af_unix.c | 11 |
7 files changed, 32 insertions, 38 deletions
diff --git a/net/8021q/vlan.c b/net/8021q/vlan.c index a18714469bf7..85addcd9372b 100644 --- a/net/8021q/vlan.c +++ b/net/8021q/vlan.c | |||
@@ -86,13 +86,6 @@ void unregister_vlan_dev(struct net_device *dev, struct list_head *head) | |||
86 | 86 | ||
87 | grp = &vlan_info->grp; | 87 | grp = &vlan_info->grp; |
88 | 88 | ||
89 | /* Take it out of our own structures, but be sure to interlock with | ||
90 | * HW accelerating devices or SW vlan input packet processing if | ||
91 | * VLAN is not 0 (leave it there for 802.1p). | ||
92 | */ | ||
93 | if (vlan_id) | ||
94 | vlan_vid_del(real_dev, vlan_id); | ||
95 | |||
96 | grp->nr_vlan_devs--; | 89 | grp->nr_vlan_devs--; |
97 | 90 | ||
98 | if (vlan->flags & VLAN_FLAG_MVRP) | 91 | if (vlan->flags & VLAN_FLAG_MVRP) |
@@ -114,6 +107,13 @@ void unregister_vlan_dev(struct net_device *dev, struct list_head *head) | |||
114 | vlan_gvrp_uninit_applicant(real_dev); | 107 | vlan_gvrp_uninit_applicant(real_dev); |
115 | } | 108 | } |
116 | 109 | ||
110 | /* Take it out of our own structures, but be sure to interlock with | ||
111 | * HW accelerating devices or SW vlan input packet processing if | ||
112 | * VLAN is not 0 (leave it there for 802.1p). | ||
113 | */ | ||
114 | if (vlan_id) | ||
115 | vlan_vid_del(real_dev, vlan_id); | ||
116 | |||
117 | /* Get rid of the vlan's reference to real_dev */ | 117 | /* Get rid of the vlan's reference to real_dev */ |
118 | dev_put(real_dev); | 118 | dev_put(real_dev); |
119 | } | 119 | } |
diff --git a/net/bridge/br_fdb.c b/net/bridge/br_fdb.c index 10b47d4cdfe4..c581f1200ef7 100644 --- a/net/bridge/br_fdb.c +++ b/net/bridge/br_fdb.c | |||
@@ -421,7 +421,7 @@ static int fdb_insert(struct net_bridge *br, struct net_bridge_port *source, | |||
421 | return 0; | 421 | return 0; |
422 | br_warn(br, "adding interface %s with same address " | 422 | br_warn(br, "adding interface %s with same address " |
423 | "as a received packet\n", | 423 | "as a received packet\n", |
424 | source->dev->name); | 424 | source ? source->dev->name : br->dev->name); |
425 | fdb_delete(br, fdb); | 425 | fdb_delete(br, fdb); |
426 | } | 426 | } |
427 | 427 | ||
diff --git a/net/core/dev.c b/net/core/dev.c index f5ad23bb24fc..2db88dfa99d7 100644 --- a/net/core/dev.c +++ b/net/core/dev.c | |||
@@ -1545,7 +1545,6 @@ void net_enable_timestamp(void) | |||
1545 | return; | 1545 | return; |
1546 | } | 1546 | } |
1547 | #endif | 1547 | #endif |
1548 | WARN_ON(in_interrupt()); | ||
1549 | static_key_slow_inc(&netstamp_needed); | 1548 | static_key_slow_inc(&netstamp_needed); |
1550 | } | 1549 | } |
1551 | EXPORT_SYMBOL(net_enable_timestamp); | 1550 | EXPORT_SYMBOL(net_enable_timestamp); |
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c index b2b36196b342..6d9ca35f0c35 100644 --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c | |||
@@ -1858,11 +1858,8 @@ void tcp_enter_loss(struct sock *sk, int how) | |||
1858 | if (tcp_is_reno(tp)) | 1858 | if (tcp_is_reno(tp)) |
1859 | tcp_reset_reno_sack(tp); | 1859 | tcp_reset_reno_sack(tp); |
1860 | 1860 | ||
1861 | if (!how) { | 1861 | tp->undo_marker = tp->snd_una; |
1862 | /* Push undo marker, if it was plain RTO and nothing | 1862 | if (how) { |
1863 | * was retransmitted. */ | ||
1864 | tp->undo_marker = tp->snd_una; | ||
1865 | } else { | ||
1866 | tp->sacked_out = 0; | 1863 | tp->sacked_out = 0; |
1867 | tp->fackets_out = 0; | 1864 | tp->fackets_out = 0; |
1868 | } | 1865 | } |
diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c index 78d8414d2cf4..d6279cb3d547 100644 --- a/net/ipv6/addrconf.c +++ b/net/ipv6/addrconf.c | |||
@@ -4876,26 +4876,20 @@ static void addrconf_sysctl_unregister(struct inet6_dev *idev) | |||
4876 | 4876 | ||
4877 | static int __net_init addrconf_init_net(struct net *net) | 4877 | static int __net_init addrconf_init_net(struct net *net) |
4878 | { | 4878 | { |
4879 | int err; | 4879 | int err = -ENOMEM; |
4880 | struct ipv6_devconf *all, *dflt; | 4880 | struct ipv6_devconf *all, *dflt; |
4881 | 4881 | ||
4882 | err = -ENOMEM; | 4882 | all = kmemdup(&ipv6_devconf, sizeof(ipv6_devconf), GFP_KERNEL); |
4883 | all = &ipv6_devconf; | 4883 | if (all == NULL) |
4884 | dflt = &ipv6_devconf_dflt; | 4884 | goto err_alloc_all; |
4885 | 4885 | ||
4886 | if (!net_eq(net, &init_net)) { | 4886 | dflt = kmemdup(&ipv6_devconf_dflt, sizeof(ipv6_devconf_dflt), GFP_KERNEL); |
4887 | all = kmemdup(all, sizeof(ipv6_devconf), GFP_KERNEL); | 4887 | if (dflt == NULL) |
4888 | if (all == NULL) | 4888 | goto err_alloc_dflt; |
4889 | goto err_alloc_all; | ||
4890 | 4889 | ||
4891 | dflt = kmemdup(dflt, sizeof(ipv6_devconf_dflt), GFP_KERNEL); | 4890 | /* these will be inherited by all namespaces */ |
4892 | if (dflt == NULL) | 4891 | dflt->autoconf = ipv6_defaults.autoconf; |
4893 | goto err_alloc_dflt; | 4892 | dflt->disable_ipv6 = ipv6_defaults.disable_ipv6; |
4894 | } else { | ||
4895 | /* these will be inherited by all namespaces */ | ||
4896 | dflt->autoconf = ipv6_defaults.autoconf; | ||
4897 | dflt->disable_ipv6 = ipv6_defaults.disable_ipv6; | ||
4898 | } | ||
4899 | 4893 | ||
4900 | net->ipv6.devconf_all = all; | 4894 | net->ipv6.devconf_all = all; |
4901 | net->ipv6.devconf_dflt = dflt; | 4895 | net->ipv6.devconf_dflt = dflt; |
diff --git a/net/sunrpc/sched.c b/net/sunrpc/sched.c index fb20f25ddec9..f8529fc8e542 100644 --- a/net/sunrpc/sched.c +++ b/net/sunrpc/sched.c | |||
@@ -180,6 +180,8 @@ static void __rpc_add_wait_queue(struct rpc_wait_queue *queue, | |||
180 | list_add_tail(&task->u.tk_wait.list, &queue->tasks[0]); | 180 | list_add_tail(&task->u.tk_wait.list, &queue->tasks[0]); |
181 | task->tk_waitqueue = queue; | 181 | task->tk_waitqueue = queue; |
182 | queue->qlen++; | 182 | queue->qlen++; |
183 | /* barrier matches the read in rpc_wake_up_task_queue_locked() */ | ||
184 | smp_wmb(); | ||
183 | rpc_set_queued(task); | 185 | rpc_set_queued(task); |
184 | 186 | ||
185 | dprintk("RPC: %5u added to queue %p \"%s\"\n", | 187 | dprintk("RPC: %5u added to queue %p \"%s\"\n", |
@@ -430,8 +432,11 @@ static void __rpc_do_wake_up_task(struct rpc_wait_queue *queue, struct rpc_task | |||
430 | */ | 432 | */ |
431 | static void rpc_wake_up_task_queue_locked(struct rpc_wait_queue *queue, struct rpc_task *task) | 433 | static void rpc_wake_up_task_queue_locked(struct rpc_wait_queue *queue, struct rpc_task *task) |
432 | { | 434 | { |
433 | if (RPC_IS_QUEUED(task) && task->tk_waitqueue == queue) | 435 | if (RPC_IS_QUEUED(task)) { |
434 | __rpc_do_wake_up_task(queue, task); | 436 | smp_rmb(); |
437 | if (task->tk_waitqueue == queue) | ||
438 | __rpc_do_wake_up_task(queue, task); | ||
439 | } | ||
435 | } | 440 | } |
436 | 441 | ||
437 | /* | 442 | /* |
diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c index 51be64f163ec..971282b6f6a3 100644 --- a/net/unix/af_unix.c +++ b/net/unix/af_unix.c | |||
@@ -382,7 +382,7 @@ static void unix_sock_destructor(struct sock *sk) | |||
382 | #endif | 382 | #endif |
383 | } | 383 | } |
384 | 384 | ||
385 | static int unix_release_sock(struct sock *sk, int embrion) | 385 | static void unix_release_sock(struct sock *sk, int embrion) |
386 | { | 386 | { |
387 | struct unix_sock *u = unix_sk(sk); | 387 | struct unix_sock *u = unix_sk(sk); |
388 | struct path path; | 388 | struct path path; |
@@ -451,8 +451,6 @@ static int unix_release_sock(struct sock *sk, int embrion) | |||
451 | 451 | ||
452 | if (unix_tot_inflight) | 452 | if (unix_tot_inflight) |
453 | unix_gc(); /* Garbage collect fds */ | 453 | unix_gc(); /* Garbage collect fds */ |
454 | |||
455 | return 0; | ||
456 | } | 454 | } |
457 | 455 | ||
458 | static void init_peercred(struct sock *sk) | 456 | static void init_peercred(struct sock *sk) |
@@ -699,9 +697,10 @@ static int unix_release(struct socket *sock) | |||
699 | if (!sk) | 697 | if (!sk) |
700 | return 0; | 698 | return 0; |
701 | 699 | ||
700 | unix_release_sock(sk, 0); | ||
702 | sock->sk = NULL; | 701 | sock->sk = NULL; |
703 | 702 | ||
704 | return unix_release_sock(sk, 0); | 703 | return 0; |
705 | } | 704 | } |
706 | 705 | ||
707 | static int unix_autobind(struct socket *sock) | 706 | static int unix_autobind(struct socket *sock) |
@@ -1413,8 +1412,8 @@ static void maybe_add_creds(struct sk_buff *skb, const struct socket *sock, | |||
1413 | if (UNIXCB(skb).cred) | 1412 | if (UNIXCB(skb).cred) |
1414 | return; | 1413 | return; |
1415 | if (test_bit(SOCK_PASSCRED, &sock->flags) || | 1414 | if (test_bit(SOCK_PASSCRED, &sock->flags) || |
1416 | !other->sk_socket || | 1415 | (other->sk_socket && |
1417 | test_bit(SOCK_PASSCRED, &other->sk_socket->flags)) { | 1416 | test_bit(SOCK_PASSCRED, &other->sk_socket->flags))) { |
1418 | UNIXCB(skb).pid = get_pid(task_tgid(current)); | 1417 | UNIXCB(skb).pid = get_pid(task_tgid(current)); |
1419 | UNIXCB(skb).cred = get_current_cred(); | 1418 | UNIXCB(skb).cred = get_current_cred(); |
1420 | } | 1419 | } |