diff options
author | Dmitry Torokhov <dmitry.torokhov@gmail.com> | 2007-10-12 21:27:47 -0400 |
---|---|---|
committer | Dmitry Torokhov <dmitry.torokhov@gmail.com> | 2007-10-12 21:27:47 -0400 |
commit | b981d8b3f5e008ff10d993be633ad00564fc22cd (patch) | |
tree | e292dc07b22308912cf6a58354a608b9e5e8e1fd /net/tipc | |
parent | b11d2127c4893a7315d1e16273bc8560049fa3ca (diff) | |
parent | 2b9e0aae1d50e880c58d46788e5e3ebd89d75d62 (diff) |
Merge master.kernel.org:/pub/scm/linux/kernel/git/torvalds/linux-2.6
Conflicts:
drivers/macintosh/adbhid.c
Diffstat (limited to 'net/tipc')
-rw-r--r-- | net/tipc/eth_media.c | 17 | ||||
-rw-r--r-- | net/tipc/handler.c | 2 | ||||
-rw-r--r-- | net/tipc/link.c | 30 | ||||
-rw-r--r-- | net/tipc/msg.h | 6 | ||||
-rw-r--r-- | net/tipc/name_table.c | 5 | ||||
-rw-r--r-- | net/tipc/node.c | 2 | ||||
-rw-r--r-- | net/tipc/port.c | 1 | ||||
-rw-r--r-- | net/tipc/socket.c | 21 |
8 files changed, 46 insertions, 38 deletions
diff --git a/net/tipc/eth_media.c b/net/tipc/eth_media.c index 711ca4b1f051..3bbef2ab22ae 100644 --- a/net/tipc/eth_media.c +++ b/net/tipc/eth_media.c | |||
@@ -38,6 +38,7 @@ | |||
38 | #include <net/tipc/tipc_bearer.h> | 38 | #include <net/tipc/tipc_bearer.h> |
39 | #include <net/tipc/tipc_msg.h> | 39 | #include <net/tipc/tipc_msg.h> |
40 | #include <linux/netdevice.h> | 40 | #include <linux/netdevice.h> |
41 | #include <net/net_namespace.h> | ||
41 | 42 | ||
42 | #define MAX_ETH_BEARERS 2 | 43 | #define MAX_ETH_BEARERS 2 |
43 | #define ETH_LINK_PRIORITY TIPC_DEF_LINK_PRI | 44 | #define ETH_LINK_PRIORITY TIPC_DEF_LINK_PRI |
@@ -76,7 +77,7 @@ static int send_msg(struct sk_buff *buf, struct tipc_bearer *tb_ptr, | |||
76 | skb_reset_network_header(clone); | 77 | skb_reset_network_header(clone); |
77 | dev = ((struct eth_bearer *)(tb_ptr->usr_handle))->dev; | 78 | dev = ((struct eth_bearer *)(tb_ptr->usr_handle))->dev; |
78 | clone->dev = dev; | 79 | clone->dev = dev; |
79 | dev->hard_header(clone, dev, ETH_P_TIPC, | 80 | dev_hard_header(clone, dev, ETH_P_TIPC, |
80 | &dest->dev_addr.eth_addr, | 81 | &dest->dev_addr.eth_addr, |
81 | dev->dev_addr, clone->len); | 82 | dev->dev_addr, clone->len); |
82 | dev_queue_xmit(clone); | 83 | dev_queue_xmit(clone); |
@@ -100,6 +101,11 @@ static int recv_msg(struct sk_buff *buf, struct net_device *dev, | |||
100 | struct eth_bearer *eb_ptr = (struct eth_bearer *)pt->af_packet_priv; | 101 | struct eth_bearer *eb_ptr = (struct eth_bearer *)pt->af_packet_priv; |
101 | u32 size; | 102 | u32 size; |
102 | 103 | ||
104 | if (dev->nd_net != &init_net) { | ||
105 | kfree_skb(buf); | ||
106 | return 0; | ||
107 | } | ||
108 | |||
103 | if (likely(eb_ptr->bearer)) { | 109 | if (likely(eb_ptr->bearer)) { |
104 | if (likely(buf->pkt_type <= PACKET_BROADCAST)) { | 110 | if (likely(buf->pkt_type <= PACKET_BROADCAST)) { |
105 | size = msg_size((struct tipc_msg *)buf->data); | 111 | size = msg_size((struct tipc_msg *)buf->data); |
@@ -129,7 +135,7 @@ static int enable_bearer(struct tipc_bearer *tb_ptr) | |||
129 | 135 | ||
130 | /* Find device with specified name */ | 136 | /* Find device with specified name */ |
131 | 137 | ||
132 | for_each_netdev(pdev){ | 138 | for_each_netdev(&init_net, pdev){ |
133 | if (!strncmp(pdev->name, driver_name, IFNAMSIZ)) { | 139 | if (!strncmp(pdev->name, driver_name, IFNAMSIZ)) { |
134 | dev = pdev; | 140 | dev = pdev; |
135 | break; | 141 | break; |
@@ -192,6 +198,9 @@ static int recv_notification(struct notifier_block *nb, unsigned long evt, | |||
192 | struct eth_bearer *eb_ptr = ð_bearers[0]; | 198 | struct eth_bearer *eb_ptr = ð_bearers[0]; |
193 | struct eth_bearer *stop = ð_bearers[MAX_ETH_BEARERS]; | 199 | struct eth_bearer *stop = ð_bearers[MAX_ETH_BEARERS]; |
194 | 200 | ||
201 | if (dev->nd_net != &init_net) | ||
202 | return NOTIFY_DONE; | ||
203 | |||
195 | while ((eb_ptr->dev != dev)) { | 204 | while ((eb_ptr->dev != dev)) { |
196 | if (++eb_ptr == stop) | 205 | if (++eb_ptr == stop) |
197 | return NOTIFY_DONE; /* couldn't find device */ | 206 | return NOTIFY_DONE; /* couldn't find device */ |
@@ -234,12 +243,12 @@ static int recv_notification(struct notifier_block *nb, unsigned long evt, | |||
234 | static char *eth_addr2str(struct tipc_media_addr *a, char *str_buf, int str_size) | 243 | static char *eth_addr2str(struct tipc_media_addr *a, char *str_buf, int str_size) |
235 | { | 244 | { |
236 | unchar *addr = (unchar *)&a->dev_addr; | 245 | unchar *addr = (unchar *)&a->dev_addr; |
246 | DECLARE_MAC_BUF(mac); | ||
237 | 247 | ||
238 | if (str_size < 18) | 248 | if (str_size < 18) |
239 | *str_buf = '\0'; | 249 | *str_buf = '\0'; |
240 | else | 250 | else |
241 | sprintf(str_buf, "%02x:%02x:%02x:%02x:%02x:%02x", | 251 | sprintf(str_buf, "%s", print_mac(mac, addr)); |
242 | addr[0], addr[1], addr[2], addr[3], addr[4], addr[5]); | ||
243 | return str_buf; | 252 | return str_buf; |
244 | } | 253 | } |
245 | 254 | ||
diff --git a/net/tipc/handler.c b/net/tipc/handler.c index e1dcf663f8a6..0c70010a7dfe 100644 --- a/net/tipc/handler.c +++ b/net/tipc/handler.c | |||
@@ -97,7 +97,7 @@ int tipc_handler_start(void) | |||
97 | { | 97 | { |
98 | tipc_queue_item_cache = | 98 | tipc_queue_item_cache = |
99 | kmem_cache_create("tipc_queue_items", sizeof(struct queue_item), | 99 | kmem_cache_create("tipc_queue_items", sizeof(struct queue_item), |
100 | 0, SLAB_HWCACHE_ALIGN, NULL, NULL); | 100 | 0, SLAB_HWCACHE_ALIGN, NULL); |
101 | if (!tipc_queue_item_cache) | 101 | if (!tipc_queue_item_cache) |
102 | return -ENOMEM; | 102 | return -ENOMEM; |
103 | 103 | ||
diff --git a/net/tipc/link.c b/net/tipc/link.c index 5adfdfd49d61..1b17fecee747 100644 --- a/net/tipc/link.c +++ b/net/tipc/link.c | |||
@@ -423,6 +423,17 @@ struct link *tipc_link_create(struct bearer *b_ptr, const u32 peer, | |||
423 | return NULL; | 423 | return NULL; |
424 | } | 424 | } |
425 | 425 | ||
426 | if (LINK_LOG_BUF_SIZE) { | ||
427 | char *pb = kmalloc(LINK_LOG_BUF_SIZE, GFP_ATOMIC); | ||
428 | |||
429 | if (!pb) { | ||
430 | kfree(l_ptr); | ||
431 | warn("Link creation failed, no memory for print buffer\n"); | ||
432 | return NULL; | ||
433 | } | ||
434 | tipc_printbuf_init(&l_ptr->print_buf, pb, LINK_LOG_BUF_SIZE); | ||
435 | } | ||
436 | |||
426 | l_ptr->addr = peer; | 437 | l_ptr->addr = peer; |
427 | if_name = strchr(b_ptr->publ.name, ':') + 1; | 438 | if_name = strchr(b_ptr->publ.name, ':') + 1; |
428 | sprintf(l_ptr->name, "%u.%u.%u:%s-%u.%u.%u:", | 439 | sprintf(l_ptr->name, "%u.%u.%u:%s-%u.%u.%u:", |
@@ -432,8 +443,6 @@ struct link *tipc_link_create(struct bearer *b_ptr, const u32 peer, | |||
432 | tipc_zone(peer), tipc_cluster(peer), tipc_node(peer)); | 443 | tipc_zone(peer), tipc_cluster(peer), tipc_node(peer)); |
433 | /* note: peer i/f is appended to link name by reset/activate */ | 444 | /* note: peer i/f is appended to link name by reset/activate */ |
434 | memcpy(&l_ptr->media_addr, media_addr, sizeof(*media_addr)); | 445 | memcpy(&l_ptr->media_addr, media_addr, sizeof(*media_addr)); |
435 | k_init_timer(&l_ptr->timer, (Handler)link_timeout, (unsigned long)l_ptr); | ||
436 | list_add_tail(&l_ptr->link_list, &b_ptr->links); | ||
437 | l_ptr->checkpoint = 1; | 446 | l_ptr->checkpoint = 1; |
438 | l_ptr->b_ptr = b_ptr; | 447 | l_ptr->b_ptr = b_ptr; |
439 | link_set_supervision_props(l_ptr, b_ptr->media->tolerance); | 448 | link_set_supervision_props(l_ptr, b_ptr->media->tolerance); |
@@ -459,21 +468,14 @@ struct link *tipc_link_create(struct bearer *b_ptr, const u32 peer, | |||
459 | 468 | ||
460 | l_ptr->owner = tipc_node_attach_link(l_ptr); | 469 | l_ptr->owner = tipc_node_attach_link(l_ptr); |
461 | if (!l_ptr->owner) { | 470 | if (!l_ptr->owner) { |
471 | if (LINK_LOG_BUF_SIZE) | ||
472 | kfree(l_ptr->print_buf.buf); | ||
462 | kfree(l_ptr); | 473 | kfree(l_ptr); |
463 | return NULL; | 474 | return NULL; |
464 | } | 475 | } |
465 | 476 | ||
466 | if (LINK_LOG_BUF_SIZE) { | 477 | k_init_timer(&l_ptr->timer, (Handler)link_timeout, (unsigned long)l_ptr); |
467 | char *pb = kmalloc(LINK_LOG_BUF_SIZE, GFP_ATOMIC); | 478 | list_add_tail(&l_ptr->link_list, &b_ptr->links); |
468 | |||
469 | if (!pb) { | ||
470 | kfree(l_ptr); | ||
471 | warn("Link creation failed, no memory for print buffer\n"); | ||
472 | return NULL; | ||
473 | } | ||
474 | tipc_printbuf_init(&l_ptr->print_buf, pb, LINK_LOG_BUF_SIZE); | ||
475 | } | ||
476 | |||
477 | tipc_k_signal((Handler)tipc_link_start, (unsigned long)l_ptr); | 479 | tipc_k_signal((Handler)tipc_link_start, (unsigned long)l_ptr); |
478 | 480 | ||
479 | dbg("tipc_link_create(): tolerance = %u,cont intv = %u, abort_limit = %u\n", | 481 | dbg("tipc_link_create(): tolerance = %u,cont intv = %u, abort_limit = %u\n", |
@@ -2381,10 +2383,10 @@ void tipc_link_changeover(struct link *l_ptr) | |||
2381 | struct tipc_msg *msg = buf_msg(crs); | 2383 | struct tipc_msg *msg = buf_msg(crs); |
2382 | 2384 | ||
2383 | if ((msg_user(msg) == MSG_BUNDLER) && split_bundles) { | 2385 | if ((msg_user(msg) == MSG_BUNDLER) && split_bundles) { |
2384 | u32 msgcount = msg_msgcnt(msg); | ||
2385 | struct tipc_msg *m = msg_get_wrapped(msg); | 2386 | struct tipc_msg *m = msg_get_wrapped(msg); |
2386 | unchar* pos = (unchar*)m; | 2387 | unchar* pos = (unchar*)m; |
2387 | 2388 | ||
2389 | msgcount = msg_msgcnt(msg); | ||
2388 | while (msgcount--) { | 2390 | while (msgcount--) { |
2389 | msg_set_seqno(m,msg_seqno(msg)); | 2391 | msg_set_seqno(m,msg_seqno(msg)); |
2390 | tipc_link_tunnel(l_ptr, &tunnel_hdr, m, | 2392 | tipc_link_tunnel(l_ptr, &tunnel_hdr, m, |
diff --git a/net/tipc/msg.h b/net/tipc/msg.h index 35d5ba1d4f42..ce2659836374 100644 --- a/net/tipc/msg.h +++ b/net/tipc/msg.h | |||
@@ -72,10 +72,8 @@ static inline void msg_set_bits(struct tipc_msg *m, u32 w, | |||
72 | u32 pos, u32 mask, u32 val) | 72 | u32 pos, u32 mask, u32 val) |
73 | { | 73 | { |
74 | val = (val & mask) << pos; | 74 | val = (val & mask) << pos; |
75 | val = htonl(val); | 75 | m->hdr[w] &= ~htonl(mask << pos); |
76 | mask = htonl(mask << pos); | 76 | m->hdr[w] |= htonl(val); |
77 | m->hdr[w] &= ~mask; | ||
78 | m->hdr[w] |= val; | ||
79 | } | 77 | } |
80 | 78 | ||
81 | /* | 79 | /* |
diff --git a/net/tipc/name_table.c b/net/tipc/name_table.c index 9dfc9127acdd..ac7dfdda7973 100644 --- a/net/tipc/name_table.c +++ b/net/tipc/name_table.c | |||
@@ -501,7 +501,7 @@ end_node: | |||
501 | * sequence overlapping with the requested sequence | 501 | * sequence overlapping with the requested sequence |
502 | */ | 502 | */ |
503 | 503 | ||
504 | void tipc_nameseq_subscribe(struct name_seq *nseq, struct subscription *s) | 504 | static void tipc_nameseq_subscribe(struct name_seq *nseq, struct subscription *s) |
505 | { | 505 | { |
506 | struct sub_seq *sseq = nseq->sseqs; | 506 | struct sub_seq *sseq = nseq->sseqs; |
507 | 507 | ||
@@ -1052,12 +1052,11 @@ int tipc_nametbl_init(void) | |||
1052 | { | 1052 | { |
1053 | int array_size = sizeof(struct hlist_head) * tipc_nametbl_size; | 1053 | int array_size = sizeof(struct hlist_head) * tipc_nametbl_size; |
1054 | 1054 | ||
1055 | table.types = kmalloc(array_size, GFP_ATOMIC); | 1055 | table.types = kzalloc(array_size, GFP_ATOMIC); |
1056 | if (!table.types) | 1056 | if (!table.types) |
1057 | return -ENOMEM; | 1057 | return -ENOMEM; |
1058 | 1058 | ||
1059 | write_lock_bh(&tipc_nametbl_lock); | 1059 | write_lock_bh(&tipc_nametbl_lock); |
1060 | memset(table.types, 0, array_size); | ||
1061 | table.local_publ_count = 0; | 1060 | table.local_publ_count = 0; |
1062 | write_unlock_bh(&tipc_nametbl_lock); | 1061 | write_unlock_bh(&tipc_nametbl_lock); |
1063 | return 0; | 1062 | return 0; |
diff --git a/net/tipc/node.c b/net/tipc/node.c index e2e452a62ba1..598f4d3a0098 100644 --- a/net/tipc/node.c +++ b/net/tipc/node.c | |||
@@ -241,8 +241,6 @@ struct node *tipc_node_attach_link(struct link *l_ptr) | |||
241 | char addr_string[16]; | 241 | char addr_string[16]; |
242 | 242 | ||
243 | if (n_ptr->link_cnt >= 2) { | 243 | if (n_ptr->link_cnt >= 2) { |
244 | char addr_string[16]; | ||
245 | |||
246 | err("Attempt to create third link to %s\n", | 244 | err("Attempt to create third link to %s\n", |
247 | addr_string_fill(addr_string, n_ptr->addr)); | 245 | addr_string_fill(addr_string, n_ptr->addr)); |
248 | return NULL; | 246 | return NULL; |
diff --git a/net/tipc/port.c b/net/tipc/port.c index 5d2b9ce84d0a..76088153524c 100644 --- a/net/tipc/port.c +++ b/net/tipc/port.c | |||
@@ -41,7 +41,6 @@ | |||
41 | #include "addr.h" | 41 | #include "addr.h" |
42 | #include "link.h" | 42 | #include "link.h" |
43 | #include "node.h" | 43 | #include "node.h" |
44 | #include "port.h" | ||
45 | #include "name_table.h" | 44 | #include "name_table.h" |
46 | #include "user_reg.h" | 45 | #include "user_reg.h" |
47 | #include "msg.h" | 46 | #include "msg.h" |
diff --git a/net/tipc/socket.c b/net/tipc/socket.c index 4a8f37f48764..e36b4b5a5222 100644 --- a/net/tipc/socket.c +++ b/net/tipc/socket.c | |||
@@ -162,13 +162,16 @@ static void advance_queue(struct tipc_sock *tsock) | |||
162 | * | 162 | * |
163 | * Returns 0 on success, errno otherwise | 163 | * Returns 0 on success, errno otherwise |
164 | */ | 164 | */ |
165 | static int tipc_create(struct socket *sock, int protocol) | 165 | static int tipc_create(struct net *net, struct socket *sock, int protocol) |
166 | { | 166 | { |
167 | struct tipc_sock *tsock; | 167 | struct tipc_sock *tsock; |
168 | struct tipc_port *port; | 168 | struct tipc_port *port; |
169 | struct sock *sk; | 169 | struct sock *sk; |
170 | u32 ref; | 170 | u32 ref; |
171 | 171 | ||
172 | if (net != &init_net) | ||
173 | return -EAFNOSUPPORT; | ||
174 | |||
172 | if (unlikely(protocol != 0)) | 175 | if (unlikely(protocol != 0)) |
173 | return -EPROTONOSUPPORT; | 176 | return -EPROTONOSUPPORT; |
174 | 177 | ||
@@ -198,7 +201,7 @@ static int tipc_create(struct socket *sock, int protocol) | |||
198 | return -EPROTOTYPE; | 201 | return -EPROTOTYPE; |
199 | } | 202 | } |
200 | 203 | ||
201 | sk = sk_alloc(AF_TIPC, GFP_KERNEL, &tipc_proto, 1); | 204 | sk = sk_alloc(net, AF_TIPC, GFP_KERNEL, &tipc_proto, 1); |
202 | if (!sk) { | 205 | if (!sk) { |
203 | tipc_deleteport(ref); | 206 | tipc_deleteport(ref); |
204 | return -ENOMEM; | 207 | return -ENOMEM; |
@@ -1372,7 +1375,7 @@ static int accept(struct socket *sock, struct socket *newsock, int flags) | |||
1372 | } | 1375 | } |
1373 | buf = skb_peek(&sock->sk->sk_receive_queue); | 1376 | buf = skb_peek(&sock->sk->sk_receive_queue); |
1374 | 1377 | ||
1375 | res = tipc_create(newsock, 0); | 1378 | res = tipc_create(sock->sk->sk_net, newsock, 0); |
1376 | if (!res) { | 1379 | if (!res) { |
1377 | struct tipc_sock *new_tsock = tipc_sk(newsock->sk); | 1380 | struct tipc_sock *new_tsock = tipc_sk(newsock->sk); |
1378 | struct tipc_portid id; | 1381 | struct tipc_portid id; |
@@ -1629,8 +1632,8 @@ static struct proto_ops msg_ops = { | |||
1629 | .getsockopt = getsockopt, | 1632 | .getsockopt = getsockopt, |
1630 | .sendmsg = send_msg, | 1633 | .sendmsg = send_msg, |
1631 | .recvmsg = recv_msg, | 1634 | .recvmsg = recv_msg, |
1632 | .mmap = sock_no_mmap, | 1635 | .mmap = sock_no_mmap, |
1633 | .sendpage = sock_no_sendpage | 1636 | .sendpage = sock_no_sendpage |
1634 | }; | 1637 | }; |
1635 | 1638 | ||
1636 | static struct proto_ops packet_ops = { | 1639 | static struct proto_ops packet_ops = { |
@@ -1650,8 +1653,8 @@ static struct proto_ops packet_ops = { | |||
1650 | .getsockopt = getsockopt, | 1653 | .getsockopt = getsockopt, |
1651 | .sendmsg = send_packet, | 1654 | .sendmsg = send_packet, |
1652 | .recvmsg = recv_msg, | 1655 | .recvmsg = recv_msg, |
1653 | .mmap = sock_no_mmap, | 1656 | .mmap = sock_no_mmap, |
1654 | .sendpage = sock_no_sendpage | 1657 | .sendpage = sock_no_sendpage |
1655 | }; | 1658 | }; |
1656 | 1659 | ||
1657 | static struct proto_ops stream_ops = { | 1660 | static struct proto_ops stream_ops = { |
@@ -1671,8 +1674,8 @@ static struct proto_ops stream_ops = { | |||
1671 | .getsockopt = getsockopt, | 1674 | .getsockopt = getsockopt, |
1672 | .sendmsg = send_stream, | 1675 | .sendmsg = send_stream, |
1673 | .recvmsg = recv_stream, | 1676 | .recvmsg = recv_stream, |
1674 | .mmap = sock_no_mmap, | 1677 | .mmap = sock_no_mmap, |
1675 | .sendpage = sock_no_sendpage | 1678 | .sendpage = sock_no_sendpage |
1676 | }; | 1679 | }; |
1677 | 1680 | ||
1678 | static struct net_proto_family tipc_family_ops = { | 1681 | static struct net_proto_family tipc_family_ops = { |