diff options
author | Linus Torvalds <torvalds@g5.osdl.org> | 2006-03-31 15:52:30 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-03-31 15:52:30 -0500 |
commit | 4b75679f60d0ce780609cbff249769b669f4fb69 (patch) | |
tree | 2c8890020b5e7d340036acb01f73a6e53feb038d /net | |
parent | 30c14e40ed85469f166b5effdab6705c73c5cd5e (diff) | |
parent | 025be81e83043f20538dcced1e12c5f8d152fbdb (diff) |
Merge master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
* master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6:
[NET]: Allow skb headroom to be overridden
[TCP]: Kill unused extern decl for tcp_v4_hash_connecting()
[NET]: add SO_RCVBUF comment
[NET]: Deinline some larger functions from netdevice.h
[DCCP]: Use NULL for pointers, comfort sparse.
[DECNET]: Fix refcount
Diffstat (limited to 'net')
-rw-r--r-- | net/core/dev.c | 64 | ||||
-rw-r--r-- | net/core/sock.c | 16 | ||||
-rw-r--r-- | net/dccp/feat.c | 6 | ||||
-rw-r--r-- | net/decnet/dn_dev.c | 2 |
4 files changed, 83 insertions, 5 deletions
diff --git a/net/core/dev.c b/net/core/dev.c index a3ab11f34153..434220d093aa 100644 --- a/net/core/dev.c +++ b/net/core/dev.c | |||
@@ -1080,6 +1080,70 @@ void dev_queue_xmit_nit(struct sk_buff *skb, struct net_device *dev) | |||
1080 | rcu_read_unlock(); | 1080 | rcu_read_unlock(); |
1081 | } | 1081 | } |
1082 | 1082 | ||
1083 | |||
1084 | void __netif_schedule(struct net_device *dev) | ||
1085 | { | ||
1086 | if (!test_and_set_bit(__LINK_STATE_SCHED, &dev->state)) { | ||
1087 | unsigned long flags; | ||
1088 | struct softnet_data *sd; | ||
1089 | |||
1090 | local_irq_save(flags); | ||
1091 | sd = &__get_cpu_var(softnet_data); | ||
1092 | dev->next_sched = sd->output_queue; | ||
1093 | sd->output_queue = dev; | ||
1094 | raise_softirq_irqoff(NET_TX_SOFTIRQ); | ||
1095 | local_irq_restore(flags); | ||
1096 | } | ||
1097 | } | ||
1098 | EXPORT_SYMBOL(__netif_schedule); | ||
1099 | |||
1100 | void __netif_rx_schedule(struct net_device *dev) | ||
1101 | { | ||
1102 | unsigned long flags; | ||
1103 | |||
1104 | local_irq_save(flags); | ||
1105 | dev_hold(dev); | ||
1106 | list_add_tail(&dev->poll_list, &__get_cpu_var(softnet_data).poll_list); | ||
1107 | if (dev->quota < 0) | ||
1108 | dev->quota += dev->weight; | ||
1109 | else | ||
1110 | dev->quota = dev->weight; | ||
1111 | __raise_softirq_irqoff(NET_RX_SOFTIRQ); | ||
1112 | local_irq_restore(flags); | ||
1113 | } | ||
1114 | EXPORT_SYMBOL(__netif_rx_schedule); | ||
1115 | |||
1116 | void dev_kfree_skb_any(struct sk_buff *skb) | ||
1117 | { | ||
1118 | if (in_irq() || irqs_disabled()) | ||
1119 | dev_kfree_skb_irq(skb); | ||
1120 | else | ||
1121 | dev_kfree_skb(skb); | ||
1122 | } | ||
1123 | EXPORT_SYMBOL(dev_kfree_skb_any); | ||
1124 | |||
1125 | |||
1126 | /* Hot-plugging. */ | ||
1127 | void netif_device_detach(struct net_device *dev) | ||
1128 | { | ||
1129 | if (test_and_clear_bit(__LINK_STATE_PRESENT, &dev->state) && | ||
1130 | netif_running(dev)) { | ||
1131 | netif_stop_queue(dev); | ||
1132 | } | ||
1133 | } | ||
1134 | EXPORT_SYMBOL(netif_device_detach); | ||
1135 | |||
1136 | void netif_device_attach(struct net_device *dev) | ||
1137 | { | ||
1138 | if (!test_and_set_bit(__LINK_STATE_PRESENT, &dev->state) && | ||
1139 | netif_running(dev)) { | ||
1140 | netif_wake_queue(dev); | ||
1141 | __netdev_watchdog_up(dev); | ||
1142 | } | ||
1143 | } | ||
1144 | EXPORT_SYMBOL(netif_device_attach); | ||
1145 | |||
1146 | |||
1083 | /* | 1147 | /* |
1084 | * Invalidate hardware checksum when packet is to be mangled, and | 1148 | * Invalidate hardware checksum when packet is to be mangled, and |
1085 | * complete checksum manually on outgoing path. | 1149 | * complete checksum manually on outgoing path. |
diff --git a/net/core/sock.c b/net/core/sock.c index a96ea7dd0fc1..ed2afdb9ea2d 100644 --- a/net/core/sock.c +++ b/net/core/sock.c | |||
@@ -385,7 +385,21 @@ set_sndbuf: | |||
385 | val = sysctl_rmem_max; | 385 | val = sysctl_rmem_max; |
386 | set_rcvbuf: | 386 | set_rcvbuf: |
387 | sk->sk_userlocks |= SOCK_RCVBUF_LOCK; | 387 | sk->sk_userlocks |= SOCK_RCVBUF_LOCK; |
388 | /* FIXME: is this lower bound the right one? */ | 388 | /* |
389 | * We double it on the way in to account for | ||
390 | * "struct sk_buff" etc. overhead. Applications | ||
391 | * assume that the SO_RCVBUF setting they make will | ||
392 | * allow that much actual data to be received on that | ||
393 | * socket. | ||
394 | * | ||
395 | * Applications are unaware that "struct sk_buff" and | ||
396 | * other overheads allocate from the receive buffer | ||
397 | * during socket buffer allocation. | ||
398 | * | ||
399 | * And after considering the possible alternatives, | ||
400 | * returning the value we actually used in getsockopt | ||
401 | * is the most desirable behavior. | ||
402 | */ | ||
389 | if ((val * 2) < SOCK_MIN_RCVBUF) | 403 | if ((val * 2) < SOCK_MIN_RCVBUF) |
390 | sk->sk_rcvbuf = SOCK_MIN_RCVBUF; | 404 | sk->sk_rcvbuf = SOCK_MIN_RCVBUF; |
391 | else | 405 | else |
diff --git a/net/dccp/feat.c b/net/dccp/feat.c index e3dd30d36c8a..b39e2a597889 100644 --- a/net/dccp/feat.c +++ b/net/dccp/feat.c | |||
@@ -204,7 +204,7 @@ static int dccp_feat_reconcile(struct sock *sk, struct dccp_opt_pend *opt, | |||
204 | if (rc) { | 204 | if (rc) { |
205 | kfree(opt->dccpop_sc->dccpoc_val); | 205 | kfree(opt->dccpop_sc->dccpoc_val); |
206 | kfree(opt->dccpop_sc); | 206 | kfree(opt->dccpop_sc); |
207 | opt->dccpop_sc = 0; | 207 | opt->dccpop_sc = NULL; |
208 | return rc; | 208 | return rc; |
209 | } | 209 | } |
210 | 210 | ||
@@ -322,7 +322,7 @@ static void dccp_feat_empty_confirm(struct dccp_minisock *dmsk, | |||
322 | opt->dccpop_type = type == DCCPO_CHANGE_L ? DCCPO_CONFIRM_R : | 322 | opt->dccpop_type = type == DCCPO_CHANGE_L ? DCCPO_CONFIRM_R : |
323 | DCCPO_CONFIRM_L; | 323 | DCCPO_CONFIRM_L; |
324 | opt->dccpop_feat = feature; | 324 | opt->dccpop_feat = feature; |
325 | opt->dccpop_val = 0; | 325 | opt->dccpop_val = NULL; |
326 | opt->dccpop_len = 0; | 326 | opt->dccpop_len = 0; |
327 | 327 | ||
328 | /* change feature */ | 328 | /* change feature */ |
@@ -523,7 +523,7 @@ int dccp_feat_clone(struct sock *oldsk, struct sock *newsk) | |||
523 | * once... | 523 | * once... |
524 | */ | 524 | */ |
525 | /* the master socket no longer needs to worry about confirms */ | 525 | /* the master socket no longer needs to worry about confirms */ |
526 | opt->dccpop_sc = 0; /* it's not a memleak---new socket has it */ | 526 | opt->dccpop_sc = NULL; /* it's not a memleak---new socket has it */ |
527 | 527 | ||
528 | /* reset state for a new socket */ | 528 | /* reset state for a new socket */ |
529 | opt->dccpop_conf = 0; | 529 | opt->dccpop_conf = 0; |
diff --git a/net/decnet/dn_dev.c b/net/decnet/dn_dev.c index d2ae9893ca17..a26ff9f44576 100644 --- a/net/decnet/dn_dev.c +++ b/net/decnet/dn_dev.c | |||
@@ -620,7 +620,7 @@ int dn_dev_set_default(struct net_device *dev, int force) | |||
620 | } | 620 | } |
621 | write_unlock(&dndev_lock); | 621 | write_unlock(&dndev_lock); |
622 | if (old) | 622 | if (old) |
623 | dev_put(dev); | 623 | dev_put(old); |
624 | return rv; | 624 | return rv; |
625 | } | 625 | } |
626 | 626 | ||