]> git.karo-electronics.de Git - linux-beck.git/commitdiff
Merge branch 'tipc_net-next' of git://git.kernel.org/pub/scm/linux/kernel/git/paulg...
authorDavid S. Miller <davem@davemloft.net>
Tue, 17 Jul 2012 05:33:32 +0000 (22:33 -0700)
committerDavid S. Miller <davem@davemloft.net>
Tue, 17 Jul 2012 05:35:04 +0000 (22:35 -0700)
Paul Gortmaker says:

====================
This is the same eight commits as sent for review last week[1],
with just the incorporation of the pr_fmt change as suggested
by JoeP.  There was no additional change requests, so unless you
can see something else you'd like me to change, please pull.
 ...
Erik Hugne (5):
      tipc: use standard printk shortcut macros (pr_err etc.)
      tipc: remove TIPC packet debugging functions and macros
      tipc: simplify print buffer handling in tipc_printf
      tipc: phase out most of the struct print_buf usage
      tipc: remove print_buf and deprecated log buffer code

Paul Gortmaker (3):
      tipc: factor stats struct out of the larger link struct
      tipc: limit error messages relating to memory leak to one line
      tipc: simplify link_print by divorcing it from using tipc_printf
====================

Signed-off-by: David S. Miller <davem@davemloft.net>
25 files changed:
include/linux/tipc_config.h
net/tipc/Kconfig
net/tipc/bcast.c
net/tipc/bearer.c
net/tipc/bearer.h
net/tipc/config.c
net/tipc/core.c
net/tipc/core.h
net/tipc/discover.c
net/tipc/handler.c
net/tipc/link.c
net/tipc/link.h
net/tipc/log.c
net/tipc/log.h [deleted file]
net/tipc/msg.c
net/tipc/name_distr.c
net/tipc/name_table.c
net/tipc/net.c
net/tipc/netlink.c
net/tipc/node.c
net/tipc/node_subscr.c
net/tipc/port.c
net/tipc/ref.c
net/tipc/socket.c
net/tipc/subscr.c

index 9730b0e51e4689474c23017fd0dc37786c12a852..c98928420100962e005aabc73ecfd9b73d395fea 100644 (file)
 #define  TIPC_CMD_SET_LINK_TOL      0x4107    /* tx link_config, rx none */
 #define  TIPC_CMD_SET_LINK_PRI      0x4108    /* tx link_config, rx none */
 #define  TIPC_CMD_SET_LINK_WINDOW   0x4109    /* tx link_config, rx none */
-#define  TIPC_CMD_SET_LOG_SIZE      0x410A    /* tx unsigned, rx none */
-#define  TIPC_CMD_DUMP_LOG          0x410B    /* tx none, rx ultra_string */
+#define  TIPC_CMD_SET_LOG_SIZE      0x410A    /* obsoleted */
+#define  TIPC_CMD_DUMP_LOG          0x410B    /* obsoleted */
 #define  TIPC_CMD_RESET_LINK_STATS  0x410C    /* tx link_name, rx none */
 
 /*
index 2c5954b8593337925a2079a522c8117c4ae10d77..585460180ffb22df0ac0ae966ecc49cf87dcb8cc 100644 (file)
@@ -41,29 +41,4 @@ config TIPC_PORTS
          Setting this to a smaller value saves some memory,
          setting it to higher allows for more ports.
 
-config TIPC_LOG
-       int "Size of log buffer"
-       depends on TIPC_ADVANCED
-       range 0 32768
-       default "0"
-       help
-         Size (in bytes) of TIPC's internal log buffer, which records the
-         occurrence of significant events.  Can range from 0 to 32768 bytes;
-         default is 0.
-
-         There is no need to enable the log buffer unless the node will be
-         managed remotely via TIPC.
-
-config TIPC_DEBUG
-       bool "Enable debugging support"
-       default n
-       help
-         Saying Y here enables TIPC debugging capabilities used by developers.
-         Most users do not need to bother; if unsure, just say N.
-
-         Enabling debugging support causes TIPC to display data about its
-         internal state when certain abnormal conditions occur. It also
-         makes it easy for developers to capture additional information of
-         interest using the dbg() or msg_dbg() macros.
-
 endif # TIPC
index d9df34fbd7ca601363cce2f616076a9b77f674f1..e4e6d8cd47e6fb8ec63c2cd6893c663b79f3bb0c 100644 (file)
@@ -701,48 +701,43 @@ void tipc_bcbearer_sort(void)
 
 int tipc_bclink_stats(char *buf, const u32 buf_size)
 {
-       struct print_buf pb;
+       int ret;
+       struct tipc_stats *s;
 
        if (!bcl)
                return 0;
 
-       tipc_printbuf_init(&pb, buf, buf_size);
-
        spin_lock_bh(&bc_lock);
 
-       tipc_printf(&pb, "Link <%s>\n"
-                        "  Window:%u packets\n",
-                   bcl->name, bcl->queue_limit[0]);
-       tipc_printf(&pb, "  RX packets:%u fragments:%u/%u bundles:%u/%u\n",
-                   bcl->stats.recv_info,
-                   bcl->stats.recv_fragments,
-                   bcl->stats.recv_fragmented,
-                   bcl->stats.recv_bundles,
-                   bcl->stats.recv_bundled);
-       tipc_printf(&pb, "  TX packets:%u fragments:%u/%u bundles:%u/%u\n",
-                   bcl->stats.sent_info,
-                   bcl->stats.sent_fragments,
-                   bcl->stats.sent_fragmented,
-                   bcl->stats.sent_bundles,
-                   bcl->stats.sent_bundled);
-       tipc_printf(&pb, "  RX naks:%u defs:%u dups:%u\n",
-                   bcl->stats.recv_nacks,
-                   bcl->stats.deferred_recv,
-                   bcl->stats.duplicates);
-       tipc_printf(&pb, "  TX naks:%u acks:%u dups:%u\n",
-                   bcl->stats.sent_nacks,
-                   bcl->stats.sent_acks,
-                   bcl->stats.retransmitted);
-       tipc_printf(&pb, "  Congestion bearer:%u link:%u  Send queue max:%u avg:%u\n",
-                   bcl->stats.bearer_congs,
-                   bcl->stats.link_congs,
-                   bcl->stats.max_queue_sz,
-                   bcl->stats.queue_sz_counts
-                   ? (bcl->stats.accu_queue_sz / bcl->stats.queue_sz_counts)
-                   : 0);
+       s = &bcl->stats;
+
+       ret = tipc_snprintf(buf, buf_size, "Link <%s>\n"
+                           "  Window:%u packets\n",
+                           bcl->name, bcl->queue_limit[0]);
+       ret += tipc_snprintf(buf + ret, buf_size - ret,
+                            "  RX packets:%u fragments:%u/%u bundles:%u/%u\n",
+                            s->recv_info, s->recv_fragments,
+                            s->recv_fragmented, s->recv_bundles,
+                            s->recv_bundled);
+       ret += tipc_snprintf(buf + ret, buf_size - ret,
+                            "  TX packets:%u fragments:%u/%u bundles:%u/%u\n",
+                            s->sent_info, s->sent_fragments,
+                            s->sent_fragmented, s->sent_bundles,
+                            s->sent_bundled);
+       ret += tipc_snprintf(buf + ret, buf_size - ret,
+                            "  RX naks:%u defs:%u dups:%u\n",
+                            s->recv_nacks, s->deferred_recv, s->duplicates);
+       ret += tipc_snprintf(buf + ret, buf_size - ret,
+                            "  TX naks:%u acks:%u dups:%u\n",
+                            s->sent_nacks, s->sent_acks, s->retransmitted);
+       ret += tipc_snprintf(buf + ret, buf_size - ret,
+                            "  Congestion bearer:%u link:%u  Send queue max:%u avg:%u\n",
+                            s->bearer_congs, s->link_congs, s->max_queue_sz,
+                            s->queue_sz_counts ?
+                            (s->accu_queue_sz / s->queue_sz_counts) : 0);
 
        spin_unlock_bh(&bc_lock);
-       return tipc_printbuf_validate(&pb);
+       return ret;
 }
 
 int tipc_bclink_reset_stats(void)
@@ -880,7 +875,7 @@ void tipc_port_list_add(struct tipc_port_list *pl_ptr, u32 port)
                if (!item->next) {
                        item->next = kmalloc(sizeof(*item), GFP_ATOMIC);
                        if (!item->next) {
-                               warn("Incomplete multicast delivery, no memory\n");
+                               pr_warn("Incomplete multicast delivery, no memory\n");
                                return;
                        }
                        item->next->next = NULL;
index 86b703f55092a3387aa64359eb8291facbb59b3c..09e71241265ddf11ffec7ac0505c6377396f247b 100644 (file)
@@ -123,28 +123,30 @@ int tipc_register_media(struct tipc_media *m_ptr)
 exit:
        write_unlock_bh(&tipc_net_lock);
        if (res)
-               warn("Media <%s> registration error\n", m_ptr->name);
+               pr_warn("Media <%s> registration error\n", m_ptr->name);
        return res;
 }
 
 /**
  * tipc_media_addr_printf - record media address in print buffer
  */
-void tipc_media_addr_printf(struct print_buf *pb, struct tipc_media_addr *a)
+void tipc_media_addr_printf(char *buf, int len, struct tipc_media_addr *a)
 {
        char addr_str[MAX_ADDR_STR];
        struct tipc_media *m_ptr;
+       int ret;
 
        m_ptr = media_find_id(a->media_id);
 
        if (m_ptr && !m_ptr->addr2str(a, addr_str, sizeof(addr_str)))
-               tipc_printf(pb, "%s(%s)", m_ptr->name, addr_str);
+               ret = tipc_snprintf(buf, len, "%s(%s)", m_ptr->name, addr_str);
        else {
                u32 i;
 
-               tipc_printf(pb, "UNKNOWN(%u)", a->media_id);
+               ret = tipc_snprintf(buf, len, "UNKNOWN(%u)", a->media_id);
                for (i = 0; i < sizeof(a->value); i++)
-                       tipc_printf(pb, "-%02x", a->value[i]);
+                       ret += tipc_snprintf(buf - ret, len + ret,
+                                           "-%02x", a->value[i]);
        }
 }
 
@@ -418,12 +420,12 @@ int tipc_enable_bearer(const char *name, u32 disc_domain, u32 priority)
        int res = -EINVAL;
 
        if (!tipc_own_addr) {
-               warn("Bearer <%s> rejected, not supported in standalone mode\n",
-                    name);
+               pr_warn("Bearer <%s> rejected, not supported in standalone mode\n",
+                       name);
                return -ENOPROTOOPT;
        }
        if (!bearer_name_validate(name, &b_names)) {
-               warn("Bearer <%s> rejected, illegal name\n", name);
+               pr_warn("Bearer <%s> rejected, illegal name\n", name);
                return -EINVAL;
        }
        if (tipc_addr_domain_valid(disc_domain) &&
@@ -435,12 +437,13 @@ int tipc_enable_bearer(const char *name, u32 disc_domain, u32 priority)
                        res = 0;   /* accept specified node in own cluster */
        }
        if (res) {
-               warn("Bearer <%s> rejected, illegal discovery domain\n", name);
+               pr_warn("Bearer <%s> rejected, illegal discovery domain\n",
+                       name);
                return -EINVAL;
        }
        if ((priority > TIPC_MAX_LINK_PRI) &&
            (priority != TIPC_MEDIA_LINK_PRI)) {
-               warn("Bearer <%s> rejected, illegal priority\n", name);
+               pr_warn("Bearer <%s> rejected, illegal priority\n", name);
                return -EINVAL;
        }
 
@@ -448,8 +451,8 @@ int tipc_enable_bearer(const char *name, u32 disc_domain, u32 priority)
 
        m_ptr = tipc_media_find(b_names.media_name);
        if (!m_ptr) {
-               warn("Bearer <%s> rejected, media <%s> not registered\n", name,
-                    b_names.media_name);
+               pr_warn("Bearer <%s> rejected, media <%s> not registered\n",
+                       name, b_names.media_name);
                goto exit;
        }
 
@@ -465,24 +468,25 @@ restart:
                        continue;
                }
                if (!strcmp(name, tipc_bearers[i].name)) {
-                       warn("Bearer <%s> rejected, already enabled\n", name);
+                       pr_warn("Bearer <%s> rejected, already enabled\n",
+                               name);
                        goto exit;
                }
                if ((tipc_bearers[i].priority == priority) &&
                    (++with_this_prio > 2)) {
                        if (priority-- == 0) {
-                               warn("Bearer <%s> rejected, duplicate priority\n",
-                                    name);
+                               pr_warn("Bearer <%s> rejected, duplicate priority\n",
+                                       name);
                                goto exit;
                        }
-                       warn("Bearer <%s> priority adjustment required %u->%u\n",
-                            name, priority + 1, priority);
+                       pr_warn("Bearer <%s> priority adjustment required %u->%u\n",
+                               name, priority + 1, priority);
                        goto restart;
                }
        }
        if (bearer_id >= MAX_BEARERS) {
-               warn("Bearer <%s> rejected, bearer limit reached (%u)\n",
-                    name, MAX_BEARERS);
+               pr_warn("Bearer <%s> rejected, bearer limit reached (%u)\n",
+                       name, MAX_BEARERS);
                goto exit;
        }
 
@@ -490,7 +494,8 @@ restart:
        strcpy(b_ptr->name, name);
        res = m_ptr->enable_bearer(b_ptr);
        if (res) {
-               warn("Bearer <%s> rejected, enable failure (%d)\n", name, -res);
+               pr_warn("Bearer <%s> rejected, enable failure (%d)\n",
+                       name, -res);
                goto exit;
        }
 
@@ -508,12 +513,13 @@ restart:
        res = tipc_disc_create(b_ptr, &m_ptr->bcast_addr, disc_domain);
        if (res) {
                bearer_disable(b_ptr);
-               warn("Bearer <%s> rejected, discovery object creation failed\n",
-                    name);
+               pr_warn("Bearer <%s> rejected, discovery object creation failed\n",
+                       name);
                goto exit;
        }
-       info("Enabled bearer <%s>, discovery domain %s, priority %u\n",
-            name, tipc_addr_string_fill(addr_string, disc_domain), priority);
+       pr_info("Enabled bearer <%s>, discovery domain %s, priority %u\n",
+               name,
+               tipc_addr_string_fill(addr_string, disc_domain), priority);
 exit:
        write_unlock_bh(&tipc_net_lock);
        return res;
