diff options
author | Tony Luck <tony.luck@intel.com> | 2005-05-17 18:53:14 -0400 |
---|---|---|
committer | Tony Luck <tony.luck@intel.com> | 2005-05-17 18:53:14 -0400 |
commit | 325a479c4c110db278ef3361460a48c4093252cc (patch) | |
tree | bcfbf4d0647d9442045639a5c19da59d55190e81 /net/core | |
parent | ebcc80c1b6629a445f7471cc1ddb48faf8a84e70 (diff) | |
parent | 7f9eaedf894dbaa08c157832e9a6c9c03ffed1ed (diff) |
Merge with temp tree to get David's gdb inferior calls patch
Diffstat (limited to 'net/core')
-rw-r--r-- | net/core/datagram.c | 28 | ||||
-rw-r--r-- | net/core/dev.c | 2 | ||||
-rw-r--r-- | net/core/iovec.c | 2 | ||||
-rw-r--r-- | net/core/link_watch.c | 7 | ||||
-rw-r--r-- | net/core/neighbour.c | 2 | ||||
-rw-r--r-- | net/core/netfilter.c | 17 | ||||
-rw-r--r-- | net/core/rtnetlink.c | 67 | ||||
-rw-r--r-- | net/core/sock.c | 12 | ||||
-rw-r--r-- | net/core/stream.c | 12 |
9 files changed, 76 insertions, 73 deletions
diff --git a/net/core/datagram.c b/net/core/datagram.c index d1bfd279cc1a..fcee054b6f75 100644 --- a/net/core/datagram.c +++ b/net/core/datagram.c | |||
@@ -115,10 +115,10 @@ out_noerr: | |||
115 | 115 | ||
116 | /** | 116 | /** |
117 | * skb_recv_datagram - Receive a datagram skbuff | 117 | * skb_recv_datagram - Receive a datagram skbuff |
118 | * @sk - socket | 118 | * @sk: socket |
119 | * @flags - MSG_ flags | 119 | * @flags: MSG_ flags |
120 | * @noblock - blocking operation? | 120 | * @noblock: blocking operation? |
121 | * @err - error code returned | 121 | * @err: error code returned |
122 | * | 122 | * |
123 | * Get a datagram skbuff, understands the peeking, nonblocking wakeups | 123 | * Get a datagram skbuff, understands the peeking, nonblocking wakeups |
124 | * and possible races. This replaces identical code in packet, raw and | 124 | * and possible races. This replaces identical code in packet, raw and |
@@ -201,10 +201,10 @@ void skb_free_datagram(struct sock *sk, struct sk_buff *skb) | |||
201 | 201 | ||
202 | /** | 202 | /** |
203 | * skb_copy_datagram_iovec - Copy a datagram to an iovec. | 203 | * skb_copy_datagram_iovec - Copy a datagram to an iovec. |
204 | * @skb - buffer to copy | 204 | * @skb: buffer to copy |
205 | * @offset - offset in the buffer to start copying from | 205 | * @offset: offset in the buffer to start copying from |
206 | * @iovec - io vector to copy to | 206 | * @to: io vector to copy to |
207 | * @len - amount of data to copy from buffer to iovec | 207 | * @len: amount of data to copy from buffer to iovec |
208 | * | 208 | * |
209 | * Note: the iovec is modified during the copy. | 209 | * Note: the iovec is modified during the copy. |
210 | */ | 210 | */ |
@@ -377,9 +377,9 @@ fault: | |||
377 | 377 | ||
378 | /** | 378 | /** |
379 | * skb_copy_and_csum_datagram_iovec - Copy and checkum skb to user iovec. | 379 | * skb_copy_and_csum_datagram_iovec - Copy and checkum skb to user iovec. |
380 | * @skb - skbuff | 380 | * @skb: skbuff |
381 | * @hlen - hardware length | 381 | * @hlen: hardware length |
382 | * @iovec - io vector | 382 | * @iov: io vector |
383 | * | 383 | * |
384 | * Caller _must_ check that skb will fit to this iovec. | 384 | * Caller _must_ check that skb will fit to this iovec. |
385 | * | 385 | * |
@@ -425,9 +425,9 @@ fault: | |||
425 | 425 | ||
426 | /** | 426 | /** |
427 | * datagram_poll - generic datagram poll | 427 | * datagram_poll - generic datagram poll |
428 | * @file - file struct | 428 | * @file: file struct |
429 | * @sock - socket | 429 | * @sock: socket |
430 | * @wait - poll table | 430 | * @wait: poll table |
431 | * | 431 | * |
432 | * Datagram poll: Again totally generic. This also handles | 432 | * Datagram poll: Again totally generic. This also handles |
433 | * sequenced packet sockets providing the socket receive queue | 433 | * sequenced packet sockets providing the socket receive queue |
diff --git a/net/core/dev.c b/net/core/dev.c index 7bd4cd4502c4..f5f005846fe1 100644 --- a/net/core/dev.c +++ b/net/core/dev.c | |||
@@ -3091,7 +3091,7 @@ void free_netdev(struct net_device *dev) | |||
3091 | void synchronize_net(void) | 3091 | void synchronize_net(void) |
3092 | { | 3092 | { |
3093 | might_sleep(); | 3093 | might_sleep(); |
3094 | synchronize_kernel(); | 3094 | synchronize_rcu(); |
3095 | } | 3095 | } |
3096 | 3096 | ||
3097 | /** | 3097 | /** |
diff --git a/net/core/iovec.c b/net/core/iovec.c index d57ace949ab8..65e4b56fbc77 100644 --- a/net/core/iovec.c +++ b/net/core/iovec.c | |||
@@ -33,7 +33,7 @@ | |||
33 | * Verify iovec. The caller must ensure that the iovec is big enough | 33 | * Verify iovec. The caller must ensure that the iovec is big enough |
34 | * to hold the message iovec. | 34 | * to hold the message iovec. |
35 | * | 35 | * |
36 | * Save time not doing verify_area. copy_*_user will make this work | 36 | * Save time not doing access_ok. copy_*_user will make this work |
37 | * in any case. | 37 | * in any case. |
38 | */ | 38 | */ |
39 | 39 | ||
diff --git a/net/core/link_watch.c b/net/core/link_watch.c index 4859b7446c6f..d43d1201275c 100644 --- a/net/core/link_watch.c +++ b/net/core/link_watch.c | |||
@@ -16,6 +16,7 @@ | |||
16 | #include <linux/netdevice.h> | 16 | #include <linux/netdevice.h> |
17 | #include <linux/if.h> | 17 | #include <linux/if.h> |
18 | #include <net/sock.h> | 18 | #include <net/sock.h> |
19 | #include <net/pkt_sched.h> | ||
19 | #include <linux/rtnetlink.h> | 20 | #include <linux/rtnetlink.h> |
20 | #include <linux/jiffies.h> | 21 | #include <linux/jiffies.h> |
21 | #include <linux/spinlock.h> | 22 | #include <linux/spinlock.h> |
@@ -74,6 +75,12 @@ void linkwatch_run_queue(void) | |||
74 | clear_bit(__LINK_STATE_LINKWATCH_PENDING, &dev->state); | 75 | clear_bit(__LINK_STATE_LINKWATCH_PENDING, &dev->state); |
75 | 76 | ||
76 | if (dev->flags & IFF_UP) { | 77 | if (dev->flags & IFF_UP) { |
78 | if (netif_carrier_ok(dev)) { | ||
79 | WARN_ON(dev->qdisc_sleeping == &noop_qdisc); | ||
80 | dev_activate(dev); | ||
81 | } else | ||
82 | dev_deactivate(dev); | ||
83 | |||
77 | netdev_state_change(dev); | 84 | netdev_state_change(dev); |
78 | } | 85 | } |
79 | 86 | ||
diff --git a/net/core/neighbour.c b/net/core/neighbour.c index 0a2f67bbef2e..43bdc521e20d 100644 --- a/net/core/neighbour.c +++ b/net/core/neighbour.c | |||
@@ -1953,7 +1953,7 @@ static int neigh_stat_seq_show(struct seq_file *seq, void *v) | |||
1953 | struct neigh_statistics *st = v; | 1953 | struct neigh_statistics *st = v; |
1954 | 1954 | ||
1955 | if (v == SEQ_START_TOKEN) { | 1955 | if (v == SEQ_START_TOKEN) { |
1956 | seq_printf(seq, "entries allocs destroys hash_grows lookups hits res_failed rcv_probes_mcast rcv_probes_ucast periodic_gc_runs forced_gc_runs forced_gc_goal_miss\n"); | 1956 | seq_printf(seq, "entries allocs destroys hash_grows lookups hits res_failed rcv_probes_mcast rcv_probes_ucast periodic_gc_runs forced_gc_runs\n"); |
1957 | return 0; | 1957 | return 0; |
1958 | } | 1958 | } |
1959 | 1959 | ||
diff --git a/net/core/netfilter.c b/net/core/netfilter.c index e51cfa46950c..22a8f127c4aa 100644 --- a/net/core/netfilter.c +++ b/net/core/netfilter.c | |||
@@ -217,21 +217,10 @@ void nf_debug_ip_local_deliver(struct sk_buff *skb) | |||
217 | * NF_IP_RAW_INPUT and NF_IP_PRE_ROUTING. */ | 217 | * NF_IP_RAW_INPUT and NF_IP_PRE_ROUTING. */ |
218 | if (!skb->dev) { | 218 | if (!skb->dev) { |
219 | printk("ip_local_deliver: skb->dev is NULL.\n"); | 219 | printk("ip_local_deliver: skb->dev is NULL.\n"); |
220 | } | 220 | } else { |
221 | else if (strcmp(skb->dev->name, "lo") == 0) { | ||
222 | if (skb->nf_debug != ((1 << NF_IP_LOCAL_OUT) | ||
223 | | (1 << NF_IP_POST_ROUTING) | ||
224 | | (1 << NF_IP_PRE_ROUTING) | ||
225 | | (1 << NF_IP_LOCAL_IN))) { | ||
226 | printk("ip_local_deliver: bad loopback skb: "); | ||
227 | debug_print_hooks_ip(skb->nf_debug); | ||
228 | nf_dump_skb(PF_INET, skb); | ||
229 | } | ||
230 | } | ||
231 | else { | ||
232 | if (skb->nf_debug != ((1<<NF_IP_PRE_ROUTING) | 221 | if (skb->nf_debug != ((1<<NF_IP_PRE_ROUTING) |
233 | | (1<<NF_IP_LOCAL_IN))) { | 222 | | (1<<NF_IP_LOCAL_IN))) { |
234 | printk("ip_local_deliver: bad non-lo skb: "); | 223 | printk("ip_local_deliver: bad skb: "); |
235 | debug_print_hooks_ip(skb->nf_debug); | 224 | debug_print_hooks_ip(skb->nf_debug); |
236 | nf_dump_skb(PF_INET, skb); | 225 | nf_dump_skb(PF_INET, skb); |
237 | } | 226 | } |
@@ -247,8 +236,6 @@ void nf_debug_ip_loopback_xmit(struct sk_buff *newskb) | |||
247 | debug_print_hooks_ip(newskb->nf_debug); | 236 | debug_print_hooks_ip(newskb->nf_debug); |
248 | nf_dump_skb(PF_INET, newskb); | 237 | nf_dump_skb(PF_INET, newskb); |
249 | } | 238 | } |
250 | /* Clear to avoid confusing input check */ | ||
251 | newskb->nf_debug = 0; | ||
252 | } | 239 | } |
253 | 240 | ||
254 | void nf_debug_ip_finish_output2(struct sk_buff *skb) | 241 | void nf_debug_ip_finish_output2(struct sk_buff *skb) |
diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c index d8c198e42f90..00caf4b318b2 100644 --- a/net/core/rtnetlink.c +++ b/net/core/rtnetlink.c | |||
@@ -86,30 +86,33 @@ struct sock *rtnl; | |||
86 | 86 | ||
87 | struct rtnetlink_link * rtnetlink_links[NPROTO]; | 87 | struct rtnetlink_link * rtnetlink_links[NPROTO]; |
88 | 88 | ||
89 | static const int rtm_min[(RTM_MAX+1-RTM_BASE)/4] = | 89 | static const int rtm_min[RTM_NR_FAMILIES] = |
90 | { | 90 | { |
91 | NLMSG_LENGTH(sizeof(struct ifinfomsg)), | 91 | [RTM_FAM(RTM_NEWLINK)] = NLMSG_LENGTH(sizeof(struct ifinfomsg)), |
92 | NLMSG_LENGTH(sizeof(struct ifaddrmsg)), | 92 | [RTM_FAM(RTM_NEWADDR)] = NLMSG_LENGTH(sizeof(struct ifaddrmsg)), |
93 | NLMSG_LENGTH(sizeof(struct rtmsg)), | 93 | [RTM_FAM(RTM_NEWROUTE)] = NLMSG_LENGTH(sizeof(struct rtmsg)), |
94 | NLMSG_LENGTH(sizeof(struct ndmsg)), | 94 | [RTM_FAM(RTM_NEWNEIGH)] = NLMSG_LENGTH(sizeof(struct ndmsg)), |
95 | NLMSG_LENGTH(sizeof(struct rtmsg)), | 95 | [RTM_FAM(RTM_NEWRULE)] = NLMSG_LENGTH(sizeof(struct rtmsg)), |
96 | NLMSG_LENGTH(sizeof(struct tcmsg)), | 96 | [RTM_FAM(RTM_NEWQDISC)] = NLMSG_LENGTH(sizeof(struct tcmsg)), |
97 | NLMSG_LENGTH(sizeof(struct tcmsg)), | 97 | [RTM_FAM(RTM_NEWTCLASS)] = NLMSG_LENGTH(sizeof(struct tcmsg)), |
98 | NLMSG_LENGTH(sizeof(struct tcmsg)), | 98 | [RTM_FAM(RTM_NEWTFILTER)] = NLMSG_LENGTH(sizeof(struct tcmsg)), |
99 | NLMSG_LENGTH(sizeof(struct tcamsg)) | 99 | [RTM_FAM(RTM_NEWACTION)] = NLMSG_LENGTH(sizeof(struct tcamsg)), |
100 | [RTM_FAM(RTM_NEWPREFIX)] = NLMSG_LENGTH(sizeof(struct rtgenmsg)), | ||
101 | [RTM_FAM(RTM_GETMULTICAST)] = NLMSG_LENGTH(sizeof(struct rtgenmsg)), | ||
102 | [RTM_FAM(RTM_GETANYCAST)] = NLMSG_LENGTH(sizeof(struct rtgenmsg)), | ||
100 | }; | 103 | }; |
101 | 104 | ||
102 | static const int rta_max[(RTM_MAX+1-RTM_BASE)/4] = | 105 | static const int rta_max[RTM_NR_FAMILIES] = |
103 | { | 106 | { |
104 | IFLA_MAX, | 107 | [RTM_FAM(RTM_NEWLINK)] = IFLA_MAX, |
105 | IFA_MAX, | 108 | [RTM_FAM(RTM_NEWADDR)] = IFA_MAX, |
106 | RTA_MAX, | 109 | [RTM_FAM(RTM_NEWROUTE)] = RTA_MAX, |
107 | NDA_MAX, | 110 | [RTM_FAM(RTM_NEWNEIGH)] = NDA_MAX, |
108 | RTA_MAX, | 111 | [RTM_FAM(RTM_NEWRULE)] = RTA_MAX, |
109 | TCA_MAX, | 112 | [RTM_FAM(RTM_NEWQDISC)] = TCA_MAX, |
110 | TCA_MAX, | 113 | [RTM_FAM(RTM_NEWTCLASS)] = TCA_MAX, |
111 | TCA_MAX, | 114 | [RTM_FAM(RTM_NEWTFILTER)] = TCA_MAX, |
112 | TCAA_MAX | 115 | [RTM_FAM(RTM_NEWACTION)] = TCAA_MAX, |
113 | }; | 116 | }; |
114 | 117 | ||
115 | void __rta_fill(struct sk_buff *skb, int attrtype, int attrlen, const void *data) | 118 | void __rta_fill(struct sk_buff *skb, int attrtype, int attrlen, const void *data) |
@@ -606,27 +609,33 @@ static inline int rtnetlink_rcv_skb(struct sk_buff *skb) | |||
606 | 609 | ||
607 | /* | 610 | /* |
608 | * rtnetlink input queue processing routine: | 611 | * rtnetlink input queue processing routine: |
609 | * - try to acquire shared lock. If it is failed, defer processing. | 612 | * - process as much as there was in the queue upon entry. |
610 | * - feed skbs to rtnetlink_rcv_skb, until it refuse a message, | 613 | * - feed skbs to rtnetlink_rcv_skb, until it refuse a message, |
611 | * that will occur, when a dump started and/or acquisition of | 614 | * that will occur, when a dump started. |
612 | * exclusive lock failed. | ||
613 | */ | 615 | */ |
614 | 616 | ||
615 | static void rtnetlink_rcv(struct sock *sk, int len) | 617 | static void rtnetlink_rcv(struct sock *sk, int len) |
616 | { | 618 | { |
619 | unsigned int qlen = skb_queue_len(&sk->sk_receive_queue); | ||
620 | |||
617 | do { | 621 | do { |
618 | struct sk_buff *skb; | 622 | struct sk_buff *skb; |
619 | 623 | ||
620 | if (rtnl_shlock_nowait()) | 624 | rtnl_lock(); |
621 | return; | 625 | |
626 | if (qlen > skb_queue_len(&sk->sk_receive_queue)) | ||
627 | qlen = skb_queue_len(&sk->sk_receive_queue); | ||
622 | 628 | ||
623 | while ((skb = skb_dequeue(&sk->sk_receive_queue)) != NULL) { | 629 | for (; qlen; qlen--) { |
630 | skb = skb_dequeue(&sk->sk_receive_queue); | ||
624 | if (rtnetlink_rcv_skb(skb)) { | 631 | if (rtnetlink_rcv_skb(skb)) { |
625 | if (skb->len) | 632 | if (skb->len) |
626 | skb_queue_head(&sk->sk_receive_queue, | 633 | skb_queue_head(&sk->sk_receive_queue, |
627 | skb); | 634 | skb); |
628 | else | 635 | else { |
629 | kfree_skb(skb); | 636 | kfree_skb(skb); |
637 | qlen--; | ||
638 | } | ||
630 | break; | 639 | break; |
631 | } | 640 | } |
632 | kfree_skb(skb); | 641 | kfree_skb(skb); |
@@ -635,10 +644,10 @@ static void rtnetlink_rcv(struct sock *sk, int len) | |||
635 | up(&rtnl_sem); | 644 | up(&rtnl_sem); |
636 | 645 | ||
637 | netdev_run_todo(); | 646 | netdev_run_todo(); |
638 | } while (rtnl && rtnl->sk_receive_queue.qlen); | 647 | } while (qlen); |
639 | } | 648 | } |
640 | 649 | ||
641 | static struct rtnetlink_link link_rtnetlink_table[RTM_MAX-RTM_BASE+1] = | 650 | static struct rtnetlink_link link_rtnetlink_table[RTM_NR_MSGTYPES] = |
642 | { | 651 | { |
643 | [RTM_GETLINK - RTM_BASE] = { .dumpit = rtnetlink_dump_ifinfo }, | 652 | [RTM_GETLINK - RTM_BASE] = { .dumpit = rtnetlink_dump_ifinfo }, |
644 | [RTM_SETLINK - RTM_BASE] = { .doit = do_setlink }, | 653 | [RTM_SETLINK - RTM_BASE] = { .doit = do_setlink }, |
diff --git a/net/core/sock.c b/net/core/sock.c index 5c2f72fa1013..98171ddd7e7d 100644 --- a/net/core/sock.c +++ b/net/core/sock.c | |||
@@ -616,10 +616,10 @@ lenout: | |||
616 | 616 | ||
617 | /** | 617 | /** |
618 | * sk_alloc - All socket objects are allocated here | 618 | * sk_alloc - All socket objects are allocated here |
619 | * @family - protocol family | 619 | * @family: protocol family |
620 | * @priority - for allocation (%GFP_KERNEL, %GFP_ATOMIC, etc) | 620 | * @priority: for allocation (%GFP_KERNEL, %GFP_ATOMIC, etc) |
621 | * @prot - struct proto associated with this new sock instance | 621 | * @prot: struct proto associated with this new sock instance |
622 | * @zero_it - if we should zero the newly allocated sock | 622 | * @zero_it: if we should zero the newly allocated sock |
623 | */ | 623 | */ |
624 | struct sock *sk_alloc(int family, int priority, struct proto *prot, int zero_it) | 624 | struct sock *sk_alloc(int family, int priority, struct proto *prot, int zero_it) |
625 | { | 625 | { |
@@ -970,8 +970,8 @@ static void __release_sock(struct sock *sk) | |||
970 | 970 | ||
971 | /** | 971 | /** |
972 | * sk_wait_data - wait for data to arrive at sk_receive_queue | 972 | * sk_wait_data - wait for data to arrive at sk_receive_queue |
973 | * sk - sock to wait on | 973 | * @sk: sock to wait on |
974 | * timeo - for how long | 974 | * @timeo: for how long |
975 | * | 975 | * |
976 | * Now socket state including sk->sk_err is changed only under lock, | 976 | * Now socket state including sk->sk_err is changed only under lock, |
977 | * hence we may omit checks after joining wait queue. | 977 | * hence we may omit checks after joining wait queue. |
diff --git a/net/core/stream.c b/net/core/stream.c index 1e27a57b5a97..ac9edfdf8742 100644 --- a/net/core/stream.c +++ b/net/core/stream.c | |||
@@ -21,7 +21,7 @@ | |||
21 | 21 | ||
22 | /** | 22 | /** |
23 | * sk_stream_write_space - stream socket write_space callback. | 23 | * sk_stream_write_space - stream socket write_space callback. |
24 | * sk - socket | 24 | * @sk: socket |
25 | * | 25 | * |
26 | * FIXME: write proper description | 26 | * FIXME: write proper description |
27 | */ | 27 | */ |
@@ -43,8 +43,8 @@ EXPORT_SYMBOL(sk_stream_write_space); | |||
43 | 43 | ||
44 | /** | 44 | /** |
45 | * sk_stream_wait_connect - Wait for a socket to get into the connected state | 45 | * sk_stream_wait_connect - Wait for a socket to get into the connected state |
46 | * @sk - sock to wait on | 46 | * @sk: sock to wait on |
47 | * @timeo_p - for how long to wait | 47 | * @timeo_p: for how long to wait |
48 | * | 48 | * |
49 | * Must be called with the socket locked. | 49 | * Must be called with the socket locked. |
50 | */ | 50 | */ |
@@ -79,7 +79,7 @@ EXPORT_SYMBOL(sk_stream_wait_connect); | |||
79 | 79 | ||
80 | /** | 80 | /** |
81 | * sk_stream_closing - Return 1 if we still have things to send in our buffers. | 81 | * sk_stream_closing - Return 1 if we still have things to send in our buffers. |
82 | * @sk - socket to verify | 82 | * @sk: socket to verify |
83 | */ | 83 | */ |
84 | static inline int sk_stream_closing(struct sock *sk) | 84 | static inline int sk_stream_closing(struct sock *sk) |
85 | { | 85 | { |
@@ -107,8 +107,8 @@ EXPORT_SYMBOL(sk_stream_wait_close); | |||
107 | 107 | ||
108 | /** | 108 | /** |
109 | * sk_stream_wait_memory - Wait for more memory for a socket | 109 | * sk_stream_wait_memory - Wait for more memory for a socket |
110 | * @sk - socket to wait for memory | 110 | * @sk: socket to wait for memory |
111 | * @timeo_p - for how long | 111 | * @timeo_p: for how long |
112 | */ | 112 | */ |
113 | int sk_stream_wait_memory(struct sock *sk, long *timeo_p) | 113 | int sk_stream_wait_memory(struct sock *sk, long *timeo_p) |
114 | { | 114 | { |