aboutsummaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2013-03-27 13:52:49 -0400
committerDavid S. Miller <davem@davemloft.net>2013-03-27 13:52:49 -0400
commite2a553dbf18a5177fdebe29495c32a8e7fd3a4db (patch)
tree5ccb3d498325a7aaf93f49549eca03cb7861ca1c /net
parent7559d97993ae7d552c96313155286f372cf4cf7c (diff)
parenta8c45289f215e137825bf9630d0abb41c1dc41ff (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.c14
-rw-r--r--net/bridge/br_fdb.c2
-rw-r--r--net/core/dev.c1
-rw-r--r--net/ipv4/tcp_input.c7
-rw-r--r--net/ipv6/addrconf.c26
-rw-r--r--net/sunrpc/sched.c9
-rw-r--r--net/unix/af_unix.c11
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}
1551EXPORT_SYMBOL(net_enable_timestamp); 1550EXPORT_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
4877static int __net_init addrconf_init_net(struct net *net) 4877static 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 */
431static void rpc_wake_up_task_queue_locked(struct rpc_wait_queue *queue, struct rpc_task *task) 433static 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
385static int unix_release_sock(struct sock *sk, int embrion) 385static 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
458static void init_peercred(struct sock *sk) 456static 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
707static int unix_autobind(struct socket *sock) 706static 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 }