@@ -531,12 +537,12 @@ int tipc_block_bearer(const char *name)
        read_lock_bh(&tipc_net_lock);
        b_ptr = tipc_bearer_find(name);
        if (!b_ptr) {
-               warn("Attempt to block unknown bearer <%s>\n", name);
+               pr_warn("Attempt to block unknown bearer <%s>\n", name);
                read_unlock_bh(&tipc_net_lock);
                return -EINVAL;
        }
 
-       info("Blocking bearer <%s>\n", name);
+       pr_info("Blocking bearer <%s>\n", name);
        spin_lock_bh(&b_ptr->lock);
        b_ptr->blocked = 1;
        list_splice_init(&b_ptr->cong_links, &b_ptr->links);
@@ -562,7 +568,7 @@ static void bearer_disable(struct tipc_bearer *b_ptr)
        struct tipc_link *l_ptr;
        struct tipc_link *temp_l_ptr;
 
-       info("Disabling bearer <%s>\n", b_ptr->name);
+       pr_info("Disabling bearer <%s>\n", b_ptr->name);
        spin_lock_bh(&b_ptr->lock);
        b_ptr->blocked = 1;
        b_ptr->media->disable_bearer(b_ptr);
@@ -584,7 +590,7 @@ int tipc_disable_bearer(const char *name)
        write_lock_bh(&tipc_net_lock);
        b_ptr = tipc_bearer_find(name);
        if (b_ptr == NULL) {
-               warn("Attempt to disable unknown bearer <%s>\n", name);
+               pr_warn("Attempt to disable unknown bearer <%s>\n", name);
                res = -EINVAL;
        } else {
                bearer_disable(b_ptr);
index 4680de118aff1269eed1a8228b8a0b6496639529..dd4c2abf08e7de95085fb6b3e9e87cf22eb4b9ec 100644 (file)
@@ -179,7 +179,7 @@ void tipc_eth_media_stop(void);
 
 int tipc_media_set_priority(const char *name, u32 new_value);
 int tipc_media_set_window(const char *name, u32 new_value);
-void tipc_media_addr_printf(struct print_buf *pb, struct tipc_media_addr *a);
+void tipc_media_addr_printf(char *buf, int len, struct tipc_media_addr *a);
 struct sk_buff *tipc_media_get_names(void);
 
 struct sk_buff *tipc_bearer_get_names(void);
index c5712a34381058593e7c5207c48a545f73ad6717..a056a3852f71f0a63109c7fe5188f8117e7144c7 100644 (file)
@@ -39,6 +39,8 @@
 #include "name_table.h"
 #include "config.h"
 
+#define REPLY_TRUNCATED "<truncated>\n"
+
 static u32 config_port_ref;
 
 static DEFINE_SPINLOCK(config_lock);
@@ -104,13 +106,12 @@ struct sk_buff *tipc_cfg_reply_string_type(u16 tlv_type, char *string)
        return buf;
 }
 
-#define MAX_STATS_INFO 2000
-
 static struct sk_buff *tipc_show_stats(void)
 {
        struct sk_buff *buf;
        struct tlv_desc *rep_tlv;
-       struct print_buf pb;
+       char *pb;
+       int pb_len;
        int str_len;
        u32 value;
 
@@ -121,17 +122,16 @@ static struct sk_buff *tipc_show_stats(void)
        if (value != 0)
                return tipc_cfg_reply_error_string("unsupported argument");
 
-       buf = tipc_cfg_reply_alloc(TLV_SPACE(MAX_STATS_INFO));
+       buf = tipc_cfg_reply_alloc(TLV_SPACE(ULTRA_STRING_MAX_LEN));
        if (buf == NULL)
                return NULL;
 
        rep_tlv = (struct tlv_desc *)buf->data;
-       tipc_printbuf_init(&pb, (char *)TLV_DATA(rep_tlv), MAX_STATS_INFO);
-
-       tipc_printf(&pb, "TIPC version " TIPC_MOD_VER "\n");
+       pb = TLV_DATA(rep_tlv);
+       pb_len = ULTRA_STRING_MAX_LEN;
 
-       /* Use additional tipc_printf()'s to return more info ... */
-       str_len = tipc_printbuf_validate(&pb);
+       str_len = tipc_snprintf(pb, pb_len, "TIPC version " TIPC_MOD_VER "\n");
+       str_len += 1;   /* for "\0" */
        skb_put(buf, TLV_SPACE(str_len));
        TLV_SET(rep_tlv, TIPC_TLV_ULTRA_STRING, NULL, str_len);
 
@@ -334,12 +334,6 @@ struct sk_buff *tipc_cfg_do_cmd(u32 orig_node, u16 cmd, const void *request_area
        case TIPC_CMD_SHOW_PORTS:
                rep_tlv_buf = tipc_port_get_ports();
                break;
-       case TIPC_CMD_SET_LOG_SIZE:
-               rep_tlv_buf = tipc_log_resize_cmd(req_tlv_area, req_tlv_space);
-               break;
-       case TIPC_CMD_DUMP_LOG:
-               rep_tlv_buf = tipc_log_dump();
-               break;
        case TIPC_CMD_SHOW_STATS:
                rep_tlv_buf = tipc_show_stats();
                break;
@@ -399,6 +393,8 @@ struct sk_buff *tipc_cfg_do_cmd(u32 orig_node, u16 cmd, const void *request_area
        case TIPC_CMD_GET_MAX_CLUSTERS:
        case TIPC_CMD_SET_MAX_NODES:
        case TIPC_CMD_GET_MAX_NODES:
+       case TIPC_CMD_SET_LOG_SIZE:
+       case TIPC_CMD_DUMP_LOG:
                rep_tlv_buf = tipc_cfg_reply_error_string(TIPC_CFG_NOT_SUPPORTED
                                                          " (obsolete command)");
                break;
@@ -408,6 +404,15 @@ struct sk_buff *tipc_cfg_do_cmd(u32 orig_node, u16 cmd, const void *request_area
                break;
        }
 
+       WARN_ON(rep_tlv_buf->len > TLV_SPACE(ULTRA_STRING_MAX_LEN));
+
+       /* Append an error message if we cannot return all requested data */
+       if (rep_tlv_buf->len == TLV_SPACE(ULTRA_STRING_MAX_LEN)) {
+               if (*(rep_tlv_buf->data + ULTRA_STRING_MAX_LEN) != '\0')
+                       sprintf(rep_tlv_buf->data + rep_tlv_buf->len -
+                               sizeof(REPLY_TRUNCATED) - 1, REPLY_TRUNCATED);
+       }
+
        /* Return reply buffer */
 exit:
        spin_unlock_bh(&config_lock);
@@ -432,7 +437,7 @@ static void cfg_named_msg_event(void *userdata,
        if ((size < sizeof(*req_hdr)) ||
            (size != TCM_ALIGN(ntohl(req_hdr->tcm_len))) ||
            (ntohs(req_hdr->tcm_flags) != TCM_F_REQUEST)) {
-               warn("Invalid configuration message discarded\n");
+               pr_warn("Invalid configuration message discarded\n");
                return;
        }
 
@@ -478,7 +483,7 @@ int tipc_cfg_init(void)
        return 0;
 
 failed:
-       err("Unable to create configuration service\n");
+       pr_err("Unable to create configuration service\n");
        return res;
 }
 
@@ -494,7 +499,7 @@ void tipc_cfg_reinit(void)
        seq.lower = seq.upper = tipc_own_addr;
        res = tipc_publish(config_port_ref, TIPC_ZONE_SCOPE, &seq);
        if (res)
-               err("Unable to reinitialize configuration service\n");
+               pr_err("Unable to reinitialize configuration service\n");
 }
 
 void tipc_cfg_stop(void)
index f7b95239ebda5b521b2652bae465dccb235a5c25..6586eac6a50eb5508447c8d505b67d0d261d1f00 100644 (file)
  * POSSIBILITY OF SUCH DAMAGE.
  */
 
-#include <linux/module.h>
-
 #include "core.h"
 #include "ref.h"
 #include "name_table.h"
 #include "subscr.h"
 #include "config.h"
 
+#include <linux/module.h>
 
 #ifndef CONFIG_TIPC_PORTS
 #define CONFIG_TIPC_PORTS 8191
 #endif
 
-#ifndef CONFIG_TIPC_LOG
-#define CONFIG_TIPC_LOG 0
-#endif
 
 /* global variables used by multiple sub-systems within TIPC */
 int tipc_random;
@@ -125,7 +121,6 @@ static void tipc_core_stop(void)
        tipc_nametbl_stop();
        tipc_ref_table_stop();
        tipc_socket_stop();
-       tipc_log_resize(0);
 }
 
 /**
@@ -161,10 +156,7 @@ static int __init tipc_init(void)
 {
        int res;
 
-       if (tipc_log_resize(CONFIG_TIPC_LOG) != 0)
-               warn("Unable to create log buffer\n");
-
-       info("Activated (version " TIPC_MOD_VER ")\n");
+       pr_info("Activated (version " TIPC_MOD_VER ")\n");
 
        tipc_own_addr = 0;
        tipc_remote_management = 1;
@@ -175,9 +167,9 @@ static int __init tipc_init(void)
 
        res = tipc_core_start();
        if (res)
-               err("Unable to start in single node mode\n");
+               pr_err("Unable to start in single node mode\n");
        else
-               info("Started in single node mode\n");
+               pr_info("Started in single node mode\n");
        return res;
 }
 
@@ -185,7 +177,7 @@ static void __exit tipc_exit(void)
 {
        tipc_core_stop_net();
        tipc_core_stop();
-       info("Deactivated\n");
+       pr_info("Deactivated\n");
 }
 
 module_init(tipc_init);
index 2a9bb99537b30e3c69d431aee337b4f3fe277872..fd42e106c18539152822d1bfdceefc25a036b164 100644 (file)
@@ -37,6 +37,8 @@
 #ifndef _TIPC_CORE_H
 #define _TIPC_CORE_H
 
+#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
+
 #include <linux/tipc.h>
 #include <linux/tipc_config.h>
 #include <linux/types.h>
 
 #define TIPC_MOD_VER "2.0.0"
 
-struct tipc_msg;       /* msg.h */
-struct print_buf;      /* log.h */
-
-/*
- * TIPC system monitoring code
- */
-
-/*
- * TIPC's print buffer subsystem supports the following print buffers:
- *
- * TIPC_NULL : null buffer (i.e. print nowhere)
- * TIPC_CONS : system console
- * TIPC_LOG  : TIPC log buffer
- * &buf             : user-defined buffer (struct print_buf *)
- *
- * Note: TIPC_LOG is configured to echo its output to the system console;
- *       user-defined buffers can be configured to do the same thing.
- */
-extern struct print_buf *const TIPC_NULL;
-extern struct print_buf *const TIPC_CONS;
-extern struct print_buf *const TIPC_LOG;
-
-void tipc_printf(struct print_buf *, const char *fmt, ...);
-
-/*
- * TIPC_OUTPUT is the destination print buffer for system messages.
- */
-#ifndef TIPC_OUTPUT
-#define TIPC_OUTPUT TIPC_LOG
-#endif
+#define ULTRA_STRING_MAX_LEN 32768
 
-#define err(fmt, arg...)  tipc_printf(TIPC_OUTPUT, \
-                                     KERN_ERR "TIPC: " fmt, ## arg)
-#define warn(fmt, arg...) tipc_printf(TIPC_OUTPUT, \
-                                     KERN_WARNING "TIPC: " fmt, ## arg)
-#define info(fmt, arg...) tipc_printf(TIPC_OUTPUT, \
-                                     KERN_NOTICE "TIPC: " fmt, ## arg)
-
-#ifdef CONFIG_TIPC_DEBUG
-
-/*
- * DBG_OUTPUT is the destination print buffer for debug messages.
- */
-#ifndef DBG_OUTPUT
-#define DBG_OUTPUT TIPC_LOG
-#endif
-
-#define dbg(fmt, arg...)  tipc_printf(DBG_OUTPUT, KERN_DEBUG fmt, ## arg);
-
-#define msg_dbg(msg, txt) tipc_msg_dbg(DBG_OUTPUT, msg, txt);
-
-void tipc_msg_dbg(struct print_buf *, struct tipc_msg *, const char *);
-
-#else
-
-#define dbg(fmt, arg...)       do {} while (0)
-#define msg_dbg(msg, txt)      do {} while (0)
-
-#define tipc_msg_dbg(buf, msg, txt) do {} while (0)
-
-#endif
+struct tipc_msg;       /* msg.h */
 
+int tipc_snprintf(char *buf, int len, const char *fmt, ...);
 
 /*
  * TIPC-specific error codes
index ae054cfe179ffc88fcacd477b4b24c2be3285259..50eaa403eb6e696b6a8e8a9a552f9ca60eb25e2b 100644 (file)
@@ -100,14 +100,12 @@ static void disc_dupl_alert(struct tipc_bearer *b_ptr, u32 node_addr,
 {
        char node_addr_str[16];
        char media_addr_str[64];
-       struct print_buf pb;
 
        tipc_addr_string_fill(node_addr_str, node_addr);
-       tipc_printbuf_init(&pb, media_addr_str, sizeof(media_addr_str));
-       tipc_media_addr_printf(&pb, media_addr);
-       tipc_printbuf_validate(&pb);
-       warn("Duplicate %s using %s seen on <%s>\n",
-            node_addr_str, media_addr_str, b_ptr->name);
+       tipc_media_addr_printf(media_addr_str, sizeof(media_addr_str),
+                              media_addr);
+       pr_warn("Duplicate %s using %s seen on <%s>\n", node_addr_str,
+               media_addr_str, b_ptr->name);
 }
 
 /**
index 9c6f22ff1c6d663c4ebda76803feb80628cc1c30..7a52d3922f3c2bde5b220cc96db7964fbe566e7a 100644 (file)
@@ -57,14 +57,14 @@ unsigned int tipc_k_signal(Handler routine, unsigned long argument)
        struct queue_item *item;
 
        if (!handler_enabled) {
-               err("Signal request ignored by handler\n");
+               pr_err("Signal request ignored by handler\n");
                return -ENOPROTOOPT;
        }
 
        spin_lock_bh(&qitem_lock);
        item = kmem_cache_alloc(tipc_queue_item_cache, GFP_ATOMIC);
        if (!item) {
-               err("Signal queue out of memory\n");
+               pr_err("Signal queue out of memory\n");
                spin_unlock_bh(&qitem_lock);
                return -ENOMEM;
        }
index f6bf4830ddfe028713cb2b443be569289387f3bb..1c1e6151875e6a16c93096063b2065a419dd5e0d 100644 (file)
 #include "discover.h"
 #include "config.h"
 
+/*
+ * Error message prefixes
+ */
+static const char *link_co_err = "Link changeover error, ";
+static const char *link_rst_msg = "Resetting link ";
+static const char *link_unk_evt = "Unknown link event ";
 
 /*
  * Out-of-range value for link session numbers
@@ -300,20 +306,20 @@ struct tipc_link *tipc_link_create(struct tipc_node *n_ptr,
 
        if (n_ptr->link_cnt >= 2) {
                tipc_addr_string_fill(addr_string, n_ptr->addr);
-               err("Attempt to establish third link to %s\n", addr_string);
+               pr_err("Attempt to establish third link to %s\n", addr_string);
                return NULL;
        }
 
        if (n_ptr->links[b_ptr->identity]) {
                tipc_addr_string_fill(addr_string, n_ptr->addr);
-               err("Attempt to establish second link on <%s> to %s\n",
-                   b_ptr->name, addr_string);
+               pr_err("Attempt to establish second link on <%s> to %s\n",
+                      b_ptr->name, addr_string);
                return NULL;
        }
 
        l_ptr = kzalloc(sizeof(*l_ptr), GFP_ATOMIC);
        if (!l_ptr) {
-               warn("Link creation failed, no memory\n");
+               pr_warn("Link creation failed, no memory\n");
                return NULL;
        }
 
@@ -371,7 +377,7 @@ struct tipc_link *tipc_link_create(struct tipc_node *n_ptr,
 void tipc_link_delete(struct tipc_link *l_ptr)
 {
        if (!l_ptr) {
-               err("Attempt to delete non-existent link\n");
+               pr_err("Attempt to delete non-existent link\n");
                return;
        }
 
@@ -632,8 +638,8 @@ static void link_state_event(struct tipc_link *l_ptr, unsigned int event)
                        link_set_timer(l_ptr, cont_intv / 4);
                        break;
                case RESET_MSG:
-                       info("Resetting link <%s>, requested by peer\n",
-                            l_ptr->name);
+                       pr_info("%s<%s>, requested by peer\n", link_rst_msg,
+                               l_ptr->name);
                        tipc_link_reset(l_ptr);
                        l_ptr->state = RESET_RESET;
                        l_ptr->fsm_msg_cnt = 0;
@@ -642,7 +648,7 @@ static void link_state_event(struct tipc_link *l_ptr, unsigned int event)
                        link_set_timer(l_ptr, cont_intv);
                        break;
                default:
-                       err("Unknown link event %u in WW state\n", event);
+                       pr_err("%s%u in WW state\n", link_unk_evt, event);
                }
                break;
        case WORKING_UNKNOWN:
@@ -654,8 +660,8 @@ static void link_state_event(struct tipc_link *l_ptr, unsigned int event)
                        link_set_timer(l_ptr, cont_intv);
                        break;
                case RESET_MSG:
-                       info("Resetting link <%s>, requested by peer "
-                            "while probing\n", l_ptr->name);
+                       pr_info("%s<%s>, requested by peer while probing\n",
+                               link_rst_msg, l_ptr->name);
                        tipc_link_reset(l_ptr);
                        l_ptr->state = RESET_RESET;
                        l_ptr->fsm_msg_cnt = 0;
@@ -680,8 +686,8 @@ static void link_state_event(struct tipc_link *l_ptr, unsigned int event)
                                l_ptr->fsm_msg_cnt++;
                                link_set_timer(l_ptr, cont_intv / 4);
                        } else {        /* Link has failed */
-                               warn("Resetting link <%s>, peer not responding\n",
-                                    l_ptr->name);
+                               pr_warn("%s<%s>, peer not responding\n",
+                                       link_rst_msg, l_ptr->name);
                                tipc_link_reset(l_ptr);
                                l_ptr->state = RESET_UNKNOWN;
                                l_ptr->fsm_msg_cnt = 0;
@@ -692,7 +698,7 @@ static void link_state_event(struct tipc_link *l_ptr, unsigned int event)
                        }
                        break;
                default:
