diff options
Diffstat (limited to 'net/tipc')
| -rw-r--r-- | net/tipc/Kconfig | 25 | ||||
| -rw-r--r-- | net/tipc/bcast.c | 75 | ||||
| -rw-r--r-- | net/tipc/bearer.c | 69 | ||||
| -rw-r--r-- | net/tipc/bearer.h | 4 | ||||
| -rw-r--r-- | net/tipc/config.c | 41 | ||||
| -rw-r--r-- | net/tipc/core.c | 18 | ||||
| -rw-r--r-- | net/tipc/core.h | 65 | ||||
| -rw-r--r-- | net/tipc/discover.c | 10 | ||||
| -rw-r--r-- | net/tipc/handler.c | 4 | ||||
| -rw-r--r-- | net/tipc/link.c | 326 | ||||
| -rw-r--r-- | net/tipc/link.h | 63 | ||||
| -rw-r--r-- | net/tipc/log.c | 302 | ||||
| -rw-r--r-- | net/tipc/log.h | 66 | ||||
| -rw-r--r-- | net/tipc/msg.c | 242 | ||||
| -rw-r--r-- | net/tipc/name_distr.c | 25 | ||||
| -rw-r--r-- | net/tipc/name_table.c | 142 | ||||
| -rw-r--r-- | net/tipc/net.c | 8 | ||||
| -rw-r--r-- | net/tipc/netlink.c | 2 | ||||
| -rw-r--r-- | net/tipc/node.c | 22 | ||||
| -rw-r--r-- | net/tipc/node_subscr.c | 3 | ||||
| -rw-r--r-- | net/tipc/port.c | 77 | ||||
| -rw-r--r-- | net/tipc/port.h | 1 | ||||
| -rw-r--r-- | net/tipc/ref.c | 10 | ||||
| -rw-r--r-- | net/tipc/socket.c | 17 | ||||
| -rw-r--r-- | net/tipc/subscr.c | 14 |
25 files changed, 471 insertions, 1160 deletions
diff --git a/net/tipc/Kconfig b/net/tipc/Kconfig index 2c5954b85933..585460180ffb 100644 --- a/net/tipc/Kconfig +++ b/net/tipc/Kconfig | |||
| @@ -41,29 +41,4 @@ config TIPC_PORTS | |||
| 41 | Setting this to a smaller value saves some memory, | 41 | Setting this to a smaller value saves some memory, |
| 42 | setting it to higher allows for more ports. | 42 | setting it to higher allows for more ports. |
| 43 | 43 | ||
| 44 | config TIPC_LOG | ||
| 45 | int "Size of log buffer" | ||
| 46 | depends on TIPC_ADVANCED | ||
| 47 | range 0 32768 | ||
| 48 | default "0" | ||
| 49 | help | ||
| 50 | Size (in bytes) of TIPC's internal log buffer, which records the | ||
| 51 | occurrence of significant events. Can range from 0 to 32768 bytes; | ||
| 52 | default is 0. | ||
| 53 | |||
| 54 | There is no need to enable the log buffer unless the node will be | ||
| 55 | managed remotely via TIPC. | ||
| 56 | |||
| 57 | config TIPC_DEBUG | ||
| 58 | bool "Enable debugging support" | ||
| 59 | default n | ||
| 60 | help | ||
| 61 | Saying Y here enables TIPC debugging capabilities used by developers. | ||
| 62 | Most users do not need to bother; if unsure, just say N. | ||
| 63 | |||
| 64 | Enabling debugging support causes TIPC to display data about its | ||
| 65 | internal state when certain abnormal conditions occur. It also | ||
| 66 | makes it easy for developers to capture additional information of | ||
| 67 | interest using the dbg() or msg_dbg() macros. | ||
| 68 | |||
| 69 | endif # TIPC | 44 | endif # TIPC |
diff --git a/net/tipc/bcast.c b/net/tipc/bcast.c index 2625f5ebe3e8..e4e6d8cd47e6 100644 --- a/net/tipc/bcast.c +++ b/net/tipc/bcast.c | |||
| @@ -162,7 +162,7 @@ static void bclink_update_last_sent(struct tipc_node *node, u32 seqno) | |||
| 162 | } | 162 | } |
| 163 | 163 | ||
| 164 | 164 | ||
| 165 | /* | 165 | /** |
| 166 | * tipc_bclink_retransmit_to - get most recent node to request retransmission | 166 | * tipc_bclink_retransmit_to - get most recent node to request retransmission |
| 167 | * | 167 | * |
| 168 | * Called with bc_lock locked | 168 | * Called with bc_lock locked |
| @@ -270,7 +270,7 @@ exit: | |||
| 270 | spin_unlock_bh(&bc_lock); | 270 | spin_unlock_bh(&bc_lock); |
| 271 | } | 271 | } |
| 272 | 272 | ||
| 273 | /* | 273 | /** |
| 274 | * tipc_bclink_update_link_state - update broadcast link state | 274 | * tipc_bclink_update_link_state - update broadcast link state |
| 275 | * | 275 | * |
| 276 | * tipc_net_lock and node lock set | 276 | * tipc_net_lock and node lock set |
| @@ -330,7 +330,7 @@ void tipc_bclink_update_link_state(struct tipc_node *n_ptr, u32 last_sent) | |||
| 330 | } | 330 | } |
| 331 | } | 331 | } |
| 332 | 332 | ||
| 333 | /* | 333 | /** |
| 334 | * bclink_peek_nack - monitor retransmission requests sent by other nodes | 334 | * bclink_peek_nack - monitor retransmission requests sent by other nodes |
| 335 | * | 335 | * |
| 336 | * Delay any upcoming NACK by this node if another node has already | 336 | * Delay any upcoming NACK by this node if another node has already |
| @@ -381,7 +381,7 @@ exit: | |||
| 381 | return res; | 381 | return res; |
| 382 | } | 382 | } |
| 383 | 383 | ||
| 384 | /* | 384 | /** |
| 385 | * bclink_accept_pkt - accept an incoming, in-sequence broadcast packet | 385 | * bclink_accept_pkt - accept an incoming, in-sequence broadcast packet |
| 386 | * | 386 | * |
| 387 | * Called with both sending node's lock and bc_lock taken. | 387 | * Called with both sending node's lock and bc_lock taken. |
| @@ -406,7 +406,7 @@ static void bclink_accept_pkt(struct tipc_node *node, u32 seqno) | |||
| 406 | } | 406 | } |
| 407 | } | 407 | } |
| 408 | 408 | ||
| 409 | /* | 409 | /** |
| 410 | * tipc_bclink_recv_pkt - receive a broadcast packet, and deliver upwards | 410 | * tipc_bclink_recv_pkt - receive a broadcast packet, and deliver upwards |
| 411 | * | 411 | * |
| 412 | * tipc_net_lock is read_locked, no other locks set | 412 | * tipc_net_lock is read_locked, no other locks set |
| @@ -701,48 +701,43 @@ void tipc_bcbearer_sort(void) | |||
| 701 | 701 | ||
| 702 | int tipc_bclink_stats(char *buf, const u32 buf_size) | 702 | int tipc_bclink_stats(char *buf, const u32 buf_size) |
| 703 | { | 703 | { |
| 704 | struct print_buf pb; | 704 | int ret; |
| 705 | struct tipc_stats *s; | ||
| 705 | 706 | ||
| 706 | if (!bcl) | 707 | if (!bcl) |
| 707 | return 0; | 708 | return 0; |
| 708 | 709 | ||
| 709 | tipc_printbuf_init(&pb, buf, buf_size); | ||
| 710 | |||
| 711 | spin_lock_bh(&bc_lock); | 710 | spin_lock_bh(&bc_lock); |
| 712 | 711 | ||
| 713 | tipc_printf(&pb, "Link <%s>\n" | 712 | s = &bcl->stats; |
| 714 | " Window:%u packets\n", | 713 | |
| 715 | bcl->name, bcl->queue_limit[0]); | 714 | ret = tipc_snprintf(buf, buf_size, "Link <%s>\n" |
| 716 | tipc_printf(&pb, " RX packets:%u fragments:%u/%u bundles:%u/%u\n", | 715 | " Window:%u packets\n", |
| 717 | bcl->stats.recv_info, | 716 | bcl->name, bcl->queue_limit[0]); |
| 718 | bcl->stats.recv_fragments, | 717 | ret += tipc_snprintf(buf + ret, buf_size - ret, |
| 719 | bcl->stats.recv_fragmented, | 718 | " RX packets:%u fragments:%u/%u bundles:%u/%u\n", |
| 720 | bcl->stats.recv_bundles, | 719 | s->recv_info, s->recv_fragments, |
| 721 | bcl->stats.recv_bundled); | 720 | s->recv_fragmented, s->recv_bundles, |
| 722 | tipc_printf(&pb, " TX packets:%u fragments:%u/%u bundles:%u/%u\n", | 721 | s->recv_bundled); |
| 723 | bcl->stats.sent_info, | 722 | ret += tipc_snprintf(buf + ret, buf_size - ret, |
| 724 | bcl->stats.sent_fragments, | 723 | " TX packets:%u fragments:%u/%u bundles:%u/%u\n", |
| 725 | bcl->stats.sent_fragmented, | 724 | s->sent_info, s->sent_fragments, |
| 726 | bcl->stats.sent_bundles, | 725 | s->sent_fragmented, s->sent_bundles, |
| 727 | bcl->stats.sent_bundled); | 726 | s->sent_bundled); |
| 728 | tipc_printf(&pb, " RX naks:%u defs:%u dups:%u\n", | 727 | ret += tipc_snprintf(buf + ret, buf_size - ret, |
| 729 | bcl->stats.recv_nacks, | 728 | " RX naks:%u defs:%u dups:%u\n", |
| 730 | bcl->stats.deferred_recv, | 729 | s->recv_nacks, s->deferred_recv, s->duplicates); |
| 731 | bcl->stats.duplicates); | 730 | ret += tipc_snprintf(buf + ret, buf_size - ret, |
| 732 | tipc_printf(&pb, " TX naks:%u acks:%u dups:%u\n", | 731 | " TX naks:%u acks:%u dups:%u\n", |
| 733 | bcl->stats.sent_nacks, | 732 | s->sent_nacks, s->sent_acks, s->retransmitted); |
| 734 | bcl->stats.sent_acks, | 733 | ret += tipc_snprintf(buf + ret, buf_size - ret, |
| 735 | bcl->stats.retransmitted); | 734 | " Congestion bearer:%u link:%u Send queue max:%u avg:%u\n", |
| 736 | tipc_printf(&pb, " Congestion bearer:%u link:%u Send queue max:%u avg:%u\n", | 735 | s->bearer_congs, s->link_congs, s->max_queue_sz, |
| 737 | bcl->stats.bearer_congs, | 736 | s->queue_sz_counts ? |
| 738 | bcl->stats.link_congs, | 737 | (s->accu_queue_sz / s->queue_sz_counts) : 0); |
| 739 | bcl->stats.max_queue_sz, | ||
| 740 | bcl->stats.queue_sz_counts | ||
| 741 | ? (bcl->stats.accu_queue_sz / bcl->stats.queue_sz_counts) | ||
| 742 | : 0); | ||
| 743 | 738 | ||
| 744 | spin_unlock_bh(&bc_lock); | 739 | spin_unlock_bh(&bc_lock); |
| 745 | return tipc_printbuf_validate(&pb); | 740 | return ret; |
| 746 | } | 741 | } |
| 747 | 742 | ||
| 748 | int tipc_bclink_reset_stats(void) | 743 | int tipc_bclink_reset_stats(void) |
| @@ -880,7 +875,7 @@ void tipc_port_list_add(struct tipc_port_list *pl_ptr, u32 port) | |||
| 880 | if (!item->next) { | 875 | if (!item->next) { |
| 881 | item->next = kmalloc(sizeof(*item), GFP_ATOMIC); | 876 | item->next = kmalloc(sizeof(*item), GFP_ATOMIC); |
| 882 | if (!item->next) { | 877 | if (!item->next) { |
| 883 | warn("Incomplete multicast delivery, no memory\n"); | 878 | pr_warn("Incomplete multicast delivery, no memory\n"); |
| 884 | return; | 879 | return; |
| 885 | } | 880 | } |
| 886 | item->next->next = NULL; | 881 | item->next->next = NULL; |
diff --git a/net/tipc/bearer.c b/net/tipc/bearer.c index a297e3a2e3e7..09e71241265d 100644 --- a/net/tipc/bearer.c +++ b/net/tipc/bearer.c | |||
| @@ -123,28 +123,30 @@ int tipc_register_media(struct tipc_media *m_ptr) | |||
| 123 | exit: | 123 | exit: |
| 124 | write_unlock_bh(&tipc_net_lock); | 124 | write_unlock_bh(&tipc_net_lock); |
| 125 | if (res) | 125 | if (res) |
| 126 | warn("Media <%s> registration error\n", m_ptr->name); | 126 | pr_warn("Media <%s> registration error\n", m_ptr->name); |
| 127 | return res; | 127 | return res; |
| 128 | } | 128 | } |
| 129 | 129 | ||
| 130 | /** | 130 | /** |
| 131 | * tipc_media_addr_printf - record media address in print buffer | 131 | * tipc_media_addr_printf - record media address in print buffer |
| 132 | */ | 132 | */ |
| 133 | void tipc_media_addr_printf(struct print_buf *pb, struct tipc_media_addr *a) | 133 | void tipc_media_addr_printf(char *buf, int len, struct tipc_media_addr *a) |
| 134 | { | 134 | { |
| 135 | char addr_str[MAX_ADDR_STR]; | 135 | char addr_str[MAX_ADDR_STR]; |
| 136 | struct tipc_media *m_ptr; | 136 | struct tipc_media *m_ptr; |
| 137 | int ret; | ||
| 137 | 138 | ||
| 138 | m_ptr = media_find_id(a->media_id); | 139 | m_ptr = media_find_id(a->media_id); |
| 139 | 140 | ||
| 140 | if (m_ptr && !m_ptr->addr2str(a, addr_str, sizeof(addr_str))) | 141 | if (m_ptr && !m_ptr->addr2str(a, addr_str, sizeof(addr_str))) |
| 141 | tipc_printf(pb, "%s(%s)", m_ptr->name, addr_str); | 142 | ret = tipc_snprintf(buf, len, "%s(%s)", m_ptr->name, addr_str); |
| 142 | else { | 143 | else { |
| 143 | u32 i; | 144 | u32 i; |
| 144 | 145 | ||
| 145 | tipc_printf(pb, "UNKNOWN(%u)", a->media_id); | 146 | ret = tipc_snprintf(buf, len, "UNKNOWN(%u)", a->media_id); |
| 146 | for (i = 0; i < sizeof(a->value); i++) | 147 | for (i = 0; i < sizeof(a->value); i++) |
| 147 | tipc_printf(pb, "-%02x", a->value[i]); | 148 | ret += tipc_snprintf(buf - ret, len + ret, |
| 149 | "-%02x", a->value[i]); | ||
| 148 | } | 150 | } |
| 149 | } | 151 | } |
| 150 | 152 | ||
| @@ -172,8 +174,8 @@ struct sk_buff *tipc_media_get_names(void) | |||
| 172 | 174 | ||
| 173 | /** | 175 | /** |
| 174 | * bearer_name_validate - validate & (optionally) deconstruct bearer name | 176 | * bearer_name_validate - validate & (optionally) deconstruct bearer name |
| 175 | * @name - ptr to bearer name string | 177 | * @name: ptr to bearer name string |
| 176 | * @name_parts - ptr to area for bearer name components (or NULL if not needed) | 178 | * @name_parts: ptr to area for bearer name components (or NULL if not needed) |
| 177 | * | 179 | * |
| 178 | * Returns 1 if bearer name is valid, otherwise 0. | 180 | * Returns 1 if bearer name is valid, otherwise 0. |
| 179 | */ | 181 | */ |
| @@ -418,12 +420,12 @@ int tipc_enable_bearer(const char *name, u32 disc_domain, u32 priority) | |||
| 418 | int res = -EINVAL; | 420 | int res = -EINVAL; |
| 419 | 421 | ||
| 420 | if (!tipc_own_addr) { | 422 | if (!tipc_own_addr) { |
| 421 | warn("Bearer <%s> rejected, not supported in standalone mode\n", | 423 | pr_warn("Bearer <%s> rejected, not supported in standalone mode\n", |
| 422 | name); | 424 | name); |
| 423 | return -ENOPROTOOPT; | 425 | return -ENOPROTOOPT; |
| 424 | } | 426 | } |
| 425 | if (!bearer_name_validate(name, &b_names)) { | 427 | if (!bearer_name_validate(name, &b_names)) { |
| 426 | warn("Bearer <%s> rejected, illegal name\n", name); | 428 | pr_warn("Bearer <%s> rejected, illegal name\n", name); |
| 427 | return -EINVAL; | 429 | return -EINVAL; |
| 428 | } | 430 | } |
| 429 | if (tipc_addr_domain_valid(disc_domain) && | 431 | if (tipc_addr_domain_valid(disc_domain) && |
| @@ -435,12 +437,13 @@ int tipc_enable_bearer(const char *name, u32 disc_domain, u32 priority) | |||
| 435 | res = 0; /* accept specified node in own cluster */ | 437 | res = 0; /* accept specified node in own cluster */ |
| 436 | } | 438 | } |
| 437 | if (res) { | 439 | if (res) { |
| 438 | warn("Bearer <%s> rejected, illegal discovery domain\n", name); | 440 | pr_warn("Bearer <%s> rejected, illegal discovery domain\n", |
| 441 | name); | ||
| 439 | return -EINVAL; | 442 | return -EINVAL; |
| 440 | } | 443 | } |
| 441 | if ((priority > TIPC_MAX_LINK_PRI) && | 444 | if ((priority > TIPC_MAX_LINK_PRI) && |
| 442 | (priority != TIPC_MEDIA_LINK_PRI)) { | 445 | (priority != TIPC_MEDIA_LINK_PRI)) { |
| 443 | warn("Bearer <%s> rejected, illegal priority\n", name); | 446 | pr_warn("Bearer <%s> rejected, illegal priority\n", name); |
| 444 | return -EINVAL; | 447 | return -EINVAL; |
| 445 | } | 448 | } |
| 446 | 449 | ||
| @@ -448,8 +451,8 @@ int tipc_enable_bearer(const char *name, u32 disc_domain, u32 priority) | |||
| 448 | 451 | ||
| 449 | m_ptr = tipc_media_find(b_names.media_name); | 452 | m_ptr = tipc_media_find(b_names.media_name); |
| 450 | if (!m_ptr) { | 453 | if (!m_ptr) { |
| 451 | warn("Bearer <%s> rejected, media <%s> not registered\n", name, | 454 | pr_warn("Bearer <%s> rejected, media <%s> not registered\n", |
| 452 | b_names.media_name); | 455 | name, b_names.media_name); |
| 453 | goto exit; | 456 | goto exit; |
| 454 | } | 457 | } |
| 455 | 458 | ||
| @@ -465,24 +468,25 @@ restart: | |||
| 465 | continue; | 468 | continue; |
| 466 | } | 469 | } |
| 467 | if (!strcmp(name, tipc_bearers[i].name)) { | 470 | if (!strcmp(name, tipc_bearers[i].name)) { |
| 468 | warn("Bearer <%s> rejected, already enabled\n", name); | 471 | pr_warn("Bearer <%s> rejected, already enabled\n", |
| 472 | name); | ||
| 469 | goto exit; | 473 | goto exit; |
| 470 | } | 474 | } |
| 471 | if ((tipc_bearers[i].priority == priority) && | 475 | if ((tipc_bearers[i].priority == priority) && |
| 472 | (++with_this_prio > 2)) { | 476 | (++with_this_prio > 2)) { |
| 473 | if (priority-- == 0) { | 477 | if (priority-- == 0) { |
| 474 | warn("Bearer <%s> rejected, duplicate priority\n", | 478 | pr_warn("Bearer <%s> rejected, duplicate priority\n", |
| 475 | name); | 479 | name); |
| 476 | goto exit; | 480 | goto exit; |
| 477 | } | 481 | } |
| 478 | warn("Bearer <%s> priority adjustment required %u->%u\n", | 482 | pr_warn("Bearer <%s> priority adjustment required %u->%u\n", |
| 479 | name, priority + 1, priority); | 483 | name, priority + 1, priority); |
| 480 | goto restart; | 484 | goto restart; |
| 481 | } | 485 | } |
| 482 | } | 486 | } |
| 483 | if (bearer_id >= MAX_BEARERS) { | 487 | if (bearer_id >= MAX_BEARERS) { |
| 484 | warn("Bearer <%s> rejected, bearer limit reached (%u)\n", | 488 | pr_warn("Bearer <%s> rejected, bearer limit reached (%u)\n", |
| 485 | name, MAX_BEARERS); | 489 | name, MAX_BEARERS); |
| 486 | goto exit; | 490 | goto exit; |
| 487 | } | 491 | } |
| 488 | 492 | ||
| @@ -490,7 +494,8 @@ restart: | |||
| 490 | strcpy(b_ptr->name, name); | 494 | strcpy(b_ptr->name, name); |
| 491 | res = m_ptr->enable_bearer(b_ptr); | 495 | res = m_ptr->enable_bearer(b_ptr); |
| 492 | if (res) { | 496 | if (res) { |
| 493 | warn("Bearer <%s> rejected, enable failure (%d)\n", name, -res); | 497 | pr_warn("Bearer <%s> rejected, enable failure (%d)\n", |
| 498 | name, -res); | ||
| 494 | goto exit; | 499 | goto exit; |
| 495 | } | 500 | } |
| 496 | 501 | ||
| @@ -508,20 +513,20 @@ restart: | |||
| 508 | res = tipc_disc_create(b_ptr, &m_ptr->bcast_addr, disc_domain); | 513 | res = tipc_disc_create(b_ptr, &m_ptr->bcast_addr, disc_domain); |
| 509 | if (res) { | 514 | if (res) { |
| 510 | bearer_disable(b_ptr); | 515 | bearer_disable(b_ptr); |
| 511 | warn("Bearer <%s> rejected, discovery object creation failed\n", | 516 | pr_warn("Bearer <%s> rejected, discovery object creation failed\n", |
| 512 | name); | 517 | name); |
| 513 | goto exit; | 518 | goto exit; |
| 514 | } | 519 | } |
| 515 | info("Enabled bearer <%s>, discovery domain %s, priority %u\n", | 520 | pr_info("Enabled bearer <%s>, discovery domain %s, priority %u\n", |
| 516 | name, tipc_addr_string_fill(addr_string, disc_domain), priority); | 521 | name, |
| 522 | tipc_addr_string_fill(addr_string, disc_domain), priority); | ||
| 517 | exit: | 523 | exit: |
| 518 | write_unlock_bh(&tipc_net_lock); | 524 | write_unlock_bh(&tipc_net_lock); |
| 519 | return res; | 525 | return res; |
| 520 | } | 526 | } |
| 521 | 527 | ||
| 522 | /** | 528 | /** |
| 523 | * tipc_block_bearer(): Block the bearer with the given name, | 529 | * tipc_block_bearer - Block the bearer with the given name, and reset all its links |
| 524 | * and reset all its links | ||
| 525 | */ | 530 | */ |
| 526 | int tipc_block_bearer(const char *name) | 531 | int tipc_block_bearer(const char *name) |
| 527 | { | 532 | { |
| @@ -532,12 +537,12 @@ int tipc_block_bearer(const char *name) | |||
| 532 | read_lock_bh(&tipc_net_lock); | 537 | read_lock_bh(&tipc_net_lock); |
| 533 | b_ptr = tipc_bearer_find(name); | 538 | b_ptr = tipc_bearer_find(name); |
| 534 | if (!b_ptr) { | 539 | if (!b_ptr) { |
| 535 | warn("Attempt to block unknown bearer <%s>\n", name); | 540 | pr_warn("Attempt to block unknown bearer <%s>\n", name); |
| 536 | read_unlock_bh(&tipc_net_lock); | 541 | read_unlock_bh(&tipc_net_lock); |
| 537 | return -EINVAL; | 542 | return -EINVAL; |
| 538 | } | 543 | } |
| 539 | 544 | ||
| 540 | info("Blocking bearer <%s>\n", name); | 545 | pr_info("Blocking bearer <%s>\n", name); |
| 541 | spin_lock_bh(&b_ptr->lock); | 546 | spin_lock_bh(&b_ptr->lock); |
| 542 | b_ptr->blocked = 1; | 547 | b_ptr->blocked = 1; |
| 543 | list_splice_init(&b_ptr->cong_links, &b_ptr->links); | 548 | list_splice_init(&b_ptr->cong_links, &b_ptr->links); |
| @@ -563,7 +568,7 @@ static void bearer_disable(struct tipc_bearer *b_ptr) | |||
| 563 | struct tipc_link *l_ptr; | 568 | struct tipc_link *l_ptr; |
| 564 | struct tipc_link *temp_l_ptr; | 569 | struct tipc_link *temp_l_ptr; |
| 565 | 570 | ||
| 566 | info("Disabling bearer <%s>\n", b_ptr->name); | 571 | pr_info("Disabling bearer <%s>\n", b_ptr->name); |
| 567 | spin_lock_bh(&b_ptr->lock); | 572 | spin_lock_bh(&b_ptr->lock); |
| 568 | b_ptr->blocked = 1; | 573 | b_ptr->blocked = 1; |
| 569 | b_ptr->media->disable_bearer(b_ptr); | 574 | b_ptr->media->disable_bearer(b_ptr); |
| @@ -585,7 +590,7 @@ int tipc_disable_bearer(const char *name) | |||
| 585 | write_lock_bh(&tipc_net_lock); | 590 | write_lock_bh(&tipc_net_lock); |
| 586 | b_ptr = tipc_bearer_find(name); | 591 | b_ptr = tipc_bearer_find(name); |
| 587 | if (b_ptr == NULL) { | 592 | if (b_ptr == NULL) { |
| 588 | warn("Attempt to disable unknown bearer <%s>\n", name); | 593 | pr_warn("Attempt to disable unknown bearer <%s>\n", name); |
| 589 | res = -EINVAL; | 594 | res = -EINVAL; |
| 590 | } else { | 595 | } else { |
| 591 | bearer_disable(b_ptr); | 596 | bearer_disable(b_ptr); |
diff --git a/net/tipc/bearer.h b/net/tipc/bearer.h index e3b2be37fb31..dd4c2abf08e7 100644 --- a/net/tipc/bearer.h +++ b/net/tipc/bearer.h | |||
| @@ -57,7 +57,7 @@ | |||
| 57 | */ | 57 | */ |
| 58 | #define TIPC_MEDIA_TYPE_ETH 1 | 58 | #define TIPC_MEDIA_TYPE_ETH 1 |
| 59 | 59 | ||
| 60 | /* | 60 | /** |
| 61 | * struct tipc_media_addr - destination address used by TIPC bearers | 61 | * struct tipc_media_addr - destination address used by TIPC bearers |
| 62 | * @value: address info (format defined by media) | 62 | * @value: address info (format defined by media) |
| 63 | * @media_id: TIPC media type identifier | 63 | * @media_id: TIPC media type identifier |
| @@ -179,7 +179,7 @@ void tipc_eth_media_stop(void); | |||
| 179 | 179 | ||
| 180 | int tipc_media_set_priority(const char *name, u32 new_value); | 180 | int tipc_media_set_priority(const char *name, u32 new_value); |
| 181 | int tipc_media_set_window(const char *name, u32 new_value); | 181 | int tipc_media_set_window(const char *name, u32 new_value); |
| 182 | void tipc_media_addr_printf(struct print_buf *pb, struct tipc_media_addr *a); | 182 | void tipc_media_addr_printf(char *buf, int len, struct tipc_media_addr *a); |
| 183 | struct sk_buff *tipc_media_get_names(void); | 183 | struct sk_buff *tipc_media_get_names(void); |
| 184 | 184 | ||
| 185 | struct sk_buff *tipc_bearer_get_names(void); | 185 | struct sk_buff *tipc_bearer_get_names(void); |
diff --git a/net/tipc/config.c b/net/tipc/config.c index c5712a343810..a056a3852f71 100644 --- a/net/tipc/config.c +++ b/net/tipc/config.c | |||
| @@ -39,6 +39,8 @@ | |||
| 39 | #include "name_table.h" | 39 | #include "name_table.h" |
| 40 | #include "config.h" | 40 | #include "config.h" |
| 41 | 41 | ||
| 42 | #define REPLY_TRUNCATED "<truncated>\n" | ||
| 43 | |||
| 42 | static u32 config_port_ref; | 44 | static u32 config_port_ref; |
| 43 | 45 | ||
| 44 | static DEFINE_SPINLOCK(config_lock); | 46 | static DEFINE_SPINLOCK(config_lock); |
| @@ -104,13 +106,12 @@ struct sk_buff *tipc_cfg_reply_string_type(u16 tlv_type, char *string) | |||
| 104 | return buf; | 106 | return buf; |
| 105 | } | 107 | } |
| 106 | 108 | ||
| 107 | #define MAX_STATS_INFO 2000 | ||
| 108 | |||
| 109 | static struct sk_buff *tipc_show_stats(void) | 109 | static struct sk_buff *tipc_show_stats(void) |
| 110 | { | 110 | { |
| 111 | struct sk_buff *buf; | 111 | struct sk_buff *buf; |
| 112 | struct tlv_desc *rep_tlv; | 112 | struct tlv_desc *rep_tlv; |
| 113 | struct print_buf pb; | 113 | char *pb; |
| 114 | int pb_len; | ||
| 114 | int str_len; | 115 | int str_len; |
| 115 | u32 value; | 116 | u32 value; |
| 116 | 117 | ||
| @@ -121,17 +122,16 @@ static struct sk_buff *tipc_show_stats(void) | |||
| 121 | if (value != 0) | 122 | if (value != 0) |
| 122 | return tipc_cfg_reply_error_string("unsupported argument"); | 123 | return tipc_cfg_reply_error_string("unsupported argument"); |
| 123 | 124 | ||
| 124 | buf = tipc_cfg_reply_alloc(TLV_SPACE(MAX_STATS_INFO)); | 125 | buf = tipc_cfg_reply_alloc(TLV_SPACE(ULTRA_STRING_MAX_LEN)); |
| 125 | if (buf == NULL) | 126 | if (buf == NULL) |
| 126 | return NULL; | 127 | return NULL; |
| 127 | 128 | ||
| 128 | rep_tlv = (struct tlv_desc *)buf->data; | 129 | rep_tlv = (struct tlv_desc *)buf->data; |
| 129 | tipc_printbuf_init(&pb, (char *)TLV_DATA(rep_tlv), MAX_STATS_INFO); | 130 | pb = TLV_DATA(rep_tlv); |
| 130 | 131 | pb_len = ULTRA_STRING_MAX_LEN; | |
| 131 | tipc_printf(&pb, "TIPC version " TIPC_MOD_VER "\n"); | ||
| 132 | 132 | ||
| 133 | /* Use additional tipc_printf()'s to return more info ... */ | 133 | str_len = tipc_snprintf(pb, pb_len, "TIPC version " TIPC_MOD_VER "\n"); |
| 134 | str_len = tipc_printbuf_validate(&pb); | 134 | str_len += 1; /* for "\0" */ |
| 135 | skb_put(buf, TLV_SPACE(str_len)); | 135 | skb_put(buf, TLV_SPACE(str_len)); |
| 136 | TLV_SET(rep_tlv, TIPC_TLV_ULTRA_STRING, NULL, str_len); | 136 | TLV_SET(rep_tlv, TIPC_TLV_ULTRA_STRING, NULL, str_len); |
| 137 | 137 | ||
| @@ -334,12 +334,6 @@ struct sk_buff *tipc_cfg_do_cmd(u32 orig_node, u16 cmd, const void *request_area | |||
| 334 | case TIPC_CMD_SHOW_PORTS: | 334 | case TIPC_CMD_SHOW_PORTS: |
| 335 | rep_tlv_buf = tipc_port_get_ports(); | 335 | rep_tlv_buf = tipc_port_get_ports(); |
| 336 | break; | 336 | break; |
| 337 | case TIPC_CMD_SET_LOG_SIZE: | ||
| 338 | rep_tlv_buf = tipc_log_resize_cmd(req_tlv_area, req_tlv_space); | ||
| 339 | break; | ||
| 340 | case TIPC_CMD_DUMP_LOG: | ||
| 341 | rep_tlv_buf = tipc_log_dump(); | ||
| 342 | break; | ||
| 343 | case TIPC_CMD_SHOW_STATS: | 337 | case TIPC_CMD_SHOW_STATS: |
| 344 | rep_tlv_buf = tipc_show_stats(); | 338 | rep_tlv_buf = tipc_show_stats(); |
| 345 | break; | 339 | break; |
| @@ -399,6 +393,8 @@ struct sk_buff *tipc_cfg_do_cmd(u32 orig_node, u16 cmd, const void *request_area | |||
| 399 | case TIPC_CMD_GET_MAX_CLUSTERS: | 393 | case TIPC_CMD_GET_MAX_CLUSTERS: |
| 400 | case TIPC_CMD_SET_MAX_NODES: | 394 | case TIPC_CMD_SET_MAX_NODES: |
| 401 | case TIPC_CMD_GET_MAX_NODES: | 395 | case TIPC_CMD_GET_MAX_NODES: |
| 396 | case TIPC_CMD_SET_LOG_SIZE: | ||
| 397 | case TIPC_CMD_DUMP_LOG: | ||
| 402 | rep_tlv_buf = tipc_cfg_reply_error_string(TIPC_CFG_NOT_SUPPORTED | 398 | rep_tlv_buf = tipc_cfg_reply_error_string(TIPC_CFG_NOT_SUPPORTED |
| 403 | " (obsolete command)"); | 399 | " (obsolete command)"); |
| 404 | break; | 400 | break; |
| @@ -408,6 +404,15 @@ struct sk_buff *tipc_cfg_do_cmd(u32 orig_node, u16 cmd, const void *request_area | |||
| 408 | break; | 404 | break; |
| 409 | } | 405 | } |
| 410 | 406 | ||
| 407 | WARN_ON(rep_tlv_buf->len > TLV_SPACE(ULTRA_STRING_MAX_LEN)); | ||
| 408 | |||
| 409 | /* Append an error message if we cannot return all requested data */ | ||
| 410 | if (rep_tlv_buf->len == TLV_SPACE(ULTRA_STRING_MAX_LEN)) { | ||
| 411 | if (*(rep_tlv_buf->data + ULTRA_STRING_MAX_LEN) != '\0') | ||
| 412 | sprintf(rep_tlv_buf->data + rep_tlv_buf->len - | ||
| 413 | sizeof(REPLY_TRUNCATED) - 1, REPLY_TRUNCATED); | ||
| 414 | } | ||
| 415 | |||
| 411 | /* Return reply buffer */ | 416 | /* Return reply buffer */ |
| 412 | exit: | 417 | exit: |
| 413 | spin_unlock_bh(&config_lock); | 418 | spin_unlock_bh(&config_lock); |
| @@ -432,7 +437,7 @@ static void cfg_named_msg_event(void *userdata, | |||
| 432 | if ((size < sizeof(*req_hdr)) || | 437 | if ((size < sizeof(*req_hdr)) || |
| 433 | (size != TCM_ALIGN(ntohl(req_hdr->tcm_len))) || | 438 | (size != TCM_ALIGN(ntohl(req_hdr->tcm_len))) || |
| 434 | (ntohs(req_hdr->tcm_flags) != TCM_F_REQUEST)) { | 439 | (ntohs(req_hdr->tcm_flags) != TCM_F_REQUEST)) { |
| 435 | warn("Invalid configuration message discarded\n"); | 440 | pr_warn("Invalid configuration message discarded\n"); |
| 436 | return; | 441 | return; |
| 437 | } | 442 | } |
| 438 | 443 | ||
| @@ -478,7 +483,7 @@ int tipc_cfg_init(void) | |||
| 478 | return 0; | 483 | return 0; |
| 479 | 484 | ||
| 480 | failed: | 485 | failed: |
| 481 | err("Unable to create configuration service\n"); | 486 | pr_err("Unable to create configuration service\n"); |
| 482 | return res; | 487 | return res; |
| 483 | } | 488 | } |
| 484 | 489 | ||
| @@ -494,7 +499,7 @@ void tipc_cfg_reinit(void) | |||
| 494 | seq.lower = seq.upper = tipc_own_addr; | 499 | seq.lower = seq.upper = tipc_own_addr; |
| 495 | res = tipc_publish(config_port_ref, TIPC_ZONE_SCOPE, &seq); | 500 | res = tipc_publish(config_port_ref, TIPC_ZONE_SCOPE, &seq); |
| 496 | if (res) | 501 | if (res) |
| 497 | err("Unable to reinitialize configuration service\n"); | 502 | pr_err("Unable to reinitialize configuration service\n"); |
| 498 | } | 503 | } |
| 499 | 504 | ||
| 500 | void tipc_cfg_stop(void) | 505 | void tipc_cfg_stop(void) |
diff --git a/net/tipc/core.c b/net/tipc/core.c index f7b95239ebda..6586eac6a50e 100644 --- a/net/tipc/core.c +++ b/net/tipc/core.c | |||
| @@ -34,22 +34,18 @@ | |||
| 34 | * POSSIBILITY OF SUCH DAMAGE. | 34 | * POSSIBILITY OF SUCH DAMAGE. |
| 35 | */ | 35 | */ |
| 36 | 36 | ||
| 37 | #include <linux/module.h> | ||
| 38 | |||
| 39 | #include "core.h" | 37 | #include "core.h" |
| 40 | #include "ref.h" | 38 | #include "ref.h" |
| 41 | #include "name_table.h" | 39 | #include "name_table.h" |
| 42 | #include "subscr.h" | 40 | #include "subscr.h" |
| 43 | #include "config.h" | 41 | #include "config.h" |
| 44 | 42 | ||
| 43 | #include <linux/module.h> | ||
| 45 | 44 | ||
| 46 | #ifndef CONFIG_TIPC_PORTS | 45 | #ifndef CONFIG_TIPC_PORTS |
| 47 | #define CONFIG_TIPC_PORTS 8191 | 46 | #define CONFIG_TIPC_PORTS 8191 |
| 48 | #endif | 47 | #endif |
| 49 | 48 | ||
| 50 | #ifndef CONFIG_TIPC_LOG | ||
| 51 | #define CONFIG_TIPC_LOG 0 | ||
| 52 | #endif | ||
| 53 | 49 | ||
| 54 | /* global variables used by multiple sub-systems within TIPC */ | 50 | /* global variables used by multiple sub-systems within TIPC */ |
| 55 | int tipc_random; | 51 | int tipc_random; |
| @@ -125,7 +121,6 @@ static void tipc_core_stop(void) | |||
| 125 | tipc_nametbl_stop(); | 121 | tipc_nametbl_stop(); |
| 126 | tipc_ref_table_stop(); | 122 | tipc_ref_table_stop(); |
| 127 | tipc_socket_stop(); | 123 | tipc_socket_stop(); |
| 128 | tipc_log_resize(0); | ||
| 129 | } | 124 | } |
| 130 | 125 | ||
| 131 | /** | 126 | /** |
| @@ -161,10 +156,7 @@ static int __init tipc_init(void) | |||
| 161 | { | 156 | { |
| 162 | int res; | 157 | int res; |
| 163 | 158 | ||
| 164 | if (tipc_log_resize(CONFIG_TIPC_LOG) != 0) | 159 | pr_info("Activated (version " TIPC_MOD_VER ")\n"); |
| 165 | warn("Unable to create log buffer\n"); | ||
| 166 | |||
| 167 | info("Activated (version " TIPC_MOD_VER ")\n"); | ||
| 168 | 160 | ||
| 169 | tipc_own_addr = 0; | 161 | tipc_own_addr = 0; |
| 170 | tipc_remote_management = 1; | 162 | tipc_remote_management = 1; |
| @@ -175,9 +167,9 @@ static int __init tipc_init(void) | |||
| 175 | 167 | ||
| 176 | res = tipc_core_start(); | 168 | res = tipc_core_start(); |
| 177 | if (res) | 169 | if (res) |
| 178 | err("Unable to start in single node mode\n"); | 170 | pr_err("Unable to start in single node mode\n"); |
| 179 | else | 171 | else |
| 180 | info("Started in single node mode\n"); | 172 | pr_info("Started in single node mode\n"); |
| 181 | return res; | 173 | return res; |
| 182 | } | 174 | } |
| 183 | 175 | ||
| @@ -185,7 +177,7 @@ static void __exit tipc_exit(void) | |||
| 185 | { | 177 | { |
| 186 | tipc_core_stop_net(); | 178 | tipc_core_stop_net(); |
| 187 | tipc_core_stop(); | 179 | tipc_core_stop(); |
| 188 | info("Deactivated\n"); | 180 | pr_info("Deactivated\n"); |
| 189 | } | 181 | } |
| 190 | 182 | ||
| 191 | module_init(tipc_init); | 183 | module_init(tipc_init); |
diff --git a/net/tipc/core.h b/net/tipc/core.h index 2a9bb99537b3..fd42e106c185 100644 --- a/net/tipc/core.h +++ b/net/tipc/core.h | |||
| @@ -37,6 +37,8 @@ | |||
| 37 | #ifndef _TIPC_CORE_H | 37 | #ifndef _TIPC_CORE_H |
| 38 | #define _TIPC_CORE_H | 38 | #define _TIPC_CORE_H |
| 39 | 39 | ||
| 40 | #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt | ||
| 41 | |||
| 40 | #include <linux/tipc.h> | 42 | #include <linux/tipc.h> |
| 41 | #include <linux/tipc_config.h> | 43 | #include <linux/tipc_config.h> |
| 42 | #include <linux/types.h> | 44 | #include <linux/types.h> |
| @@ -58,68 +60,11 @@ | |||
| 58 | 60 | ||
| 59 | #define TIPC_MOD_VER "2.0.0" | 61 | #define TIPC_MOD_VER "2.0.0" |
| 60 | 62 | ||
| 61 | struct tipc_msg; /* msg.h */ | 63 | #define ULTRA_STRING_MAX_LEN 32768 |
| 62 | struct print_buf; /* log.h */ | ||
| 63 | |||
| 64 | /* | ||
| 65 | * TIPC system monitoring code | ||
| 66 | */ | ||
| 67 | |||
| 68 | /* | ||
| 69 | * TIPC's print buffer subsystem supports the following print buffers: | ||
| 70 | * | ||
| 71 | * TIPC_NULL : null buffer (i.e. print nowhere) | ||
| 72 | * TIPC_CONS : system console | ||
| 73 | * TIPC_LOG : TIPC log buffer | ||
| 74 | * &buf : user-defined buffer (struct print_buf *) | ||
| 75 | * | ||
| 76 | * Note: TIPC_LOG is configured to echo its output to the system console; | ||
| 77 | * user-defined buffers can be configured to do the same thing. | ||
| 78 | */ | ||
| 79 | extern struct print_buf *const TIPC_NULL; | ||
| 80 | extern struct print_buf *const TIPC_CONS; | ||
| 81 | extern struct print_buf *const TIPC_LOG; | ||
| 82 | |||
| 83 | void tipc_printf(struct print_buf *, const char *fmt, ...); | ||
| 84 | |||
| 85 | /* | ||
| 86 | * TIPC_OUTPUT is the destination print buffer for system messages. | ||
| 87 | */ | ||
| 88 | #ifndef TIPC_OUTPUT | ||
| 89 | #define TIPC_OUTPUT TIPC_LOG | ||
| 90 | #endif | ||
| 91 | 64 | ||
| 92 | #define err(fmt, arg...) tipc_printf(TIPC_OUTPUT, \ | 65 | struct tipc_msg; /* msg.h */ |
| 93 | KERN_ERR "TIPC: " fmt, ## arg) | ||
| 94 | #define warn(fmt, arg...) tipc_printf(TIPC_OUTPUT, \ | ||
| 95 | KERN_WARNING "TIPC: " fmt, ## arg) | ||
| 96 | #define info(fmt, arg...) tipc_printf(TIPC_OUTPUT, \ | ||
| 97 | KERN_NOTICE "TIPC: " fmt, ## arg) | ||
| 98 | |||
| 99 | #ifdef CONFIG_TIPC_DEBUG | ||
| 100 | |||
| 101 | /* | ||
| 102 | * DBG_OUTPUT is the destination print buffer for debug messages. | ||
| 103 | */ | ||
| 104 | #ifndef DBG_OUTPUT | ||
| 105 | #define DBG_OUTPUT TIPC_LOG | ||
| 106 | #endif | ||
| 107 | |||
| 108 | #define dbg(fmt, arg...) tipc_printf(DBG_OUTPUT, KERN_DEBUG fmt, ## arg); | ||
| 109 | |||
| 110 | #define msg_dbg(msg, txt) tipc_msg_dbg(DBG_OUTPUT, msg, txt); | ||
| 111 | |||
| 112 | void tipc_msg_dbg(struct print_buf *, struct tipc_msg *, const char *); | ||
| 113 | |||
| 114 | #else | ||
| 115 | |||
| 116 | #define dbg(fmt, arg...) do {} while (0) | ||
| 117 | #define msg_dbg(msg, txt) do {} while (0) | ||
| 118 | |||
| 119 | #define tipc_msg_dbg(buf, msg, txt) do {} while (0) | ||
| 120 | |||
| 121 | #endif | ||
| 122 | 66 | ||
| 67 | int tipc_snprintf(char *buf, int len, const char *fmt, ...); | ||
| 123 | 68 | ||
| 124 | /* | 69 | /* |
| 125 | * TIPC-specific error codes | 70 | * TIPC-specific error codes |
diff --git a/net/tipc/discover.c b/net/tipc/discover.c index ae054cfe179f..50eaa403eb6e 100644 --- a/net/tipc/discover.c +++ b/net/tipc/discover.c | |||
| @@ -100,14 +100,12 @@ static void disc_dupl_alert(struct tipc_bearer *b_ptr, u32 node_addr, | |||
| 100 | { | 100 | { |
| 101 | char node_addr_str[16]; | 101 | char node_addr_str[16]; |
| 102 | char media_addr_str[64]; | 102 | char media_addr_str[64]; |
| 103 | struct print_buf pb; | ||
| 104 | 103 | ||
| 105 | tipc_addr_string_fill(node_addr_str, node_addr); | 104 | tipc_addr_string_fill(node_addr_str, node_addr); |
| 106 | tipc_printbuf_init(&pb, media_addr_str, sizeof(media_addr_str)); | 105 | tipc_media_addr_printf(media_addr_str, sizeof(media_addr_str), |
| 107 | tipc_media_addr_printf(&pb, media_addr); | 106 | media_addr); |
| 108 | tipc_printbuf_validate(&pb); | 107 | pr_warn("Duplicate %s using %s seen on <%s>\n", node_addr_str, |
| 109 | warn("Duplicate %s using %s seen on <%s>\n", | 108 | media_addr_str, b_ptr->name); |
| 110 | node_addr_str, media_addr_str, b_ptr->name); | ||
| 111 | } | 109 | } |
| 112 | 110 | ||
| 113 | /** | 111 | /** |
diff --git a/net/tipc/handler.c b/net/tipc/handler.c index 9c6f22ff1c6d..7a52d3922f3c 100644 --- a/net/tipc/handler.c +++ b/net/tipc/handler.c | |||
| @@ -57,14 +57,14 @@ unsigned int tipc_k_signal(Handler routine, unsigned long argument) | |||
| 57 | struct queue_item *item; | 57 | struct queue_item *item; |
| 58 | 58 | ||
| 59 | if (!handler_enabled) { | 59 | if (!handler_enabled) { |
| 60 | err("Signal request ignored by handler\n"); | 60 | pr_err("Signal request ignored by handler\n"); |
| 61 | return -ENOPROTOOPT; | 61 | return -ENOPROTOOPT; |
| 62 | } | 62 | } |
| 63 | 63 | ||
| 64 | spin_lock_bh(&qitem_lock); | 64 | spin_lock_bh(&qitem_lock); |
| 65 | item = kmem_cache_alloc(tipc_queue_item_cache, GFP_ATOMIC); | 65 | item = kmem_cache_alloc(tipc_queue_item_cache, GFP_ATOMIC); |
| 66 | if (!item) { | 66 | if (!item) { |
| 67 | err("Signal queue out of memory\n"); | 67 | pr_err("Signal queue out of memory\n"); |
| 68 | spin_unlock_bh(&qitem_lock); | 68 | spin_unlock_bh(&qitem_lock); |
| 69 | return -ENOMEM; | 69 | return -ENOMEM; |
| 70 | } | 70 | } |
diff --git a/net/tipc/link.c b/net/tipc/link.c index 7a614f43549d..1c1e6151875e 100644 --- a/net/tipc/link.c +++ b/net/tipc/link.c | |||
| @@ -41,6 +41,12 @@ | |||
| 41 | #include "discover.h" | 41 | #include "discover.h" |
| 42 | #include "config.h" | 42 | #include "config.h" |
| 43 | 43 | ||
| 44 | /* | ||
| 45 | * Error message prefixes | ||
| 46 | */ | ||
| 47 | static const char *link_co_err = "Link changeover error, "; | ||
| 48 | static const char *link_rst_msg = "Resetting link "; | ||
| 49 | static const char *link_unk_evt = "Unknown link event "; | ||
| 44 | 50 | ||
| 45 | /* | 51 | /* |
| 46 | * Out-of-range value for link session numbers | 52 | * Out-of-range value for link session numbers |
| @@ -153,8 +159,8 @@ int tipc_link_is_active(struct tipc_link *l_ptr) | |||
| 153 | 159 | ||
| 154 | /** | 160 | /** |
| 155 | * link_name_validate - validate & (optionally) deconstruct tipc_link name | 161 | * link_name_validate - validate & (optionally) deconstruct tipc_link name |
| 156 | * @name - ptr to link name string | 162 | * @name: ptr to link name string |
| 157 | * @name_parts - ptr to area for link name components (or NULL if not needed) | 163 | * @name_parts: ptr to area for link name components (or NULL if not needed) |
| 158 | * | 164 | * |
| 159 | * Returns 1 if link name is valid, otherwise 0. | 165 | * Returns 1 if link name is valid, otherwise 0. |
| 160 | */ | 166 | */ |
| @@ -300,20 +306,20 @@ struct tipc_link *tipc_link_create(struct tipc_node *n_ptr, | |||
| 300 | 306 | ||
| 301 | if (n_ptr->link_cnt >= 2) { | 307 | if (n_ptr->link_cnt >= 2) { |
| 302 | tipc_addr_string_fill(addr_string, n_ptr->addr); | 308 | tipc_addr_string_fill(addr_string, n_ptr->addr); |
| 303 | err("Attempt to establish third link to %s\n", addr_string); | 309 | pr_err("Attempt to establish third link to %s\n", addr_string); |
| 304 | return NULL; | 310 | return NULL; |
| 305 | } | 311 | } |
| 306 | 312 | ||
| 307 | if (n_ptr->links[b_ptr->identity]) { | 313 | if (n_ptr->links[b_ptr->identity]) { |
| 308 | tipc_addr_string_fill(addr_string, n_ptr->addr); | 314 | tipc_addr_string_fill(addr_string, n_ptr->addr); |
| 309 | err("Attempt to establish second link on <%s> to %s\n", | 315 | pr_err("Attempt to establish second link on <%s> to %s\n", |
| 310 | b_ptr->name, addr_string); | 316 | b_ptr->name, addr_string); |
| 311 | return NULL; | 317 | return NULL; |
| 312 | } | 318 | } |
| 313 | 319 | ||
| 314 | l_ptr = kzalloc(sizeof(*l_ptr), GFP_ATOMIC); | 320 | l_ptr = kzalloc(sizeof(*l_ptr), GFP_ATOMIC); |
| 315 | if (!l_ptr) { | 321 | if (!l_ptr) { |
| 316 | warn("Link creation failed, no memory\n"); | 322 | pr_warn("Link creation failed, no memory\n"); |
| 317 | return NULL; | 323 | return NULL; |
| 318 | } | 324 | } |
| 319 | 325 | ||
| @@ -371,7 +377,7 @@ struct tipc_link *tipc_link_create(struct tipc_node *n_ptr, | |||
| 371 | void tipc_link_delete(struct tipc_link *l_ptr) | 377 | void tipc_link_delete(struct tipc_link *l_ptr) |
| 372 | { | 378 | { |
| 373 | if (!l_ptr) { | 379 | if (!l_ptr) { |
| 374 | err("Attempt to delete non-existent link\n"); | 380 | pr_err("Attempt to delete non-existent link\n"); |
| 375 | return; | 381 | return; |
| 376 | } | 382 | } |
| 377 | 383 | ||
| @@ -632,8 +638,8 @@ static void link_state_event(struct tipc_link *l_ptr, unsigned int event) | |||
| 632 | link_set_timer(l_ptr, cont_intv / 4); | 638 | link_set_timer(l_ptr, cont_intv / 4); |
| 633 | break; | 639 | break; |
| 634 | case RESET_MSG: | 640 | case RESET_MSG: |
| 635 | info("Resetting link <%s>, requested by peer\n", | 641 | pr_info("%s<%s>, requested by peer\n", link_rst_msg, |
| 636 | l_ptr->name); | 642 | l_ptr->name); |
| 637 | tipc_link_reset(l_ptr); | 643 | tipc_link_reset(l_ptr); |
| 638 | l_ptr->state = RESET_RESET; | 644 | l_ptr->state = RESET_RESET; |
| 639 | l_ptr->fsm_msg_cnt = 0; | 645 | l_ptr->fsm_msg_cnt = 0; |
| @@ -642,7 +648,7 @@ static void link_state_event(struct tipc_link *l_ptr, unsigned int event) | |||
| 642 | link_set_timer(l_ptr, cont_intv); | 648 | link_set_timer(l_ptr, cont_intv); |
| 643 | break; | 649 | break; |
| 644 | default: | 650 | default: |
| 645 | err("Unknown link event %u in WW state\n", event); | 651 | pr_err("%s%u in WW state\n", link_unk_evt, event); |
| 646 | } | 652 | } |
| 647 | break; | 653 | break; |
| 648 | case WORKING_UNKNOWN: | 654 | case WORKING_UNKNOWN: |
| @@ -654,8 +660,8 @@ static void link_state_event(struct tipc_link *l_ptr, unsigned int event) | |||
| 654 | link_set_timer(l_ptr, cont_intv); | 660 | link_set_timer(l_ptr, cont_intv); |
| 655 | break; | 661 | break; |
| 656 | case RESET_MSG: | 662 | case RESET_MSG: |
| 657 | info("Resetting link <%s>, requested by peer " | 663 | pr_info("%s<%s>, requested by peer while probing\n", |
| 658 | "while probing\n", l_ptr->name); | 664 | link_rst_msg, l_ptr->name); |
| 659 | tipc_link_reset(l_ptr); | 665 | tipc_link_reset(l_ptr); |
| 660 | l_ptr->state = RESET_RESET; | 666 | l_ptr->state = RESET_RESET; |
| 661 | l_ptr->fsm_msg_cnt = 0; | 667 | l_ptr->fsm_msg_cnt = 0; |
| @@ -680,8 +686,8 @@ static void link_state_event(struct tipc_link *l_ptr, unsigned int event) | |||
| 680 | l_ptr->fsm_msg_cnt++; | 686 | l_ptr->fsm_msg_cnt++; |
| 681 | link_set_timer(l_ptr, cont_intv / 4); | 687 | link_set_timer(l_ptr, cont_intv / 4); |
| 682 | } else { /* Link has failed */ | 688 | } else { /* Link has failed */ |
| 683 | warn("Resetting link <%s>, peer not responding\n", | 689 | pr_warn("%s<%s>, peer not responding\n", |
| 684 | l_ptr->name); | 690 | link_rst_msg, l_ptr->name); |
| 685 | tipc_link_reset(l_ptr); | 691 | tipc_link_reset(l_ptr); |
| 686 | l_ptr->state = RESET_UNKNOWN; | 692 | l_ptr->state = RESET_UNKNOWN; |
| 687 | l_ptr->fsm_msg_cnt = 0; | 693 | l_ptr->fsm_msg_cnt = 0; |
| @@ -692,7 +698,7 @@ static void link_state_event(struct tipc_link *l_ptr, unsigned int event) | |||
| 692 | } | 698 | } |
| 693 | break; | 699 | break; |
| 694 | default: | 700 | default: |
| 695 | err("Unknown link event %u in WU state\n", event); | 701 | pr_err("%s%u in WU state\n", link_unk_evt, event); |
| 696 | } | 702 | } |
| 697 | break; | 703 | break; |
| 698 | case RESET_UNKNOWN: | 704 | case RESET_UNKNOWN: |
| @@ -726,7 +732,7 @@ static void link_state_event(struct tipc_link *l_ptr, unsigned int event) | |||
| 726 | link_set_timer(l_ptr, cont_intv); | 732 | link_set_timer(l_ptr, cont_intv); |
| 727 | break; | 733 | break; |
| 728 | default: | 734 | default: |
| 729 | err("Unknown link event %u in RU state\n", event); | 735 | pr_err("%s%u in RU state\n", link_unk_evt, event); |
| 730 | } | 736 | } |
| 731 | break; | 737 | break; |
| 732 | case RESET_RESET: | 738 | case RESET_RESET: |
| @@ -751,11 +757,11 @@ static void link_state_event(struct tipc_link *l_ptr, unsigned int event) | |||
| 751 | link_set_timer(l_ptr, cont_intv); | 757 | link_set_timer(l_ptr, cont_intv); |
| 752 | break; | 758 | break; |
| 753 | default: | 759 | default: |
| 754 | err("Unknown link event %u in RR state\n", event); | 760 | pr_err("%s%u in RR state\n", link_unk_evt, event); |
| 755 | } | 761 | } |
| 756 | break; | 762 | break; |
| 757 | default: | 763 | default: |
| 758 | err("Unknown link state %u/%u\n", l_ptr->state, event); | 764 | pr_err("Unknown link state %u/%u\n", l_ptr->state, event); |
| 759 | } | 765 | } |
| 760 | } | 766 | } |
| 761 | 767 | ||
| @@ -856,7 +862,8 @@ int tipc_link_send_buf(struct tipc_link *l_ptr, struct sk_buff *buf) | |||
| 856 | } | 862 | } |
| 857 | kfree_skb(buf); | 863 | kfree_skb(buf); |
| 858 | if (imp > CONN_MANAGER) { | 864 | if (imp > CONN_MANAGER) { |
| 859 | warn("Resetting link <%s>, send queue full", l_ptr->name); | 865 | pr_warn("%s<%s>, send queue full", link_rst_msg, |
| 866 | l_ptr->name); | ||
| 860 | tipc_link_reset(l_ptr); | 867 | tipc_link_reset(l_ptr); |
| 861 | } | 868 | } |
| 862 | return dsz; | 869 | return dsz; |
| @@ -944,7 +951,7 @@ int tipc_link_send(struct sk_buff *buf, u32 dest, u32 selector) | |||
| 944 | return res; | 951 | return res; |
| 945 | } | 952 | } |
| 946 | 953 | ||
| 947 | /* | 954 | /** |
| 948 | * tipc_link_send_names - send name table entries to new neighbor | 955 | * tipc_link_send_names - send name table entries to new neighbor |
| 949 | * | 956 | * |
| 950 | * Send routine for bulk delivery of name table messages when contact | 957 | * Send routine for bulk delivery of name table messages when contact |
| @@ -1409,8 +1416,8 @@ static void link_reset_all(unsigned long addr) | |||
| 1409 | 1416 | ||
| 1410 | tipc_node_lock(n_ptr); | 1417 | tipc_node_lock(n_ptr); |
| 1411 | 1418 | ||
| 1412 | warn("Resetting all links to %s\n", | 1419 | pr_warn("Resetting all links to %s\n", |
| 1413 | tipc_addr_string_fill(addr_string, n_ptr->addr)); | 1420 | tipc_addr_string_fill(addr_string, n_ptr->addr)); |
| 1414 | 1421 | ||
| 1415 | for (i = 0; i < MAX_BEARERS; i++) { | 1422 | for (i = 0; i < MAX_BEARERS; i++) { |
| 1416 | if (n_ptr->links[i]) { | 1423 | if (n_ptr->links[i]) { |
| @@ -1428,7 +1435,7 @@ static void link_retransmit_failure(struct tipc_link *l_ptr, | |||
| 1428 | { | 1435 | { |
| 1429 | struct tipc_msg *msg = buf_msg(buf); | 1436 | struct tipc_msg *msg = buf_msg(buf); |
| 1430 | 1437 | ||
| 1431 | warn("Retransmission failure on link <%s>\n", l_ptr->name); | 1438 | pr_warn("Retransmission failure on link <%s>\n", l_ptr->name); |
| 1432 | 1439 | ||
| 1433 | if (l_ptr->addr) { | 1440 | if (l_ptr->addr) { |
| 1434 | /* Handle failure on standard link */ | 1441 | /* Handle failure on standard link */ |
| @@ -1440,21 +1447,23 @@ static void link_retransmit_failure(struct tipc_link *l_ptr, | |||
| 1440 | struct tipc_node *n_ptr; | 1447 | struct tipc_node *n_ptr; |
| 1441 | char addr_string[16]; | 1448 | char addr_string[16]; |
| 1442 | 1449 | ||
| 1443 | info("Msg seq number: %u, ", msg_seqno(msg)); | 1450 | pr_info("Msg seq number: %u, ", msg_seqno(msg)); |
| 1444 | info("Outstanding acks: %lu\n", | 1451 | pr_cont("Outstanding acks: %lu\n", |
| 1445 | (unsigned long) TIPC_SKB_CB(buf)->handle); | 1452 | (unsigned long) TIPC_SKB_CB(buf)->handle); |
| 1446 | 1453 | ||
| 1447 | n_ptr = tipc_bclink_retransmit_to(); | 1454 | n_ptr = tipc_bclink_retransmit_to(); |
| 1448 | tipc_node_lock(n_ptr); | 1455 | tipc_node_lock(n_ptr); |
| 1449 | 1456 | ||
| 1450 | tipc_addr_string_fill(addr_string, n_ptr->addr); | 1457 | tipc_addr_string_fill(addr_string, n_ptr->addr); |
| 1451 | info("Broadcast link info for %s\n", addr_string); | 1458 | pr_info("Broadcast link info for %s\n", addr_string); |
| 1452 | info("Supportable: %d, ", n_ptr->bclink.supportable); | 1459 | pr_info("Supportable: %d, Supported: %d, Acked: %u\n", |
| 1453 | info("Supported: %d, ", n_ptr->bclink.supported); | 1460 | n_ptr->bclink.supportable, |
| 1454 | info("Acked: %u\n", n_ptr->bclink.acked); | 1461 | n_ptr->bclink.supported, |
| 1455 | info("Last in: %u, ", n_ptr->bclink.last_in); | 1462 | n_ptr->bclink.acked); |
| 1456 | info("Oos state: %u, ", n_ptr->bclink.oos_state); | 1463 | pr_info("Last in: %u, Oos state: %u, Last sent: %u\n", |
| 1457 | info("Last sent: %u\n", n_ptr->bclink.last_sent); | 1464 | n_ptr->bclink.last_in, |
| 1465 | n_ptr->bclink.oos_state, | ||
| 1466 | n_ptr->bclink.last_sent); | ||
| 1458 | 1467 | ||
| 1459 | tipc_k_signal((Handler)link_reset_all, (unsigned long)n_ptr->addr); | 1468 | tipc_k_signal((Handler)link_reset_all, (unsigned long)n_ptr->addr); |
| 1460 | 1469 | ||
| @@ -1479,8 +1488,8 @@ void tipc_link_retransmit(struct tipc_link *l_ptr, struct sk_buff *buf, | |||
| 1479 | l_ptr->retransm_queue_head = msg_seqno(msg); | 1488 | l_ptr->retransm_queue_head = msg_seqno(msg); |
| 1480 | l_ptr->retransm_queue_size = retransmits; | 1489 | l_ptr->retransm_queue_size = retransmits; |
| 1481 | } else { | 1490 | } else { |
| 1482 | err("Unexpected retransmit on link %s (qsize=%d)\n", | 1491 | pr_err("Unexpected retransmit on link %s (qsize=%d)\n", |
| 1483 | l_ptr->name, l_ptr->retransm_queue_size); | 1492 | l_ptr->name, l_ptr->retransm_queue_size); |
| 1484 | } | 1493 | } |
| 1485 | return; | 1494 | return; |
| 1486 | } else { | 1495 | } else { |
| @@ -1787,7 +1796,7 @@ cont: | |||
| 1787 | read_unlock_bh(&tipc_net_lock); | 1796 | read_unlock_bh(&tipc_net_lock); |
| 1788 | } | 1797 | } |
| 1789 | 1798 | ||
| 1790 | /* | 1799 | /** |
| 1791 | * tipc_link_defer_pkt - Add out-of-sequence message to deferred reception queue | 1800 | * tipc_link_defer_pkt - Add out-of-sequence message to deferred reception queue |
| 1792 | * | 1801 | * |
| 1793 | * Returns increase in queue length (i.e. 0 or 1) | 1802 | * Returns increase in queue length (i.e. 0 or 1) |
| @@ -2074,8 +2083,9 @@ static void link_recv_proto_msg(struct tipc_link *l_ptr, struct sk_buff *buf) | |||
| 2074 | 2083 | ||
| 2075 | if (msg_linkprio(msg) && | 2084 | if (msg_linkprio(msg) && |
| 2076 | (msg_linkprio(msg) != l_ptr->priority)) { | 2085 | (msg_linkprio(msg) != l_ptr->priority)) { |
| 2077 | warn("Resetting link <%s>, priority change %u->%u\n", | 2086 | pr_warn("%s<%s>, priority change %u->%u\n", |
| 2078 | l_ptr->name, l_ptr->priority, msg_linkprio(msg)); | 2087 | link_rst_msg, l_ptr->name, l_ptr->priority, |
| 2088 | msg_linkprio(msg)); | ||
| 2079 | l_ptr->priority = msg_linkprio(msg); | 2089 | l_ptr->priority = msg_linkprio(msg); |
| 2080 | tipc_link_reset(l_ptr); /* Enforce change to take effect */ | 2090 | tipc_link_reset(l_ptr); /* Enforce change to take effect */ |
| 2081 | break; | 2091 | break; |
| @@ -2139,15 +2149,13 @@ static void tipc_link_tunnel(struct tipc_link *l_ptr, | |||
| 2139 | 2149 | ||
| 2140 | tunnel = l_ptr->owner->active_links[selector & 1]; | 2150 | tunnel = l_ptr->owner->active_links[selector & 1]; |
| 2141 | if (!tipc_link_is_up(tunnel)) { | 2151 | if (!tipc_link_is_up(tunnel)) { |
| 2142 | warn("Link changeover error, " | 2152 | pr_warn("%stunnel link no longer available\n", link_co_err); |
| 2143 | "tunnel link no longer available\n"); | ||
| 2144 | return; | 2153 | return; |
| 2145 | } | 2154 | } |
| 2146 | msg_set_size(tunnel_hdr, length + INT_H_SIZE); | 2155 | msg_set_size(tunnel_hdr, length + INT_H_SIZE); |
| 2147 | buf = tipc_buf_acquire(length + INT_H_SIZE); | 2156 | buf = tipc_buf_acquire(length + INT_H_SIZE); |
| 2148 | if (!buf) { | 2157 | if (!buf) { |
| 2149 | warn("Link changeover error, " | 2158 | pr_warn("%sunable to send tunnel msg\n", link_co_err); |
| 2150 | "unable to send tunnel msg\n"); | ||
| 2151 | return; | 2159 | return; |
| 2152 | } | 2160 | } |
| 2153 | skb_copy_to_linear_data(buf, tunnel_hdr, INT_H_SIZE); | 2161 | skb_copy_to_linear_data(buf, tunnel_hdr, INT_H_SIZE); |
| @@ -2173,8 +2181,7 @@ void tipc_link_changeover(struct tipc_link *l_ptr) | |||
| 2173 | return; | 2181 | return; |
| 2174 | 2182 | ||
| 2175 | if (!l_ptr->owner->permit_changeover) { | 2183 | if (!l_ptr->owner->permit_changeover) { |
| 2176 | warn("Link changeover error, " | 2184 | pr_warn("%speer did not permit changeover\n", link_co_err); |
| 2177 | "peer did not permit changeover\n"); | ||
| 2178 | return; | 2185 | return; |
| 2179 | } | 2186 | } |
| 2180 | 2187 | ||
| @@ -2192,8 +2199,8 @@ void tipc_link_changeover(struct tipc_link *l_ptr) | |||
| 2192 | msg_set_size(&tunnel_hdr, INT_H_SIZE); | 2199 | msg_set_size(&tunnel_hdr, INT_H_SIZE); |
| 2193 | tipc_link_send_buf(tunnel, buf); | 2200 | tipc_link_send_buf(tunnel, buf); |
| 2194 | } else { | 2201 | } else { |
| 2195 | warn("Link changeover error, " | 2202 | pr_warn("%sunable to send changeover msg\n", |
| 2196 | "unable to send changeover msg\n"); | 2203 | link_co_err); |
| 2197 | } | 2204 | } |
| 2198 | return; | 2205 | return; |
| 2199 | } | 2206 | } |
| @@ -2246,8 +2253,8 @@ void tipc_link_send_duplicate(struct tipc_link *l_ptr, struct tipc_link *tunnel) | |||
| 2246 | msg_set_size(&tunnel_hdr, length + INT_H_SIZE); | 2253 | msg_set_size(&tunnel_hdr, length + INT_H_SIZE); |
| 2247 | outbuf = tipc_buf_acquire(length + INT_H_SIZE); | 2254 | outbuf = tipc_buf_acquire(length + INT_H_SIZE); |
| 2248 | if (outbuf == NULL) { | 2255 | if (outbuf == NULL) { |
| 2249 | warn("Link changeover error, " | 2256 | pr_warn("%sunable to send duplicate msg\n", |
| 2250 | "unable to send duplicate msg\n"); | 2257 | link_co_err); |
| 2251 | return; | 2258 | return; |
| 2252 | } | 2259 | } |
| 2253 | skb_copy_to_linear_data(outbuf, &tunnel_hdr, INT_H_SIZE); | 2260 | skb_copy_to_linear_data(outbuf, &tunnel_hdr, INT_H_SIZE); |
| @@ -2298,8 +2305,8 @@ static int link_recv_changeover_msg(struct tipc_link **l_ptr, | |||
| 2298 | if (!dest_link) | 2305 | if (!dest_link) |
| 2299 | goto exit; | 2306 | goto exit; |
| 2300 | if (dest_link == *l_ptr) { | 2307 | if (dest_link == *l_ptr) { |
| 2301 | err("Unexpected changeover message on link <%s>\n", | 2308 | pr_err("Unexpected changeover message on link <%s>\n", |
| 2302 | (*l_ptr)->name); | 2309 | (*l_ptr)->name); |
| 2303 | goto exit; | 2310 | goto exit; |
| 2304 | } | 2311 | } |
| 2305 | *l_ptr = dest_link; | 2312 | *l_ptr = dest_link; |
| @@ -2310,7 +2317,7 @@ static int link_recv_changeover_msg(struct tipc_link **l_ptr, | |||
| 2310 | goto exit; | 2317 | goto exit; |
| 2311 | *buf = buf_extract(tunnel_buf, INT_H_SIZE); | 2318 | *buf = buf_extract(tunnel_buf, INT_H_SIZE); |
| 2312 | if (*buf == NULL) { | 2319 | if (*buf == NULL) { |
| 2313 | warn("Link changeover error, duplicate msg dropped\n"); | 2320 | pr_warn("%sduplicate msg dropped\n", link_co_err); |
| 2314 | goto exit; | 2321 | goto exit; |
| 2315 | } | 2322 | } |
| 2316 | kfree_skb(tunnel_buf); | 2323 | kfree_skb(tunnel_buf); |
| @@ -2319,8 +2326,8 @@ static int link_recv_changeover_msg(struct tipc_link **l_ptr, | |||
| 2319 | 2326 | ||
| 2320 | /* First original message ?: */ | 2327 | /* First original message ?: */ |
| 2321 | if (tipc_link_is_up(dest_link)) { | 2328 | if (tipc_link_is_up(dest_link)) { |
| 2322 | info("Resetting link <%s>, changeover initiated by peer\n", | 2329 | pr_info("%s<%s>, changeover initiated by peer\n", link_rst_msg, |
| 2323 | dest_link->name); | 2330 | dest_link->name); |
| 2324 | tipc_link_reset(dest_link); | 2331 | tipc_link_reset(dest_link); |
| 2325 | dest_link->exp_msg_count = msg_count; | 2332 | dest_link->exp_msg_count = msg_count; |
| 2326 | if (!msg_count) | 2333 | if (!msg_count) |
| @@ -2333,8 +2340,7 @@ static int link_recv_changeover_msg(struct tipc_link **l_ptr, | |||
| 2333 | 2340 | ||
| 2334 | /* Receive original message */ | 2341 | /* Receive original message */ |
| 2335 | if (dest_link->exp_msg_count == 0) { | 2342 | if (dest_link->exp_msg_count == 0) { |
| 2336 | warn("Link switchover error, " | 2343 | pr_warn("%sgot too many tunnelled messages\n", link_co_err); |
| 2337 | "got too many tunnelled messages\n"); | ||
| 2338 | goto exit; | 2344 | goto exit; |
| 2339 | } | 2345 | } |
| 2340 | dest_link->exp_msg_count--; | 2346 | dest_link->exp_msg_count--; |
| @@ -2346,7 +2352,7 @@ static int link_recv_changeover_msg(struct tipc_link **l_ptr, | |||
| 2346 | kfree_skb(tunnel_buf); | 2352 | kfree_skb(tunnel_buf); |
| 2347 | return 1; | 2353 | return 1; |
| 2348 | } else { | 2354 | } else { |
| 2349 | warn("Link changeover error, original msg dropped\n"); | 2355 | pr_warn("%soriginal msg dropped\n", link_co_err); |
| 2350 | } | 2356 | } |
| 2351 | } | 2357 | } |
| 2352 | exit: | 2358 | exit: |
| @@ -2367,7 +2373,7 @@ void tipc_link_recv_bundle(struct sk_buff *buf) | |||
| 2367 | while (msgcount--) { | 2373 | while (msgcount--) { |
| 2368 | obuf = buf_extract(buf, pos); | 2374 | obuf = buf_extract(buf, pos); |
| 2369 | if (obuf == NULL) { | 2375 | if (obuf == NULL) { |
| 2370 | warn("Link unable to unbundle message(s)\n"); | 2376 | pr_warn("Link unable to unbundle message(s)\n"); |
| 2371 | break; | 2377 | break; |
| 2372 | } | 2378 | } |
| 2373 | pos += align(msg_size(buf_msg(obuf))); | 2379 | pos += align(msg_size(buf_msg(obuf))); |
| @@ -2538,7 +2544,7 @@ int tipc_link_recv_fragment(struct sk_buff **pending, struct sk_buff **fb, | |||
| 2538 | set_fragm_size(pbuf, fragm_sz); | 2544 | set_fragm_size(pbuf, fragm_sz); |
| 2539 | set_expected_frags(pbuf, exp_fragm_cnt - 1); | 2545 | set_expected_frags(pbuf, exp_fragm_cnt - 1); |
| 2540 | } else { | 2546 | } else { |
| 2541 | dbg("Link unable to reassemble fragmented message\n"); | 2547 | pr_debug("Link unable to reassemble fragmented message\n"); |
| 2542 | kfree_skb(fbuf); | 2548 | kfree_skb(fbuf); |
| 2543 | return -1; | 2549 | return -1; |
| 2544 | } | 2550 | } |
| @@ -2635,8 +2641,8 @@ void tipc_link_set_queue_limits(struct tipc_link *l_ptr, u32 window) | |||
| 2635 | 2641 | ||
| 2636 | /** | 2642 | /** |
| 2637 | * link_find_link - locate link by name | 2643 | * link_find_link - locate link by name |
| 2638 | * @name - ptr to link name string | 2644 | * @name: ptr to link name string |
| 2639 | * @node - ptr to area to be filled with ptr to associated node | 2645 | * @node: ptr to area to be filled with ptr to associated node |
| 2640 | * | 2646 | * |
| 2641 | * Caller must hold 'tipc_net_lock' to ensure node and bearer are not deleted; | 2647 | * Caller must hold 'tipc_net_lock' to ensure node and bearer are not deleted; |
| 2642 | * this also prevents link deletion. | 2648 | * this also prevents link deletion. |
| @@ -2671,8 +2677,8 @@ static struct tipc_link *link_find_link(const char *name, | |||
| 2671 | /** | 2677 | /** |
| 2672 | * link_value_is_valid -- validate proposed link tolerance/priority/window | 2678 | * link_value_is_valid -- validate proposed link tolerance/priority/window |
| 2673 | * | 2679 | * |
| 2674 | * @cmd - value type (TIPC_CMD_SET_LINK_*) | 2680 | * @cmd: value type (TIPC_CMD_SET_LINK_*) |
| 2675 | * @new_value - the new value | 2681 | * @new_value: the new value |
| 2676 | * | 2682 | * |
| 2677 | * Returns 1 if value is within range, 0 if not. | 2683 | * Returns 1 if value is within range, 0 if not. |
| 2678 | */ | 2684 | */ |
| @@ -2693,9 +2699,9 @@ static int link_value_is_valid(u16 cmd, u32 new_value) | |||
| 2693 | 2699 | ||
| 2694 | /** | 2700 | /** |
| 2695 | * link_cmd_set_value - change priority/tolerance/window for link/bearer/media | 2701 | * link_cmd_set_value - change priority/tolerance/window for link/bearer/media |
| 2696 | * @name - ptr to link, bearer, or media name | 2702 | * @name: ptr to link, bearer, or media name |
| 2697 | * @new_value - new value of link, bearer, or media setting | 2703 | * @new_value: new value of link, bearer, or media setting |
| 2698 | * @cmd - which link, bearer, or media attribute to set (TIPC_CMD_SET_LINK_*) | 2704 | * @cmd: which link, bearer, or media attribute to set (TIPC_CMD_SET_LINK_*) |
| 2699 | * | 2705 | * |
| 2700 | * Caller must hold 'tipc_net_lock' to ensure link/bearer/media is not deleted. | 2706 | * Caller must hold 'tipc_net_lock' to ensure link/bearer/media is not deleted. |
| 2701 | * | 2707 | * |
| @@ -2860,112 +2866,114 @@ static u32 percent(u32 count, u32 total) | |||
| 2860 | */ | 2866 | */ |
| 2861 | static int tipc_link_stats(const char *name, char *buf, const u32 buf_size) | 2867 | static int tipc_link_stats(const char *name, char *buf, const u32 buf_size) |
| 2862 | { | 2868 | { |
| 2863 | struct print_buf pb; | 2869 | struct tipc_link *l; |
| 2864 | struct tipc_link *l_ptr; | 2870 | struct tipc_stats *s; |
| 2865 | struct tipc_node *node; | 2871 | struct tipc_node *node; |
| 2866 | char *status; | 2872 | char *status; |
| 2867 | u32 profile_total = 0; | 2873 | u32 profile_total = 0; |
| 2874 | int ret; | ||
| 2868 | 2875 | ||
| 2869 | if (!strcmp(name, tipc_bclink_name)) | 2876 | if (!strcmp(name, tipc_bclink_name)) |
| 2870 | return tipc_bclink_stats(buf, buf_size); | 2877 | return tipc_bclink_stats(buf, buf_size); |
| 2871 | 2878 | ||
| 2872 | tipc_printbuf_init(&pb, buf, buf_size); | ||
| 2873 | |||
| 2874 | read_lock_bh(&tipc_net_lock); | 2879 | read_lock_bh(&tipc_net_lock); |
| 2875 | l_ptr = link_find_link(name, &node); | 2880 | l = link_find_link(name, &node); |
| 2876 | if (!l_ptr) { | 2881 | if (!l) { |
| 2877 | read_unlock_bh(&tipc_net_lock); | 2882 | read_unlock_bh(&tipc_net_lock); |
| 2878 | return 0; | 2883 | return 0; |
| 2879 | } | 2884 | } |
| 2880 | tipc_node_lock(node); | 2885 | tipc_node_lock(node); |
| 2886 | s = &l->stats; | ||
| 2881 | 2887 | ||
| 2882 | if (tipc_link_is_active(l_ptr)) | 2888 | if (tipc_link_is_active(l)) |
| 2883 | status = "ACTIVE"; | 2889 | status = "ACTIVE"; |
| 2884 | else if (tipc_link_is_up(l_ptr)) | 2890 | else if (tipc_link_is_up(l)) |
| 2885 | status = "STANDBY"; | 2891 | status = "STANDBY"; |
| 2886 | else | 2892 | else |
| 2887 | status = "DEFUNCT"; | 2893 | status = "DEFUNCT"; |
| 2888 | tipc_printf(&pb, "Link <%s>\n" | 2894 | |
| 2889 | " %s MTU:%u Priority:%u Tolerance:%u ms" | 2895 | ret = tipc_snprintf(buf, buf_size, "Link <%s>\n" |
| 2890 | " Window:%u packets\n", | 2896 | " %s MTU:%u Priority:%u Tolerance:%u ms" |
| 2891 | l_ptr->name, status, l_ptr->max_pkt, | 2897 | " Window:%u packets\n", |
| 2892 | l_ptr->priority, l_ptr->tolerance, l_ptr->queue_limit[0]); | 2898 | l->name, status, l->max_pkt, l->priority, |
| 2893 | tipc_printf(&pb, " RX packets:%u fragments:%u/%u bundles:%u/%u\n", | 2899 | l->tolerance, l->queue_limit[0]); |
| 2894 | l_ptr->next_in_no - l_ptr->stats.recv_info, | 2900 | |
| 2895 | l_ptr->stats.recv_fragments, | 2901 | ret += tipc_snprintf(buf + ret, buf_size - ret, |
| 2896 | l_ptr->stats.recv_fragmented, | 2902 | " RX packets:%u fragments:%u/%u bundles:%u/%u\n", |
| 2897 | l_ptr->stats.recv_bundles, | 2903 | l->next_in_no - s->recv_info, s->recv_fragments, |
| 2898 | l_ptr->stats.recv_bundled); | 2904 | s->recv_fragmented, s->recv_bundles, |
| 2899 | tipc_printf(&pb, " TX packets:%u fragments:%u/%u bundles:%u/%u\n", | 2905 | s->recv_bundled); |
| 2900 | l_ptr->next_out_no - l_ptr->stats.sent_info, | 2906 | |
| 2901 | l_ptr->stats.sent_fragments, | 2907 | ret += tipc_snprintf(buf + ret, buf_size - ret, |
| 2902 | l_ptr->stats.sent_fragmented, | 2908 | " TX packets:%u fragments:%u/%u bundles:%u/%u\n", |
| 2903 | l_ptr->stats.sent_bundles, | 2909 | l->next_out_no - s->sent_info, s->sent_fragments, |
| 2904 | l_ptr->stats.sent_bundled); | 2910 | s->sent_fragmented, s->sent_bundles, |
| 2905 | profile_total = l_ptr->stats.msg_length_counts; | 2911 | s->sent_bundled); |
| 2912 | |||
| 2913 | profile_total = s->msg_length_counts; | ||
| 2906 | if (!profile_total) | 2914 | if (!profile_total) |
| 2907 | profile_total = 1; | 2915 | profile_total = 1; |
| 2908 | tipc_printf(&pb, " TX profile sample:%u packets average:%u octets\n" | 2916 | |
| 2909 | " 0-64:%u%% -256:%u%% -1024:%u%% -4096:%u%% " | 2917 | ret += tipc_snprintf(buf + ret, buf_size - ret, |
| 2910 | "-16384:%u%% -32768:%u%% -66000:%u%%\n", | 2918 | " TX profile sample:%u packets average:%u octets\n" |
| 2911 | l_ptr->stats.msg_length_counts, | 2919 | " 0-64:%u%% -256:%u%% -1024:%u%% -4096:%u%% " |
| 2912 | l_ptr->stats.msg_lengths_total / profile_total, | 2920 | "-16384:%u%% -32768:%u%% -66000:%u%%\n", |
| 2913 | percent(l_ptr->stats.msg_length_profile[0], profile_total), | 2921 | s->msg_length_counts, |
| 2914 | percent(l_ptr->stats.msg_length_profile[1], profile_total), | 2922 | s->msg_lengths_total / profile_total, |
| 2915 | percent(l_ptr->stats.msg_length_profile[2], profile_total), | 2923 | percent(s->msg_length_profile[0], profile_total), |
| 2916 | percent(l_ptr->stats.msg_length_profile[3], profile_total), | 2924 | percent(s->msg_length_profile[1], profile_total), |
| 2917 | percent(l_ptr->stats.msg_length_profile[4], profile_total), | 2925 | percent(s->msg_length_profile[2], profile_total), |
| 2918 | percent(l_ptr->stats.msg_length_profile[5], profile_total), | 2926 | percent(s->msg_length_profile[3], profile_total), |
| 2919 | percent(l_ptr->stats.msg_length_profile[6], profile_total)); | 2927 | percent(s->msg_length_profile[4], profile_total), |
| 2920 | tipc_printf(&pb, " RX states:%u probes:%u naks:%u defs:%u dups:%u\n", | 2928 | percent(s->msg_length_profile[5], profile_total), |
| 2921 | l_ptr->stats.recv_states, | 2929 | percent(s->msg_length_profile[6], profile_total)); |
| 2922 | l_ptr->stats.recv_probes, | 2930 | |
| 2923 | l_ptr->stats.recv_nacks, | 2931 | ret += tipc_snprintf(buf + ret, buf_size - ret, |
| 2924 | l_ptr->stats.deferred_recv, | 2932 | " RX states:%u probes:%u naks:%u defs:%u" |
| 2925 | l_ptr->stats.duplicates); | 2933 | " dups:%u\n", s->recv_states, s->recv_probes, |
| 2926 | tipc_printf(&pb, " TX states:%u probes:%u naks:%u acks:%u dups:%u\n", | 2934 | s->recv_nacks, s->deferred_recv, s->duplicates); |
| 2927 | l_ptr->stats.sent_states, | 2935 | |
| 2928 | l_ptr->stats.sent_probes, | 2936 | ret += tipc_snprintf(buf + ret, buf_size - ret, |
| 2929 | l_ptr->stats.sent_nacks, | 2937 | " TX states:%u probes:%u naks:%u acks:%u" |
| 2930 | l_ptr->stats.sent_acks, | 2938 | " dups:%u\n", s->sent_states, s->sent_probes, |
| 2931 | l_ptr->stats.retransmitted); | 2939 | s->sent_nacks, s->sent_acks, s->retransmitted); |
| 2932 | tipc_printf(&pb, " Congestion bearer:%u link:%u Send queue max:%u avg:%u\n", | 2940 | |
| 2933 | l_ptr->stats.bearer_congs, | 2941 | ret += tipc_snprintf(buf + ret, buf_size - ret, |
| 2934 | l_ptr->stats.link_congs, | 2942 | " Congestion bearer:%u link:%u Send queue" |
| 2935 | l_ptr->stats.max_queue_sz, | 2943 | " max:%u avg:%u\n", s->bearer_congs, s->link_congs, |
| 2936 | l_ptr->stats.queue_sz_counts | 2944 | s->max_queue_sz, s->queue_sz_counts ? |
| 2937 | ? (l_ptr->stats.accu_queue_sz / l_ptr->stats.queue_sz_counts) | 2945 | (s->accu_queue_sz / s->queue_sz_counts) : 0); |
| 2938 | : 0); | ||
| 2939 | 2946 | ||
| 2940 | tipc_node_unlock(node); | 2947 | tipc_node_unlock(node); |
| 2941 | read_unlock_bh(&tipc_net_lock); | 2948 | read_unlock_bh(&tipc_net_lock); |
| 2942 | return tipc_printbuf_validate(&pb); | 2949 | return ret; |
| 2943 | } | 2950 | } |
| 2944 | 2951 | ||
| 2945 | #define MAX_LINK_STATS_INFO 2000 | ||
| 2946 | |||
| 2947 | struct sk_buff *tipc_link_cmd_show_stats(const void *req_tlv_area, int req_tlv_space) | 2952 | struct sk_buff *tipc_link_cmd_show_stats(const void *req_tlv_area, int req_tlv_space) |
| 2948 | { | 2953 | { |
| 2949 | struct sk_buff *buf; | 2954 | struct sk_buff *buf; |
| 2950 | struct tlv_desc *rep_tlv; | 2955 | struct tlv_desc *rep_tlv; |
| 2951 | int str_len; | 2956 | int str_len; |
| 2957 | int pb_len; | ||
| 2958 | char *pb; | ||
| 2952 | 2959 | ||
| 2953 | if (!TLV_CHECK(req_tlv_area, req_tlv_space, TIPC_TLV_LINK_NAME)) | 2960 | if (!TLV_CHECK(req_tlv_area, req_tlv_space, TIPC_TLV_LINK_NAME)) |
| 2954 | return tipc_cfg_reply_error_string(TIPC_CFG_TLV_ERROR); | 2961 | return tipc_cfg_reply_error_string(TIPC_CFG_TLV_ERROR); |
| 2955 | 2962 | ||
| 2956 | buf = tipc_cfg_reply_alloc(TLV_SPACE(MAX_LINK_STATS_INFO)); | 2963 | buf = tipc_cfg_reply_alloc(TLV_SPACE(ULTRA_STRING_MAX_LEN)); |
| 2957 | if (!buf) | 2964 | if (!buf) |
| 2958 | return NULL; | 2965 | return NULL; |
| 2959 | 2966 | ||
| 2960 | rep_tlv = (struct tlv_desc *)buf->data; | 2967 | rep_tlv = (struct tlv_desc *)buf->data; |
| 2961 | 2968 | pb = TLV_DATA(rep_tlv); | |
| 2969 | pb_len = ULTRA_STRING_MAX_LEN; | ||
| 2962 | str_len = tipc_link_stats((char *)TLV_DATA(req_tlv_area), | 2970 | str_len = tipc_link_stats((char *)TLV_DATA(req_tlv_area), |
| 2963 | (char *)TLV_DATA(rep_tlv), MAX_LINK_STATS_INFO); | 2971 | pb, pb_len); |
| 2964 | if (!str_len) { | 2972 | if (!str_len) { |
| 2965 | kfree_skb(buf); | 2973 | kfree_skb(buf); |
| 2966 | return tipc_cfg_reply_error_string("link not found"); | 2974 | return tipc_cfg_reply_error_string("link not found"); |
| 2967 | } | 2975 | } |
| 2968 | 2976 | str_len += 1; /* for "\0" */ | |
| 2969 | skb_put(buf, TLV_SPACE(str_len)); | 2977 | skb_put(buf, TLV_SPACE(str_len)); |
| 2970 | TLV_SET(rep_tlv, TIPC_TLV_ULTRA_STRING, NULL, str_len); | 2978 | TLV_SET(rep_tlv, TIPC_TLV_ULTRA_STRING, NULL, str_len); |
| 2971 | 2979 | ||
| @@ -3003,62 +3011,16 @@ u32 tipc_link_get_max_pkt(u32 dest, u32 selector) | |||
| 3003 | 3011 | ||
| 3004 | static void link_print(struct tipc_link *l_ptr, const char *str) | 3012 | static void link_print(struct tipc_link *l_ptr, const char *str) |
| 3005 | { | 3013 | { |
| 3006 | char print_area[256]; | 3014 | pr_info("%s Link %x<%s>:", str, l_ptr->addr, l_ptr->b_ptr->name); |
| 3007 | struct print_buf pb; | ||
| 3008 | struct print_buf *buf = &pb; | ||
| 3009 | |||
| 3010 | tipc_printbuf_init(buf, print_area, sizeof(print_area)); | ||
| 3011 | |||
| 3012 | tipc_printf(buf, str); | ||
| 3013 | tipc_printf(buf, "Link %x<%s>:", | ||
| 3014 | l_ptr->addr, l_ptr->b_ptr->name); | ||
| 3015 | |||
| 3016 | #ifdef CONFIG_TIPC_DEBUG | ||
| 3017 | if (link_reset_reset(l_ptr) || link_reset_unknown(l_ptr)) | ||
| 3018 | goto print_state; | ||
| 3019 | |||
| 3020 | tipc_printf(buf, ": NXO(%u):", mod(l_ptr->next_out_no)); | ||
| 3021 | tipc_printf(buf, "NXI(%u):", mod(l_ptr->next_in_no)); | ||
| 3022 | tipc_printf(buf, "SQUE"); | ||
| 3023 | if (l_ptr->first_out) { | ||
| 3024 | tipc_printf(buf, "[%u..", buf_seqno(l_ptr->first_out)); | ||
| 3025 | if (l_ptr->next_out) | ||
| 3026 | tipc_printf(buf, "%u..", buf_seqno(l_ptr->next_out)); | ||
| 3027 | tipc_printf(buf, "%u]", buf_seqno(l_ptr->last_out)); | ||
| 3028 | if ((mod(buf_seqno(l_ptr->last_out) - | ||
| 3029 | buf_seqno(l_ptr->first_out)) | ||
| 3030 | != (l_ptr->out_queue_size - 1)) || | ||
| 3031 | (l_ptr->last_out->next != NULL)) { | ||
| 3032 | tipc_printf(buf, "\nSend queue inconsistency\n"); | ||
| 3033 | tipc_printf(buf, "first_out= %p ", l_ptr->first_out); | ||
| 3034 | tipc_printf(buf, "next_out= %p ", l_ptr->next_out); | ||
| 3035 | tipc_printf(buf, "last_out= %p ", l_ptr->last_out); | ||
| 3036 | } | ||
| 3037 | } else | ||
| 3038 | tipc_printf(buf, "[]"); | ||
| 3039 | tipc_printf(buf, "SQSIZ(%u)", l_ptr->out_queue_size); | ||
| 3040 | if (l_ptr->oldest_deferred_in) { | ||
| 3041 | u32 o = buf_seqno(l_ptr->oldest_deferred_in); | ||
| 3042 | u32 n = buf_seqno(l_ptr->newest_deferred_in); | ||
| 3043 | tipc_printf(buf, ":RQUE[%u..%u]", o, n); | ||
| 3044 | if (l_ptr->deferred_inqueue_sz != mod((n + 1) - o)) { | ||
| 3045 | tipc_printf(buf, ":RQSIZ(%u)", | ||
| 3046 | l_ptr->deferred_inqueue_sz); | ||
| 3047 | } | ||
| 3048 | } | ||
| 3049 | print_state: | ||
| 3050 | #endif | ||
| 3051 | 3015 | ||
| 3052 | if (link_working_unknown(l_ptr)) | 3016 | if (link_working_unknown(l_ptr)) |
| 3053 | tipc_printf(buf, ":WU"); | 3017 | pr_cont(":WU\n"); |
| 3054 | else if (link_reset_reset(l_ptr)) | 3018 | else if (link_reset_reset(l_ptr)) |
| 3055 | tipc_printf(buf, ":RR"); | 3019 | pr_cont(":RR\n"); |
| 3056 | else if (link_reset_unknown(l_ptr)) | 3020 | else if (link_reset_unknown(l_ptr)) |
| 3057 | tipc_printf(buf, ":RU"); | 3021 | pr_cont(":RU\n"); |
| 3058 | else if (link_working_working(l_ptr)) | 3022 | else if (link_working_working(l_ptr)) |
| 3059 | tipc_printf(buf, ":WW"); | 3023 | pr_cont(":WW\n"); |
| 3060 | tipc_printf(buf, "\n"); | 3024 | else |
| 3061 | 3025 | pr_cont("\n"); | |
| 3062 | tipc_printbuf_validate(buf); | ||
| 3063 | info("%s", print_area); | ||
| 3064 | } | 3026 | } |
diff --git a/net/tipc/link.h b/net/tipc/link.h index d6a60a963ce6..6e921121be06 100644 --- a/net/tipc/link.h +++ b/net/tipc/link.h | |||
| @@ -37,7 +37,6 @@ | |||
| 37 | #ifndef _TIPC_LINK_H | 37 | #ifndef _TIPC_LINK_H |
| 38 | #define _TIPC_LINK_H | 38 | #define _TIPC_LINK_H |
| 39 | 39 | ||
| 40 | #include "log.h" | ||
| 41 | #include "msg.h" | 40 | #include "msg.h" |
| 42 | #include "node.h" | 41 | #include "node.h" |
| 43 | 42 | ||
| @@ -63,6 +62,37 @@ | |||
| 63 | */ | 62 | */ |
| 64 | #define MAX_PKT_DEFAULT 1500 | 63 | #define MAX_PKT_DEFAULT 1500 |
| 65 | 64 | ||
| 65 | struct tipc_stats { | ||
| 66 | u32 sent_info; /* used in counting # sent packets */ | ||
| 67 | u32 recv_info; /* used in counting # recv'd packets */ | ||
| 68 | u32 sent_states; | ||
| 69 | u32 recv_states; | ||
| 70 | u32 sent_probes; | ||
| 71 | u32 recv_probes; | ||
| 72 | u32 sent_nacks; | ||
| 73 | u32 recv_nacks; | ||
| 74 | u32 sent_acks; | ||
| 75 | u32 sent_bundled; | ||
| 76 | u32 sent_bundles; | ||
| 77 | u32 recv_bundled; | ||
| 78 | u32 recv_bundles; | ||
| 79 | u32 retransmitted; | ||
| 80 | u32 sent_fragmented; | ||
| 81 | u32 sent_fragments; | ||
| 82 | u32 recv_fragmented; | ||
| 83 | u32 recv_fragments; | ||
| 84 | u32 link_congs; /* # port sends blocked by congestion */ | ||
| 85 | u32 bearer_congs; | ||
| 86 | u32 deferred_recv; | ||
| 87 | u32 duplicates; | ||
| 88 | u32 max_queue_sz; /* send queue size high water mark */ | ||
| 89 | u32 accu_queue_sz; /* used for send queue size profiling */ | ||
| 90 | u32 queue_sz_counts; /* used for send queue size profiling */ | ||
| 91 | u32 msg_length_counts; /* used for message length profiling */ | ||
| 92 | u32 msg_lengths_total; /* used for message length profiling */ | ||
| 93 | u32 msg_length_profile[7]; /* used for msg. length profiling */ | ||
| 94 | }; | ||
| 95 | |||
| 66 | /** | 96 | /** |
| 67 | * struct tipc_link - TIPC link data structure | 97 | * struct tipc_link - TIPC link data structure |
| 68 | * @addr: network address of link's peer node | 98 | * @addr: network address of link's peer node |
| @@ -175,36 +205,7 @@ struct tipc_link { | |||
| 175 | struct sk_buff *defragm_buf; | 205 | struct sk_buff *defragm_buf; |
| 176 | 206 | ||
| 177 | /* Statistics */ | 207 | /* Statistics */ |
| 178 | struct { | 208 | struct tipc_stats stats; |
| 179 | u32 sent_info; /* used in counting # sent packets */ | ||
| 180 | u32 recv_info; /* used in counting # recv'd packets */ | ||
| 181 | u32 sent_states; | ||
| 182 | u32 recv_states; | ||
| 183 | u32 sent_probes; | ||
| 184 | u32 recv_probes; | ||
| 185 | u32 sent_nacks; | ||
| 186 | u32 recv_nacks; | ||
| 187 | u32 sent_acks; | ||
| 188 | u32 sent_bundled; | ||
| 189 | u32 sent_bundles; | ||
| 190 | u32 recv_bundled; | ||
| 191 | u32 recv_bundles; | ||
| 192 | u32 retransmitted; | ||
| 193 | u32 sent_fragmented; | ||
| 194 | u32 sent_fragments; | ||
| 195 | u32 recv_fragmented; | ||
| 196 | u32 recv_fragments; | ||
| 197 | u32 link_congs; /* # port sends blocked by congestion */ | ||
| 198 | u32 bearer_congs; | ||
| 199 | u32 deferred_recv; | ||
| 200 | u32 duplicates; | ||
| 201 | u32 max_queue_sz; /* send queue size high water mark */ | ||
| 202 | u32 accu_queue_sz; /* used for send queue size profiling */ | ||
| 203 | u32 queue_sz_counts; /* used for send queue size profiling */ | ||
| 204 | u32 msg_length_counts; /* used for message length profiling */ | ||
| 205 | u32 msg_lengths_total; /* used for message length profiling */ | ||
| 206 | u32 msg_length_profile[7]; /* used for msg. length profiling */ | ||
| 207 | } stats; | ||
| 208 | }; | 209 | }; |
| 209 | 210 | ||
| 210 | struct tipc_port; | 211 | struct tipc_port; |
diff --git a/net/tipc/log.c b/net/tipc/log.c index 026733f24919..abef644f27d8 100644 --- a/net/tipc/log.c +++ b/net/tipc/log.c | |||
| @@ -36,302 +36,20 @@ | |||
| 36 | 36 | ||
| 37 | #include "core.h" | 37 | #include "core.h" |
| 38 | #include "config.h" | 38 | #include "config.h" |
| 39 | #include "log.h" | ||
| 40 | |||
| 41 | /* | ||
| 42 | * TIPC pre-defines the following print buffers: | ||
| 43 | * | ||
| 44 | * TIPC_NULL : null buffer (i.e. print nowhere) | ||
| 45 | * TIPC_CONS : system console | ||
| 46 | * TIPC_LOG : TIPC log buffer | ||
| 47 | * | ||
| 48 | * Additional user-defined print buffers are also permitted. | ||
| 49 | */ | ||
| 50 | static struct print_buf null_buf = { NULL, 0, NULL, 0 }; | ||
| 51 | struct print_buf *const TIPC_NULL = &null_buf; | ||
| 52 | |||
| 53 | static struct print_buf cons_buf = { NULL, 0, NULL, 1 }; | ||
| 54 | struct print_buf *const TIPC_CONS = &cons_buf; | ||
| 55 | |||
| 56 | static struct print_buf log_buf = { NULL, 0, NULL, 1 }; | ||
| 57 | struct print_buf *const TIPC_LOG = &log_buf; | ||
| 58 | |||
| 59 | /* | ||
| 60 | * Locking policy when using print buffers. | ||
| 61 | * | ||
| 62 | * 1) tipc_printf() uses 'print_lock' to protect against concurrent access to | ||
| 63 | * 'print_string' when writing to a print buffer. This also protects against | ||
| 64 | * concurrent writes to the print buffer being written to. | ||
| 65 | * | ||
| 66 | * 2) tipc_log_XXX() leverages the aforementioned use of 'print_lock' to | ||
| 67 | * protect against all types of concurrent operations on their associated | ||
| 68 | * print buffer (not just write operations). | ||
| 69 | * | ||
| 70 | * Note: All routines of the form tipc_printbuf_XXX() are lock-free, and rely | ||
| 71 | * on the caller to prevent simultaneous use of the print buffer(s) being | ||
| 72 | * manipulated. | ||
| 73 | */ | ||
| 74 | static char print_string[TIPC_PB_MAX_STR]; | ||
| 75 | static DEFINE_SPINLOCK(print_lock); | ||
| 76 | |||
| 77 | static void tipc_printbuf_move(struct print_buf *pb_to, | ||
| 78 | struct print_buf *pb_from); | ||
| 79 | |||
| 80 | #define FORMAT(PTR, LEN, FMT) \ | ||
| 81 | {\ | ||
| 82 | va_list args;\ | ||
| 83 | va_start(args, FMT);\ | ||
| 84 | LEN = vsprintf(PTR, FMT, args);\ | ||
| 85 | va_end(args);\ | ||
| 86 | *(PTR + LEN) = '\0';\ | ||
| 87 | } | ||
| 88 | |||
| 89 | /** | ||
| 90 | * tipc_printbuf_init - initialize print buffer to empty | ||
| 91 | * @pb: pointer to print buffer structure | ||
| 92 | * @raw: pointer to character array used by print buffer | ||
| 93 | * @size: size of character array | ||
| 94 | * | ||
| 95 | * Note: If the character array is too small (or absent), the print buffer | ||
| 96 | * becomes a null device that discards anything written to it. | ||
| 97 | */ | ||
| 98 | void tipc_printbuf_init(struct print_buf *pb, char *raw, u32 size) | ||
| 99 | { | ||
| 100 | pb->buf = raw; | ||
| 101 | pb->crs = raw; | ||
| 102 | pb->size = size; | ||
| 103 | pb->echo = 0; | ||
| 104 | |||
| 105 | if (size < TIPC_PB_MIN_SIZE) { | ||
| 106 | pb->buf = NULL; | ||
| 107 | } else if (raw) { | ||
| 108 | pb->buf[0] = 0; | ||
| 109 | pb->buf[size - 1] = ~0; | ||
| 110 | } | ||
| 111 | } | ||
| 112 | |||
| 113 | /** | ||
| 114 | * tipc_printbuf_reset - reinitialize print buffer to empty state | ||
| 115 | * @pb: pointer to print buffer structure | ||
| 116 | */ | ||
| 117 | static void tipc_printbuf_reset(struct print_buf *pb) | ||
| 118 | { | ||
| 119 | if (pb->buf) { | ||
| 120 | pb->crs = pb->buf; | ||
| 121 | pb->buf[0] = 0; | ||
| 122 | pb->buf[pb->size - 1] = ~0; | ||
| 123 | } | ||
| 124 | } | ||
| 125 | |||
| 126 | /** | ||
| 127 | * tipc_printbuf_empty - test if print buffer is in empty state | ||
| 128 | * @pb: pointer to print buffer structure | ||
| 129 | * | ||
| 130 | * Returns non-zero if print buffer is empty. | ||
| 131 | */ | ||
| 132 | static int tipc_printbuf_empty(struct print_buf *pb) | ||
| 133 | { | ||
| 134 | return !pb->buf || (pb->crs == pb->buf); | ||
| 135 | } | ||
| 136 | |||
| 137 | /** | ||
| 138 | * tipc_printbuf_validate - check for print buffer overflow | ||
| 139 | * @pb: pointer to print buffer structure | ||
| 140 | * | ||
| 141 | * Verifies that a print buffer has captured all data written to it. | ||
| 142 | * If data has been lost, linearize buffer and prepend an error message | ||
| 143 | * | ||
| 144 | * Returns length of print buffer data string (including trailing NUL) | ||
| 145 | */ | ||
| 146 | int tipc_printbuf_validate(struct print_buf *pb) | ||
| 147 | { | ||
| 148 | char *err = "\n\n*** PRINT BUFFER OVERFLOW ***\n\n"; | ||
| 149 | char *cp_buf; | ||
| 150 | struct print_buf cb; | ||
| 151 | |||
| 152 | if (!pb->buf) | ||
| 153 | return 0; | ||
| 154 | |||
| 155 | if (pb->buf[pb->size - 1] == 0) { | ||
| 156 | cp_buf = kmalloc(pb->size, GFP_ATOMIC); | ||
| 157 | if (cp_buf) { | ||
| 158 | tipc_printbuf_init(&cb, cp_buf, pb->size); | ||
| 159 | tipc_printbuf_move(&cb, pb); | ||
| 160 | tipc_printbuf_move(pb, &cb); | ||
| 161 | kfree(cp_buf); | ||
| 162 | memcpy(pb->buf, err, strlen(err)); | ||
| 163 | } else { | ||
| 164 | tipc_printbuf_reset(pb); | ||
| 165 | tipc_printf(pb, err); | ||
| 166 | } | ||
| 167 | } | ||
| 168 | return pb->crs - pb->buf + 1; | ||
| 169 | } | ||
| 170 | |||
| 171 | /** | ||
| 172 | * tipc_printbuf_move - move print buffer contents to another print buffer | ||
| 173 | * @pb_to: pointer to destination print buffer structure | ||
| 174 | * @pb_from: pointer to source print buffer structure | ||
| 175 | * | ||
| 176 | * Current contents of destination print buffer (if any) are discarded. | ||
| 177 | * Source print buffer becomes empty if a successful move occurs. | ||
| 178 | */ | ||
| 179 | static void tipc_printbuf_move(struct print_buf *pb_to, | ||
| 180 | struct print_buf *pb_from) | ||
| 181 | { | ||
| 182 | int len; | ||
| 183 | |||
| 184 | /* Handle the cases where contents can't be moved */ | ||
| 185 | if (!pb_to->buf) | ||
| 186 | return; | ||
| 187 | |||
| 188 | if (!pb_from->buf) { | ||
| 189 | tipc_printbuf_reset(pb_to); | ||
| 190 | return; | ||
| 191 | } | ||
| 192 | |||
| 193 | if (pb_to->size < pb_from->size) { | ||
| 194 | strcpy(pb_to->buf, "*** PRINT BUFFER MOVE ERROR ***"); | ||
| 195 | pb_to->buf[pb_to->size - 1] = ~0; | ||
| 196 | pb_to->crs = strchr(pb_to->buf, 0); | ||
| 197 | return; | ||
| 198 | } | ||
| 199 | |||
| 200 | /* Copy data from char after cursor to end (if used) */ | ||
| 201 | len = pb_from->buf + pb_from->size - pb_from->crs - 2; | ||
| 202 | if ((pb_from->buf[pb_from->size - 1] == 0) && (len > 0)) { | ||
| 203 | strcpy(pb_to->buf, pb_from->crs + 1); | ||
| 204 | pb_to->crs = pb_to->buf + len; | ||
| 205 | } else | ||
| 206 | pb_to->crs = pb_to->buf; | ||
| 207 | |||
| 208 | /* Copy data from start to cursor (always) */ | ||
| 209 | len = pb_from->crs - pb_from->buf; | ||
| 210 | strcpy(pb_to->crs, pb_from->buf); | ||
| 211 | pb_to->crs += len; | ||
| 212 | |||
| 213 | tipc_printbuf_reset(pb_from); | ||
| 214 | } | ||
| 215 | 39 | ||
| 216 | /** | 40 | /** |
| 217 | * tipc_printf - append formatted output to print buffer | 41 | * tipc_snprintf - append formatted output to print buffer |
| 218 | * @pb: pointer to print buffer | 42 | * @buf: pointer to print buffer |
| 43 | * @len: buffer length | ||
| 219 | * @fmt: formatted info to be printed | 44 | * @fmt: formatted info to be printed |
| 220 | */ | 45 | */ |
| 221 | void tipc_printf(struct print_buf *pb, const char *fmt, ...) | 46 | int tipc_snprintf(char *buf, int len, const char *fmt, ...) |
| 222 | { | ||
| 223 | int chars_to_add; | ||
| 224 | int chars_left; | ||
| 225 | char save_char; | ||
| 226 | |||
| 227 | spin_lock_bh(&print_lock); | ||
| 228 | |||
| 229 | FORMAT(print_string, chars_to_add, fmt); | ||
| 230 | if (chars_to_add >= TIPC_PB_MAX_STR) | ||
| 231 | strcpy(print_string, "*** PRINT BUFFER STRING TOO LONG ***"); | ||
| 232 | |||
| 233 | if (pb->buf) { | ||
| 234 | chars_left = pb->buf + pb->size - pb->crs - 1; | ||
| 235 | if (chars_to_add <= chars_left) { | ||
| 236 | strcpy(pb->crs, print_string); | ||
| 237 | pb->crs += chars_to_add; | ||
| 238 | } else if (chars_to_add >= (pb->size - 1)) { | ||
| 239 | strcpy(pb->buf, print_string + chars_to_add + 1 | ||
| 240 | - pb->size); | ||
| 241 | pb->crs = pb->buf + pb->size - 1; | ||
| 242 | } else { | ||
| 243 | strcpy(pb->buf, print_string + chars_left); | ||
| 244 | save_char = print_string[chars_left]; | ||
| 245 | print_string[chars_left] = 0; | ||
| 246 | strcpy(pb->crs, print_string); | ||
| 247 | print_string[chars_left] = save_char; | ||
| 248 | pb->crs = pb->buf + chars_to_add - chars_left; | ||
| 249 | } | ||
| 250 | } | ||
| 251 | |||
| 252 | if (pb->echo) | ||
| 253 | printk("%s", print_string); | ||
| 254 | |||
| 255 | spin_unlock_bh(&print_lock); | ||
| 256 | } | ||
| 257 | |||
| 258 | /** | ||
| 259 | * tipc_log_resize - change the size of the TIPC log buffer | ||
| 260 | * @log_size: print buffer size to use | ||
| 261 | */ | ||
| 262 | int tipc_log_resize(int log_size) | ||
| 263 | { | ||
| 264 | int res = 0; | ||
| 265 | |||
| 266 | spin_lock_bh(&print_lock); | ||
| 267 | kfree(TIPC_LOG->buf); | ||
| 268 | TIPC_LOG->buf = NULL; | ||
| 269 | if (log_size) { | ||
| 270 | if (log_size < TIPC_PB_MIN_SIZE) | ||
| 271 | log_size = TIPC_PB_MIN_SIZE; | ||
| 272 | res = TIPC_LOG->echo; | ||
| 273 | tipc_printbuf_init(TIPC_LOG, kmalloc(log_size, GFP_ATOMIC), | ||
| 274 | log_size); | ||
| 275 | TIPC_LOG->echo = res; | ||
| 276 | res = !TIPC_LOG->buf; | ||
| 277 | } | ||
| 278 | spin_unlock_bh(&print_lock); | ||
| 279 | |||
| 280 | return res; | ||
| 281 | } | ||
| 282 | |||
| 283 | /** | ||
| 284 | * tipc_log_resize_cmd - reconfigure size of TIPC log buffer | ||
| 285 | */ | ||
| 286 | struct sk_buff *tipc_log_resize_cmd(const void *req_tlv_area, int req_tlv_space) | ||
| 287 | { | ||
| 288 | u32 value; | ||
| 289 | |||
| 290 | if (!TLV_CHECK(req_tlv_area, req_tlv_space, TIPC_TLV_UNSIGNED)) | ||
| 291 | return tipc_cfg_reply_error_string(TIPC_CFG_TLV_ERROR); | ||
| 292 | |||
| 293 | value = ntohl(*(__be32 *)TLV_DATA(req_tlv_area)); | ||
| 294 | if (value > 32768) | ||
| 295 | return tipc_cfg_reply_error_string(TIPC_CFG_INVALID_VALUE | ||
| 296 | " (log size must be 0-32768)"); | ||
| 297 | if (tipc_log_resize(value)) | ||
| 298 | return tipc_cfg_reply_error_string( | ||
| 299 | "unable to create specified log (log size is now 0)"); | ||
| 300 | return tipc_cfg_reply_none(); | ||
| 301 | } | ||
| 302 | |||
| 303 | /** | ||
| 304 | * tipc_log_dump - capture TIPC log buffer contents in configuration message | ||
| 305 | */ | ||
| 306 | struct sk_buff *tipc_log_dump(void) | ||
| 307 | { | 47 | { |
| 308 | struct sk_buff *reply; | 48 | int i; |
| 309 | 49 | va_list args; | |
| 310 | spin_lock_bh(&print_lock); | ||
| 311 | if (!TIPC_LOG->buf) { | ||
| 312 | spin_unlock_bh(&print_lock); | ||
| 313 | reply = tipc_cfg_reply_ultra_string("log not activated\n"); | ||
| 314 | } else if (tipc_printbuf_empty(TIPC_LOG)) { | ||
| 315 | spin_unlock_bh(&print_lock); | ||
| 316 | reply = tipc_cfg_reply_ultra_string("log is empty\n"); | ||
| 317 | } else { | ||
| 318 | struct tlv_desc *rep_tlv; | ||
| 319 | struct print_buf pb; | ||
| 320 | int str_len; | ||
| 321 | 50 | ||
| 322 | str_len = min(TIPC_LOG->size, 32768u); | 51 | va_start(args, fmt); |
| 323 | spin_unlock_bh(&print_lock); | 52 | i = vscnprintf(buf, len, fmt, args); |
| 324 | reply = tipc_cfg_reply_alloc(TLV_SPACE(str_len)); | 53 | va_end(args); |
| 325 | if (reply) { | 54 | return i; |
| 326 | rep_tlv = (struct tlv_desc *)reply->data; | ||
| 327 | tipc_printbuf_init(&pb, TLV_DATA(rep_tlv), str_len); | ||
| 328 | spin_lock_bh(&print_lock); | ||
| 329 | tipc_printbuf_move(&pb, TIPC_LOG); | ||
| 330 | spin_unlock_bh(&print_lock); | ||
| 331 | str_len = strlen(TLV_DATA(rep_tlv)) + 1; | ||
| 332 | skb_put(reply, TLV_SPACE(str_len)); | ||
| 333 | TLV_SET(rep_tlv, TIPC_TLV_ULTRA_STRING, NULL, str_len); | ||
| 334 | } | ||
| 335 | } | ||
| 336 | return reply; | ||
| 337 | } | 55 | } |
diff --git a/net/tipc/log.h b/net/tipc/log.h deleted file mode 100644 index d1f5eb967fd8..000000000000 --- a/net/tipc/log.h +++ /dev/null | |||
| @@ -1,66 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * net/tipc/log.h: Include file for TIPC print buffer routines | ||
| 3 | * | ||
| 4 | * Copyright (c) 1997-2006, Ericsson AB | ||
| 5 | * Copyright (c) 2005-2007, Wind River Systems | ||
| 6 | * All rights reserved. | ||
| 7 | * | ||
| 8 | * Redistribution and use in source and binary forms, with or without | ||
| 9 | * modification, are permitted provided that the following conditions are met: | ||
| 10 | * | ||
| 11 | * 1. Redistributions of source code must retain the above copyright | ||
| 12 | * notice, this list of conditions and the following disclaimer. | ||
| 13 | * 2. Redistributions in binary form must reproduce the above copyright | ||
| 14 | * notice, this list of conditions and the following disclaimer in the | ||
| 15 | * documentation and/or other materials provided with the distribution. | ||
| 16 | * 3. Neither the names of the copyright holders nor the names of its | ||
| 17 | * contributors may be used to endorse or promote products derived from | ||
| 18 | * this software without specific prior written permission. | ||
| 19 | * | ||
| 20 | * Alternatively, this software may be distributed under the terms of the | ||
| 21 | * GNU General Public License ("GPL") version 2 as published by the Free | ||
| 22 | * Software Foundation. | ||
| 23 | * | ||
| 24 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | ||
| 25 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||
| 26 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | ||
| 27 | * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE | ||
| 28 | * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | ||
| 29 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | ||
| 30 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | ||
| 31 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | ||
| 32 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | ||
| 33 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | ||
| 34 | * POSSIBILITY OF SUCH DAMAGE. | ||
| 35 | */ | ||
| 36 | |||
| 37 | #ifndef _TIPC_LOG_H | ||
| 38 | #define _TIPC_LOG_H | ||
| 39 | |||
| 40 | /** | ||
| 41 | * struct print_buf - TIPC print buffer structure | ||
| 42 | * @buf: pointer to character array containing print buffer contents | ||
| 43 | * @size: size of character array | ||
| 44 | * @crs: pointer to first unused space in character array (i.e. final NUL) | ||
| 45 | * @echo: echo output to system console if non-zero | ||
| 46 | */ | ||
| 47 | struct print_buf { | ||
| 48 | char *buf; | ||
| 49 | u32 size; | ||
| 50 | char *crs; | ||
| 51 | int echo; | ||
| 52 | }; | ||
| 53 | |||
| 54 | #define TIPC_PB_MIN_SIZE 64 /* minimum size for a print buffer's array */ | ||
| 55 | #define TIPC_PB_MAX_STR 512 /* max printable string (with trailing NUL) */ | ||
| 56 | |||
| 57 | void tipc_printbuf_init(struct print_buf *pb, char *buf, u32 size); | ||
| 58 | int tipc_printbuf_validate(struct print_buf *pb); | ||
| 59 | |||
| 60 | int tipc_log_resize(int log_size); | ||
| 61 | |||
| 62 | struct sk_buff *tipc_log_resize_cmd(const void *req_tlv_area, | ||
| 63 | int req_tlv_space); | ||
| 64 | struct sk_buff *tipc_log_dump(void); | ||
| 65 | |||
| 66 | #endif | ||
diff --git a/net/tipc/msg.c b/net/tipc/msg.c index deea0d232dca..f2db8a87d9c5 100644 --- a/net/tipc/msg.c +++ b/net/tipc/msg.c | |||
| @@ -109,245 +109,3 @@ int tipc_msg_build(struct tipc_msg *hdr, struct iovec const *msg_sect, | |||
| 109 | *buf = NULL; | 109 | *buf = NULL; |
| 110 | return -EFAULT; | 110 | return -EFAULT; |
| 111 | } | 111 | } |
| 112 | |||
| 113 | #ifdef CONFIG_TIPC_DEBUG | ||
| 114 | void tipc_msg_dbg(struct print_buf *buf, struct tipc_msg *msg, const char *str) | ||
| 115 | { | ||
| 116 | u32 usr = msg_user(msg); | ||
| 117 | tipc_printf(buf, KERN_DEBUG); | ||
| 118 | tipc_printf(buf, str); | ||
| 119 | |||
| 120 | switch (usr) { | ||
| 121 | case MSG_BUNDLER: | ||
| 122 | tipc_printf(buf, "BNDL::"); | ||
| 123 | tipc_printf(buf, "MSGS(%u):", msg_msgcnt(msg)); | ||
| 124 | break; | ||
| 125 | case BCAST_PROTOCOL: | ||
| 126 | tipc_printf(buf, "BCASTP::"); | ||
| 127 | break; | ||
| 128 | case MSG_FRAGMENTER: | ||
| 129 | tipc_printf(buf, "FRAGM::"); | ||
| 130 | switch (msg_type(msg)) { | ||
| 131 | case FIRST_FRAGMENT: | ||
| 132 | tipc_printf(buf, "FIRST:"); | ||
| 133 | break; | ||
| 134 | case FRAGMENT: | ||
| 135 | tipc_printf(buf, "BODY:"); | ||
| 136 | break; | ||
| 137 | case LAST_FRAGMENT: | ||
| 138 | tipc_printf(buf, "LAST:"); | ||
| 139 | break; | ||
| 140 | default: | ||
| 141 | tipc_printf(buf, "UNKNOWN:%x", msg_type(msg)); | ||
| 142 | |||
| 143 | } | ||
| 144 | tipc_printf(buf, "NO(%u/%u):", msg_long_msgno(msg), | ||
| 145 | msg_fragm_no(msg)); | ||
| 146 | break; | ||
| 147 | case TIPC_LOW_IMPORTANCE: | ||
| 148 | case TIPC_MEDIUM_IMPORTANCE: | ||
| 149 | case TIPC_HIGH_IMPORTANCE: | ||
| 150 | case TIPC_CRITICAL_IMPORTANCE: | ||
| 151 | tipc_printf(buf, "DAT%u:", msg_user(msg)); | ||
| 152 | if (msg_short(msg)) { | ||
| 153 | tipc_printf(buf, "CON:"); | ||
| 154 | break; | ||
| 155 | } | ||
| 156 | switch (msg_type(msg)) { | ||
| 157 | case TIPC_CONN_MSG: | ||
| 158 | tipc_printf(buf, "CON:"); | ||
| 159 | break; | ||
| 160 | case TIPC_MCAST_MSG: | ||
| 161 | tipc_printf(buf, "MCST:"); | ||
| 162 | break; | ||
| 163 | case TIPC_NAMED_MSG: | ||
| 164 | tipc_printf(buf, "NAM:"); | ||
| 165 | break; | ||
| 166 | case TIPC_DIRECT_MSG: | ||
| 167 | tipc_printf(buf, "DIR:"); | ||
| 168 | break; | ||
| 169 | default: | ||
| 170 | tipc_printf(buf, "UNKNOWN TYPE %u", msg_type(msg)); | ||
| 171 | } | ||
| 172 | if (msg_reroute_cnt(msg)) | ||
| 173 | tipc_printf(buf, "REROUTED(%u):", | ||
| 174 | msg_reroute_cnt(msg)); | ||
| 175 | break; | ||
| 176 | case NAME_DISTRIBUTOR: | ||
| 177 | tipc_printf(buf, "NMD::"); | ||
| 178 | switch (msg_type(msg)) { | ||
| 179 | case PUBLICATION: | ||
| 180 | tipc_printf(buf, "PUBL(%u):", (msg_size(msg) - msg_hdr_sz(msg)) / 20); /* Items */ | ||
| 181 | break; | ||
| 182 | case WITHDRAWAL: | ||
| 183 | tipc_printf(buf, "WDRW:"); | ||
| 184 | break; | ||
| 185 | default: | ||
| 186 | tipc_printf(buf, "UNKNOWN:%x", msg_type(msg)); | ||
| 187 | } | ||
| 188 | if (msg_reroute_cnt(msg)) | ||
| 189 | tipc_printf(buf, "REROUTED(%u):", | ||
| 190 | msg_reroute_cnt(msg)); | ||
| 191 | break; | ||
| 192 | case CONN_MANAGER: | ||
| 193 | tipc_printf(buf, "CONN_MNG:"); | ||
| 194 | switch (msg_type(msg)) { | ||
| 195 | case CONN_PROBE: | ||
| 196 | tipc_printf(buf, "PROBE:"); | ||
| 197 | break; | ||
| 198 | case CONN_PROBE_REPLY: | ||
| 199 | tipc_printf(buf, "PROBE_REPLY:"); | ||
| 200 | break; | ||
| 201 | case CONN_ACK: | ||
| 202 | tipc_printf(buf, "CONN_ACK:"); | ||
| 203 | tipc_printf(buf, "ACK(%u):", msg_msgcnt(msg)); | ||
| 204 | break; | ||
| 205 | default: | ||
| 206 | tipc_printf(buf, "UNKNOWN TYPE:%x", msg_type(msg)); | ||
| 207 | } | ||
| 208 | if (msg_reroute_cnt(msg)) | ||
| 209 | tipc_printf(buf, "REROUTED(%u):", msg_reroute_cnt(msg)); | ||
| 210 | break; | ||
| 211 | case LINK_PROTOCOL: | ||
| 212 | switch (msg_type(msg)) { | ||
| 213 | case STATE_MSG: | ||
| 214 | tipc_printf(buf, "STATE:"); | ||
| 215 | tipc_printf(buf, "%s:", msg_probe(msg) ? "PRB" : ""); | ||
| 216 | tipc_printf(buf, "NXS(%u):", msg_next_sent(msg)); | ||
| 217 | tipc_printf(buf, "GAP(%u):", msg_seq_gap(msg)); | ||
| 218 | tipc_printf(buf, "LSTBC(%u):", msg_last_bcast(msg)); | ||
| 219 | break; | ||
| 220 | case RESET_MSG: | ||
| 221 | tipc_printf(buf, "RESET:"); | ||
| 222 | if (msg_size(msg) != msg_hdr_sz(msg)) | ||
| 223 | tipc_printf(buf, "BEAR:%s:", msg_data(msg)); | ||
| 224 | break; | ||
| 225 | case ACTIVATE_MSG: | ||
| 226 | tipc_printf(buf, "ACTIVATE:"); | ||
| 227 | break; | ||
| 228 | default: | ||
| 229 | tipc_printf(buf, "UNKNOWN TYPE:%x", msg_type(msg)); | ||
| 230 | } | ||
| 231 | tipc_printf(buf, "PLANE(%c):", msg_net_plane(msg)); | ||
| 232 | tipc_printf(buf, "SESS(%u):", msg_session(msg)); | ||
| 233 | break; | ||
| 234 | case CHANGEOVER_PROTOCOL: | ||
| 235 | tipc_printf(buf, "TUNL:"); | ||
| 236 | switch (msg_type(msg)) { | ||
| 237 | case DUPLICATE_MSG: | ||
| 238 | tipc_printf(buf, "DUPL:"); | ||
| 239 | break; | ||
| 240 | case ORIGINAL_MSG: | ||
| 241 | tipc_printf(buf, "ORIG:"); | ||
| 242 | tipc_printf(buf, "EXP(%u)", msg_msgcnt(msg)); | ||
| 243 | break; | ||
| 244 | default: | ||
| 245 | tipc_printf(buf, "UNKNOWN TYPE:%x", msg_type(msg)); | ||
| 246 | } | ||
| 247 | break; | ||
| 248 | case LINK_CONFIG: | ||
| 249 | tipc_printf(buf, "CFG:"); | ||
| 250 | switch (msg_type(msg)) { | ||
| 251 | case DSC_REQ_MSG: | ||
| 252 | tipc_printf(buf, "DSC_REQ:"); | ||
| 253 | break; | ||
| 254 | case DSC_RESP_MSG: | ||
| 255 | tipc_printf(buf, "DSC_RESP:"); | ||
| 256 | break; | ||
| 257 | default: | ||
| 258 | tipc_printf(buf, "UNKNOWN TYPE:%x:", msg_type(msg)); | ||
| 259 | break; | ||
| 260 | } | ||
| 261 | break; | ||
| 262 | default: | ||
| 263 | tipc_printf(buf, "UNKNOWN USER:"); | ||
| 264 | } | ||
| 265 | |||
| 266 | switch (usr) { | ||
| 267 | case CONN_MANAGER: | ||
| 268 | case TIPC_LOW_IMPORTANCE: | ||
| 269 | case TIPC_MEDIUM_IMPORTANCE: | ||
| 270 | case TIPC_HIGH_IMPORTANCE: | ||
| 271 | case TIPC_CRITICAL_IMPORTANCE: | ||
| 272 | switch (msg_errcode(msg)) { | ||
| 273 | case TIPC_OK: | ||
| 274 | break; | ||
| 275 | case TIPC_ERR_NO_NAME: | ||
| 276 | tipc_printf(buf, "NO_NAME:"); | ||
| 277 | break; | ||
| 278 | case TIPC_ERR_NO_PORT: | ||
| 279 | tipc_printf(buf, "NO_PORT:"); | ||
| 280 | break; | ||
| 281 | case TIPC_ERR_NO_NODE: | ||
| 282 | tipc_printf(buf, "NO_PROC:"); | ||
| 283 | break; | ||
| 284 | case TIPC_ERR_OVERLOAD: | ||
| 285 | tipc_printf(buf, "OVERLOAD:"); | ||
| 286 | break; | ||
| 287 | case TIPC_CONN_SHUTDOWN: | ||
| 288 | tipc_printf(buf, "SHUTDOWN:"); | ||
| 289 | break; | ||
| 290 | default: | ||
| 291 | tipc_printf(buf, "UNKNOWN ERROR(%x):", | ||
| 292 | msg_errcode(msg)); | ||
| 293 | } | ||
| 294 | default: | ||
| 295 | break; | ||
| 296 | } | ||
| 297 | |||
| 298 | tipc_printf(buf, "HZ(%u):", msg_hdr_sz(msg)); | ||
| 299 | tipc_printf(buf, "SZ(%u):", msg_size(msg)); | ||
| 300 | tipc_printf(buf, "SQNO(%u):", msg_seqno(msg)); | ||
| 301 | |||
| 302 | if (msg_non_seq(msg)) | ||
| 303 | tipc_printf(buf, "NOSEQ:"); | ||
| 304 | else | ||
| 305 | tipc_printf(buf, "ACK(%u):", msg_ack(msg)); | ||
| 306 | tipc_printf(buf, "BACK(%u):", msg_bcast_ack(msg)); | ||
| 307 | tipc_printf(buf, "PRND(%x)", msg_prevnode(msg)); | ||
| 308 | |||
| 309 | if (msg_isdata(msg)) { | ||
| 310 | if (msg_named(msg)) { | ||
| 311 | tipc_printf(buf, "NTYP(%u):", msg_nametype(msg)); | ||
| 312 | tipc_printf(buf, "NINST(%u)", msg_nameinst(msg)); | ||
| 313 | } | ||
| 314 | } | ||
| 315 | |||
| 316 | if ((usr != LINK_PROTOCOL) && (usr != LINK_CONFIG) && | ||
| 317 | (usr != MSG_BUNDLER)) { | ||
| 318 | if (!msg_short(msg)) { | ||
| 319 | tipc_printf(buf, ":ORIG(%x:%u):", | ||
| 320 | msg_orignode(msg), msg_origport(msg)); | ||
| 321 | tipc_printf(buf, ":DEST(%x:%u):", | ||
| 322 | msg_destnode(msg), msg_destport(msg)); | ||
| 323 | } else { | ||
| 324 | tipc_printf(buf, ":OPRT(%u):", msg_origport(msg)); | ||
| 325 | tipc_printf(buf, ":DPRT(%u):", msg_destport(msg)); | ||
| 326 | } | ||
| 327 | } | ||
| 328 | if (msg_user(msg) == NAME_DISTRIBUTOR) { | ||
| 329 | tipc_printf(buf, ":ONOD(%x):", msg_orignode(msg)); | ||
| 330 | tipc_printf(buf, ":DNOD(%x):", msg_destnode(msg)); | ||
| 331 | } | ||
| 332 | |||
| 333 | if (msg_user(msg) == LINK_CONFIG) { | ||
| 334 | struct tipc_media_addr orig; | ||
| 335 | |||
| 336 | tipc_printf(buf, ":DDOM(%x):", msg_dest_domain(msg)); | ||
| 337 | tipc_printf(buf, ":NETID(%u):", msg_bc_netid(msg)); | ||
| 338 | memcpy(orig.value, msg_media_addr(msg), sizeof(orig.value)); | ||
| 339 | orig.media_id = 0; | ||
| 340 | orig.broadcast = 0; | ||
| 341 | tipc_media_addr_printf(buf, &orig); | ||
| 342 | } | ||
| 343 | if (msg_user(msg) == BCAST_PROTOCOL) { | ||
| 344 | tipc_printf(buf, "BCNACK:AFTER(%u):", msg_bcgap_after(msg)); | ||
| 345 | tipc_printf(buf, "TO(%u):", msg_bcgap_to(msg)); | ||
| 346 | } | ||
| 347 | tipc_printf(buf, "\n"); | ||
| 348 | if ((usr == CHANGEOVER_PROTOCOL) && (msg_msgcnt(msg))) | ||
| 349 | tipc_msg_dbg(buf, msg_get_wrapped(msg), " /"); | ||
| 350 | if ((usr == MSG_FRAGMENTER) && (msg_type(msg) == FIRST_FRAGMENT)) | ||
| 351 | tipc_msg_dbg(buf, msg_get_wrapped(msg), " /"); | ||
| 352 | } | ||
| 353 | #endif | ||
diff --git a/net/tipc/name_distr.c b/net/tipc/name_distr.c index 158318e67b08..55d3928dfd67 100644 --- a/net/tipc/name_distr.c +++ b/net/tipc/name_distr.c | |||
| @@ -161,7 +161,7 @@ void tipc_named_publish(struct publication *publ) | |||
| 161 | 161 | ||
| 162 | buf = named_prepare_buf(PUBLICATION, ITEM_SIZE, 0); | 162 | buf = named_prepare_buf(PUBLICATION, ITEM_SIZE, 0); |
| 163 | if (!buf) { | 163 | if (!buf) { |
| 164 | warn("Publication distribution failure\n"); | 164 | pr_warn("Publication distribution failure\n"); |
| 165 | return; | 165 | return; |
| 166 | } | 166 | } |
| 167 | 167 | ||
| @@ -186,7 +186,7 @@ void tipc_named_withdraw(struct publication *publ) | |||
| 186 | 186 | ||
| 187 | buf = named_prepare_buf(WITHDRAWAL, ITEM_SIZE, 0); | 187 | buf = named_prepare_buf(WITHDRAWAL, ITEM_SIZE, 0); |
| 188 | if (!buf) { | 188 | if (!buf) { |
| 189 | warn("Withdrawal distribution failure\n"); | 189 | pr_warn("Withdrawal distribution failure\n"); |
| 190 | return; | 190 | return; |
| 191 | } | 191 | } |
| 192 | 192 | ||
| @@ -213,7 +213,7 @@ static void named_distribute(struct list_head *message_list, u32 node, | |||
| 213 | rest -= left; | 213 | rest -= left; |
| 214 | buf = named_prepare_buf(PUBLICATION, left, node); | 214 | buf = named_prepare_buf(PUBLICATION, left, node); |
| 215 | if (!buf) { | 215 | if (!buf) { |
| 216 | warn("Bulk publication failure\n"); | 216 | pr_warn("Bulk publication failure\n"); |
| 217 | return; | 217 | return; |
| 218 | } | 218 | } |
| 219 | item = (struct distr_item *)msg_data(buf_msg(buf)); | 219 | item = (struct distr_item *)msg_data(buf_msg(buf)); |
| @@ -283,9 +283,10 @@ static void named_purge_publ(struct publication *publ) | |||
| 283 | write_unlock_bh(&tipc_nametbl_lock); | 283 | write_unlock_bh(&tipc_nametbl_lock); |
| 284 | 284 | ||
| 285 | if (p != publ) { | 285 | if (p != publ) { |
| 286 | err("Unable to remove publication from failed node\n" | 286 | pr_err("Unable to remove publication from failed node\n" |
| 287 | "(type=%u, lower=%u, node=0x%x, ref=%u, key=%u)\n", | 287 | " (type=%u, lower=%u, node=0x%x, ref=%u, key=%u)\n", |
| 288 | publ->type, publ->lower, publ->node, publ->ref, publ->key); | 288 | publ->type, publ->lower, publ->node, publ->ref, |
| 289 | publ->key); | ||
| 289 | } | 290 | } |
| 290 | 291 | ||
| 291 | kfree(p); | 292 | kfree(p); |
| @@ -329,14 +330,14 @@ void tipc_named_recv(struct sk_buff *buf) | |||
| 329 | tipc_nodesub_unsubscribe(&publ->subscr); | 330 | tipc_nodesub_unsubscribe(&publ->subscr); |
| 330 | kfree(publ); | 331 | kfree(publ); |
| 331 | } else { | 332 | } else { |
| 332 | err("Unable to remove publication by node 0x%x\n" | 333 | pr_err("Unable to remove publication by node 0x%x\n" |
| 333 | "(type=%u, lower=%u, ref=%u, key=%u)\n", | 334 | " (type=%u, lower=%u, ref=%u, key=%u)\n", |
| 334 | msg_orignode(msg), | 335 | msg_orignode(msg), ntohl(item->type), |
| 335 | ntohl(item->type), ntohl(item->lower), | 336 | ntohl(item->lower), ntohl(item->ref), |
| 336 | ntohl(item->ref), ntohl(item->key)); | 337 | ntohl(item->key)); |
| 337 | } | 338 | } |
| 338 | } else { | 339 | } else { |
| 339 | warn("Unrecognized name table message received\n"); | 340 | pr_warn("Unrecognized name table message received\n"); |
| 340 | } | 341 | } |
| 341 | item++; | 342 | item++; |
| 342 | } | 343 | } |
diff --git a/net/tipc/name_table.c b/net/tipc/name_table.c index 010f24a59da2..360c478b0b53 100644 --- a/net/tipc/name_table.c +++ b/net/tipc/name_table.c | |||
| @@ -126,7 +126,7 @@ static struct publication *publ_create(u32 type, u32 lower, u32 upper, | |||
| 126 | { | 126 | { |
| 127 | struct publication *publ = kzalloc(sizeof(*publ), GFP_ATOMIC); | 127 | struct publication *publ = kzalloc(sizeof(*publ), GFP_ATOMIC); |
| 128 | if (publ == NULL) { | 128 | if (publ == NULL) { |
| 129 | warn("Publication creation failure, no memory\n"); | 129 | pr_warn("Publication creation failure, no memory\n"); |
| 130 | return NULL; | 130 | return NULL; |
| 131 | } | 131 | } |
| 132 | 132 | ||
| @@ -163,7 +163,7 @@ static struct name_seq *tipc_nameseq_create(u32 type, struct hlist_head *seq_hea | |||
| 163 | struct sub_seq *sseq = tipc_subseq_alloc(1); | 163 | struct sub_seq *sseq = tipc_subseq_alloc(1); |
| 164 | 164 | ||
| 165 | if (!nseq || !sseq) { | 165 | if (!nseq || !sseq) { |
| 166 | warn("Name sequence creation failed, no memory\n"); | 166 | pr_warn("Name sequence creation failed, no memory\n"); |
| 167 | kfree(nseq); | 167 | kfree(nseq); |
| 168 | kfree(sseq); | 168 | kfree(sseq); |
| 169 | return NULL; | 169 | return NULL; |
| @@ -191,7 +191,7 @@ static void nameseq_delete_empty(struct name_seq *seq) | |||
| 191 | } | 191 | } |
| 192 | } | 192 | } |
| 193 | 193 | ||
| 194 | /* | 194 | /** |
| 195 | * nameseq_find_subseq - find sub-sequence (if any) matching a name instance | 195 | * nameseq_find_subseq - find sub-sequence (if any) matching a name instance |
| 196 | * | 196 | * |
| 197 | * Very time-critical, so binary searches through sub-sequence array. | 197 | * Very time-critical, so binary searches through sub-sequence array. |
| @@ -263,8 +263,8 @@ static struct publication *tipc_nameseq_insert_publ(struct name_seq *nseq, | |||
| 263 | 263 | ||
| 264 | /* Lower end overlaps existing entry => need an exact match */ | 264 | /* Lower end overlaps existing entry => need an exact match */ |
| 265 | if ((sseq->lower != lower) || (sseq->upper != upper)) { | 265 | if ((sseq->lower != lower) || (sseq->upper != upper)) { |
| 266 | warn("Cannot publish {%u,%u,%u}, overlap error\n", | 266 | pr_warn("Cannot publish {%u,%u,%u}, overlap error\n", |
| 267 | type, lower, upper); | 267 | type, lower, upper); |
| 268 | return NULL; | 268 | return NULL; |
| 269 | } | 269 | } |
| 270 | 270 | ||
| @@ -286,8 +286,8 @@ static struct publication *tipc_nameseq_insert_publ(struct name_seq *nseq, | |||
| 286 | /* Fail if upper end overlaps into an existing entry */ | 286 | /* Fail if upper end overlaps into an existing entry */ |
| 287 | if ((inspos < nseq->first_free) && | 287 | if ((inspos < nseq->first_free) && |
| 288 | (upper >= nseq->sseqs[inspos].lower)) { | 288 | (upper >= nseq->sseqs[inspos].lower)) { |
| 289 | warn("Cannot publish {%u,%u,%u}, overlap error\n", | 289 | pr_warn("Cannot publish {%u,%u,%u}, overlap error\n", |
| 290 | type, lower, upper); | 290 | type, lower, upper); |
| 291 | return NULL; | 291 | return NULL; |
| 292 | } | 292 | } |
| 293 | 293 | ||
| @@ -296,8 +296,8 @@ static struct publication *tipc_nameseq_insert_publ(struct name_seq *nseq, | |||
| 296 | struct sub_seq *sseqs = tipc_subseq_alloc(nseq->alloc * 2); | 296 | struct sub_seq *sseqs = tipc_subseq_alloc(nseq->alloc * 2); |
| 297 | 297 | ||
| 298 | if (!sseqs) { | 298 | if (!sseqs) { |
| 299 | warn("Cannot publish {%u,%u,%u}, no memory\n", | 299 | pr_warn("Cannot publish {%u,%u,%u}, no memory\n", |
| 300 | type, lower, upper); | 300 | type, lower, upper); |
| 301 | return NULL; | 301 | return NULL; |
| 302 | } | 302 | } |
| 303 | memcpy(sseqs, nseq->sseqs, | 303 | memcpy(sseqs, nseq->sseqs, |
| @@ -309,8 +309,8 @@ static struct publication *tipc_nameseq_insert_publ(struct name_seq *nseq, | |||
| 309 | 309 | ||
| 310 | info = kzalloc(sizeof(*info), GFP_ATOMIC); | 310 | info = kzalloc(sizeof(*info), GFP_ATOMIC); |
| 311 | if (!info) { | 311 | if (!info) { |
| 312 | warn("Cannot publish {%u,%u,%u}, no memory\n", | 312 | pr_warn("Cannot publish {%u,%u,%u}, no memory\n", |
| 313 | type, lower, upper); | 313 | type, lower, upper); |
| 314 | return NULL; | 314 | return NULL; |
| 315 | } | 315 | } |
| 316 | 316 | ||
| @@ -435,7 +435,7 @@ found: | |||
| 435 | } | 435 | } |
| 436 | 436 | ||
| 437 | /** | 437 | /** |
| 438 | * tipc_nameseq_subscribe: attach a subscription, and issue | 438 | * tipc_nameseq_subscribe - attach a subscription, and issue |
| 439 | * the prescribed number of events if there is any sub- | 439 | * the prescribed number of events if there is any sub- |
| 440 | * sequence overlapping with the requested sequence | 440 | * sequence overlapping with the requested sequence |
| 441 | */ | 441 | */ |
| @@ -492,8 +492,8 @@ struct publication *tipc_nametbl_insert_publ(u32 type, u32 lower, u32 upper, | |||
| 492 | 492 | ||
| 493 | if ((scope < TIPC_ZONE_SCOPE) || (scope > TIPC_NODE_SCOPE) || | 493 | if ((scope < TIPC_ZONE_SCOPE) || (scope > TIPC_NODE_SCOPE) || |
| 494 | (lower > upper)) { | 494 | (lower > upper)) { |
| 495 | dbg("Failed to publish illegal {%u,%u,%u} with scope %u\n", | 495 | pr_debug("Failed to publish illegal {%u,%u,%u} with scope %u\n", |
| 496 | type, lower, upper, scope); | 496 | type, lower, upper, scope); |
| 497 | return NULL; | 497 | return NULL; |
| 498 | } | 498 | } |
| 499 | 499 | ||
| @@ -520,7 +520,7 @@ struct publication *tipc_nametbl_remove_publ(u32 type, u32 lower, | |||
| 520 | return publ; | 520 | return publ; |
| 521 | } | 521 | } |
| 522 | 522 | ||
| 523 | /* | 523 | /** |
| 524 | * tipc_nametbl_translate - perform name translation | 524 | * tipc_nametbl_translate - perform name translation |
| 525 | * | 525 | * |
| 526 | * On entry, 'destnode' is the search domain used during translation. | 526 | * On entry, 'destnode' is the search domain used during translation. |
| @@ -668,8 +668,8 @@ struct publication *tipc_nametbl_publish(u32 type, u32 lower, u32 upper, | |||
| 668 | struct publication *publ; | 668 | struct publication *publ; |
| 669 | 669 | ||
| 670 | if (table.local_publ_count >= tipc_max_publications) { | 670 | if (table.local_publ_count >= tipc_max_publications) { |
| 671 | warn("Publication failed, local publication limit reached (%u)\n", | 671 | pr_warn("Publication failed, local publication limit reached (%u)\n", |
| 672 | tipc_max_publications); | 672 | tipc_max_publications); |
| 673 | return NULL; | 673 | return NULL; |
| 674 | } | 674 | } |
| 675 | 675 | ||
| @@ -702,9 +702,9 @@ int tipc_nametbl_withdraw(u32 type, u32 lower, u32 ref, u32 key) | |||
| 702 | return 1; | 702 | return 1; |
| 703 | } | 703 | } |
| 704 | write_unlock_bh(&tipc_nametbl_lock); | 704 | write_unlock_bh(&tipc_nametbl_lock); |
| 705 | err("Unable to remove local publication\n" | 705 | pr_err("Unable to remove local publication\n" |
| 706 | "(type=%u, lower=%u, ref=%u, key=%u)\n", | 706 | "(type=%u, lower=%u, ref=%u, key=%u)\n", |
| 707 | type, lower, ref, key); | 707 | type, lower, ref, key); |
| 708 | return 0; | 708 | return 0; |
| 709 | } | 709 | } |
| 710 | 710 | ||
| @@ -725,8 +725,8 @@ void tipc_nametbl_subscribe(struct tipc_subscription *s) | |||
| 725 | tipc_nameseq_subscribe(seq, s); | 725 | tipc_nameseq_subscribe(seq, s); |
| 726 | spin_unlock_bh(&seq->lock); | 726 | spin_unlock_bh(&seq->lock); |
| 727 | } else { | 727 | } else { |
| 728 | warn("Failed to create subscription for {%u,%u,%u}\n", | 728 | pr_warn("Failed to create subscription for {%u,%u,%u}\n", |
| 729 | s->seq.type, s->seq.lower, s->seq.upper); | 729 | s->seq.type, s->seq.lower, s->seq.upper); |
| 730 | } | 730 | } |
| 731 | write_unlock_bh(&tipc_nametbl_lock); | 731 | write_unlock_bh(&tipc_nametbl_lock); |
| 732 | } | 732 | } |
| @@ -751,21 +751,22 @@ void tipc_nametbl_unsubscribe(struct tipc_subscription *s) | |||
| 751 | 751 | ||
| 752 | 752 | ||
| 753 | /** | 753 | /** |
| 754 | * subseq_list: print specified sub-sequence contents into the given buffer | 754 | * subseq_list - print specified sub-sequence contents into the given buffer |
| 755 | */ | 755 | */ |
| 756 | static void subseq_list(struct sub_seq *sseq, struct print_buf *buf, u32 depth, | 756 | static int subseq_list(struct sub_seq *sseq, char *buf, int len, u32 depth, |
| 757 | u32 index) | 757 | u32 index) |
| 758 | { | 758 | { |
| 759 | char portIdStr[27]; | 759 | char portIdStr[27]; |
| 760 | const char *scope_str[] = {"", " zone", " cluster", " node"}; | 760 | const char *scope_str[] = {"", " zone", " cluster", " node"}; |
| 761 | struct publication *publ; | 761 | struct publication *publ; |
| 762 | struct name_info *info; | 762 | struct name_info *info; |
| 763 | int ret; | ||
| 763 | 764 | ||
| 764 | tipc_printf(buf, "%-10u %-10u ", sseq->lower, sseq->upper); | 765 | ret = tipc_snprintf(buf, len, "%-10u %-10u ", sseq->lower, sseq->upper); |
| 765 | 766 | ||
| 766 | if (depth == 2) { | 767 | if (depth == 2) { |
| 767 | tipc_printf(buf, "\n"); | 768 | ret += tipc_snprintf(buf - ret, len + ret, "\n"); |
| 768 | return; | 769 | return ret; |
| 769 | } | 770 | } |
| 770 | 771 | ||
| 771 | info = sseq->info; | 772 | info = sseq->info; |
| @@ -774,52 +775,58 @@ static void subseq_list(struct sub_seq *sseq, struct print_buf *buf, u32 depth, | |||
| 774 | sprintf(portIdStr, "<%u.%u.%u:%u>", | 775 | sprintf(portIdStr, "<%u.%u.%u:%u>", |
| 775 | tipc_zone(publ->node), tipc_cluster(publ->node), | 776 | tipc_zone(publ->node), tipc_cluster(publ->node), |
| 776 | tipc_node(publ->node), publ->ref); | 777 | tipc_node(publ->node), publ->ref); |
| 777 | tipc_printf(buf, "%-26s ", portIdStr); | 778 | ret += tipc_snprintf(buf + ret, len - ret, "%-26s ", portIdStr); |
| 778 | if (depth > 3) { | 779 | if (depth > 3) { |
| 779 | tipc_printf(buf, "%-10u %s", publ->key, | 780 | ret += tipc_snprintf(buf + ret, len - ret, "%-10u %s", |
| 780 | scope_str[publ->scope]); | 781 | publ->key, scope_str[publ->scope]); |
| 781 | } | 782 | } |
| 782 | if (!list_is_last(&publ->zone_list, &info->zone_list)) | 783 | if (!list_is_last(&publ->zone_list, &info->zone_list)) |
| 783 | tipc_printf(buf, "\n%33s", " "); | 784 | ret += tipc_snprintf(buf + ret, len - ret, |
| 785 | "\n%33s", " "); | ||
| 784 | }; | 786 | }; |
| 785 | 787 | ||
| 786 | tipc_printf(buf, "\n"); | 788 | ret += tipc_snprintf(buf + ret, len - ret, "\n"); |
| 789 | return ret; | ||
| 787 | } | 790 | } |
| 788 | 791 | ||
| 789 | /** | 792 | /** |
| 790 | * nameseq_list: print specified name sequence contents into the given buffer | 793 | * nameseq_list - print specified name sequence contents into the given buffer |
| 791 | */ | 794 | */ |
| 792 | static void nameseq_list(struct name_seq *seq, struct print_buf *buf, u32 depth, | 795 | static int nameseq_list(struct name_seq *seq, char *buf, int len, u32 depth, |
| 793 | u32 type, u32 lowbound, u32 upbound, u32 index) | 796 | u32 type, u32 lowbound, u32 upbound, u32 index) |
| 794 | { | 797 | { |
| 795 | struct sub_seq *sseq; | 798 | struct sub_seq *sseq; |
| 796 | char typearea[11]; | 799 | char typearea[11]; |
| 800 | int ret = 0; | ||
| 797 | 801 | ||
| 798 | if (seq->first_free == 0) | 802 | if (seq->first_free == 0) |
| 799 | return; | 803 | return 0; |
| 800 | 804 | ||
| 801 | sprintf(typearea, "%-10u", seq->type); | 805 | sprintf(typearea, "%-10u", seq->type); |
| 802 | 806 | ||
| 803 | if (depth == 1) { | 807 | if (depth == 1) { |
| 804 | tipc_printf(buf, "%s\n", typearea); | 808 | ret += tipc_snprintf(buf, len, "%s\n", typearea); |
| 805 | return; | 809 | return ret; |
| 806 | } | 810 | } |
| 807 | 811 | ||
| 808 | for (sseq = seq->sseqs; sseq != &seq->sseqs[seq->first_free]; sseq++) { | 812 | for (sseq = seq->sseqs; sseq != &seq->sseqs[seq->first_free]; sseq++) { |
| 809 | if ((lowbound <= sseq->upper) && (upbound >= sseq->lower)) { | 813 | if ((lowbound <= sseq->upper) && (upbound >= sseq->lower)) { |
| 810 | tipc_printf(buf, "%s ", typearea); | 814 | ret += tipc_snprintf(buf + ret, len - ret, "%s ", |
| 815 | typearea); | ||
| 811 | spin_lock_bh(&seq->lock); | 816 | spin_lock_bh(&seq->lock); |
| 812 | subseq_list(sseq, buf, depth, index); | 817 | ret += subseq_list(sseq, buf + ret, len - ret, |
| 818 | depth, index); | ||
| 813 | spin_unlock_bh(&seq->lock); | 819 | spin_unlock_bh(&seq->lock); |
| 814 | sprintf(typearea, "%10s", " "); | 820 | sprintf(typearea, "%10s", " "); |
| 815 | } | 821 | } |
| 816 | } | 822 | } |
| 823 | return ret; | ||
| 817 | } | 824 | } |
| 818 | 825 | ||
| 819 | /** | 826 | /** |
| 820 | * nametbl_header - print name table header into the given buffer | 827 | * nametbl_header - print name table header into the given buffer |
| 821 | */ | 828 | */ |
| 822 | static void nametbl_header(struct print_buf *buf, u32 depth) | 829 | static int nametbl_header(char *buf, int len, u32 depth) |
| 823 | { | 830 | { |
| 824 | const char *header[] = { | 831 | const char *header[] = { |
| 825 | "Type ", | 832 | "Type ", |
| @@ -829,24 +836,27 @@ static void nametbl_header(struct print_buf *buf, u32 depth) | |||
| 829 | }; | 836 | }; |
| 830 | 837 | ||
| 831 | int i; | 838 | int i; |
| 839 | int ret = 0; | ||
| 832 | 840 | ||
| 833 | if (depth > 4) | 841 | if (depth > 4) |
| 834 | depth = 4; | 842 | depth = 4; |
| 835 | for (i = 0; i < depth; i++) | 843 | for (i = 0; i < depth; i++) |
| 836 | tipc_printf(buf, header[i]); | 844 | ret += tipc_snprintf(buf + ret, len - ret, header[i]); |
| 837 | tipc_printf(buf, "\n"); | 845 | ret += tipc_snprintf(buf + ret, len - ret, "\n"); |
| 846 | return ret; | ||
| 838 | } | 847 | } |
| 839 | 848 | ||
| 840 | /** | 849 | /** |
| 841 | * nametbl_list - print specified name table contents into the given buffer | 850 | * nametbl_list - print specified name table contents into the given buffer |
| 842 | */ | 851 | */ |
| 843 | static void nametbl_list(struct print_buf *buf, u32 depth_info, | 852 | static int nametbl_list(char *buf, int len, u32 depth_info, |
| 844 | u32 type, u32 lowbound, u32 upbound) | 853 | u32 type, u32 lowbound, u32 upbound) |
| 845 | { | 854 | { |
| 846 | struct hlist_head *seq_head; | 855 | struct hlist_head *seq_head; |
| 847 | struct hlist_node *seq_node; | 856 | struct hlist_node *seq_node; |
| 848 | struct name_seq *seq; | 857 | struct name_seq *seq; |
| 849 | int all_types; | 858 | int all_types; |
| 859 | int ret = 0; | ||
| 850 | u32 depth; | 860 | u32 depth; |
| 851 | u32 i; | 861 | u32 i; |
| 852 | 862 | ||
| @@ -854,65 +864,69 @@ static void nametbl_list(struct print_buf *buf, u32 depth_info, | |||
| 854 | depth = (depth_info & ~TIPC_NTQ_ALLTYPES); | 864 | depth = (depth_info & ~TIPC_NTQ_ALLTYPES); |
| 855 | 865 | ||
| 856 | if (depth == 0) | 866 | if (depth == 0) |
| 857 | return; | 867 | return 0; |
| 858 | 868 | ||
| 859 | if (all_types) { | 869 | if (all_types) { |
| 860 | /* display all entries in name table to specified depth */ | 870 | /* display all entries in name table to specified depth */ |
| 861 | nametbl_header(buf, depth); | 871 | ret += nametbl_header(buf, len, depth); |
| 862 | lowbound = 0; | 872 | lowbound = 0; |
| 863 | upbound = ~0; | 873 | upbound = ~0; |
| 864 | for (i = 0; i < tipc_nametbl_size; i++) { | 874 | for (i = 0; i < tipc_nametbl_size; i++) { |
| 865 | seq_head = &table.types[i]; | 875 | seq_head = &table.types[i]; |
| 866 | hlist_for_each_entry(seq, seq_node, seq_head, ns_list) { | 876 | hlist_for_each_entry(seq, seq_node, seq_head, ns_list) { |
| 867 | nameseq_list(seq, buf, depth, seq->type, | 877 | ret += nameseq_list(seq, buf + ret, len - ret, |
| 868 | lowbound, upbound, i); | 878 | depth, seq->type, |
| 879 | lowbound, upbound, i); | ||
| 869 | } | 880 | } |
| 870 | } | 881 | } |
| 871 | } else { | 882 | } else { |
| 872 | /* display only the sequence that matches the specified type */ | 883 | /* display only the sequence that matches the specified type */ |
| 873 | if (upbound < lowbound) { | 884 | if (upbound < lowbound) { |
| 874 | tipc_printf(buf, "invalid name sequence specified\n"); | 885 | ret += tipc_snprintf(buf + ret, len - ret, |
| 875 | return; | 886 | "invalid name sequence specified\n"); |
| 887 | return ret; | ||
| 876 | } | 888 | } |
| 877 | nametbl_header(buf, depth); | 889 | ret += nametbl_header(buf + ret, len - ret, depth); |
| 878 | i = hash(type); | 890 | i = hash(type); |
| 879 | seq_head = &table.types[i]; | 891 | seq_head = &table.types[i]; |
| 880 | hlist_for_each_entry(seq, seq_node, seq_head, ns_list) { | 892 | hlist_for_each_entry(seq, seq_node, seq_head, ns_list) { |
| 881 | if (seq->type == type) { | 893 | if (seq->type == type) { |
| 882 | nameseq_list(seq, buf, depth, type, | 894 | ret += nameseq_list(seq, buf + ret, len - ret, |
| 883 | lowbound, upbound, i); | 895 | depth, type, |
| 896 | lowbound, upbound, i); | ||
| 884 | break; | 897 | break; |
| 885 | } | 898 | } |
| 886 | } | 899 | } |
| 887 | } | 900 | } |
| 901 | return ret; | ||
| 888 | } | 902 | } |
| 889 | 903 | ||
| 890 | #define MAX_NAME_TBL_QUERY 32768 | ||
| 891 | |||
| 892 | struct sk_buff *tipc_nametbl_get(const void *req_tlv_area, int req_tlv_space) | 904 | struct sk_buff *tipc_nametbl_get(const void *req_tlv_area, int req_tlv_space) |
| 893 | { | 905 | { |
| 894 | struct sk_buff *buf; | 906 | struct sk_buff *buf; |
| 895 | struct tipc_name_table_query *argv; | 907 | struct tipc_name_table_query *argv; |
| 896 | struct tlv_desc *rep_tlv; | 908 | struct tlv_desc *rep_tlv; |
| 897 | struct print_buf b; | 909 | char *pb; |
| 910 | int pb_len; | ||
| 898 | int str_len; | 911 | int str_len; |
| 899 | 912 | ||
| 900 | if (!TLV_CHECK(req_tlv_area, req_tlv_space, TIPC_TLV_NAME_TBL_QUERY)) | 913 | if (!TLV_CHECK(req_tlv_area, req_tlv_space, TIPC_TLV_NAME_TBL_QUERY)) |
| 901 | return tipc_cfg_reply_error_string(TIPC_CFG_TLV_ERROR); | 914 | return tipc_cfg_reply_error_string(TIPC_CFG_TLV_ERROR); |
| 902 | 915 | ||
| 903 | buf = tipc_cfg_reply_alloc(TLV_SPACE(MAX_NAME_TBL_QUERY)); | 916 | buf = tipc_cfg_reply_alloc(TLV_SPACE(ULTRA_STRING_MAX_LEN)); |
| 904 | if (!buf) | 917 | if (!buf) |
| 905 | return NULL; | 918 | return NULL; |
| 906 | 919 | ||
| 907 | rep_tlv = (struct tlv_desc *)buf->data; | 920 | rep_tlv = (struct tlv_desc *)buf->data; |
| 908 | tipc_printbuf_init(&b, TLV_DATA(rep_tlv), MAX_NAME_TBL_QUERY); | 921 | pb = TLV_DATA(rep_tlv); |
| 922 | pb_len = ULTRA_STRING_MAX_LEN; | ||
| 909 | argv = (struct tipc_name_table_query *)TLV_DATA(req_tlv_area); | 923 | argv = (struct tipc_name_table_query *)TLV_DATA(req_tlv_area); |
| 910 | read_lock_bh(&tipc_nametbl_lock); | 924 | read_lock_bh(&tipc_nametbl_lock); |
| 911 | nametbl_list(&b, ntohl(argv->depth), ntohl(argv->type), | 925 | str_len = nametbl_list(pb, pb_len, ntohl(argv->depth), |
| 912 | ntohl(argv->lowbound), ntohl(argv->upbound)); | 926 | ntohl(argv->type), |
| 927 | ntohl(argv->lowbound), ntohl(argv->upbound)); | ||
| 913 | read_unlock_bh(&tipc_nametbl_lock); | 928 | read_unlock_bh(&tipc_nametbl_lock); |
| 914 | str_len = tipc_printbuf_validate(&b); | 929 | str_len += 1; /* for "\0" */ |
| 915 | |||
| 916 | skb_put(buf, TLV_SPACE(str_len)); | 930 | skb_put(buf, TLV_SPACE(str_len)); |
| 917 | TLV_SET(rep_tlv, TIPC_TLV_ULTRA_STRING, NULL, str_len); | 931 | TLV_SET(rep_tlv, TIPC_TLV_ULTRA_STRING, NULL, str_len); |
| 918 | 932 | ||
| @@ -940,8 +954,10 @@ void tipc_nametbl_stop(void) | |||
| 940 | /* Verify name table is empty, then release it */ | 954 | /* Verify name table is empty, then release it */ |
| 941 | write_lock_bh(&tipc_nametbl_lock); | 955 | write_lock_bh(&tipc_nametbl_lock); |
| 942 | for (i = 0; i < tipc_nametbl_size; i++) { | 956 | for (i = 0; i < tipc_nametbl_size; i++) { |
| 943 | if (!hlist_empty(&table.types[i])) | 957 | if (hlist_empty(&table.types[i])) |
| 944 | err("tipc_nametbl_stop(): hash chain %u is non-null\n", i); | 958 | continue; |
| 959 | pr_err("nametbl_stop(): orphaned hash chain detected\n"); | ||
| 960 | break; | ||
| 945 | } | 961 | } |
| 946 | kfree(table.types); | 962 | kfree(table.types); |
| 947 | table.types = NULL; | 963 | table.types = NULL; |
diff --git a/net/tipc/net.c b/net/tipc/net.c index 7c236c89cf5e..5b5cea259caf 100644 --- a/net/tipc/net.c +++ b/net/tipc/net.c | |||
| @@ -184,9 +184,9 @@ int tipc_net_start(u32 addr) | |||
| 184 | 184 | ||
| 185 | tipc_cfg_reinit(); | 185 | tipc_cfg_reinit(); |
| 186 | 186 | ||
| 187 | info("Started in network mode\n"); | 187 | pr_info("Started in network mode\n"); |
| 188 | info("Own node address %s, network identity %u\n", | 188 | pr_info("Own node address %s, network identity %u\n", |
| 189 | tipc_addr_string_fill(addr_string, tipc_own_addr), tipc_net_id); | 189 | tipc_addr_string_fill(addr_string, tipc_own_addr), tipc_net_id); |
| 190 | return 0; | 190 | return 0; |
| 191 | } | 191 | } |
| 192 | 192 | ||
| @@ -202,5 +202,5 @@ void tipc_net_stop(void) | |||
| 202 | list_for_each_entry_safe(node, t_node, &tipc_node_list, list) | 202 | list_for_each_entry_safe(node, t_node, &tipc_node_list, list) |
| 203 | tipc_node_delete(node); | 203 | tipc_node_delete(node); |
| 204 | write_unlock_bh(&tipc_net_lock); | 204 | write_unlock_bh(&tipc_net_lock); |
| 205 | info("Left network mode\n"); | 205 | pr_info("Left network mode\n"); |
| 206 | } | 206 | } |
diff --git a/net/tipc/netlink.c b/net/tipc/netlink.c index 7bda8e3d1398..47a839df27dc 100644 --- a/net/tipc/netlink.c +++ b/net/tipc/netlink.c | |||
| @@ -90,7 +90,7 @@ int tipc_netlink_start(void) | |||
| 90 | res = genl_register_family_with_ops(&tipc_genl_family, | 90 | res = genl_register_family_with_ops(&tipc_genl_family, |
| 91 | &tipc_genl_ops, 1); | 91 | &tipc_genl_ops, 1); |
| 92 | if (res) { | 92 | if (res) { |
| 93 | err("Failed to register netlink interface\n"); | 93 | pr_err("Failed to register netlink interface\n"); |
| 94 | return res; | 94 | return res; |
| 95 | } | 95 | } |
| 96 | 96 | ||
diff --git a/net/tipc/node.c b/net/tipc/node.c index d4fd341e6e0d..d21db204e25a 100644 --- a/net/tipc/node.c +++ b/net/tipc/node.c | |||
| @@ -105,7 +105,7 @@ struct tipc_node *tipc_node_create(u32 addr) | |||
| 105 | n_ptr = kzalloc(sizeof(*n_ptr), GFP_ATOMIC); | 105 | n_ptr = kzalloc(sizeof(*n_ptr), GFP_ATOMIC); |
| 106 | if (!n_ptr) { | 106 | if (!n_ptr) { |
| 107 | spin_unlock_bh(&node_create_lock); | 107 | spin_unlock_bh(&node_create_lock); |
| 108 | warn("Node creation failed, no memory\n"); | 108 | pr_warn("Node creation failed, no memory\n"); |
| 109 | return NULL; | 109 | return NULL; |
| 110 | } | 110 | } |
| 111 | 111 | ||
| @@ -151,8 +151,8 @@ void tipc_node_link_up(struct tipc_node *n_ptr, struct tipc_link *l_ptr) | |||
| 151 | 151 | ||
| 152 | n_ptr->working_links++; | 152 | n_ptr->working_links++; |
| 153 | 153 | ||
| 154 | info("Established link <%s> on network plane %c\n", | 154 | pr_info("Established link <%s> on network plane %c\n", |
| 155 | l_ptr->name, l_ptr->b_ptr->net_plane); | 155 | l_ptr->name, l_ptr->b_ptr->net_plane); |
| 156 | 156 | ||
| 157 | if (!active[0]) { | 157 | if (!active[0]) { |
| 158 | active[0] = active[1] = l_ptr; | 158 | active[0] = active[1] = l_ptr; |
| @@ -160,7 +160,7 @@ void tipc_node_link_up(struct tipc_node *n_ptr, struct tipc_link *l_ptr) | |||
| 160 | return; | 160 | return; |
| 161 | } | 161 | } |
| 162 | if (l_ptr->priority < active[0]->priority) { | 162 | if (l_ptr->priority < active[0]->priority) { |
| 163 | info("New link <%s> becomes standby\n", l_ptr->name); | 163 | pr_info("New link <%s> becomes standby\n", l_ptr->name); |
| 164 | return; | 164 | return; |
| 165 | } | 165 | } |
| 166 | tipc_link_send_duplicate(active[0], l_ptr); | 166 | tipc_link_send_duplicate(active[0], l_ptr); |
| @@ -168,9 +168,9 @@ void tipc_node_link_up(struct tipc_node *n_ptr, struct tipc_link *l_ptr) | |||
| 168 | active[0] = l_ptr; | 168 | active[0] = l_ptr; |
| 169 | return; | 169 | return; |
| 170 | } | 170 | } |
| 171 | info("Old link <%s> becomes standby\n", active[0]->name); | 171 | pr_info("Old link <%s> becomes standby\n", active[0]->name); |
| 172 | if (active[1] != active[0]) | 172 | if (active[1] != active[0]) |
| 173 | info("Old link <%s> becomes standby\n", active[1]->name); | 173 | pr_info("Old link <%s> becomes standby\n", active[1]->name); |
| 174 | active[0] = active[1] = l_ptr; | 174 | active[0] = active[1] = l_ptr; |
| 175 | } | 175 | } |
| 176 | 176 | ||
| @@ -211,11 +211,11 @@ void tipc_node_link_down(struct tipc_node *n_ptr, struct tipc_link *l_ptr) | |||
| 211 | n_ptr->working_links--; | 211 | n_ptr->working_links--; |
| 212 | 212 | ||
| 213 | if (!tipc_link_is_active(l_ptr)) { | 213 | if (!tipc_link_is_active(l_ptr)) { |
| 214 | info("Lost standby link <%s> on network plane %c\n", | 214 | pr_info("Lost standby link <%s> on network plane %c\n", |
| 215 | l_ptr->name, l_ptr->b_ptr->net_plane); | 215 | l_ptr->name, l_ptr->b_ptr->net_plane); |
| 216 | return; | 216 | return; |
| 217 | } | 217 | } |
| 218 | info("Lost link <%s> on network plane %c\n", | 218 | pr_info("Lost link <%s> on network plane %c\n", |
| 219 | l_ptr->name, l_ptr->b_ptr->net_plane); | 219 | l_ptr->name, l_ptr->b_ptr->net_plane); |
| 220 | 220 | ||
| 221 | active = &n_ptr->active_links[0]; | 221 | active = &n_ptr->active_links[0]; |
| @@ -290,8 +290,8 @@ static void node_lost_contact(struct tipc_node *n_ptr) | |||
| 290 | char addr_string[16]; | 290 | char addr_string[16]; |
| 291 | u32 i; | 291 | u32 i; |
| 292 | 292 | ||
| 293 | info("Lost contact with %s\n", | 293 | pr_info("Lost contact with %s\n", |
| 294 | tipc_addr_string_fill(addr_string, n_ptr->addr)); | 294 | tipc_addr_string_fill(addr_string, n_ptr->addr)); |
| 295 | 295 | ||
| 296 | /* Flush broadcast link info associated with lost node */ | 296 | /* Flush broadcast link info associated with lost node */ |
| 297 | if (n_ptr->bclink.supported) { | 297 | if (n_ptr->bclink.supported) { |
diff --git a/net/tipc/node_subscr.c b/net/tipc/node_subscr.c index 7a27344108fe..5e34b015da45 100644 --- a/net/tipc/node_subscr.c +++ b/net/tipc/node_subscr.c | |||
| @@ -51,7 +51,8 @@ void tipc_nodesub_subscribe(struct tipc_node_subscr *node_sub, u32 addr, | |||
| 51 | 51 | ||
| 52 | node_sub->node = tipc_node_find(addr); | 52 | node_sub->node = tipc_node_find(addr); |
| 53 | if (!node_sub->node) { | 53 | if (!node_sub->node) { |
| 54 | warn("Node subscription rejected, unknown node 0x%x\n", addr); | 54 | pr_warn("Node subscription rejected, unknown node 0x%x\n", |
| 55 | addr); | ||
| 55 | return; | 56 | return; |
| 56 | } | 57 | } |
| 57 | node_sub->handle_node_down = handle_down; | 58 | node_sub->handle_node_down = handle_down; |
diff --git a/net/tipc/port.c b/net/tipc/port.c index 2ad37a4db376..07c42fba672b 100644 --- a/net/tipc/port.c +++ b/net/tipc/port.c | |||
| @@ -69,7 +69,7 @@ static u32 port_peerport(struct tipc_port *p_ptr) | |||
| 69 | return msg_destport(&p_ptr->phdr); | 69 | return msg_destport(&p_ptr->phdr); |
| 70 | } | 70 | } |
| 71 | 71 | ||
| 72 | /* | 72 | /** |
| 73 | * tipc_port_peer_msg - verify message was sent by connected port's peer | 73 | * tipc_port_peer_msg - verify message was sent by connected port's peer |
| 74 | * | 74 | * |
| 75 | * Handles cases where the node's network address has changed from | 75 | * Handles cases where the node's network address has changed from |
| @@ -191,7 +191,7 @@ void tipc_port_recv_mcast(struct sk_buff *buf, struct tipc_port_list *dp) | |||
| 191 | struct sk_buff *b = skb_clone(buf, GFP_ATOMIC); | 191 | struct sk_buff *b = skb_clone(buf, GFP_ATOMIC); |
| 192 | 192 | ||
| 193 | if (b == NULL) { | 193 | if (b == NULL) { |
| 194 | warn("Unable to deliver multicast message(s)\n"); | 194 | pr_warn("Unable to deliver multicast message(s)\n"); |
| 195 | goto exit; | 195 | goto exit; |
| 196 | } | 196 | } |
| 197 | if ((index == 0) && (cnt != 0)) | 197 | if ((index == 0) && (cnt != 0)) |
| @@ -221,12 +221,12 @@ struct tipc_port *tipc_createport_raw(void *usr_handle, | |||
| 221 | 221 | ||
| 222 | p_ptr = kzalloc(sizeof(*p_ptr), GFP_ATOMIC); | 222 | p_ptr = kzalloc(sizeof(*p_ptr), GFP_ATOMIC); |
| 223 | if (!p_ptr) { | 223 | if (!p_ptr) { |
| 224 | warn("Port creation failed, no memory\n"); | 224 | pr_warn("Port creation failed, no memory\n"); |
| 225 | return NULL; | 225 | return NULL; |
| 226 | } | 226 | } |
| 227 | ref = tipc_ref_acquire(p_ptr, &p_ptr->lock); | 227 | ref = tipc_ref_acquire(p_ptr, &p_ptr->lock); |
| 228 | if (!ref) { | 228 | if (!ref) { |
| 229 | warn("Port creation failed, reference table exhausted\n"); | 229 | pr_warn("Port creation failed, ref. table exhausted\n"); |
| 230 | kfree(p_ptr); | 230 | kfree(p_ptr); |
| 231 | return NULL; | 231 | return NULL; |
| 232 | } | 232 | } |
| @@ -581,67 +581,73 @@ exit: | |||
| 581 | kfree_skb(buf); | 581 | kfree_skb(buf); |
| 582 | } | 582 | } |
| 583 | 583 | ||
| 584 | static void port_print(struct tipc_port *p_ptr, struct print_buf *buf, int full_id) | 584 | static int port_print(struct tipc_port *p_ptr, char *buf, int len, int full_id) |
| 585 | { | 585 | { |
| 586 | struct publication *publ; | 586 | struct publication *publ; |
| 587 | int ret; | ||
| 587 | 588 | ||
| 588 | if (full_id) | 589 | if (full_id) |
| 589 | tipc_printf(buf, "<%u.%u.%u:%u>:", | 590 | ret = tipc_snprintf(buf, len, "<%u.%u.%u:%u>:", |
| 590 | tipc_zone(tipc_own_addr), tipc_cluster(tipc_own_addr), | 591 | tipc_zone(tipc_own_addr), |
| 591 | tipc_node(tipc_own_addr), p_ptr->ref); | 592 | tipc_cluster(tipc_own_addr), |
| 593 | tipc_node(tipc_own_addr), p_ptr->ref); | ||
| 592 | else | 594 | else |
| 593 | tipc_printf(buf, "%-10u:", p_ptr->ref); | 595 | ret = tipc_snprintf(buf, len, "%-10u:", p_ptr->ref); |
| 594 | 596 | ||
| 595 | if (p_ptr->connected) { | 597 | if (p_ptr->connected) { |
| 596 | u32 dport = port_peerport(p_ptr); | 598 | u32 dport = port_peerport(p_ptr); |
| 597 | u32 destnode = port_peernode(p_ptr); | 599 | u32 destnode = port_peernode(p_ptr); |
| 598 | 600 | ||
| 599 | tipc_printf(buf, " connected to <%u.%u.%u:%u>", | 601 | ret += tipc_snprintf(buf + ret, len - ret, |
| 600 | tipc_zone(destnode), tipc_cluster(destnode), | 602 | " connected to <%u.%u.%u:%u>", |
| 601 | tipc_node(destnode), dport); | 603 | tipc_zone(destnode), |
| 604 | tipc_cluster(destnode), | ||
| 605 | tipc_node(destnode), dport); | ||
| 602 | if (p_ptr->conn_type != 0) | 606 | if (p_ptr->conn_type != 0) |
| 603 | tipc_printf(buf, " via {%u,%u}", | 607 | ret += tipc_snprintf(buf + ret, len - ret, |
| 604 | p_ptr->conn_type, | 608 | " via {%u,%u}", p_ptr->conn_type, |
| 605 | p_ptr->conn_instance); | 609 | p_ptr->conn_instance); |
| 606 | } else if (p_ptr->published) { | 610 | } else if (p_ptr->published) { |
| 607 | tipc_printf(buf, " bound to"); | 611 | ret += tipc_snprintf(buf + ret, len - ret, " bound to"); |
| 608 | list_for_each_entry(publ, &p_ptr->publications, pport_list) { | 612 | list_for_each_entry(publ, &p_ptr->publications, pport_list) { |
| 609 | if (publ->lower == publ->upper) | 613 | if (publ->lower == publ->upper) |
| 610 | tipc_printf(buf, " {%u,%u}", publ->type, | 614 | ret += tipc_snprintf(buf + ret, len - ret, |
| 611 | publ->lower); | 615 | " {%u,%u}", publ->type, |
| 616 | publ->lower); | ||
| 612 | else | 617 | else |
| 613 | tipc_printf(buf, " {%u,%u,%u}", publ->type, | 618 | ret += tipc_snprintf(buf + ret, len - ret, |
| 614 | publ->lower, publ->upper); | 619 | " {%u,%u,%u}", publ->type, |
| 620 | publ->lower, publ->upper); | ||
| 615 | } | 621 | } |
| 616 | } | 622 | } |
| 617 | tipc_printf(buf, "\n"); | 623 | ret += tipc_snprintf(buf + ret, len - ret, "\n"); |
| 624 | return ret; | ||
| 618 | } | 625 | } |
| 619 | 626 | ||
| 620 | #define MAX_PORT_QUERY 32768 | ||
| 621 | |||
| 622 | struct sk_buff *tipc_port_get_ports(void) | 627 | struct sk_buff *tipc_port_get_ports(void) |
| 623 | { | 628 | { |
| 624 | struct sk_buff *buf; | 629 | struct sk_buff *buf; |
| 625 | struct tlv_desc *rep_tlv; | 630 | struct tlv_desc *rep_tlv; |
| 626 | struct print_buf pb; | 631 | char *pb; |
| 632 | int pb_len; | ||
| 627 | struct tipc_port *p_ptr; | 633 | struct tipc_port *p_ptr; |
| 628 | int str_len; | 634 | int str_len = 0; |
| 629 | 635 | ||
| 630 | buf = tipc_cfg_reply_alloc(TLV_SPACE(MAX_PORT_QUERY)); | 636 | buf = tipc_cfg_reply_alloc(TLV_SPACE(ULTRA_STRING_MAX_LEN)); |
| 631 | if (!buf) | 637 | if (!buf) |
| 632 | return NULL; | 638 | return NULL; |
| 633 | rep_tlv = (struct tlv_desc *)buf->data; | 639 | rep_tlv = (struct tlv_desc *)buf->data; |
| 640 | pb = TLV_DATA(rep_tlv); | ||
| 641 | pb_len = ULTRA_STRING_MAX_LEN; | ||
| 634 | 642 | ||
| 635 | tipc_printbuf_init(&pb, TLV_DATA(rep_tlv), MAX_PORT_QUERY); | ||
| 636 | spin_lock_bh(&tipc_port_list_lock); | 643 | spin_lock_bh(&tipc_port_list_lock); |
| 637 | list_for_each_entry(p_ptr, &ports, port_list) { | 644 | list_for_each_entry(p_ptr, &ports, port_list) { |
| 638 | spin_lock_bh(p_ptr->lock); | 645 | spin_lock_bh(p_ptr->lock); |
| 639 | port_print(p_ptr, &pb, 0); | 646 | str_len += port_print(p_ptr, pb, pb_len, 0); |
| 640 | spin_unlock_bh(p_ptr->lock); | 647 | spin_unlock_bh(p_ptr->lock); |
| 641 | } | 648 | } |
| 642 | spin_unlock_bh(&tipc_port_list_lock); | 649 | spin_unlock_bh(&tipc_port_list_lock); |
| 643 | str_len = tipc_printbuf_validate(&pb); | 650 | str_len += 1; /* for "\0" */ |
| 644 | |||
| 645 | skb_put(buf, TLV_SPACE(str_len)); | 651 | skb_put(buf, TLV_SPACE(str_len)); |
| 646 | TLV_SET(rep_tlv, TIPC_TLV_ULTRA_STRING, NULL, str_len); | 652 | TLV_SET(rep_tlv, TIPC_TLV_ULTRA_STRING, NULL, str_len); |
| 647 | 653 | ||
| @@ -906,11 +912,11 @@ int tipc_createport(void *usr_handle, | |||
| 906 | 912 | ||
| 907 | up_ptr = kmalloc(sizeof(*up_ptr), GFP_ATOMIC); | 913 | up_ptr = kmalloc(sizeof(*up_ptr), GFP_ATOMIC); |
| 908 | if (!up_ptr) { | 914 | if (!up_ptr) { |
| 909 | warn("Port creation failed, no memory\n"); | 915 | pr_warn("Port creation failed, no memory\n"); |
| 910 | return -ENOMEM; | 916 | return -ENOMEM; |
| 911 | } | 917 | } |
| 912 | p_ptr = (struct tipc_port *)tipc_createport_raw(NULL, port_dispatcher, | 918 | p_ptr = tipc_createport_raw(NULL, port_dispatcher, port_wakeup, |
| 913 | port_wakeup, importance); | 919 | importance); |
| 914 | if (!p_ptr) { | 920 | if (!p_ptr) { |
| 915 | kfree(up_ptr); | 921 | kfree(up_ptr); |
| 916 | return -ENOMEM; | 922 | return -ENOMEM; |
| @@ -1078,8 +1084,7 @@ int tipc_disconnect_port(struct tipc_port *tp_ptr) | |||
| 1078 | if (tp_ptr->connected) { | 1084 | if (tp_ptr->connected) { |
| 1079 | tp_ptr->connected = 0; | 1085 | tp_ptr->connected = 0; |
| 1080 | /* let timer expire on it's own to avoid deadlock! */ | 1086 | /* let timer expire on it's own to avoid deadlock! */ |
| 1081 | tipc_nodesub_unsubscribe( | 1087 | tipc_nodesub_unsubscribe(&tp_ptr->subscription); |
| 1082 | &((struct tipc_port *)tp_ptr)->subscription); | ||
| 1083 | res = 0; | 1088 | res = 0; |
| 1084 | } else { | 1089 | } else { |
| 1085 | res = -ENOTCONN; | 1090 | res = -ENOTCONN; |
| @@ -1099,7 +1104,7 @@ int tipc_disconnect(u32 ref) | |||
| 1099 | p_ptr = tipc_port_lock(ref); | 1104 | p_ptr = tipc_port_lock(ref); |
| 1100 | if (!p_ptr) | 1105 | if (!p_ptr) |
| 1101 | return -EINVAL; | 1106 | return -EINVAL; |
| 1102 | res = tipc_disconnect_port((struct tipc_port *)p_ptr); | 1107 | res = tipc_disconnect_port(p_ptr); |
| 1103 | tipc_port_unlock(p_ptr); | 1108 | tipc_port_unlock(p_ptr); |
| 1104 | return res; | 1109 | return res; |
| 1105 | } | 1110 | } |
diff --git a/net/tipc/port.h b/net/tipc/port.h index 98cbec9c4532..4660e3065790 100644 --- a/net/tipc/port.h +++ b/net/tipc/port.h | |||
| @@ -79,6 +79,7 @@ typedef void (*tipc_continue_event) (void *usr_handle, u32 portref); | |||
| 79 | * struct user_port - TIPC user port (used with native API) | 79 | * struct user_port - TIPC user port (used with native API) |
| 80 | * @usr_handle: user-specified field | 80 | * @usr_handle: user-specified field |
| 81 | * @ref: object reference to associated TIPC port | 81 | * @ref: object reference to associated TIPC port |
| 82 | * | ||
| 82 | * <various callback routines> | 83 | * <various callback routines> |
| 83 | */ | 84 | */ |
| 84 | struct user_port { | 85 | struct user_port { |
diff --git a/net/tipc/ref.c b/net/tipc/ref.c index 5cada0e38e03..2a2a938dc22c 100644 --- a/net/tipc/ref.c +++ b/net/tipc/ref.c | |||
| @@ -153,11 +153,11 @@ u32 tipc_ref_acquire(void *object, spinlock_t **lock) | |||
| 153 | struct reference *entry = NULL; | 153 | struct reference *entry = NULL; |
| 154 | 154 | ||
| 155 | if (!object) { | 155 | if (!object) { |
| 156 | err("Attempt to acquire reference to non-existent object\n"); | 156 | pr_err("Attempt to acquire ref. to non-existent obj\n"); |
| 157 | return 0; | 157 | return 0; |
| 158 | } | 158 | } |
| 159 | if (!tipc_ref_table.entries) { | 159 | if (!tipc_ref_table.entries) { |
| 160 | err("Reference table not found during acquisition attempt\n"); | 160 | pr_err("Ref. table not found in acquisition attempt\n"); |
| 161 | return 0; | 161 | return 0; |
| 162 | } | 162 | } |
| 163 | 163 | ||
| @@ -211,7 +211,7 @@ void tipc_ref_discard(u32 ref) | |||
| 211 | u32 index_mask; | 211 | u32 index_mask; |
| 212 | 212 | ||
| 213 | if (!tipc_ref_table.entries) { | 213 | if (!tipc_ref_table.entries) { |
| 214 | err("Reference table not found during discard attempt\n"); | 214 | pr_err("Ref. table not found during discard attempt\n"); |
| 215 | return; | 215 | return; |
| 216 | } | 216 | } |
| 217 | 217 | ||
| @@ -222,11 +222,11 @@ void tipc_ref_discard(u32 ref) | |||
| 222 | write_lock_bh(&ref_table_lock); | 222 | write_lock_bh(&ref_table_lock); |
| 223 | 223 | ||
| 224 | if (!entry->object) { | 224 | if (!entry->object) { |
| 225 | err("Attempt to discard reference to non-existent object\n"); | 225 | pr_err("Attempt to discard ref. to non-existent obj\n"); |
| 226 | goto exit; | 226 | goto exit; |
| 227 | } | 227 | } |
| 228 | if (entry->ref != ref) { | 228 | if (entry->ref != ref) { |
| 229 | err("Attempt to discard non-existent reference\n"); | 229 | pr_err("Attempt to discard non-existent reference\n"); |
| 230 | goto exit; | 230 | goto exit; |
| 231 | } | 231 | } |
| 232 | 232 | ||
diff --git a/net/tipc/socket.c b/net/tipc/socket.c index 5577a447f531..09dc5b97e079 100644 --- a/net/tipc/socket.c +++ b/net/tipc/socket.c | |||
| @@ -34,12 +34,12 @@ | |||
| 34 | * POSSIBILITY OF SUCH DAMAGE. | 34 | * POSSIBILITY OF SUCH DAMAGE. |
| 35 | */ | 35 | */ |
| 36 | 36 | ||
| 37 | #include <linux/export.h> | ||
| 38 | #include <net/sock.h> | ||
| 39 | |||
| 40 | #include "core.h" | 37 | #include "core.h" |
| 41 | #include "port.h" | 38 | #include "port.h" |
| 42 | 39 | ||
| 40 | #include <linux/export.h> | ||
| 41 | #include <net/sock.h> | ||
| 42 | |||
| 43 | #define SS_LISTENING -1 /* socket is listening */ | 43 | #define SS_LISTENING -1 /* socket is listening */ |
| 44 | #define SS_READY -2 /* socket is connectionless */ | 44 | #define SS_READY -2 /* socket is connectionless */ |
| 45 | 45 | ||
| @@ -54,7 +54,7 @@ struct tipc_sock { | |||
| 54 | }; | 54 | }; |
| 55 | 55 | ||
| 56 | #define tipc_sk(sk) ((struct tipc_sock *)(sk)) | 56 | #define tipc_sk(sk) ((struct tipc_sock *)(sk)) |
| 57 | #define tipc_sk_port(sk) ((struct tipc_port *)(tipc_sk(sk)->p)) | 57 | #define tipc_sk_port(sk) (tipc_sk(sk)->p) |
| 58 | 58 | ||
| 59 | #define tipc_rx_ready(sock) (!skb_queue_empty(&sock->sk->sk_receive_queue) || \ | 59 | #define tipc_rx_ready(sock) (!skb_queue_empty(&sock->sk->sk_receive_queue) || \ |
| 60 | (sock->state == SS_DISCONNECTING)) | 60 | (sock->state == SS_DISCONNECTING)) |
| @@ -1699,9 +1699,8 @@ static int getsockopt(struct socket *sock, | |||
| 1699 | return put_user(sizeof(value), ol); | 1699 | return put_user(sizeof(value), ol); |
| 1700 | } | 1700 | } |
| 1701 | 1701 | ||
| 1702 | /** | 1702 | /* Protocol switches for the various types of TIPC sockets */ |
| 1703 | * Protocol switches for the various types of TIPC sockets | 1703 | |
| 1704 | */ | ||
| 1705 | static const struct proto_ops msg_ops = { | 1704 | static const struct proto_ops msg_ops = { |
| 1706 | .owner = THIS_MODULE, | 1705 | .owner = THIS_MODULE, |
| 1707 | .family = AF_TIPC, | 1706 | .family = AF_TIPC, |
| @@ -1788,13 +1787,13 @@ int tipc_socket_init(void) | |||
| 1788 | 1787 | ||
| 1789 | res = proto_register(&tipc_proto, 1); | 1788 | res = proto_register(&tipc_proto, 1); |
| 1790 | if (res) { | 1789 | if (res) { |
| 1791 | err("Failed to register TIPC protocol type\n"); | 1790 | pr_err("Failed to register TIPC protocol type\n"); |
| 1792 | goto out; | 1791 | goto out; |
| 1793 | } | 1792 | } |
| 1794 | 1793 | ||
| 1795 | res = sock_register(&tipc_family_ops); | 1794 | res = sock_register(&tipc_family_ops); |
| 1796 | if (res) { | 1795 | if (res) { |
| 1797 | err("Failed to register TIPC socket type\n"); | 1796 | pr_err("Failed to register TIPC socket type\n"); |
| 1798 | proto_unregister(&tipc_proto); | 1797 | proto_unregister(&tipc_proto); |
| 1799 | goto out; | 1798 | goto out; |
| 1800 | } | 1799 | } |
diff --git a/net/tipc/subscr.c b/net/tipc/subscr.c index f976e9cd6a72..5ed5965eb0be 100644 --- a/net/tipc/subscr.c +++ b/net/tipc/subscr.c | |||
| @@ -305,8 +305,8 @@ static struct tipc_subscription *subscr_subscribe(struct tipc_subscr *s, | |||
| 305 | 305 | ||
| 306 | /* Refuse subscription if global limit exceeded */ | 306 | /* Refuse subscription if global limit exceeded */ |
| 307 | if (atomic_read(&topsrv.subscription_count) >= tipc_max_subscriptions) { | 307 | if (atomic_read(&topsrv.subscription_count) >= tipc_max_subscriptions) { |
| 308 | warn("Subscription rejected, subscription limit reached (%u)\n", | 308 | pr_warn("Subscription rejected, limit reached (%u)\n", |
| 309 | tipc_max_subscriptions); | 309 | tipc_max_subscriptions); |
| 310 | subscr_terminate(subscriber); | 310 | subscr_terminate(subscriber); |
| 311 | return NULL; | 311 | return NULL; |
| 312 | } | 312 | } |
| @@ -314,7 +314,7 @@ static struct tipc_subscription *subscr_subscribe(struct tipc_subscr *s, | |||
| 314 | /* Allocate subscription object */ | 314 | /* Allocate subscription object */ |
| 315 | sub = kmalloc(sizeof(*sub), GFP_ATOMIC); | 315 | sub = kmalloc(sizeof(*sub), GFP_ATOMIC); |
| 316 | if (!sub) { | 316 | if (!sub) { |
| 317 | warn("Subscription rejected, no memory\n"); | 317 | pr_warn("Subscription rejected, no memory\n"); |
| 318 | subscr_terminate(subscriber); | 318 | subscr_terminate(subscriber); |
| 319 | return NULL; | 319 | return NULL; |
| 320 | } | 320 | } |
| @@ -328,7 +328,7 @@ static struct tipc_subscription *subscr_subscribe(struct tipc_subscr *s, | |||
| 328 | if ((!(sub->filter & TIPC_SUB_PORTS) == | 328 | if ((!(sub->filter & TIPC_SUB_PORTS) == |
| 329 | !(sub->filter & TIPC_SUB_SERVICE)) || | 329 | !(sub->filter & TIPC_SUB_SERVICE)) || |
| 330 | (sub->seq.lower > sub->seq.upper)) { | 330 | (sub->seq.lower > sub->seq.upper)) { |
| 331 | warn("Subscription rejected, illegal request\n"); | 331 | pr_warn("Subscription rejected, illegal request\n"); |
| 332 | kfree(sub); | 332 | kfree(sub); |
| 333 | subscr_terminate(subscriber); | 333 | subscr_terminate(subscriber); |
| 334 | return NULL; | 334 | return NULL; |
| @@ -440,7 +440,7 @@ static void subscr_named_msg_event(void *usr_handle, | |||
| 440 | /* Create subscriber object */ | 440 | /* Create subscriber object */ |
| 441 | subscriber = kzalloc(sizeof(struct tipc_subscriber), GFP_ATOMIC); | 441 | subscriber = kzalloc(sizeof(struct tipc_subscriber), GFP_ATOMIC); |
| 442 | if (subscriber == NULL) { | 442 | if (subscriber == NULL) { |
| 443 | warn("Subscriber rejected, no memory\n"); | 443 | pr_warn("Subscriber rejected, no memory\n"); |
| 444 | return; | 444 | return; |
| 445 | } | 445 | } |
| 446 | INIT_LIST_HEAD(&subscriber->subscription_list); | 446 | INIT_LIST_HEAD(&subscriber->subscription_list); |
| @@ -458,7 +458,7 @@ static void subscr_named_msg_event(void *usr_handle, | |||
| 458 | NULL, | 458 | NULL, |
| 459 | &subscriber->port_ref); | 459 | &subscriber->port_ref); |
| 460 | if (subscriber->port_ref == 0) { | 460 | if (subscriber->port_ref == 0) { |
| 461 | warn("Subscriber rejected, unable to create port\n"); | 461 | pr_warn("Subscriber rejected, unable to create port\n"); |
| 462 | kfree(subscriber); | 462 | kfree(subscriber); |
| 463 | return; | 463 | return; |
| 464 | } | 464 | } |
| @@ -517,7 +517,7 @@ int tipc_subscr_start(void) | |||
| 517 | return 0; | 517 | return 0; |
| 518 | 518 | ||
| 519 | failed: | 519 | failed: |
| 520 | err("Failed to create subscription service\n"); | 520 | pr_err("Failed to create subscription service\n"); |
| 521 | return res; | 521 | return res; |
| 522 | } | 522 | } |
| 523 | 523 | ||
