diff options
author | David S. Miller <davem@davemloft.net> | 2008-03-24 01:54:03 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2008-03-24 01:54:03 -0400 |
commit | 06802a819a0a2d31c952c0624cea6cd00e4e50da (patch) | |
tree | 8ccd7c668c7fbd8f08cb89426006040217caf3f1 | |
parent | 9bd512f619cc116b7830134d7c9f6e404a38c7bf (diff) | |
parent | 8f3ea33a5078a09eba12bfe57424507809367756 (diff) |
Merge branch 'master' of ../net-2.6/
Conflicts:
net/ipv6/ndisc.c
-rw-r--r-- | drivers/connector/cn_queue.c | 2 | ||||
-rw-r--r-- | drivers/net/bnx2x.c | 36 | ||||
-rw-r--r-- | drivers/net/sungem.c | 2 | ||||
-rw-r--r-- | include/net/sctp/sctp.h | 2 | ||||
-rw-r--r-- | net/9p/trans_fd.c | 2 | ||||
-rw-r--r-- | net/atm/clip.c | 19 | ||||
-rw-r--r-- | net/atm/lec.c | 4 | ||||
-rw-r--r-- | net/ipv4/fib_trie.c | 7 | ||||
-rw-r--r-- | net/ipv4/ip_fragment.c | 2 | ||||
-rw-r--r-- | net/ipv4/tcp.c | 4 | ||||
-rw-r--r-- | net/sched/sch_htb.c | 13 | ||||
-rw-r--r-- | net/socket.c | 7 |
12 files changed, 43 insertions, 57 deletions
diff --git a/drivers/connector/cn_queue.c b/drivers/connector/cn_queue.c index 5732ca3259f9..b6fe7e7a2c2f 100644 --- a/drivers/connector/cn_queue.c +++ b/drivers/connector/cn_queue.c | |||
@@ -146,7 +146,7 @@ struct cn_queue_dev *cn_queue_alloc_dev(char *name, struct sock *nls) | |||
146 | 146 | ||
147 | dev->nls = nls; | 147 | dev->nls = nls; |
148 | 148 | ||
149 | dev->cn_queue = create_workqueue(dev->name); | 149 | dev->cn_queue = create_singlethread_workqueue(dev->name); |
150 | if (!dev->cn_queue) { | 150 | if (!dev->cn_queue) { |
151 | kfree(dev); | 151 | kfree(dev); |
152 | return NULL; | 152 | return NULL; |
diff --git a/drivers/net/bnx2x.c b/drivers/net/bnx2x.c index 8af142ccf373..de32b3fba322 100644 --- a/drivers/net/bnx2x.c +++ b/drivers/net/bnx2x.c | |||
@@ -63,8 +63,8 @@ | |||
63 | #include "bnx2x.h" | 63 | #include "bnx2x.h" |
64 | #include "bnx2x_init.h" | 64 | #include "bnx2x_init.h" |
65 | 65 | ||
66 | #define DRV_MODULE_VERSION "1.40.22" | 66 | #define DRV_MODULE_VERSION "1.42.3" |
67 | #define DRV_MODULE_RELDATE "2007/11/27" | 67 | #define DRV_MODULE_RELDATE "2008/3/9" |
68 | #define BNX2X_BC_VER 0x040200 | 68 | #define BNX2X_BC_VER 0x040200 |
69 | 69 | ||
70 | /* Time in jiffies before concluding the transmitter is hung. */ | 70 | /* Time in jiffies before concluding the transmitter is hung. */ |
@@ -8008,38 +8008,6 @@ static int bnx2x_set_settings(struct net_device *dev, struct ethtool_cmd *cmd) | |||
8008 | cmd->duplex, cmd->port, cmd->phy_address, cmd->transceiver, | 8008 | cmd->duplex, cmd->port, cmd->phy_address, cmd->transceiver, |
8009 | cmd->autoneg, cmd->maxtxpkt, cmd->maxrxpkt); | 8009 | cmd->autoneg, cmd->maxtxpkt, cmd->maxrxpkt); |
8010 | 8010 | ||
8011 | switch (cmd->port) { | ||
8012 | case PORT_TP: | ||
8013 | if (!(bp->supported & SUPPORTED_TP)) { | ||
8014 | DP(NETIF_MSG_LINK, "TP not supported\n"); | ||
8015 | return -EINVAL; | ||
8016 | } | ||
8017 | |||
8018 | if (bp->phy_flags & PHY_XGXS_FLAG) { | ||
8019 | bnx2x_link_reset(bp); | ||
8020 | bnx2x_link_settings_supported(bp, SWITCH_CFG_1G); | ||
8021 | bnx2x_phy_deassert(bp); | ||
8022 | } | ||
8023 | break; | ||
8024 | |||
8025 | case PORT_FIBRE: | ||
8026 | if (!(bp->supported & SUPPORTED_FIBRE)) { | ||
8027 | DP(NETIF_MSG_LINK, "FIBRE not supported\n"); | ||
8028 | return -EINVAL; | ||
8029 | } | ||
8030 | |||
8031 | if (!(bp->phy_flags & PHY_XGXS_FLAG)) { | ||
8032 | bnx2x_link_reset(bp); | ||
8033 | bnx2x_link_settings_supported(bp, SWITCH_CFG_10G); | ||
8034 | bnx2x_phy_deassert(bp); | ||
8035 | } | ||
8036 | break; | ||
8037 | |||
8038 | default: | ||
8039 | DP(NETIF_MSG_LINK, "Unknown port type\n"); | ||
8040 | return -EINVAL; | ||
8041 | } | ||
8042 | |||
8043 | if (cmd->autoneg == AUTONEG_ENABLE) { | 8011 | if (cmd->autoneg == AUTONEG_ENABLE) { |
8044 | if (!(bp->supported & SUPPORTED_Autoneg)) { | 8012 | if (!(bp->supported & SUPPORTED_Autoneg)) { |
8045 | DP(NETIF_MSG_LINK, "Aotoneg not supported\n"); | 8013 | DP(NETIF_MSG_LINK, "Aotoneg not supported\n"); |
diff --git a/drivers/net/sungem.c b/drivers/net/sungem.c index 97212799c513..4291458955ef 100644 --- a/drivers/net/sungem.c +++ b/drivers/net/sungem.c | |||
@@ -912,7 +912,7 @@ static int gem_poll(struct napi_struct *napi, int budget) | |||
912 | * rx ring - must call napi_disable(), which | 912 | * rx ring - must call napi_disable(), which |
913 | * schedule_timeout()'s if polling is already disabled. | 913 | * schedule_timeout()'s if polling is already disabled. |
914 | */ | 914 | */ |
915 | work_done += gem_rx(gp, budget); | 915 | work_done += gem_rx(gp, budget - work_done); |
916 | 916 | ||
917 | if (work_done >= budget) | 917 | if (work_done >= budget) |
918 | return work_done; | 918 | return work_done; |
diff --git a/include/net/sctp/sctp.h b/include/net/sctp/sctp.h index dbfde62f3608..90b1e8d23b16 100644 --- a/include/net/sctp/sctp.h +++ b/include/net/sctp/sctp.h | |||
@@ -384,7 +384,7 @@ void sctp_v6_del_protocol(void); | |||
384 | 384 | ||
385 | #else /* #ifdef defined(CONFIG_IPV6) */ | 385 | #else /* #ifdef defined(CONFIG_IPV6) */ |
386 | 386 | ||
387 | static inline void sctp_v6_pf_init(void) { return 0; } | 387 | static inline void sctp_v6_pf_init(void) { return; } |
388 | static inline void sctp_v6_pf_exit(void) { return; } | 388 | static inline void sctp_v6_pf_exit(void) { return; } |
389 | static inline int sctp_v6_protosw_init(void) { return 0; } | 389 | static inline int sctp_v6_protosw_init(void) { return 0; } |
390 | static inline void sctp_v6_protosw_exit(void) { return; } | 390 | static inline void sctp_v6_protosw_exit(void) { return; } |
diff --git a/net/9p/trans_fd.c b/net/9p/trans_fd.c index 1aa9d5175398..4e8d4e724b96 100644 --- a/net/9p/trans_fd.c +++ b/net/9p/trans_fd.c | |||
@@ -861,7 +861,6 @@ static void p9_mux_free_request(struct p9_conn *m, struct p9_req *req) | |||
861 | 861 | ||
862 | static void p9_mux_flush_cb(struct p9_req *freq, void *a) | 862 | static void p9_mux_flush_cb(struct p9_req *freq, void *a) |
863 | { | 863 | { |
864 | p9_conn_req_callback cb; | ||
865 | int tag; | 864 | int tag; |
866 | struct p9_conn *m; | 865 | struct p9_conn *m; |
867 | struct p9_req *req, *rreq, *rptr; | 866 | struct p9_req *req, *rreq, *rptr; |
@@ -872,7 +871,6 @@ static void p9_mux_flush_cb(struct p9_req *freq, void *a) | |||
872 | freq->tcall->params.tflush.oldtag); | 871 | freq->tcall->params.tflush.oldtag); |
873 | 872 | ||
874 | spin_lock(&m->lock); | 873 | spin_lock(&m->lock); |
875 | cb = NULL; | ||
876 | tag = freq->tcall->params.tflush.oldtag; | 874 | tag = freq->tcall->params.tflush.oldtag; |
877 | req = NULL; | 875 | req = NULL; |
878 | list_for_each_entry_safe(rreq, rptr, &m->req_list, req_list) { | 876 | list_for_each_entry_safe(rreq, rptr, &m->req_list, req_list) { |
diff --git a/net/atm/clip.c b/net/atm/clip.c index d45971bd286c..e82da6746723 100644 --- a/net/atm/clip.c +++ b/net/atm/clip.c | |||
@@ -943,6 +943,8 @@ static const struct file_operations arp_seq_fops = { | |||
943 | }; | 943 | }; |
944 | #endif | 944 | #endif |
945 | 945 | ||
946 | static void atm_clip_exit_noproc(void); | ||
947 | |||
946 | static int __init atm_clip_init(void) | 948 | static int __init atm_clip_init(void) |
947 | { | 949 | { |
948 | neigh_table_init_no_netlink(&clip_tbl); | 950 | neigh_table_init_no_netlink(&clip_tbl); |
@@ -959,18 +961,22 @@ static int __init atm_clip_init(void) | |||
959 | struct proc_dir_entry *p; | 961 | struct proc_dir_entry *p; |
960 | 962 | ||
961 | p = proc_create("arp", S_IRUGO, atm_proc_root, &arp_seq_fops); | 963 | p = proc_create("arp", S_IRUGO, atm_proc_root, &arp_seq_fops); |
964 | if (!p) { | ||
965 | printk(KERN_ERR "Unable to initialize " | ||
966 | "/proc/net/atm/arp\n"); | ||
967 | atm_clip_exit_noproc(); | ||
968 | return -ENOMEM; | ||
969 | } | ||
962 | } | 970 | } |
963 | #endif | 971 | #endif |
964 | 972 | ||
965 | return 0; | 973 | return 0; |
966 | } | 974 | } |
967 | 975 | ||
968 | static void __exit atm_clip_exit(void) | 976 | static void atm_clip_exit_noproc(void) |
969 | { | 977 | { |
970 | struct net_device *dev, *next; | 978 | struct net_device *dev, *next; |
971 | 979 | ||
972 | remove_proc_entry("arp", atm_proc_root); | ||
973 | |||
974 | unregister_inetaddr_notifier(&clip_inet_notifier); | 980 | unregister_inetaddr_notifier(&clip_inet_notifier); |
975 | unregister_netdevice_notifier(&clip_dev_notifier); | 981 | unregister_netdevice_notifier(&clip_dev_notifier); |
976 | 982 | ||
@@ -1001,6 +1007,13 @@ static void __exit atm_clip_exit(void) | |||
1001 | clip_tbl_hook = NULL; | 1007 | clip_tbl_hook = NULL; |
1002 | } | 1008 | } |
1003 | 1009 | ||
1010 | static void __exit atm_clip_exit(void) | ||
1011 | { | ||
1012 | remove_proc_entry("arp", atm_proc_root); | ||
1013 | |||
1014 | atm_clip_exit_noproc(); | ||
1015 | } | ||
1016 | |||
1004 | module_init(atm_clip_init); | 1017 | module_init(atm_clip_init); |
1005 | module_exit(atm_clip_exit); | 1018 | module_exit(atm_clip_exit); |
1006 | MODULE_AUTHOR("Werner Almesberger"); | 1019 | MODULE_AUTHOR("Werner Almesberger"); |
diff --git a/net/atm/lec.c b/net/atm/lec.c index e2d800d818e3..aa3785ebf6d1 100644 --- a/net/atm/lec.c +++ b/net/atm/lec.c | |||
@@ -1225,6 +1225,10 @@ static int __init lane_module_init(void) | |||
1225 | struct proc_dir_entry *p; | 1225 | struct proc_dir_entry *p; |
1226 | 1226 | ||
1227 | p = proc_create("lec", S_IRUGO, atm_proc_root, &lec_seq_fops); | 1227 | p = proc_create("lec", S_IRUGO, atm_proc_root, &lec_seq_fops); |
1228 | if (!p) { | ||
1229 | printk(KERN_ERR "Unable to initialize /proc/net/atm/lec\n"); | ||
1230 | return -ENOMEM; | ||
1231 | } | ||
1228 | #endif | 1232 | #endif |
1229 | 1233 | ||
1230 | register_atm_ioctl(&lane_ioctl_ops); | 1234 | register_atm_ioctl(&lane_ioctl_ops); |
diff --git a/net/ipv4/fib_trie.c b/net/ipv4/fib_trie.c index a7d089eb042e..ce6cb34e28e1 100644 --- a/net/ipv4/fib_trie.c +++ b/net/ipv4/fib_trie.c | |||
@@ -177,10 +177,13 @@ static inline struct tnode *node_parent_rcu(struct node *node) | |||
177 | return rcu_dereference(ret); | 177 | return rcu_dereference(ret); |
178 | } | 178 | } |
179 | 179 | ||
180 | /* Same as rcu_assign_pointer | ||
181 | * but that macro() assumes that value is a pointer. | ||
182 | */ | ||
180 | static inline void node_set_parent(struct node *node, struct tnode *ptr) | 183 | static inline void node_set_parent(struct node *node, struct tnode *ptr) |
181 | { | 184 | { |
182 | rcu_assign_pointer(node->parent, | 185 | smp_wmb(); |
183 | (unsigned long)ptr | NODE_TYPE(node)); | 186 | node->parent = (unsigned long)ptr | NODE_TYPE(node); |
184 | } | 187 | } |
185 | 188 | ||
186 | static inline struct node *tnode_get_child(struct tnode *tn, unsigned int i) | 189 | static inline struct node *tnode_get_child(struct tnode *tn, unsigned int i) |
diff --git a/net/ipv4/ip_fragment.c b/net/ipv4/ip_fragment.c index a2e92f9709db..3b2e5adca838 100644 --- a/net/ipv4/ip_fragment.c +++ b/net/ipv4/ip_fragment.c | |||
@@ -568,7 +568,7 @@ int ip_defrag(struct sk_buff *skb, u32 user) | |||
568 | 568 | ||
569 | IP_INC_STATS_BH(IPSTATS_MIB_REASMREQDS); | 569 | IP_INC_STATS_BH(IPSTATS_MIB_REASMREQDS); |
570 | 570 | ||
571 | net = skb->dev->nd_net; | 571 | net = skb->dev ? skb->dev->nd_net : skb->dst->dev->nd_net; |
572 | /* Start by cleaning up the memory. */ | 572 | /* Start by cleaning up the memory. */ |
573 | if (atomic_read(&net->ipv4.frags.mem) > net->ipv4.frags.high_thresh) | 573 | if (atomic_read(&net->ipv4.frags.mem) > net->ipv4.frags.high_thresh) |
574 | ip_evictor(net); | 574 | ip_evictor(net); |
diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c index e0fbc25ca816..58ac838bf460 100644 --- a/net/ipv4/tcp.c +++ b/net/ipv4/tcp.c | |||
@@ -735,7 +735,7 @@ new_segment: | |||
735 | if (!(psize -= copy)) | 735 | if (!(psize -= copy)) |
736 | goto out; | 736 | goto out; |
737 | 737 | ||
738 | if (skb->len < mss_now || (flags & MSG_OOB)) | 738 | if (skb->len < size_goal || (flags & MSG_OOB)) |
739 | continue; | 739 | continue; |
740 | 740 | ||
741 | if (forced_push(tp)) { | 741 | if (forced_push(tp)) { |
@@ -981,7 +981,7 @@ new_segment: | |||
981 | if ((seglen -= copy) == 0 && iovlen == 0) | 981 | if ((seglen -= copy) == 0 && iovlen == 0) |
982 | goto out; | 982 | goto out; |
983 | 983 | ||
984 | if (skb->len < mss_now || (flags & MSG_OOB)) | 984 | if (skb->len < size_goal || (flags & MSG_OOB)) |
985 | continue; | 985 | continue; |
986 | 986 | ||
987 | if (forced_push(tp)) { | 987 | if (forced_push(tp)) { |
diff --git a/net/sched/sch_htb.c b/net/sched/sch_htb.c index 795c761ad99f..66148cc4759e 100644 --- a/net/sched/sch_htb.c +++ b/net/sched/sch_htb.c | |||
@@ -711,9 +711,11 @@ static void htb_charge_class(struct htb_sched *q, struct htb_class *cl, | |||
711 | */ | 711 | */ |
712 | static psched_time_t htb_do_events(struct htb_sched *q, int level) | 712 | static psched_time_t htb_do_events(struct htb_sched *q, int level) |
713 | { | 713 | { |
714 | int i; | 714 | /* don't run for longer than 2 jiffies; 2 is used instead of |
715 | 715 | 1 to simplify things when jiffy is going to be incremented | |
716 | for (i = 0; i < 500; i++) { | 716 | too soon */ |
717 | unsigned long stop_at = jiffies + 2; | ||
718 | while (time_before(jiffies, stop_at)) { | ||
717 | struct htb_class *cl; | 719 | struct htb_class *cl; |
718 | long diff; | 720 | long diff; |
719 | struct rb_node *p = rb_first(&q->wait_pq[level]); | 721 | struct rb_node *p = rb_first(&q->wait_pq[level]); |
@@ -731,9 +733,8 @@ static psched_time_t htb_do_events(struct htb_sched *q, int level) | |||
731 | if (cl->cmode != HTB_CAN_SEND) | 733 | if (cl->cmode != HTB_CAN_SEND) |
732 | htb_add_to_wait_tree(q, cl, diff); | 734 | htb_add_to_wait_tree(q, cl, diff); |
733 | } | 735 | } |
734 | if (net_ratelimit()) | 736 | /* too much load - let's continue on next jiffie */ |
735 | printk(KERN_WARNING "htb: too many events !\n"); | 737 | return q->now + PSCHED_TICKS_PER_SEC / HZ; |
736 | return q->now + PSCHED_TICKS_PER_SEC / 10; | ||
737 | } | 738 | } |
738 | 739 | ||
739 | /* Returns class->node+prio from id-tree where classe's id is >= id. NULL | 740 | /* Returns class->node+prio from id-tree where classe's id is >= id. NULL |
diff --git a/net/socket.c b/net/socket.c index b6d35cd72a50..9d3fbfbc8535 100644 --- a/net/socket.c +++ b/net/socket.c | |||
@@ -909,11 +909,10 @@ static long sock_ioctl(struct file *file, unsigned cmd, unsigned long arg) | |||
909 | if (!dlci_ioctl_hook) | 909 | if (!dlci_ioctl_hook) |
910 | request_module("dlci"); | 910 | request_module("dlci"); |
911 | 911 | ||
912 | if (dlci_ioctl_hook) { | 912 | mutex_lock(&dlci_ioctl_mutex); |
913 | mutex_lock(&dlci_ioctl_mutex); | 913 | if (dlci_ioctl_hook) |
914 | err = dlci_ioctl_hook(cmd, argp); | 914 | err = dlci_ioctl_hook(cmd, argp); |
915 | mutex_unlock(&dlci_ioctl_mutex); | 915 | mutex_unlock(&dlci_ioctl_mutex); |
916 | } | ||
917 | break; | 916 | break; |
918 | default: | 917 | default: |
919 | err = sock->ops->ioctl(sock, cmd, arg); | 918 | err = sock->ops->ioctl(sock, cmd, arg); |