-                       err("Unknown link event %u in WU state\n", event);
+                       pr_err("%s%u in WU state\n", link_unk_evt, event);
                }
                break;
        case RESET_UNKNOWN:
@@ -726,7 +732,7 @@ static void link_state_event(struct tipc_link *l_ptr, unsigned int event)
                        link_set_timer(l_ptr, cont_intv);
                        break;
                default:
-                       err("Unknown link event %u in RU state\n", event);
+                       pr_err("%s%u in RU state\n", link_unk_evt, event);
                }
                break;
        case RESET_RESET:
@@ -751,11 +757,11 @@ static void link_state_event(struct tipc_link *l_ptr, unsigned int event)
                        link_set_timer(l_ptr, cont_intv);
                        break;
                default:
-                       err("Unknown link event %u in RR state\n", event);
+                       pr_err("%s%u in RR state\n", link_unk_evt, event);
                }
                break;
        default:
-               err("Unknown link state %u/%u\n", l_ptr->state, event);
+               pr_err("Unknown link state %u/%u\n", l_ptr->state, event);
        }
 }
 
@@ -856,7 +862,8 @@ int tipc_link_send_buf(struct tipc_link *l_ptr, struct sk_buff *buf)
                }
                kfree_skb(buf);
                if (imp > CONN_MANAGER) {
-                       warn("Resetting link <%s>, send queue full", l_ptr->name);
+                       pr_warn("%s<%s>, send queue full", link_rst_msg,
+                               l_ptr->name);
                        tipc_link_reset(l_ptr);
                }
                return dsz;
@@ -1409,8 +1416,8 @@ static void link_reset_all(unsigned long addr)
 
        tipc_node_lock(n_ptr);
 
-       warn("Resetting all links to %s\n",
-            tipc_addr_string_fill(addr_string, n_ptr->addr));
+       pr_warn("Resetting all links to %s\n",
+               tipc_addr_string_fill(addr_string, n_ptr->addr));
 
        for (i = 0; i < MAX_BEARERS; i++) {
                if (n_ptr->links[i]) {
@@ -1428,7 +1435,7 @@ static void link_retransmit_failure(struct tipc_link *l_ptr,
 {
        struct tipc_msg *msg = buf_msg(buf);
 
-       warn("Retransmission failure on link <%s>\n", l_ptr->name);
+       pr_warn("Retransmission failure on link <%s>\n", l_ptr->name);
 
        if (l_ptr->addr) {
                /* Handle failure on standard link */
@@ -1440,21 +1447,23 @@ static void link_retransmit_failure(struct tipc_link *l_ptr,
                struct tipc_node *n_ptr;
                char addr_string[16];
 
-               info("Msg seq number: %u,  ", msg_seqno(msg));
-               info("Outstanding acks: %lu\n",
-                    (unsigned long) TIPC_SKB_CB(buf)->handle);
+               pr_info("Msg seq number: %u,  ", msg_seqno(msg));
+               pr_cont("Outstanding acks: %lu\n",
+                       (unsigned long) TIPC_SKB_CB(buf)->handle);
 
                n_ptr = tipc_bclink_retransmit_to();
                tipc_node_lock(n_ptr);
 
                tipc_addr_string_fill(addr_string, n_ptr->addr);
-               info("Broadcast link info for %s\n", addr_string);
-               info("Supportable: %d,  ", n_ptr->bclink.supportable);
-               info("Supported: %d,  ", n_ptr->bclink.supported);
-               info("Acked: %u\n", n_ptr->bclink.acked);
-               info("Last in: %u,  ", n_ptr->bclink.last_in);
-               info("Oos state: %u,  ", n_ptr->bclink.oos_state);
-               info("Last sent: %u\n", n_ptr->bclink.last_sent);
+               pr_info("Broadcast link info for %s\n", addr_string);
+               pr_info("Supportable: %d,  Supported: %d,  Acked: %u\n",
+                       n_ptr->bclink.supportable,
+                       n_ptr->bclink.supported,
+                       n_ptr->bclink.acked);
+               pr_info("Last in: %u,  Oos state: %u,  Last sent: %u\n",
+                       n_ptr->bclink.last_in,
+                       n_ptr->bclink.oos_state,
+                       n_ptr->bclink.last_sent);
 
                tipc_k_signal((Handler)link_reset_all, (unsigned long)n_ptr->addr);
 
@@ -1479,8 +1488,8 @@ void tipc_link_retransmit(struct tipc_link *l_ptr, struct sk_buff *buf,
                        l_ptr->retransm_queue_head = msg_seqno(msg);
                        l_ptr->retransm_queue_size = retransmits;
                } else {
-                       err("Unexpected retransmit on link %s (qsize=%d)\n",
-                           l_ptr->name, l_ptr->retransm_queue_size);
+                       pr_err("Unexpected retransmit on link %s (qsize=%d)\n",
+                              l_ptr->name, l_ptr->retransm_queue_size);
                }
                return;
        } else {
@@ -2074,8 +2083,9 @@ static void link_recv_proto_msg(struct tipc_link *l_ptr, struct sk_buff *buf)
 
                if (msg_linkprio(msg) &&
                    (msg_linkprio(msg) != l_ptr->priority)) {
-                       warn("Resetting link <%s>, priority change %u->%u\n",
-                            l_ptr->name, l_ptr->priority, msg_linkprio(msg));
+                       pr_warn("%s<%s>, priority change %u->%u\n",
+                               link_rst_msg, l_ptr->name, l_ptr->priority,
+                               msg_linkprio(msg));
                        l_ptr->priority = msg_linkprio(msg);
                        tipc_link_reset(l_ptr); /* Enforce change to take effect */
                        break;
@@ -2139,15 +2149,13 @@ static void tipc_link_tunnel(struct tipc_link *l_ptr,
 
        tunnel = l_ptr->owner->active_links[selector & 1];
        if (!tipc_link_is_up(tunnel)) {
-               warn("Link changeover error, "
-                    "tunnel link no longer available\n");
+               pr_warn("%stunnel link no longer available\n", link_co_err);
                return;
        }
        msg_set_size(tunnel_hdr, length + INT_H_SIZE);
        buf = tipc_buf_acquire(length + INT_H_SIZE);
        if (!buf) {
-               warn("Link changeover error, "
-                    "unable to send tunnel msg\n");
+               pr_warn("%sunable to send tunnel msg\n", link_co_err);
                return;
        }
        skb_copy_to_linear_data(buf, tunnel_hdr, INT_H_SIZE);
@@ -2173,8 +2181,7 @@ void tipc_link_changeover(struct tipc_link *l_ptr)
                return;
 
        if (!l_ptr->owner->permit_changeover) {
-               warn("Link changeover error, "
-                    "peer did not permit changeover\n");
+               pr_warn("%speer did not permit changeover\n", link_co_err);
                return;
        }
 
@@ -2192,8 +2199,8 @@ void tipc_link_changeover(struct tipc_link *l_ptr)
                        msg_set_size(&tunnel_hdr, INT_H_SIZE);
                        tipc_link_send_buf(tunnel, buf);
                } else {
-                       warn("Link changeover error, "
-                            "unable to send changeover msg\n");
+                       pr_warn("%sunable to send changeover msg\n",
+                               link_co_err);
                }
                return;
        }
@@ -2246,8 +2253,8 @@ void tipc_link_send_duplicate(struct tipc_link *l_ptr, struct tipc_link *tunnel)
                msg_set_size(&tunnel_hdr, length + INT_H_SIZE);
                outbuf = tipc_buf_acquire(length + INT_H_SIZE);
                if (outbuf == NULL) {
-                       warn("Link changeover error, "
-                            "unable to send duplicate msg\n");
+                       pr_warn("%sunable to send duplicate msg\n",
+                               link_co_err);
                        return;
                }
                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,
        if (!dest_link)
                goto exit;
        if (dest_link == *l_ptr) {
-               err("Unexpected changeover message on link <%s>\n",
-                   (*l_ptr)->name);
+               pr_err("Unexpected changeover message on link <%s>\n",
+                      (*l_ptr)->name);
                goto exit;
        }
        *l_ptr = dest_link;
@@ -2310,7 +2317,7 @@ static int link_recv_changeover_msg(struct tipc_link **l_ptr,
                        goto exit;
                *buf = buf_extract(tunnel_buf, INT_H_SIZE);
                if (*buf == NULL) {
-                       warn("Link changeover error, duplicate msg dropped\n");
+                       pr_warn("%sduplicate msg dropped\n", link_co_err);
                        goto exit;
                }
                kfree_skb(tunnel_buf);
@@ -2319,8 +2326,8 @@ static int link_recv_changeover_msg(struct tipc_link **l_ptr,
 
        /* First original message ?: */
        if (tipc_link_is_up(dest_link)) {
-               info("Resetting link <%s>, changeover initiated by peer\n",
-                    dest_link->name);
+               pr_info("%s<%s>, changeover initiated by peer\n", link_rst_msg,
+                       dest_link->name);
                tipc_link_reset(dest_link);
                dest_link->exp_msg_count = msg_count;
                if (!msg_count)
@@ -2333,8 +2340,7 @@ static int link_recv_changeover_msg(struct tipc_link **l_ptr,
 
        /* Receive original message */
        if (dest_link->exp_msg_count == 0) {
-               warn("Link switchover error, "
-                    "got too many tunnelled messages\n");
+               pr_warn("%sgot too many tunnelled messages\n", link_co_err);
                goto exit;
        }
        dest_link->exp_msg_count--;
@@ -2346,7 +2352,7 @@ static int link_recv_changeover_msg(struct tipc_link **l_ptr,
                        kfree_skb(tunnel_buf);
                        return 1;
                } else {
-                       warn("Link changeover error, original msg dropped\n");
+                       pr_warn("%soriginal msg dropped\n", link_co_err);
                }
        }
 exit:
@@ -2367,7 +2373,7 @@ void tipc_link_recv_bundle(struct sk_buff *buf)
        while (msgcount--) {
                obuf = buf_extract(buf, pos);
                if (obuf == NULL) {
-                       warn("Link unable to unbundle message(s)\n");
+                       pr_warn("Link unable to unbundle message(s)\n");
                        break;
                }
                pos += align(msg_size(buf_msg(obuf)));
@@ -2538,7 +2544,7 @@ int tipc_link_recv_fragment(struct sk_buff **pending, struct sk_buff **fb,
                        set_fragm_size(pbuf, fragm_sz);
                        set_expected_frags(pbuf, exp_fragm_cnt - 1);
                } else {
-                       dbg("Link unable to reassemble fragmented message\n");
+                       pr_debug("Link unable to reassemble fragmented message\n");
                        kfree_skb(fbuf);
                        return -1;
                }
@@ -2860,112 +2866,114 @@ static u32 percent(u32 count, u32 total)
  */
 static int tipc_link_stats(const char *name, char *buf, const u32 buf_size)
 {
-       struct print_buf pb;
-       struct tipc_link *l_ptr;
+       struct tipc_link *l;
+       struct tipc_stats *s;
        struct tipc_node *node;
        char *status;
        u32 profile_total = 0;
+       int ret;
 
        if (!strcmp(name, tipc_bclink_name))
                return tipc_bclink_stats(buf, buf_size);
 
-       tipc_printbuf_init(&pb, buf, buf_size);
-
        read_lock_bh(&tipc_net_lock);
-       l_ptr = link_find_link(name, &node);
-       if (!l_ptr) {
+       l = link_find_link(name, &node);
+       if (!l) {
                read_unlock_bh(&tipc_net_lock);
                return 0;
        }
        tipc_node_lock(node);
+       s = &l->stats;
 
-       if (tipc_link_is_active(l_ptr))
+       if (tipc_link_is_active(l))
                status = "ACTIVE";
-       else if (tipc_link_is_up(l_ptr))
+       else if (tipc_link_is_up(l))
                status = "STANDBY";
        else
                status = "DEFUNCT";
-       tipc_printf(&pb, "Link <%s>\n"
-                        "  %s  MTU:%u  Priority:%u  Tolerance:%u ms"
-                        "  Window:%u packets\n",
-                   l_ptr->name, status, l_ptr->max_pkt,
-                   l_ptr->priority, l_ptr->tolerance, l_ptr->queue_limit[0]);
-       tipc_printf(&pb, "  RX packets:%u fragments:%u/%u bundles:%u/%u\n",
-                   l_ptr->next_in_no - l_ptr->stats.recv_info,
-                   l_ptr->stats.recv_fragments,
-                   l_ptr->stats.recv_fragmented,
-                   l_ptr->stats.recv_bundles,
-                   l_ptr->stats.recv_bundled);
-       tipc_printf(&pb, "  TX packets:%u fragments:%u/%u bundles:%u/%u\n",
-                   l_ptr->next_out_no - l_ptr->stats.sent_info,
-                   l_ptr->stats.sent_fragments,
-                   l_ptr->stats.sent_fragmented,
-                   l_ptr->stats.sent_bundles,
-                   l_ptr->stats.sent_bundled);
-       profile_total = l_ptr->stats.msg_length_counts;
+
+       ret = tipc_snprintf(buf, buf_size, "Link <%s>\n"
+                           "  %s  MTU:%u  Priority:%u  Tolerance:%u ms"
+                           "  Window:%u packets\n",
+                           l->name, status, l->max_pkt, l->priority,
+                           l->tolerance, l->queue_limit[0]);
+
+       ret += tipc_snprintf(buf + ret, buf_size - ret,
+                            "  RX packets:%u fragments:%u/%u bundles:%u/%u\n",
+                            l->next_in_no - s->recv_info, s->recv_fragments,
+                            s->recv_fragmented, s->recv_bundles,
+                            s->recv_bundled);
+
+       ret += tipc_snprintf(buf + ret, buf_size - ret,
+                            "  TX packets:%u fragments:%u/%u bundles:%u/%u\n",
+                            l->next_out_no - s->sent_info, s->sent_fragments,
+                            s->sent_fragmented, s->sent_bundles,
+                            s->sent_bundled);
+
+       profile_total = s->msg_length_counts;
        if (!profile_total)
                profile_total = 1;
-       tipc_printf(&pb, "  TX profile sample:%u packets  average:%u octets\n"
-                        "  0-64:%u%% -256:%u%% -1024:%u%% -4096:%u%% "
-                        "-16384:%u%% -32768:%u%% -66000:%u%%\n",
-                   l_ptr->stats.msg_length_counts,
-                   l_ptr->stats.msg_lengths_total / profile_total,
-                   percent(l_ptr->stats.msg_length_profile[0], profile_total),
-                   percent(l_ptr->stats.msg_length_profile[1], profile_total),
-                   percent(l_ptr->stats.msg_length_profile[2], profile_total),
-                   percent(l_ptr->stats.msg_length_profile[3], profile_total),
-                   percent(l_ptr->stats.msg_length_profile[4], profile_total),
-                   percent(l_ptr->stats.msg_length_profile[5], profile_total),
-                   percent(l_ptr->stats.msg_length_profile[6], profile_total));
-       tipc_printf(&pb, "  RX states:%u probes:%u naks:%u defs:%u dups:%u\n",
-                   l_ptr->stats.recv_states,
-                   l_ptr->stats.recv_probes,
-                   l_ptr->stats.recv_nacks,
-                   l_ptr->stats.deferred_recv,
-                   l_ptr->stats.duplicates);
-       tipc_printf(&pb, "  TX states:%u probes:%u naks:%u acks:%u dups:%u\n",
-                   l_ptr->stats.sent_states,
-                   l_ptr->stats.sent_probes,
-                   l_ptr->stats.sent_nacks,
-                   l_ptr->stats.sent_acks,
-                   l_ptr->stats.retransmitted);
-       tipc_printf(&pb, "  Congestion bearer:%u link:%u  Send queue max:%u avg:%u\n",
-                   l_ptr->stats.bearer_congs,
-                   l_ptr->stats.link_congs,
-                   l_ptr->stats.max_queue_sz,
-                   l_ptr->stats.queue_sz_counts
-                   ? (l_ptr->stats.accu_queue_sz / l_ptr->stats.queue_sz_counts)
-                   : 0);
+
+       ret += tipc_snprintf(buf + ret, buf_size - ret,
+                            "  TX profile sample:%u packets  average:%u octets\n"
+                            "  0-64:%u%% -256:%u%% -1024:%u%% -4096:%u%% "
+                            "-16384:%u%% -32768:%u%% -66000:%u%%\n",
+                            s->msg_length_counts,
+                            s->msg_lengths_total / profile_total,
+                            percent(s->msg_length_profile[0], profile_total),
+                            percent(s->msg_length_profile[1], profile_total),
+                            percent(s->msg_length_profile[2], profile_total),
+                            percent(s->msg_length_profile[3], profile_total),
+                            percent(s->msg_length_profile[4], profile_total),
+                            percent(s->msg_length_profile[5], profile_total),
+                            percent(s->msg_length_profile[6], profile_total));
+
+       ret += tipc_snprintf(buf + ret, buf_size - ret,
+                            "  RX states:%u probes:%u naks:%u defs:%u"
+                            " dups:%u\n", s->recv_states, s->recv_probes,
+                            s->recv_nacks, s->deferred_recv, s->duplicates);
+
+       ret += tipc_snprintf(buf + ret, buf_size - ret,
+                            "  TX states:%u probes:%u naks:%u acks:%u"
+                            " dups:%u\n", s->sent_states, s->sent_probes,
+                            s->sent_nacks, s->sent_acks, s->retransmitted);
+
+       ret += tipc_snprintf(buf + ret, buf_size - ret,
+                            "  Congestion bearer:%u link:%u  Send queue"
+                            " max:%u avg:%u\n", s->bearer_congs, s->link_congs,
+                            s->max_queue_sz, s->queue_sz_counts ?
+                            (s->accu_queue_sz / s->queue_sz_counts) : 0);
 
        tipc_node_unlock(node);
        read_unlock_bh(&tipc_net_lock);
-       return tipc_printbuf_validate(&pb);
+       return ret;
 }
 
-#define MAX_LINK_STATS_INFO 2000
-
 struct sk_buff *tipc_link_cmd_show_stats(const void *req_tlv_area, int req_tlv_space)
 {
        struct sk_buff *buf;
        struct tlv_desc *rep_tlv;
        int str_len;
+       int pb_len;
+       char *pb;
 
        if (!TLV_CHECK(req_tlv_area, req_tlv_space, TIPC_TLV_LINK_NAME))
                return tipc_cfg_reply_error_string(TIPC_CFG_TLV_ERROR);
 
-       buf = tipc_cfg_reply_alloc(TLV_SPACE(MAX_LINK_STATS_INFO));
+       buf = tipc_cfg_reply_alloc(TLV_SPACE(ULTRA_STRING_MAX_LEN));
        if (!buf)
                return NULL;
 
        rep_tlv = (struct tlv_desc *)buf->data;
-
+       pb = TLV_DATA(rep_tlv);
+       pb_len = ULTRA_STRING_MAX_LEN;
        str_len = tipc_link_stats((char *)TLV_DATA(req_tlv_area),
-                                 (char *)TLV_DATA(rep_tlv), MAX_LINK_STATS_INFO);
+                                 pb, pb_len);
        if (!str_len) {
                kfree_skb(buf);
                return tipc_cfg_reply_error_string("link not found");
        }
-
+       str_len += 1;   /* for "\0" */
        skb_put(buf, TLV_SPACE(str_len));
        TLV_SET(rep_tlv, TIPC_TLV_ULTRA_STRING, NULL, str_len);
 
@@ -3003,62 +3011,16 @@ u32 tipc_link_get_max_pkt(u32 dest, u32 selector)
 
 static void link_print(struct tipc_link *l_ptr, const char *str)
 {
-       char print_area[256];
-       struct print_buf pb;
-       struct print_buf *buf = &pb;
-
-       tipc_printbuf_init(buf, print_area, sizeof(print_area));
-
-       tipc_printf(buf, str);
-       tipc_printf(buf, "Link %x<%s>:",
-                   l_ptr->addr, l_ptr->b_ptr->name);
-
-#ifdef CONFIG_TIPC_DEBUG
-       if (link_reset_reset(l_ptr) || link_reset_unknown(l_ptr))
-               goto print_state;
-
-       tipc_printf(buf, ": NXO(%u):", mod(l_ptr->next_out_no));
-       tipc_printf(buf, "NXI(%u):", mod(l_ptr->next_in_no));
-       tipc_printf(buf, "SQUE");
-       if (l_ptr->first_out) {
-               tipc_printf(buf, "[%u..", buf_seqno(l_ptr->first_out));
-               if (l_ptr->next_out)
-                       tipc_printf(buf, "%u..", buf_seqno(l_ptr->next_out));
-               tipc_printf(buf, "%u]", buf_seqno(l_ptr->last_out));
-               if ((mod(buf_seqno(l_ptr->last_out) -
-                        buf_seqno(l_ptr->first_out))
-                    != (l_ptr->out_queue_size - 1)) ||
-                   (l_ptr->last_out->next != NULL)) {
-                       tipc_printf(buf, "\nSend queue inconsistency\n");
-                       tipc_printf(buf, "first_out= %p ", l_ptr->first_out);
-                       tipc_printf(buf, "next_out= %p ", l_ptr->next_out);
-                       tipc_printf(buf, "last_out= %p ", l_ptr->last_out);
-               }
-       } else
-               tipc_printf(buf, "[]");
-       tipc_printf(buf, "SQSIZ(%u)", l_ptr->out_queue_size);
-       if (l_ptr->oldest_deferred_in) {
-               u32 o = buf_seqno(l_ptr->oldest_deferred_in);
-               u32 n = buf_seqno(l_ptr->newest_deferred_in);
-               tipc_printf(buf, ":RQUE[%u..%u]", o, n);
-               if (l_ptr->deferred_inqueue_sz != mod((n + 1) - o)) {
-                       tipc_printf(buf, ":RQSIZ(%u)",
-                                   l_ptr->deferred_inqueue_sz);
-               }
-       }
-print_state:
-#endif
+       pr_info("%s Link %x<%s>:", str, l_ptr->addr, l_ptr->b_ptr->name);
 
        if (link_working_unknown(l_ptr))
-               tipc_printf(buf, ":WU");
+               pr_cont(":WU\n");
        else if (link_reset_reset(l_ptr))
-               tipc_printf(buf, ":RR");
+               pr_cont(":RR\n");
        else if (link_reset_unknown(l_ptr))
-               tipc_printf(buf, ":RU");
+               pr_cont(":RU\n");
        else if (link_working_working(l_ptr))
-               tipc_printf(buf, ":WW");
-       tipc_printf(buf, "\n");
-
-       tipc_printbuf_validate(buf);
-       info("%s", print_area);
+               pr_cont(":WW\n");
+       else
+               pr_cont("\n");
 }
index d6a60a963ce6f80ca0c80a7db5679ce6b5d46070..6e921121be0616f9f1e1bca2a7625adb527fade3 100644 (file)
@@ -37,7 +37,6 @@
 #ifndef _TIPC_LINK_H
 #define _TIPC_LINK_H
 
-#include "log.h"
 #include "msg.h"
 #include "node.h"
 
  */
 #define MAX_PKT_DEFAULT 1500
 
+struct tipc_stats {
+       u32 sent_info;          /* used in counting # sent packets */
+       u32 recv_info;          /* used in counting # recv'd packets */
+       u32 sent_states;
+       u32 recv_states;
+       u32 sent_probes;
+       u32 recv_probes;
+       u32 sent_nacks;
+       u32 recv_nacks;
+       u32 sent_acks;
+       u32 sent_bundled;
+       u32 sent_bundles;
+       u32 recv_bundled;
+       u32 recv_bundles;
+       u32 retransmitted;
+       u32 sent_fragmented;
+       u32 sent_fragments;
+       u32 recv_fragmented;
+       u32 recv_fragments;
+       u32 link_congs;         /* # port sends blocked by congestion */
+       u32 bearer_congs;
+       u32 deferred_recv;
+       u32 duplicates;
+       u32 max_queue_sz;       /* send queue size high water mark */
+       u32 accu_queue_sz;      /* used for send queue size profiling */
+       u32 queue_sz_counts;    /* used for send queue size profiling */
+       u32 msg_length_counts;  /* used for message length profiling */
+       u32 msg_lengths_total;  /* used for message length profiling */
+       u32 msg_length_profile[7]; /* used for msg. length profiling */
+};
+
 /**
  * struct tipc_link - TIPC link data structure
  * @addr: network address of link's peer node
@@ -175,36 +205,7 @@ struct tipc_link {
        struct sk_buff *defragm_buf;
 
        /* Statistics */
-       struct {
-               u32 sent_info;          /* used in counting # sent packets */
-               u32 recv_info;          /* used in counting # recv'd packets */
-               u32 sent_states;
-               u32 recv_states;
-               u32 sent_probes;
-               u32 recv_probes;
-               u32 sent_nacks;
-               u32 recv_nacks;
-               u32 sent_acks;
-               u32 sent_bundled;
-               u32 sent_bundles;
-               u32 recv_bundled;
-               u32 recv_bundles;
-               u32 retransmitted;
-               u32 sent_fragmented;
-               u32 sent_fragments;
-               u32 recv_fragmented;
-               u32 recv_fragments;
-               u32 link_congs;         /* # port sends blocked by congestion */
-               u32 bearer_congs;
-               u32 deferred_recv;
-               u32 duplicates;
-               u32 max_queue_sz;       /* send queue size high water mark */
-               u32 accu_queue_sz;      /* used for send queue size profiling */
-               u32 queue_sz_counts;    /* used for send queue size profiling */
-               u32 msg_length_counts;  /* used for message length profiling */
-               u32 msg_lengths_total;  /* used for message length profiling */
-               u32 msg_length_profile[7]; /* used for msg. length profiling */
-       } stats;
+       struct tipc_stats stats;
 };
 
 struct tipc_port;
index 026733f249196fb519338c84b8e8644c33c9e233..abef644f27d80119e823ddb3dd460e3005538bd2 100644 (file)
 
 #include "core.h"
 #include "config.h"
-#include "log.h"
-
-/*
- * TIPC pre-defines the following print buffers:
- *
- * TIPC_NULL : null buffer (i.e. print nowhere)
- * TIPC_CONS : system console
- * TIPC_LOG  : TIPC log buffer
- *
- * Additional user-defined print buffers are also permitted.
- */
-static struct print_buf null_buf = { NULL, 0, NULL, 0 };
-struct print_buf *const TIPC_NULL = &null_buf;
-
-static struct print_buf cons_buf = { NULL, 0, NULL, 1 };
-struct print_buf *const TIPC_CONS = &cons_buf;
-
-static struct print_buf log_buf = { NULL, 0, NULL, 1 };
-struct print_buf *const TIPC_LOG = &log_buf;
-
-/*
- * Locking policy when using print buffers.
- *
- * 1) tipc_printf() uses 'print_lock' to protect against concurrent access to
- * 'print_string' when writing to a print buffer. This also protects against
- * concurrent writes to the print buffer being written to.
- *
- * 2) tipc_log_XXX() leverages the aforementioned use of 'print_lock' to
- * protect against all types of concurrent operations on their associated
- * print buffer (not just write operations).
- *
- * Note: All routines of the form tipc_printbuf_XXX() are lock-free, and rely
- * on the caller to prevent simultaneous use of the print buffer(s) being
- * manipulated.
- */
-static char print_string[TIPC_PB_MAX_STR];
-static DEFINE_SPINLOCK(print_lock);
-
-static void tipc_printbuf_move(struct print_buf *pb_to,
-                              struct print_buf *pb_from);
-
-#define FORMAT(PTR, LEN, FMT) \
-{\
-       va_list args;\
-       va_start(args, FMT);\
-       LEN = vsprintf(PTR, FMT, args);\
-       va_end(args);\
-       *(PTR + LEN) = '\0';\
-}
-
-/**
- * tipc_printbuf_init - initialize print buffer to empty
- * @pb: pointer to print buffer structure
- * @raw: pointer to character array used by print buffer
- * @size: size of character array
- *
- * Note: If the character array is too small (or absent), the print buffer
- * becomes a null device that discards anything written to it.
- */
-void tipc_printbuf_init(struct print_buf *pb, char *raw, u32 size)
-{
-       pb->buf = raw;
-       pb->crs = raw;
-       pb->size = size;
-       pb->echo = 0;
-
-       if (size < TIPC_PB_MIN_SIZE) {
-               pb->buf = NULL;
-       } else if (raw) {
-               pb->buf[0] = 0;
-               pb->buf[size - 1] = ~0;
-       }
-}
-
-/**
- * tipc_printbuf_reset - reinitialize print buffer to empty state
- * @pb: pointer to print buffer structure
- */
-static void tipc_printbuf_reset(struct print_buf *pb)
-{
-       if (pb->buf) {
-               pb->crs = pb->buf;
-               pb->buf[0] = 0;
-               pb->buf[pb->size - 1] = ~0;
-       }
-}
-
-/**
- * tipc_printbuf_empty - test if print buffer is in empty state
- * @pb: pointer to print buffer structure
- *
- * Returns non-zero if print buffer is empty.
- */
-static int tipc_printbuf_empty(struct print_buf *pb)
-{
-       return !pb->buf || (pb->crs == pb->buf);
-}
-
-/**
- * tipc_printbuf_validate - check for print buffer overflow
- * @pb: pointer to print buffer structure
- *
- * Verifies that a print buffer has captured all data written to it.
- * If data has been lost, linearize buffer and prepend an error message
- *
- * Returns length of print buffer data string (including trailing NUL)
- */
-int tipc_printbuf_validate(struct print_buf *pb)
-{
-       char *err = "\n\n*** PRINT BUFFER OVERFLOW ***\n\n";
-       char *cp_buf;
-       struct print_buf cb;
-
-       if (!pb->buf)
-               return 0;
-
-       if (pb->buf[pb->size - 1] == 0) {
-               cp_buf = kmalloc(pb->size, GFP_ATOMIC);
-               if (cp_buf) {
-                       tipc_printbuf_init(&cb, cp_buf, pb->size);
-                       tipc_printbuf_move(&cb, pb);
-                       tipc_printbuf_move(pb, &cb);
-                       kfree(cp_buf);
-                       memcpy(pb->buf, err, strlen(err));
-               } else {
-                       tipc_printbuf_reset(pb);
-                       tipc_printf(pb, err);
-               }
-       }
-       return pb->crs - pb->buf + 1;
-}
-
-/**
- * tipc_printbuf_move - move print buffer contents to another print buffer
- * @pb_to: pointer to destination print buffer structure
- * @pb_from: pointer to source print buffer structure
- *
- * Current contents of destination print buffer (if any) are discarded.
- * Source print buffer becomes empty if a successful move occurs.
- */
-static void tipc_printbuf_move(struct print_buf *pb_to,
-                              struct print_buf *pb_from)
-{
-       int len;
-
-       /* Handle the cases where contents can't be moved */
-       if (!pb_to->buf)
-               return;
-
-       if (!pb_from->buf) {
-               tipc_printbuf_reset(pb_to);
-               return;
-       }
-
-       if (pb_to->size < pb_from->size) {
-               strcpy(pb_to->buf, "*** PRINT BUFFER MOVE ERROR ***");
-               pb_to->buf[pb_to->size - 1] = ~0;
-               pb_to->crs = strchr(pb_to->buf, 0);
-               return;
-       }
-
-       /* Copy data from char after cursor to end (if used) */
-       len = pb_from->buf + pb_from->size - pb_from->crs - 2;
-       if ((pb_from->buf[pb_from->size - 1] == 0) && (len > 0)) {
-               strcpy(pb_to->buf, pb_from->crs + 1);
-               pb_to->crs = pb_to->buf + len;
-       } else
-               pb_to->crs = pb_to->buf;
-
-       /* Copy data from start to cursor (always) */
-       len = pb_from->crs - pb_from->buf;
-       strcpy(pb_to->crs, pb_from->buf);
-       pb_to->crs += len;
-
-       tipc_printbuf_reset(pb_from);
-}
 
 /**
- * tipc_printf - append formatted output to print buffer
- * @pb: pointer to print buffer
+ * tipc_snprintf - append formatted output to print buffer
+ * @buf: pointer to print buffer
+ * @len: buffer length
  * @fmt: formatted info to be printed
  */
-void tipc_printf(struct print_buf *pb, const char *fmt, ...)
-{
-       int chars_to_add;
-       int chars_left;
-       char save_char;
-
-       spin_lock_bh(&print_lock);
-
-       FORMAT(print_string, chars_to_add, fmt);
-       if (chars_to_add >= TIPC_PB_MAX_STR)
-               strcpy(print_string, "*** PRINT BUFFER STRING TOO LONG ***");
-
-       if (pb->buf) {
-               chars_left = pb->buf + pb->size - pb->crs - 1;
-               if (chars_to_add <= chars_left) {
-                       strcpy(pb->crs, print_string);
-                       pb->crs += chars_to_add;
-               } else if (chars_to_add >= (pb->size - 1)) {
-                       strcpy(pb->buf, print_string + chars_to_add + 1
-                              - pb->size);
-                       pb->crs = pb->buf + pb->size - 1;
-               } else {
-                       strcpy(pb->buf, print_string + chars_left);
-                       save_char = print_string[chars_left];
-                       print_string[chars_left] = 0;
-                       strcpy(pb->crs, print_string);
-                       print_string[chars_left] = save_char;
-                       pb->crs = pb->buf + chars_to_add - chars_left;
-               }
-       }
-
-       if (pb->echo)
-               printk("%s", print_string);
-
-       spin_unlock_bh(&print_lock);
-}
-
-/**
- * tipc_log_resize - change the size of the TIPC log buffer
- * @log_size: print buffer size to use
- */
-int tipc_log_resize(int log_size)
-{
-       int res = 0;
-
-       spin_lock_bh(&print_lock);
-       kfree(TIPC_LOG->buf);
-       TIPC_LOG->buf = NULL;
-       if (log_size) {
-               if (log_size < TIPC_PB_MIN_SIZE)
-                       log_size = TIPC_PB_MIN_SIZE;
-               res = TIPC_LOG->echo;
-               tipc_printbuf_init(TIPC_LOG, kmalloc(log_size, GFP_ATOMIC),
-                                  log_size);
-               TIPC_LOG->echo = res;
-               res = !TIPC_LOG->buf;
-       }
-       spin_unlock_bh(&print_lock);
-
-       return res;
-}
-
-/**
- * tipc_log_resize_cmd - reconfigure size of TIPC log buffer
- */
-struct sk_buff *tipc_log_resize_cmd(const void *req_tlv_area, int req_tlv_space)
-{
-       u32 value;
-
-       if (!TLV_CHECK(req_tlv_area, req_tlv_space, TIPC_TLV_UNSIGNED))
-               return tipc_cfg_reply_error_string(TIPC_CFG_TLV_ERROR);
-
-       value = ntohl(*(__be32 *)TLV_DATA(req_tlv_area));
-       if (value > 32768)
-               return tipc_cfg_reply_error_string(TIPC_CFG_INVALID_VALUE
-                                                  " (log size must be 0-32768)");
-       if (tipc_log_resize(value))
-               return tipc_cfg_reply_error_string(
-                       "unable to create specified log (log size is now 0)");
-       return tipc_cfg_reply_none();
-}
-
-/**
- * tipc_log_dump - capture TIPC log buffer contents in configuration message
- */
-struct sk_buff *tipc_log_dump(void)
+int tipc_snprintf(char *buf, int len, const char *fmt, ...)
 {
-       struct sk_buff *reply;
-
-       spin_lock_bh(&print_lock);
-       if (!TIPC_LOG->buf) {
-               spin_unlock_bh(&print_lock);
-               reply = tipc_cfg_reply_ultra_string("log not activated\n");
-       } else if (tipc_printbuf_empty(TIPC_LOG)) {
-               spin_unlock_bh(&print_lock);
-               reply = tipc_cfg_reply_ultra_string("log is empty\n");
-       } else {
-               struct tlv_desc *rep_tlv;
-               struct print_buf pb;
-               int str_len;
+       int i;
+       va_list args;
 
-               str_len = min(TIPC_LOG->size, 32768u);
-               spin_unlock_bh(&print_lock);
-               reply = tipc_cfg_reply_alloc(TLV_SPACE(str_len));
-               if (reply) {
-                       rep_tlv = (struct tlv_desc *)reply->data;
-                       tipc_printbuf_init(&pb, TLV_DATA(rep_tlv), str_len);
-                       spin_lock_bh(&print_lock);
-                       tipc_printbuf_move(&pb, TIPC_LOG);
-                       spin_unlock_bh(&print_lock);
-                       str_len = strlen(TLV_DATA(rep_tlv)) + 1;
-                       skb_put(reply, TLV_SPACE(str_len));
-                       TLV_SET(rep_tlv, TIPC_TLV_ULTRA_STRING, NULL, str_len);
-               }
-       }
-       return reply;
+       va_start(args, fmt);
+       i = vscnprintf(buf, len, fmt, args);
+       va_end(args);
+       return i;
 }
diff --git a/net/tipc/log.h b/net/tipc/log.h
deleted file mode 100644 (file)
index d1f5eb9..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * net/tipc/log.h: Include file for TIPC print buffer routines
- *
- * Copyright (c) 1997-2006, Ericsson AB
- * Copyright (c) 2005-2007, Wind River Systems
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the names of the copyright holders nor the names of its
- *    contributors may be used to endorse or promote products derived from
- *    this software without specific prior written permission.
- *
- * Alternatively, this software may be distributed under the terms of the
- * GNU General Public License ("GPL") version 2 as published by the Free
- * Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef _TIPC_LOG_H
-#define _TIPC_LOG_H
-
-/**
- * struct print_buf - TIPC print buffer structure
- * @buf: pointer to character array containing print buffer contents
- * @size: size of character array
- * @crs: pointer to first unused space in character array (i.e. final NUL)
- * @echo: echo output to system console if non-zero
- */
-struct print_buf {
-       char *buf;
-       u32 size;
-       char *crs;
-       int echo;
-};
-
-#define TIPC_PB_MIN_SIZE 64    /* minimum size for a print buffer's array */
-#define TIPC_PB_MAX_STR 512    /* max printable string (with trailing NUL) */
-
-void tipc_printbuf_init(struct print_buf *pb, char *buf, u32 size);
-int  tipc_printbuf_validate(struct print_buf *pb);
-
-int tipc_log_resize(int log_size);
-
-struct sk_buff *tipc_log_resize_cmd(const void *req_tlv_area,
-                                   int req_tlv_space);
-struct sk_buff *tipc_log_dump(void);
-
-#endif
index deea0d232dca5382930b2a319a75b6b8611172a3..f2db8a87d9c5a452d688d88f5df20a9b662dd1de 100644 (file)
@@ -109,245 +109,3 @@ int tipc_msg_build(struct tipc_msg *hdr, struct iovec const *msg_sect,
        *buf = NULL;
        return -EFAULT;
 }
-
-#ifdef CONFIG_TIPC_DEBUG
-void tipc_msg_dbg(struct print_buf *buf, struct tipc_msg *msg, const char *str)
-{
-       u32 usr = msg_user(msg);
-       tipc_printf(buf, KERN_DEBUG);
-       tipc_printf(buf, str);
-
-       switch (usr) {
-       case MSG_BUNDLER:
-               tipc_printf(buf, "BNDL::");
-               tipc_printf(buf, "MSGS(%u):", msg_msgcnt(msg));
-               break;
-       case BCAST_PROTOCOL:
-               tipc_printf(buf, "BCASTP::");
-               break;
-       case MSG_FRAGMENTER:
-               tipc_printf(buf, "FRAGM::");
-               switch (msg_type(msg)) {
-               case FIRST_FRAGMENT:
-                       tipc_printf(buf, "FIRST:");
-                       break;
-               case FRAGMENT:
-                       tipc_printf(buf, "BODY:");
-                       break;
-               case LAST_FRAGMENT:
-                       tipc_printf(buf, "LAST:");
-                       break;
-               default:
-                       tipc_printf(buf, "UNKNOWN:%x", msg_type(msg));
-
-               }
-               tipc_printf(buf, "NO(%u/%u):", msg_long_msgno(msg),
-                           msg_fragm_no(msg));
-               break;
-       case TIPC_LOW_IMPORTANCE:
-       case TIPC_MEDIUM_IMPORTANCE:
-       case TIPC_HIGH_IMPORTANCE:
-       case TIPC_CRITICAL_IMPORTANCE:
-               tipc_printf(buf, "DAT%u:", msg_user(msg));
-               if (msg_short(msg)) {
-                       tipc_printf(buf, "CON:");
-                       break;
-               }
-               switch (msg_type(msg)) {
-               case TIPC_CONN_MSG:
-                       tipc_printf(buf, "CON:");
-                       break;
-               case TIPC_MCAST_MSG:
-                       tipc_printf(buf, "MCST:");
-                       break;
-               case TIPC_NAMED_MSG:
-                       tipc_printf(buf, "NAM:");
-                       break;
-               case TIPC_DIRECT_MSG:
-                       tipc_printf(buf, "DIR:");
-                       break;
-               default:
-                       tipc_printf(buf, "UNKNOWN TYPE %u", msg_type(msg));
-               }
-               if (msg_reroute_cnt(msg))
-                       tipc_printf(buf, "REROUTED(%u):",
-                                   msg_reroute_cnt(msg));
-               break;
-       case NAME_DISTRIBUTOR:
-               tipc_printf(buf, "NMD::");
-               switch (msg_type(msg)) {
-               case PUBLICATION:
-                       tipc_printf(buf, "PUBL(%u):", (msg_size(msg) - msg_hdr_sz(msg)) / 20);  /* Items */
-                       break;
-               case WITHDRAWAL:
-                       tipc_printf(buf, "WDRW:");
-                       break;
-               default:
-                       tipc_printf(buf, "UNKNOWN:%x", msg_type(msg));
-               }
-               if (msg_reroute_cnt(msg))
-                       tipc_printf(buf, "REROUTED(%u):",
-                                   msg_reroute_cnt(msg));
-               break;
-       case CONN_MANAGER:
-               tipc_printf(buf, "CONN_MNG:");
-               switch (msg_type(msg)) {
-               case CONN_PROBE:
-                       tipc_printf(buf, "PROBE:");
-                       break;
-               case CONN_PROBE_REPLY:
-                       tipc_printf(buf, "PROBE_REPLY:");
-                       break;
-               case CONN_ACK:
-                       tipc_printf(buf, "CONN_ACK:");
-                       tipc_printf(buf, "ACK(%u):", msg_msgcnt(msg));
-                       break;
-               default:
-                       tipc_printf(buf, "UNKNOWN TYPE:%x", msg_type(msg));
-               }
-               if (msg_reroute_cnt(msg))
-                       tipc_printf(buf, "REROUTED(%u):", msg_reroute_cnt(msg));
-               break;
-       case LINK_PROTOCOL:
-               switch (msg_type(msg)) {
-               case STATE_MSG:
-                       tipc_printf(buf, "STATE:");
-                       tipc_printf(buf, "%s:", msg_probe(msg) ? "PRB" : "");
-                       tipc_printf(buf, "NXS(%u):", msg_next_sent(msg));
-                       tipc_printf(buf, "GAP(%u):", msg_seq_gap(msg));
-                       tipc_printf(buf, "LSTBC(%u):", msg_last_bcast(msg));
-                       break;
-               case RESET_MSG:
-                       tipc_printf(buf, "RESET:");
-                       if (msg_size(msg) != msg_hdr_sz(msg))
-                               tipc_printf(buf, "BEAR:%s:", msg_data(msg));
-                       break;
-               case ACTIVATE_MSG:
-                       tipc_printf(buf, "ACTIVATE:");
-                       break;
-               default:
-                       tipc_printf(buf, "UNKNOWN TYPE:%x", msg_type(msg));
-               }
-               tipc_printf(buf, "PLANE(%c):", msg_net_plane(msg));
-               tipc_printf(buf, "SESS(%u):", msg_session(msg));
-               break;
-       case CHANGEOVER_PROTOCOL:
-               tipc_printf(buf, "TUNL:");
-               switch (msg_type(msg)) {
-               case DUPLICATE_MSG:
-                       tipc_printf(buf, "DUPL:");
-                       break;
-               case ORIGINAL_MSG:
-                       tipc_printf(buf, "ORIG:");
-                       tipc_printf(buf, "EXP(%u)", msg_msgcnt(msg));
-                       break;
-               default:
-                       tipc_printf(buf, "UNKNOWN TYPE:%x", msg_type(msg));
-               }
-               break;
-       case LINK_CONFIG:
-               tipc_printf(buf, "CFG:");
-               switch (msg_type(msg)) {
-               case DSC_REQ_MSG:
-                       tipc_printf(buf, "DSC_REQ:");
-                       break;
-               case DSC_RESP_MSG:
-                       tipc_printf(buf, "DSC_RESP:");
-                       break;
-               default:
-                       tipc_printf(buf, "UNKNOWN TYPE:%x:", msg_type(msg));
-                       break;
-               }
-               break;
-       default:
-               tipc_printf(buf, "UNKNOWN USER:");
-       }
-
-       switch (usr) {
-       case CONN_MANAGER:
-       case TIPC_LOW_IMPORTANCE:
-       case TIPC_MEDIUM_IMPORTANCE:
-       case TIPC_HIGH_IMPORTANCE:
-       case TIPC_CRITICAL_IMPORTANCE:
-               switch (msg_errcode(msg)) {
-               case TIPC_OK:
-                       break;
-               case TIPC_ERR_NO_NAME:
-                       tipc_printf(buf, "NO_NAME:");
-                       break;
-               case TIPC_ERR_NO_PORT:
-                       tipc_printf(buf, "NO_PORT:");
-                       break;
-               case TIPC_ERR_NO_NODE:
-                       tipc_printf(buf, "NO_PROC:");
-                       break;
-               case TIPC_ERR_OVERLOAD:
-                       tipc_printf(buf, "OVERLOAD:");
-                       break;
-               case TIPC_CONN_SHUTDOWN:
-                       tipc_printf(buf, "SHUTDOWN:");
-                       break;
-               default:
-                       tipc_printf(buf, "UNKNOWN ERROR(%x):",
-                                   msg_errcode(msg));
-               }
-       default:
-               break;
-       }
-
-       tipc_printf(buf, "HZ(%u):", msg_hdr_sz(msg));
-       tipc_printf(buf, "SZ(%u):", msg_size(msg));
-       tipc_printf(buf, "SQNO(%u):", msg_seqno(msg));
-
-       if (msg_non_seq(msg))
-               tipc_printf(buf, "NOSEQ:");
-       else
-               tipc_printf(buf, "ACK(%u):", msg_ack(msg));
-       tipc_printf(buf, "BACK(%u):", msg_bcast_ack(msg));
-       tipc_printf(buf, "PRND(%x)", msg_prevnode(msg));
-
-       if (msg_isdata(msg)) {
-               if (msg_named(msg)) {
-                       tipc_printf(buf, "NTYP(%u):", msg_nametype(msg));
-                       tipc_printf(buf, "NINST(%u)", msg_nameinst(msg));
-               }
-       }
-
-       if ((usr != LINK_PROTOCOL) && (usr != LINK_CONFIG) &&
-           (usr != MSG_BUNDLER)) {
-               if (!msg_short(msg)) {
-                       tipc_printf(buf, ":ORIG(%x:%u):",
-                                   msg_orignode(msg), msg_origport(msg));
-                       tipc_printf(buf, ":DEST(%x:%u):",
-                                   msg_destnode(msg), msg_destport(msg));
-               } else {
-                       tipc_printf(buf, ":OPRT(%u):", msg_origport(msg));
-                       tipc_printf(buf, ":DPRT(%u):", msg_destport(msg));
-               }
-       }
-       if (msg_user(msg) == NAME_DISTRIBUTOR) {
-               tipc_printf(buf, ":ONOD(%x):", msg_orignode(msg));
-               tipc_printf(buf, ":DNOD(%x):", msg_destnode(msg));
-       }
-
-       if (msg_user(msg) ==  LINK_CONFIG) {
-               struct tipc_media_addr orig;
-
-               tipc_printf(buf, ":DDOM(%x):", msg_dest_domain(msg));
-               tipc_printf(buf, ":NETID(%u):", msg_bc_netid(msg));
-               memcpy(orig.value, msg_media_addr(msg), sizeof(orig.value));
-               orig.media_id = 0;
-               orig.broadcast = 0;
-               tipc_media_addr_printf(buf, &orig);
-       }
-       if (msg_user(msg) == BCAST_PROTOCOL) {
-               tipc_printf(buf, "BCNACK:AFTER(%u):", msg_bcgap_after(msg));
-               tipc_printf(buf, "TO(%u):", msg_bcgap_to(msg));
-       }
-       tipc_printf(buf, "\n");
-       if ((usr == CHANGEOVER_PROTOCOL) && (msg_msgcnt(msg)))
-               tipc_msg_dbg(buf, msg_get_wrapped(msg), "      /");
-       if ((usr == MSG_FRAGMENTER) && (msg_type(msg) == FIRST_FRAGMENT))
-               tipc_msg_dbg(buf, msg_get_wrapped(msg), "      /");
-}
-#endif
index 158318e67b08436cae204bc53787f4474f789693..55d3928dfd6702c423c04abea5aa7ec6fc870d2e 100644 (file)
@@ -161,7 +161,7 @@ void tipc_named_publish(struct publication *publ)
 
        buf = named_prepare_buf(PUBLICATION, ITEM_SIZE, 0);
        if (!buf) {
-               warn("Publication distribution failure\n");
+               pr_warn("Publication distribution failure\n");
                return;
        }
 
@@ -186,7 +186,7 @@ void tipc_named_withdraw(struct publication *publ)
 
        buf = named_prepare_buf(WITHDRAWAL, ITEM_SIZE, 0);
        if (!buf) {
-               warn("Withdrawal distribution failure\n");
+               pr_warn("Withdrawal distribution failure\n");
                return;
        }
 
@@ -213,7 +213,7 @@ static void named_distribute(struct list_head *message_list, u32 node,
                        rest -= left;
                        buf = named_prepare_buf(PUBLICATION, left, node);
                        if (!buf) {
-                               warn("Bulk publication failure\n");
+                               pr_warn("Bulk publication failure\n");
                                return;
                        }
                        item = (struct distr_item *)msg_data(buf_msg(buf));
@@ -283,9 +283,10 @@ static void named_purge_publ(struct publication *publ)
        write_unlock_bh(&tipc_nametbl_lock);
 
        if (p != publ) {
-               err("Unable to remove publication from failed node\n"
-                   "(type=%u, lower=%u, node=0x%x, ref=%u, key=%u)\n",
-                   publ->type, publ->lower, publ->node, publ->ref, publ->key);
+               pr_err("Unable to remove publication from failed node\n"
+                      " (type=%u, lower=%u, node=0x%x, ref=%u, key=%u)\n",
+                      publ->type, publ->lower, publ->node, publ->ref,
+                      publ->key);
        }
 
        kfree(p);
@@ -329,14 +330,14 @@ void tipc_named_recv(struct sk_buff *buf)
                                tipc_nodesub_unsubscribe(&publ->subscr);
                                kfree(publ);
                        } else {
-                               err("Unable to remove publication by node 0x%x\n"
-                                   "(type=%u, lower=%u, ref=%u, key=%u)\n",
-                                   msg_orignode(msg),
-                                   ntohl(item->type), ntohl(item->lower),
-                                   ntohl(item->ref), ntohl(item->key));
+                               pr_err("Unable to remove publication by node 0x%x\n"
+                                      " (type=%u, lower=%u, ref=%u, key=%u)\n",
+                                      msg_orignode(msg), ntohl(item->type),
+                                      ntohl(item->lower), ntohl(item->ref),
+                                      ntohl(item->key));
                        }
                } else {
-                       warn("Unrecognized name table message received\n");
+                       pr_warn("Unrecognized name table message received\n");
                }
                item++;
        }
index 13fb9d559ea565bb26f86cee74697dc1552d2d1d..360c478b0b533511b344cf143c4c42197c9ccd76 100644 (file)
@@ -126,7 +126,7 @@ static struct publication *publ_create(u32 type, u32 lower, u32 upper,
 {
        struct publication *publ = kzalloc(sizeof(*publ), GFP_ATOMIC);
        if (publ == NULL) {
-               warn("Publication creation failure, no memory\n");
+               pr_warn("Publication creation failure, no memory\n");
                return NULL;
        }
 
@@ -163,7 +163,7 @@ static struct name_seq *tipc_nameseq_create(u32 type, struct hlist_head *seq_hea
        struct sub_seq *sseq = tipc_subseq_alloc(1);
 
        if (!nseq || !sseq) {
-               warn("Name sequence creation failed, no memory\n");
+               pr_warn("Name sequence creation failed, no memory\n");
                kfree(nseq);
                kfree(sseq);
                return NULL;
@@ -263,8 +263,8 @@ static struct publication *tipc_nameseq_insert_publ(struct name_seq *nseq,
 
                /* Lower end overlaps existing entry => need an exact match */
                if ((sseq->lower != lower) || (sseq->upper != upper)) {
-                       warn("Cannot publish {%u,%u,%u}, overlap error\n",
-                            type, lower, upper);
+                       pr_warn("Cannot publish {%u,%u,%u}, overlap error\n",
+                               type, lower, upper);
                        return NULL;
                }
 
@@ -286,8 +286,8 @@ static struct publication *tipc_nameseq_insert_publ(struct name_seq *nseq,
                /* Fail if upper end overlaps into an existing entry */
                if ((inspos < nseq->first_free) &&
                    (upper >= nseq->sseqs[inspos].lower)) {
-                       warn("Cannot publish {%u,%u,%u}, overlap error\n",
-                            type, lower, upper);
+                       pr_warn("Cannot publish {%u,%u,%u}, overlap error\n",
+                               type, lower, upper);
                        return NULL;
                }
 
@@ -296,8 +296,8 @@ static struct publication *tipc_nameseq_insert_publ(struct name_seq *nseq,
                        struct sub_seq *sseqs = tipc_subseq_alloc(nseq->alloc * 2);
 
                        if (!sseqs) {
-                               warn("Cannot publish {%u,%u,%u}, no memory\n",
-                                    type, lower, upper);
+                               pr_warn("Cannot publish {%u,%u,%u}, no memory\n",
+                                       type, lower, upper);
                                return NULL;
                        }
                        memcpy(sseqs, nseq->sseqs,
@@ -309,8 +309,8 @@ static struct publication *tipc_nameseq_insert_publ(struct name_seq *nseq,
 
                info = kzalloc(sizeof(*info), GFP_ATOMIC);
                if (!info) {
-                       warn("Cannot publish {%u,%u,%u}, no memory\n",
-                            type, lower, upper);
+                       pr_warn("Cannot publish {%u,%u,%u}, no memory\n",
+                               type, lower, upper);
                        return NULL;
                }
 
@@ -492,8 +492,8 @@ struct publication *tipc_nametbl_insert_publ(u32 type, u32 lower, u32 upper,
 
        if ((scope < TIPC_ZONE_SCOPE) || (scope > TIPC_NODE_SCOPE) ||
            (lower > upper)) {
-               dbg("Failed to publish illegal {%u,%u,%u} with scope %u\n",
-                    type, lower, upper, scope);
+               pr_debug("Failed to publish illegal {%u,%u,%u} with scope %u\n",
+                        type, lower, upper, scope);
                return NULL;
        }
 
@@ -668,8 +668,8 @@ struct publication *tipc_nametbl_publish(u32 type, u32 lower, u32 upper,
        struct publication *publ;
 
        if (table.local_publ_count >= tipc_max_publications) {
-               warn("Publication failed, local publication limit reached (%u)\n",
-                    tipc_max_publications);
+               pr_warn("Publication failed, local publication limit reached (%u)\n",
+                       tipc_max_publications);
                return NULL;
        }
 
@@ -702,9 +702,9 @@ int tipc_nametbl_withdraw(u32 type, u32 lower, u32 ref, u32 key)
                return 1;
        }
        write_unlock_bh(&tipc_nametbl_lock);
-       err("Unable to remove local publication\n"
-           "(type=%u, lower=%u, ref=%u, key=%u)\n",
-           type, lower, ref, key);
+       pr_err("Unable to remove local publication\n"
+              "(type=%u, lower=%u, ref=%u, key=%u)\n",
+              type, lower, ref, key);
        return 0;
 }
 
@@ -725,8 +725,8 @@ void tipc_nametbl_subscribe(struct tipc_subscription *s)
                tipc_nameseq_subscribe(seq, s);
                spin_unlock_bh(&seq->lock);
        } else {
-               warn("Failed to create subscription for {%u,%u,%u}\n",
-                    s->seq.type, s->seq.lower, s->seq.upper);
+               pr_warn("Failed to create subscription for {%u,%u,%u}\n",
+                       s->seq.type, s->seq.lower, s->seq.upper);
        }
        write_unlock_bh(&tipc_nametbl_lock);
 }
@@ -753,19 +753,20 @@ void tipc_nametbl_unsubscribe(struct tipc_subscription *s)
 /**
  * subseq_list - print specified sub-sequence contents into the given buffer
  */
-static void subseq_list(struct sub_seq *sseq, struct print_buf *buf, u32 depth,
+static int subseq_list(struct sub_seq *sseq, char *buf, int len, u32 depth,
                        u32 index)
 {
        char portIdStr[27];
        const char *scope_str[] = {"", " zone", " cluster", " node"};
        struct publication *publ;
        struct name_info *info;
+       int ret;
 
-       tipc_printf(buf, "%-10u %-10u ", sseq->lower, sseq->upper);
+       ret = tipc_snprintf(buf, len, "%-10u %-10u ", sseq->lower, sseq->upper);
 
        if (depth == 2) {
-               tipc_printf(buf, "\n");
-               return;
+               ret += tipc_snprintf(buf - ret, len + ret, "\n");
+               return ret;
        }
 
        info = sseq->info;
@@ -774,52 +775,58 @@ static void subseq_list(struct sub_seq *sseq, struct print_buf *buf, u32 depth,
                sprintf(portIdStr, "<%u.%u.%u:%u>",
                         tipc_zone(publ->node), tipc_cluster(publ->node),
                         tipc_node(publ->node), publ->ref);
-               tipc_printf(buf, "%-26s ", portIdStr);
+               ret += tipc_snprintf(buf + ret, len - ret, "%-26s ", portIdStr);
                if (depth > 3) {
-                       tipc_printf(buf, "%-10u %s", publ->key,
-                                   scope_str[publ->scope]);
+                       ret += tipc_snprintf(buf + ret, len - ret, "%-10u %s",
+                                            publ->key, scope_str[publ->scope]);
                }
                if (!list_is_last(&publ->zone_list, &info->zone_list))
-                       tipc_printf(buf, "\n%33s", " ");
+                       ret += tipc_snprintf(buf + ret, len - ret,
+                                            "\n%33s", " ");
        };
 
-       tipc_printf(buf, "\n");
+       ret += tipc_snprintf(buf + ret, len - ret, "\n");
+       return ret;
 }
 
 /**
  * nameseq_list - print specified name sequence contents into the given buffer
  */
-static void nameseq_list(struct name_seq *seq, struct print_buf *buf, u32 depth,
+static int nameseq_list(struct name_seq *seq, char *buf, int len, u32 depth,
                         u32 type, u32 lowbound, u32 upbound, u32 index)
 {
        struct sub_seq *sseq;
        char typearea[11];
+       int ret = 0;
 
        if (seq->first_free == 0)
-               return;
+               return 0;
 
        sprintf(typearea, "%-10u", seq->type);
 
        if (depth == 1) {
-               tipc_printf(buf, "%s\n", typearea);
-               return;
+               ret += tipc_snprintf(buf, len, "%s\n", typearea);
+               return ret;
        }
 
        for (sseq = seq->sseqs; sseq != &seq->sseqs[seq->first_free]; sseq++) {
                if ((lowbound <= sseq->upper) && (upbound >= sseq->lower)) {
-                       tipc_printf(buf, "%s ", typearea);
+                       ret += tipc_snprintf(buf + ret, len - ret, "%s ",
+                                           typearea);
                        spin_lock_bh(&seq->lock);
-                       subseq_list(sseq, buf, depth, index);
+                       ret += subseq_list(sseq, buf + ret, len - ret,
+                                         depth, index);
                        spin_unlock_bh(&seq->lock);
                        sprintf(typearea, "%10s", " ");
                }
        }
+       return ret;
 }
 
 /**
  * nametbl_header - print name table header into the given buffer
  */
-static void nametbl_header(struct print_buf *buf, u32 depth)
+static int nametbl_header(char *buf, int len, u32 depth)
 {
        const char *header[] = {
                "Type       ",
@@ -829,24 +836,27 @@ static void nametbl_header(struct print_buf *buf, u32 depth)
        };
 
        int i;
+       int ret = 0;
 
        if (depth > 4)
                depth = 4;
        for (i = 0; i < depth; i++)
-               tipc_printf(buf, header[i]);
-       tipc_printf(buf, "\n");
+               ret += tipc_snprintf(buf + ret, len - ret, header[i]);
+       ret += tipc_snprintf(buf + ret, len - ret, "\n");
+       return ret;
 }
 
 /**
  * nametbl_list - print specified name table contents into the given buffer
  */
-static void nametbl_list(struct print_buf *buf, u32 depth_info,
+static int nametbl_list(char *buf, int len, u32 depth_info,
                         u32 type, u32 lowbound, u32 upbound)
 {
        struct hlist_head *seq_head;
        struct hlist_node *seq_node;
        struct name_seq *seq;
        int all_types;
+       int ret = 0;
        u32 depth;
        u32 i;
 
@@ -854,65 +864,69 @@ static void nametbl_list(struct print_buf *buf, u32 depth_info,
        depth = (depth_info & ~TIPC_NTQ_ALLTYPES);
 
        if (depth == 0)
-               return;
+               return 0;
 
        if (all_types) {
                /* display all entries in name table to specified depth */
-               nametbl_header(buf, depth);
+               ret += nametbl_header(buf, len, depth);
                lowbound = 0;
                upbound = ~0;
                for (i = 0; i < tipc_nametbl_size; i++) {
                        seq_head = &table.types[i];
                        hlist_for_each_entry(seq, seq_node, seq_head, ns_list) {
-                               nameseq_list(seq, buf, depth, seq->type,
-                                            lowbound, upbound, i);
+                               ret += nameseq_list(seq, buf + ret, len - ret,
+                                                  depth, seq->type,
+                                                  lowbound, upbound, i);
                        }
                }
        } else {
                /* display only the sequence that matches the specified type */
                if (upbound < lowbound) {
-                       tipc_printf(buf, "invalid name sequence specified\n");
-                       return;
+                       ret += tipc_snprintf(buf + ret, len - ret,
+                                       "invalid name sequence specified\n");
+                       return ret;
                }
-               nametbl_header(buf, depth);
+               ret += nametbl_header(buf + ret, len - ret, depth);
                i = hash(type);
                seq_head = &table.types[i];
                hlist_for_each_entry(seq, seq_node, seq_head, ns_list) {
                        if (seq->type == type) {
-                               nameseq_list(seq, buf, depth, type,
-                                            lowbound, upbound, i);
+                               ret += nameseq_list(seq, buf + ret, len - ret,
+                                                  depth, type,
+                                                  lowbound, upbound, i);
                                break;
                        }
                }
        }
+       return ret;
 }
 
-#define MAX_NAME_TBL_QUERY 32768
-
 struct sk_buff *tipc_nametbl_get(const void *req_tlv_area, int req_tlv_space)
 {
        struct sk_buff *buf;
        struct tipc_name_table_query *argv;
        struct tlv_desc *rep_tlv;
-       struct print_buf b;
+       char *pb;
+       int pb_len;
        int str_len;
 
        if (!TLV_CHECK(req_tlv_area, req_tlv_space, TIPC_TLV_NAME_TBL_QUERY))
                return tipc_cfg_reply_error_string(TIPC_CFG_TLV_ERROR);
 
-       buf = tipc_cfg_reply_alloc(TLV_SPACE(MAX_NAME_TBL_QUERY));
+       buf = tipc_cfg_reply_alloc(TLV_SPACE(ULTRA_STRING_MAX_LEN));
        if (!buf)
                return NULL;
 
        rep_tlv = (struct tlv_desc *)buf->data;
-       tipc_printbuf_init(&b, TLV_DATA(rep_tlv), MAX_NAME_TBL_QUERY);
+       pb = TLV_DATA(rep_tlv);
+       pb_len = ULTRA_STRING_MAX_LEN;
        argv = (struct tipc_name_table_query *)TLV_DATA(req_tlv_area);
        read_lock_bh(&tipc_nametbl_lock);
-       nametbl_list(&b, ntohl(argv->depth), ntohl(argv->type),
-                    ntohl(argv->lowbound), ntohl(argv->upbound));
+       str_len = nametbl_list(pb, pb_len, ntohl(argv->depth),
+                              ntohl(argv->type),
+                              ntohl(argv->lowbound), ntohl(argv->upbound));
        read_unlock_bh(&tipc_nametbl_lock);
-       str_len = tipc_printbuf_validate(&b);
-
+       str_len += 1;   /* for "\0" */
        skb_put(buf, TLV_SPACE(str_len));
        TLV_SET(rep_tlv, TIPC_TLV_ULTRA_STRING, NULL, str_len);
 
@@ -940,8 +954,10 @@ void tipc_nametbl_stop(void)
        /* Verify name table is empty, then release it */
        write_lock_bh(&tipc_nametbl_lock);
        for (i = 0; i < tipc_nametbl_size; i++) {
-               if (!hlist_empty(&table.types[i]))
-                       err("tipc_nametbl_stop(): hash chain %u is non-null\n", i);
+               if (hlist_empty(&table.types[i]))
+                       continue;
+               pr_err("nametbl_stop(): orphaned hash chain detected\n");
+               break;
        }
        kfree(table.types);
        table.types = NULL;
index 7c236c89cf5e5df849097333e155c5f2f6ad107e..5b5cea259caf5efde1151318f498ca3924099eb1 100644 (file)
@@ -184,9 +184,9 @@ int tipc_net_start(u32 addr)
 
        tipc_cfg_reinit();
 
-       info("Started in network mode\n");
-       info("Own node address %s, network identity %u\n",
-            tipc_addr_string_fill(addr_string, tipc_own_addr), tipc_net_id);
+       pr_info("Started in network mode\n");
+       pr_info("Own node address %s, network identity %u\n",
+               tipc_addr_string_fill(addr_string, tipc_own_addr), tipc_net_id);
        return 0;
 }
 
@@ -202,5 +202,5 @@ void tipc_net_stop(void)
        list_for_each_entry_safe(node, t_node, &tipc_node_list, list)
                tipc_node_delete(node);
        write_unlock_bh(&tipc_net_lock);
-       info("Left network mode\n");
+       pr_info("Left network mode\n");
 }
index 7bda8e3d1398937d83cf7a92e5477030826ed554..47a839df27dc2387b0067ef38228872135860993 100644 (file)
@@ -90,7 +90,7 @@ int tipc_netlink_start(void)
        res = genl_register_family_with_ops(&tipc_genl_family,
                &tipc_genl_ops, 1);
        if (res) {
-               err("Failed to register netlink interface\n");
+               pr_err("Failed to register netlink interface\n");
                return res;
        }
 
index d4fd341e6e0dcd67f9d7565423041b3a8af1da33..d21db204e25a181527822fa02599e391b4c40fe8 100644 (file)
@@ -105,7 +105,7 @@ struct tipc_node *tipc_node_create(u32 addr)
        n_ptr = kzalloc(sizeof(*n_ptr), GFP_ATOMIC);
        if (!n_ptr) {
                spin_unlock_bh(&node_create_lock);
-               warn("Node creation failed, no memory\n");
+               pr_warn("Node creation failed, no memory\n");
                return NULL;
        }
 
@@ -151,8 +151,8 @@ void tipc_node_link_up(struct tipc_node *n_ptr, struct tipc_link *l_ptr)
 
        n_ptr->working_links++;
 
-       info("Established link <%s> on network plane %c\n",
-            l_ptr->name, l_ptr->b_ptr->net_plane);
+       pr_info("Established link <%s> on network plane %c\n",
+               l_ptr->name, l_ptr->b_ptr->net_plane);
 
        if (!active[0]) {
                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)
                return;
        }
        if (l_ptr->priority < active[0]->priority) {
-               info("New link <%s> becomes standby\n", l_ptr->name);
+               pr_info("New link <%s> becomes standby\n", l_ptr->name);
                return;
        }
        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)
                active[0] = l_ptr;
                return;
        }
-       info("Old link <%s> becomes standby\n", active[0]->name);
+       pr_info("Old link <%s> becomes standby\n", active[0]->name);
        if (active[1] != active[0])
-               info("Old link <%s> becomes standby\n", active[1]->name);
+               pr_info("Old link <%s> becomes standby\n", active[1]->name);
        active[0] = active[1] = l_ptr;
 }
 
@@ -211,11 +211,11 @@ void tipc_node_link_down(struct tipc_node *n_ptr, struct tipc_link *l_ptr)
        n_ptr->working_links--;
 
        if (!tipc_link_is_active(l_ptr)) {
-               info("Lost standby link <%s> on network plane %c\n",
-                    l_ptr->name, l_ptr->b_ptr->net_plane);
+               pr_info("Lost standby link <%s> on network plane %c\n",
+                       l_ptr->name, l_ptr->b_ptr->net_plane);
                return;
        }
-       info("Lost link <%s> on network plane %c\n",
+       pr_info("Lost link <%s> on network plane %c\n",
                l_ptr->name, l_ptr->b_ptr->net_plane);
 
        active = &n_ptr->active_links[0];
@@ -290,8 +290,8 @@ static void node_lost_contact(struct tipc_node *n_ptr)
        char addr_string[16];
        u32 i;
 
-       info("Lost contact with %s\n",
-            tipc_addr_string_fill(addr_string, n_ptr->addr));
+       pr_info("Lost contact with %s\n",
+               tipc_addr_string_fill(addr_string, n_ptr->addr));
 
        /* Flush broadcast link info associated with lost node */
        if (n_ptr->bclink.supported) {
index 7a27344108fe196df84f8d9533f28c9f7098f0b1..5e34b015da457f96fff45b0dec423b7acf58d5bd 100644 (file)
@@ -51,7 +51,8 @@ void tipc_nodesub_subscribe(struct tipc_node_subscr *node_sub, u32 addr,
 
        node_sub->node = tipc_node_find(addr);
        if (!node_sub->node) {
-               warn("Node subscription rejected, unknown node 0x%x\n", addr);
+               pr_warn("Node subscription rejected, unknown node 0x%x\n",
+                       addr);
                return;
        }
        node_sub->handle_node_down = handle_down;
index 70bf78bd5b75f20b75714ef598c46358718c2eed..07c42fba672be17a4a127b8907f52a3520801f1f 100644 (file)
@@ -191,7 +191,7 @@ void tipc_port_recv_mcast(struct sk_buff *buf, struct tipc_port_list *dp)
                        struct sk_buff *b = skb_clone(buf, GFP_ATOMIC);
 
                        if (b == NULL) {
-                               warn("Unable to deliver multicast message(s)\n");
+                               pr_warn("Unable to deliver multicast message(s)\n");
                                goto exit;
                        }
                        if ((index == 0) && (cnt != 0))
@@ -221,12 +221,12 @@ struct tipc_port *tipc_createport_raw(void *usr_handle,
 
        p_ptr = kzalloc(sizeof(*p_ptr), GFP_ATOMIC);
        if (!p_ptr) {
-               warn("Port creation failed, no memory\n");
+               pr_warn("Port creation failed, no memory\n");
                return NULL;
        }
        ref = tipc_ref_acquire(p_ptr, &p_ptr->lock);
        if (!ref) {
-               warn("Port creation failed, reference table exhausted\n");
+               pr_warn("Port creation failed, ref. table exhausted\n");
                kfree(p_ptr);
                return NULL;
        }
@@ -581,67 +581,73 @@ exit:
        kfree_skb(buf);
 }
 
-static void port_print(struct tipc_port *p_ptr, struct print_buf *buf, int full_id)
+static int port_print(struct tipc_port *p_ptr, char *buf, int len, int full_id)
 {
        struct publication *publ;
+       int ret;
 
        if (full_id)
-               tipc_printf(buf, "<%u.%u.%u:%u>:",
-                           tipc_zone(tipc_own_addr), tipc_cluster(tipc_own_addr),
-                           tipc_node(tipc_own_addr), p_ptr->ref);
+               ret = tipc_snprintf(buf, len, "<%u.%u.%u:%u>:",
+                                   tipc_zone(tipc_own_addr),
+                                   tipc_cluster(tipc_own_addr),
+                                   tipc_node(tipc_own_addr), p_ptr->ref);
        else
-               tipc_printf(buf, "%-10u:", p_ptr->ref);
+               ret = tipc_snprintf(buf, len, "%-10u:", p_ptr->ref);
 
        if (p_ptr->connected) {
                u32 dport = port_peerport(p_ptr);
                u32 destnode = port_peernode(p_ptr);
 
-               tipc_printf(buf, " connected to <%u.%u.%u:%u>",
-                           tipc_zone(destnode), tipc_cluster(destnode),
-                           tipc_node(destnode), dport);
+               ret += tipc_snprintf(buf + ret, len - ret,
+                                    " connected to <%u.%u.%u:%u>",
+                                    tipc_zone(destnode),
+                                    tipc_cluster(destnode),
+                                    tipc_node(destnode), dport);
                if (p_ptr->conn_type != 0)
-                       tipc_printf(buf, " via {%u,%u}",
-                                   p_ptr->conn_type,
-                                   p_ptr->conn_instance);
+                       ret += tipc_snprintf(buf + ret, len - ret,
+                                            " via {%u,%u}", p_ptr->conn_type,
+                                            p_ptr->conn_instance);
        } else if (p_ptr->published) {
-               tipc_printf(buf, " bound to");
+               ret += tipc_snprintf(buf + ret, len - ret, " bound to");
                list_for_each_entry(publ, &p_ptr->publications, pport_list) {
                        if (publ->lower == publ->upper)
-                               tipc_printf(buf, " {%u,%u}", publ->type,
-                                           publ->lower);
+                               ret += tipc_snprintf(buf + ret, len - ret,
+                                                    " {%u,%u}", publ->type,
+                                                    publ->lower);
                        else
-                               tipc_printf(buf, " {%u,%u,%u}", publ->type,
-                                           publ->lower, publ->upper);
+                               ret += tipc_snprintf(buf + ret, len - ret,
+                                                    " {%u,%u,%u}", publ->type,
+                                                    publ->lower, publ->upper);
                }
        }
-       tipc_printf(buf, "\n");
+       ret += tipc_snprintf(buf + ret, len - ret, "\n");
+       return ret;
 }
 
-#define MAX_PORT_QUERY 32768
-
 struct sk_buff *tipc_port_get_ports(void)
 {
        struct sk_buff *buf;
        struct tlv_desc *rep_tlv;
-       struct print_buf pb;
+       char *pb;
+       int pb_len;
        struct tipc_port *p_ptr;
-       int str_len;
+       int str_len = 0;
 
-       buf = tipc_cfg_reply_alloc(TLV_SPACE(MAX_PORT_QUERY));
+       buf = tipc_cfg_reply_alloc(TLV_SPACE(ULTRA_STRING_MAX_LEN));
        if (!buf)
                return NULL;
        rep_tlv = (struct tlv_desc *)buf->data;
+       pb = TLV_DATA(rep_tlv);
+       pb_len = ULTRA_STRING_MAX_LEN;
 
-       tipc_printbuf_init(&pb, TLV_DATA(rep_tlv), MAX_PORT_QUERY);
        spin_lock_bh(&tipc_port_list_lock);
        list_for_each_entry(p_ptr, &ports, port_list) {
                spin_lock_bh(p_ptr->lock);
-               port_print(p_ptr, &pb, 0);
+               str_len += port_print(p_ptr, pb, pb_len, 0);
                spin_unlock_bh(p_ptr->lock);
        }
        spin_unlock_bh(&tipc_port_list_lock);
-       str_len = tipc_printbuf_validate(&pb);
-
+       str_len += 1;   /* for "\0" */
        skb_put(buf, TLV_SPACE(str_len));
        TLV_SET(rep_tlv, TIPC_TLV_ULTRA_STRING, NULL, str_len);
 
@@ -906,7 +912,7 @@ int tipc_createport(void *usr_handle,
 
        up_ptr = kmalloc(sizeof(*up_ptr), GFP_ATOMIC);
        if (!up_ptr) {
-               warn("Port creation failed, no memory\n");
+               pr_warn("Port creation failed, no memory\n");
                return -ENOMEM;
        }
        p_ptr = tipc_createport_raw(NULL, port_dispatcher, port_wakeup,
index 5cada0e38e0315699f290d34e2cf2e0aa2a1fde8..2a2a938dc22cb3c14def50169afffa37ea5bec86 100644 (file)
@@ -153,11 +153,11 @@ u32 tipc_ref_acquire(void *object, spinlock_t **lock)
        struct reference *entry = NULL;
 
        if (!object) {
-               err("Attempt to acquire reference to non-existent object\n");
+               pr_err("Attempt to acquire ref. to non-existent obj\n");
                return 0;
        }
        if (!tipc_ref_table.entries) {
-               err("Reference table not found during acquisition attempt\n");
+               pr_err("Ref. table not found in acquisition attempt\n");
                return 0;
        }
 
@@ -211,7 +211,7 @@ void tipc_ref_discard(u32 ref)
        u32 index_mask;
 
        if (!tipc_ref_table.entries) {
-               err("Reference table not found during discard attempt\n");
+               pr_err("Ref. table not found during discard attempt\n");
                return;
        }
 
@@ -222,11 +222,11 @@ void tipc_ref_discard(u32 ref)
        write_lock_bh(&ref_table_lock);
 
        if (!entry->object) {
-               err("Attempt to discard reference to non-existent object\n");
+               pr_err("Attempt to discard ref. to non-existent obj\n");
                goto exit;
        }
        if (entry->ref != ref) {
-               err("Attempt to discard non-existent reference\n");
+               pr_err("Attempt to discard non-existent reference\n");
                goto exit;
        }
 
index 1ebb49f3ddbe289607db00df7ee59d2f0c22b2fe..09dc5b97e07957d2ebb737cf402202efaf7c78ab 100644 (file)
  * POSSIBILITY OF SUCH DAMAGE.
  */
 
-#include <linux/export.h>
-#include <net/sock.h>
-
 #include "core.h"
 #include "port.h"
 
+#include <linux/export.h>
+#include <net/sock.h>
+
 #define SS_LISTENING   -1      /* socket is listening */
 #define SS_READY       -2      /* socket is connectionless */
 
@@ -1787,13 +1787,13 @@ int tipc_socket_init(void)
 
        res = proto_register(&tipc_proto, 1);
        if (res) {
-               err("Failed to register TIPC protocol type\n");
+               pr_err("Failed to register TIPC protocol type\n");
                goto out;
        }
 
        res = sock_register(&tipc_family_ops);
        if (res) {
-               err("Failed to register TIPC socket type\n");
+               pr_err("Failed to register TIPC socket type\n");
                proto_unregister(&tipc_proto);
                goto out;
        }
index f976e9cd6a7266631976901d6098993b7d9a84c7..5ed5965eb0bee40ec7e475d814370426b1e45a88 100644 (file)
@@ -305,8 +305,8 @@ static struct tipc_subscription *subscr_subscribe(struct tipc_subscr *s,
 
        /* Refuse subscription if global limit exceeded */
        if (atomic_read(&topsrv.subscription_count) >= tipc_max_subscriptions) {
-               warn("Subscription rejected, subscription limit reached (%u)\n",
-                    tipc_max_subscriptions);
+               pr_warn("Subscription rejected, limit reached (%u)\n",
+                       tipc_max_subscriptions);
                subscr_terminate(subscriber);
                return NULL;
        }
@@ -314,7 +314,7 @@ static struct tipc_subscription *subscr_subscribe(struct tipc_subscr *s,
        /* Allocate subscription object */
        sub = kmalloc(sizeof(*sub), GFP_ATOMIC);
        if (!sub) {
-               warn("Subscription rejected, no memory\n");
+               pr_warn("Subscription rejected, no memory\n");
                subscr_terminate(subscriber);
                return NULL;
        }
@@ -328,7 +328,7 @@ static struct tipc_subscription *subscr_subscribe(struct tipc_subscr *s,
        if ((!(sub->filter & TIPC_SUB_PORTS) ==
             !(sub->filter & TIPC_SUB_SERVICE)) ||
            (sub->seq.lower > sub->seq.upper)) {
-               warn("Subscription rejected, illegal request\n");
+               pr_warn("Subscription rejected, illegal request\n");
                kfree(sub);
                subscr_terminate(subscriber);
                return NULL;
@@ -440,7 +440,7 @@ static void subscr_named_msg_event(void *usr_handle,
        /* Create subscriber object */
        subscriber = kzalloc(sizeof(struct tipc_subscriber), GFP_ATOMIC);
        if (subscriber == NULL) {
-               warn("Subscriber rejected, no memory\n");
+               pr_warn("Subscriber rejected, no memory\n");
                return;
        }
        INIT_LIST_HEAD(&subscriber->subscription_list);
@@ -458,7 +458,7 @@ static void subscr_named_msg_event(void *usr_handle,
                        NULL,
                        &subscriber->port_ref);
        if (subscriber->port_ref == 0) {
-               warn("Subscriber rejected, unable to create port\n");
+               pr_warn("Subscriber rejected, unable to create port\n");
                kfree(subscriber);
                return;
        }
@@ -517,7 +517,7 @@ int tipc_subscr_start(void)
        return 0;
 
 failed:
-       err("Failed to create subscription service\n");
+       pr_err("Failed to create subscription service\n");
        return res;
 }