get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/86951/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 86951,
    "url": "https://patches.dpdk.org/api/patches/86951/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/1611125417-368324-1-git-send-email-jiaweiw@nvidia.com/",
    "project": {
        "id": 1,
        "url": "https://patches.dpdk.org/api/projects/1/?format=api",
        "name": "DPDK",
        "link_name": "dpdk",
        "list_id": "dev.dpdk.org",
        "list_email": "dev@dpdk.org",
        "web_url": "http://core.dpdk.org",
        "scm_url": "git://dpdk.org/dpdk",
        "webscm_url": "http://git.dpdk.org/dpdk",
        "list_archive_url": "https://inbox.dpdk.org/dev",
        "list_archive_url_format": "https://inbox.dpdk.org/dev/{}",
        "commit_url_format": ""
    },
    "msgid": "<1611125417-368324-1-git-send-email-jiaweiw@nvidia.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/1611125417-368324-1-git-send-email-jiaweiw@nvidia.com",
    "date": "2021-01-20T06:50:17",
    "name": "[v7] app/testpmd: fix testpmd packets dump overlapping",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "e4e5887d305be2bf7fbf5a78ff9c5f9605314f46",
    "submitter": {
        "id": 1939,
        "url": "https://patches.dpdk.org/api/people/1939/?format=api",
        "name": "Jiawei Wang",
        "email": "jiaweiw@nvidia.com"
    },
    "delegate": {
        "id": 319,
        "url": "https://patches.dpdk.org/api/users/319/?format=api",
        "username": "fyigit",
        "first_name": "Ferruh",
        "last_name": "Yigit",
        "email": "ferruh.yigit@amd.com"
    },
    "mbox": "https://patches.dpdk.org/project/dpdk/patch/1611125417-368324-1-git-send-email-jiaweiw@nvidia.com/mbox/",
    "series": [
        {
            "id": 14860,
            "url": "https://patches.dpdk.org/api/series/14860/?format=api",
            "web_url": "https://patches.dpdk.org/project/dpdk/list/?series=14860",
            "date": "2021-01-20T06:50:17",
            "name": "[v7] app/testpmd: fix testpmd packets dump overlapping",
            "version": 7,
            "mbox": "https://patches.dpdk.org/series/14860/mbox/"
        }
    ],
    "comments": "https://patches.dpdk.org/api/patches/86951/comments/",
    "check": "warning",
    "checks": "https://patches.dpdk.org/api/patches/86951/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@inbox.dpdk.org",
        "Delivered-To": "patchwork@inbox.dpdk.org",
        "Received": [
            "from mails.dpdk.org (mails.dpdk.org [217.70.189.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id 0313BA0A05;\n\tWed, 20 Jan 2021 07:50:21 +0100 (CET)",
            "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id B0CF3140D0D;\n\tWed, 20 Jan 2021 07:50:21 +0100 (CET)",
            "from mellanox.co.il (mail-il-dmz.mellanox.com [193.47.165.129])\n by mails.dpdk.org (Postfix) with ESMTP id 581B7140D0B\n for <dev@dpdk.org>; Wed, 20 Jan 2021 07:50:19 +0100 (CET)",
            "from Internal Mail-Server by MTLPINE1 (envelope-from\n jiaweiw@nvidia.com) with SMTP; 20 Jan 2021 08:50:17 +0200",
            "from nvidia.com (gen-l-vrt-281.mtl.labs.mlnx [10.237.44.1])\n by labmailer.mlnx (8.13.8/8.13.8) with ESMTP id 10K6oHRI017314;\n Wed, 20 Jan 2021 08:50:17 +0200"
        ],
        "From": "Jiawei Wang <jiaweiw@nvidia.com>",
        "To": "ferruh.yigit@intel.com, wenzhuo.lu@intel.com, beilei.xing@intel.com,\n bernard.iremonger@intel.com, orika@nvidia.com, viacheslavo@nvidia.com,\n thomas@monjalon.net, rasland@nvidia.com",
        "Cc": "dev@dpdk.org",
        "Date": "Wed, 20 Jan 2021 08:50:17 +0200",
        "Message-Id": "<1611125417-368324-1-git-send-email-jiaweiw@nvidia.com>",
        "X-Mailer": "git-send-email 1.8.3.1",
        "In-Reply-To": "<1609942417-259610-1-git-send-email-jiaweiw@nvidia.com>",
        "References": "<1609942417-259610-1-git-send-email-jiaweiw@nvidia.com>",
        "Subject": "[dpdk-dev] [PATCH v7] app/testpmd: fix testpmd packets dump\n overlapping",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.29",
        "Precedence": "list",
        "List-Id": "DPDK patches and discussions <dev.dpdk.org>",
        "List-Unsubscribe": "<https://mails.dpdk.org/options/dev>,\n <mailto:dev-request@dpdk.org?subject=unsubscribe>",
        "List-Archive": "<http://mails.dpdk.org/archives/dev/>",
        "List-Post": "<mailto:dev@dpdk.org>",
        "List-Help": "<mailto:dev-request@dpdk.org?subject=help>",
        "List-Subscribe": "<https://mails.dpdk.org/listinfo/dev>,\n <mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "When testpmd enabled the verbosity for the received packets, if two packets\nwere received at the same time, for example, sampling packet and normal\npacket, the dump output of these packets may be overlapping due to multiple\ncore handling the multiple queues simultaneously.\n\nThe patch uses one string buffer that collects all the packet dump output\ninto this buffer and then printouts it at last, that guarantees to printout\nseparately the dump output per packet.\n\nFixes: d862c45 (\"app/testpmd: move dumping packets to a separate function\")\n\nSigned-off-by: Jiawei Wang <jiaweiw@nvidia.com>\nAcked-by: Viacheslav Ovsiienko <viacheslavo@nvidia.com>\nReviewed-by: Ferruh Yigit <ferruh.yigit@intel.com>\n---\nv7:\n* Use the fixed sized array.\n* Use the size_t format for length definition.\n* Rebase the latest code.\n\nv6:\n* Rebase the latest code.\n\nv5:\n* Remove memset function calls before snprintf calls.\n\nv4:\n* Remove 'break' the loop if trancation and contiue to handle next packet.\n\nv3:\n* Use the marco instead of function calls to simplfy code.\n* Use the shorter chars '...' append into the dump to notify the truncation.\n* Update the commit message.\n* Rebase.\n\nv2:\n* Print dump output of per packet instead of per burst.\n* Add the checking for return value of 'snprintf' and exit if required size exceed the print buffer size.\n* Update the log messages.\n\n---\n app/test-pmd/util.c | 175 ++++++++++++++++++++++++++++++++++------------------\n 1 file changed, 115 insertions(+), 60 deletions(-)",
    "diff": "diff --git a/app/test-pmd/util.c b/app/test-pmd/util.c\nindex 649bf8f..a9e431a 100644\n--- a/app/test-pmd/util.c\n+++ b/app/test-pmd/util.c\n@@ -15,12 +15,23 @@\n \n #include \"testpmd.h\"\n \n+#define MAX_STRING_LEN 8192\n+\n+#define MKDUMPSTR(buf, buf_size, cur_len, ...) \\\n+do { \\\n+\tif (cur_len >= buf_size) \\\n+\t\tbreak; \\\n+\tcur_len += snprintf(buf + cur_len, buf_size - cur_len, __VA_ARGS__); \\\n+} while (0)\n+\n static inline void\n-print_ether_addr(const char *what, const struct rte_ether_addr *eth_addr)\n+print_ether_addr(const char *what, const struct rte_ether_addr *eth_addr,\n+\t\t char print_buf[], size_t buf_size, size_t *cur_len)\n {\n \tchar buf[RTE_ETHER_ADDR_FMT_SIZE];\n+\n \trte_ether_format_addr(buf, RTE_ETHER_ADDR_FMT_SIZE, eth_addr);\n-\tprintf(\"%s%s\", what, buf);\n+\tMKDUMPSTR(print_buf, buf_size, *cur_len, \"%s%s\", what, buf);\n }\n \n static inline bool\n@@ -74,13 +85,15 @@\n \tuint32_t vx_vni;\n \tconst char *reason;\n \tint dynf_index;\n+\tchar print_buf[MAX_STRING_LEN];\n+\tsize_t buf_size = MAX_STRING_LEN;\n+\tsize_t cur_len = 0;\n \n \tif (!nb_pkts)\n \t\treturn;\n-\tprintf(\"port %u/queue %u: %s %u packets\\n\",\n-\t\tport_id, queue,\n-\t       is_rx ? \"received\" : \"sent\",\n-\t       (unsigned int) nb_pkts);\n+\tMKDUMPSTR(print_buf, buf_size, cur_len,\n+\t\t  \"port %u/queue %u: %s %u packets\\n\", port_id, queue,\n+\t\t  is_rx ? \"received\" : \"sent\", (unsigned int) nb_pkts);\n \tfor (i = 0; i < nb_pkts; i++) {\n \t\tint ret;\n \t\tstruct rte_flow_error error;\n@@ -93,95 +106,128 @@\n \t\tis_encapsulation = RTE_ETH_IS_TUNNEL_PKT(packet_type);\n \t\tret = rte_flow_get_restore_info(port_id, mb, &info, &error);\n \t\tif (!ret) {\n-\t\t\tprintf(\"restore info:\");\n+\t\t\tMKDUMPSTR(print_buf, buf_size, cur_len,\n+\t\t\t\t  \"restore info:\");\n \t\t\tif (info.flags & RTE_FLOW_RESTORE_INFO_TUNNEL) {\n \t\t\t\tstruct port_flow_tunnel *port_tunnel;\n \n \t\t\t\tport_tunnel = port_flow_locate_tunnel\n \t\t\t\t\t      (port_id, &info.tunnel);\n-\t\t\t\tprintf(\" - tunnel\");\n+\t\t\t\tMKDUMPSTR(print_buf, buf_size, cur_len,\n+\t\t\t\t\t  \" - tunnel\");\n \t\t\t\tif (port_tunnel)\n-\t\t\t\t\tprintf(\" #%u\", port_tunnel->id);\n+\t\t\t\t\tMKDUMPSTR(print_buf, buf_size, cur_len,\n+\t\t\t\t\t\t  \" #%u\", port_tunnel->id);\n \t\t\t\telse\n-\t\t\t\t\tprintf(\" %s\", \"-none-\");\n-\t\t\t\tprintf(\" type %s\",\n-\t\t\t\t\tport_flow_tunnel_type(&info.tunnel));\n+\t\t\t\t\tMKDUMPSTR(print_buf, buf_size, cur_len,\n+\t\t\t\t\t\t  \" %s\", \"-none-\");\n+\t\t\t\tMKDUMPSTR(print_buf, buf_size, cur_len,\n+\t\t\t\t\t  \" type %s\", port_flow_tunnel_type\n+\t\t\t\t\t  (&info.tunnel));\n \t\t\t} else {\n-\t\t\t\tprintf(\" - no tunnel info\");\n+\t\t\t\tMKDUMPSTR(print_buf, buf_size, cur_len,\n+\t\t\t\t\t  \" - no tunnel info\");\n \t\t\t}\n \t\t\tif (info.flags & RTE_FLOW_RESTORE_INFO_ENCAPSULATED)\n-\t\t\t\tprintf(\" - outer header present\");\n+\t\t\t\tMKDUMPSTR(print_buf, buf_size, cur_len,\n+\t\t\t\t\t  \" - outer header present\");\n \t\t\telse\n-\t\t\t\tprintf(\" - no outer header\");\n+\t\t\t\tMKDUMPSTR(print_buf, buf_size, cur_len,\n+\t\t\t\t\t  \" - no outer header\");\n \t\t\tif (info.flags & RTE_FLOW_RESTORE_INFO_GROUP_ID)\n-\t\t\t\tprintf(\" - miss group %u\", info.group_id);\n+\t\t\t\tMKDUMPSTR(print_buf, buf_size, cur_len,\n+\t\t\t\t\t  \" - miss group %u\", info.group_id);\n \t\t\telse\n-\t\t\t\tprintf(\" - no miss group\");\n-\t\t\tprintf(\"\\n\");\n+\t\t\t\tMKDUMPSTR(print_buf, buf_size, cur_len,\n+\t\t\t\t\t  \" - no miss group\");\n+\t\t\tMKDUMPSTR(print_buf, buf_size, cur_len, \"\\n\");\n \t\t}\n-\t\tprint_ether_addr(\"  src=\", &eth_hdr->s_addr);\n-\t\tprint_ether_addr(\" - dst=\", &eth_hdr->d_addr);\n-\t\tprintf(\" - type=0x%04x - length=%u - nb_segs=%d\",\n-\t\t       eth_type, (unsigned int) mb->pkt_len,\n-\t\t       (int)mb->nb_segs);\n+\t\tprint_ether_addr(\"  src=\", &eth_hdr->s_addr,\n+\t\t\t\t print_buf, buf_size, &cur_len);\n+\t\tprint_ether_addr(\" - dst=\", &eth_hdr->d_addr,\n+\t\t\t\t print_buf, buf_size, &cur_len);\n+\t\tMKDUMPSTR(print_buf, buf_size, cur_len,\n+\t\t\t  \" - type=0x%04x - length=%u - nb_segs=%d\",\n+\t\t\t  eth_type, (unsigned int) mb->pkt_len,\n+\t\t\t  (int)mb->nb_segs);\n \t\tol_flags = mb->ol_flags;\n \t\tif (ol_flags & PKT_RX_RSS_HASH) {\n-\t\t\tprintf(\" - RSS hash=0x%x\", (unsigned int) mb->hash.rss);\n-\t\t\tprintf(\" - RSS queue=0x%x\", (unsigned int) queue);\n+\t\t\tMKDUMPSTR(print_buf, buf_size, cur_len,\n+\t\t\t\t  \" - RSS hash=0x%x\",\n+\t\t\t\t  (unsigned int) mb->hash.rss);\n+\t\t\tMKDUMPSTR(print_buf, buf_size, cur_len,\n+\t\t\t\t  \" - RSS queue=0x%x\", (unsigned int) queue);\n \t\t}\n \t\tif (ol_flags & PKT_RX_FDIR) {\n-\t\t\tprintf(\" - FDIR matched \");\n+\t\t\tMKDUMPSTR(print_buf, buf_size, cur_len,\n+\t\t\t\t  \" - FDIR matched \");\n \t\t\tif (ol_flags & PKT_RX_FDIR_ID)\n-\t\t\t\tprintf(\"ID=0x%x\",\n-\t\t\t\t       mb->hash.fdir.hi);\n+\t\t\t\tMKDUMPSTR(print_buf, buf_size, cur_len,\n+\t\t\t\t\t  \"ID=0x%x\", mb->hash.fdir.hi);\n \t\t\telse if (ol_flags & PKT_RX_FDIR_FLX)\n-\t\t\t\tprintf(\"flex bytes=0x%08x %08x\",\n-\t\t\t\t       mb->hash.fdir.hi, mb->hash.fdir.lo);\n+\t\t\t\tMKDUMPSTR(print_buf, buf_size, cur_len,\n+\t\t\t\t\t  \"flex bytes=0x%08x %08x\",\n+\t\t\t\t\t  mb->hash.fdir.hi, mb->hash.fdir.lo);\n \t\t\telse\n-\t\t\t\tprintf(\"hash=0x%x ID=0x%x \",\n-\t\t\t\t       mb->hash.fdir.hash, mb->hash.fdir.id);\n+\t\t\t\tMKDUMPSTR(print_buf, buf_size, cur_len,\n+\t\t\t\t\t  \"hash=0x%x ID=0x%x \",\n+\t\t\t\t\t  mb->hash.fdir.hash, mb->hash.fdir.id);\n \t\t}\n \t\tif (is_timestamp_enabled(mb))\n-\t\t\tprintf(\" - timestamp %\"PRIu64\" \", get_timestamp(mb));\n+\t\t\tMKDUMPSTR(print_buf, buf_size, cur_len,\n+\t\t\t\t  \" - timestamp %\"PRIu64\" \", get_timestamp(mb));\n \t\tif (ol_flags & PKT_RX_QINQ)\n-\t\t\tprintf(\" - QinQ VLAN tci=0x%x, VLAN tci outer=0x%x\",\n-\t\t\t       mb->vlan_tci, mb->vlan_tci_outer);\n+\t\t\tMKDUMPSTR(print_buf, buf_size, cur_len,\n+\t\t\t\t  \" - QinQ VLAN tci=0x%x, VLAN tci outer=0x%x\",\n+\t\t\t\t  mb->vlan_tci, mb->vlan_tci_outer);\n \t\telse if (ol_flags & PKT_RX_VLAN)\n-\t\t\tprintf(\" - VLAN tci=0x%x\", mb->vlan_tci);\n+\t\t\tMKDUMPSTR(print_buf, buf_size, cur_len,\n+\t\t\t\t  \" - VLAN tci=0x%x\", mb->vlan_tci);\n \t\tif (!is_rx && (ol_flags & PKT_TX_DYNF_METADATA))\n-\t\t\tprintf(\" - Tx metadata: 0x%x\",\n-\t\t\t       *RTE_FLOW_DYNF_METADATA(mb));\n+\t\t\tMKDUMPSTR(print_buf, buf_size, cur_len,\n+\t\t\t\t  \" - Tx metadata: 0x%x\",\n+\t\t\t\t  *RTE_FLOW_DYNF_METADATA(mb));\n \t\tif (is_rx && (ol_flags & PKT_RX_DYNF_METADATA))\n-\t\t\tprintf(\" - Rx metadata: 0x%x\",\n-\t\t\t       *RTE_FLOW_DYNF_METADATA(mb));\n+\t\t\tMKDUMPSTR(print_buf, buf_size, cur_len,\n+\t\t\t\t  \" - Rx metadata: 0x%x\",\n+\t\t\t\t  *RTE_FLOW_DYNF_METADATA(mb));\n \t\tfor (dynf_index = 0; dynf_index < 64; dynf_index++) {\n \t\t\tif (dynf_names[dynf_index][0] != '\\0')\n-\t\t\t\tprintf(\" - dynf %s: %d\",\n-\t\t\t\t       dynf_names[dynf_index],\n-\t\t\t\t       !!(ol_flags & (1UL << dynf_index)));\n+\t\t\t\tMKDUMPSTR(print_buf, buf_size, cur_len,\n+\t\t\t\t\t  \" - dynf %s: %d\",\n+\t\t\t\t\t  dynf_names[dynf_index],\n+\t\t\t\t\t  !!(ol_flags & (1UL << dynf_index)));\n \t\t}\n \t\tif (mb->packet_type) {\n \t\t\trte_get_ptype_name(mb->packet_type, buf, sizeof(buf));\n-\t\t\tprintf(\" - hw ptype: %s\", buf);\n+\t\t\tMKDUMPSTR(print_buf, buf_size, cur_len,\n+\t\t\t\t  \" - hw ptype: %s\", buf);\n \t\t}\n \t\tsw_packet_type = rte_net_get_ptype(mb, &hdr_lens,\n \t\t\t\t\tRTE_PTYPE_ALL_MASK);\n \t\trte_get_ptype_name(sw_packet_type, buf, sizeof(buf));\n-\t\tprintf(\" - sw ptype: %s\", buf);\n+\t\tMKDUMPSTR(print_buf, buf_size, cur_len, \" - sw ptype: %s\", buf);\n \t\tif (sw_packet_type & RTE_PTYPE_L2_MASK)\n-\t\t\tprintf(\" - l2_len=%d\", hdr_lens.l2_len);\n+\t\t\tMKDUMPSTR(print_buf, buf_size, cur_len, \" - l2_len=%d\",\n+\t\t\t\t  hdr_lens.l2_len);\n \t\tif (sw_packet_type & RTE_PTYPE_L3_MASK)\n-\t\t\tprintf(\" - l3_len=%d\", hdr_lens.l3_len);\n+\t\t\tMKDUMPSTR(print_buf, buf_size, cur_len, \" - l3_len=%d\",\n+\t\t\t\t  hdr_lens.l3_len);\n \t\tif (sw_packet_type & RTE_PTYPE_L4_MASK)\n-\t\t\tprintf(\" - l4_len=%d\", hdr_lens.l4_len);\n+\t\t\tMKDUMPSTR(print_buf, buf_size, cur_len, \" - l4_len=%d\",\n+\t\t\t\t  hdr_lens.l4_len);\n \t\tif (sw_packet_type & RTE_PTYPE_TUNNEL_MASK)\n-\t\t\tprintf(\" - tunnel_len=%d\", hdr_lens.tunnel_len);\n+\t\t\tMKDUMPSTR(print_buf, buf_size, cur_len,\n+\t\t\t\t  \" - tunnel_len=%d\", hdr_lens.tunnel_len);\n \t\tif (sw_packet_type & RTE_PTYPE_INNER_L2_MASK)\n-\t\t\tprintf(\" - inner_l2_len=%d\", hdr_lens.inner_l2_len);\n+\t\t\tMKDUMPSTR(print_buf, buf_size, cur_len,\n+\t\t\t\t  \" - inner_l2_len=%d\", hdr_lens.inner_l2_len);\n \t\tif (sw_packet_type & RTE_PTYPE_INNER_L3_MASK)\n-\t\t\tprintf(\" - inner_l3_len=%d\", hdr_lens.inner_l3_len);\n+\t\t\tMKDUMPSTR(print_buf, buf_size, cur_len,\n+\t\t\t\t  \" - inner_l3_len=%d\", hdr_lens.inner_l3_len);\n \t\tif (sw_packet_type & RTE_PTYPE_INNER_L4_MASK)\n-\t\t\tprintf(\" - inner_l4_len=%d\", hdr_lens.inner_l4_len);\n+\t\t\tMKDUMPSTR(print_buf, buf_size, cur_len,\n+\t\t\t\t  \" - inner_l4_len=%d\", hdr_lens.inner_l4_len);\n \t\tif (is_encapsulation) {\n \t\t\tstruct rte_ipv4_hdr *ipv4_hdr;\n \t\t\tstruct rte_ipv6_hdr *ipv6_hdr;\n@@ -218,18 +264,27 @@\n \t\t\t\tl2_len + l3_len + l4_len);\n \t\t\t\tudp_port = RTE_BE_TO_CPU_16(udp_hdr->dst_port);\n \t\t\t\tvx_vni = rte_be_to_cpu_32(vxlan_hdr->vx_vni);\n-\t\t\t\tprintf(\" - VXLAN packet: packet type =%d, \"\n-\t\t\t\t       \"Destination UDP port =%d, VNI = %d\",\n-\t\t\t\t       packet_type, udp_port, vx_vni >> 8);\n+\t\t\t\tMKDUMPSTR(print_buf, buf_size, cur_len,\n+\t\t\t\t\t  \" - VXLAN packet: packet type =%d, \"\n+\t\t\t\t\t  \"Destination UDP port =%d, VNI = %d\",\n+\t\t\t\t\t  packet_type, udp_port, vx_vni >> 8);\n \t\t\t}\n \t\t}\n-\t\tprintf(\" - %s queue=0x%x\", is_rx ? \"Receive\" : \"Send\",\n-\t\t\t(unsigned int) queue);\n-\t\tprintf(\"\\n\");\n+\t\tMKDUMPSTR(print_buf, buf_size, cur_len,\n+\t\t\t  \" - %s queue=0x%x\", is_rx ? \"Receive\" : \"Send\",\n+\t\t\t  (unsigned int) queue);\n+\t\tMKDUMPSTR(print_buf, buf_size, cur_len, \"\\n\");\n \t\trte_get_rx_ol_flag_list(mb->ol_flags, buf, sizeof(buf));\n-\t\tprintf(\"  ol_flags: %s\\n\", buf);\n+\t\tMKDUMPSTR(print_buf, buf_size, cur_len,\n+\t\t\t  \"  ol_flags: %s\\n\", buf);\n \t\tif (rte_mbuf_check(mb, 1, &reason) < 0)\n-\t\t\tprintf(\"INVALID mbuf: %s\\n\", reason);\n+\t\t\tMKDUMPSTR(print_buf, buf_size, cur_len,\n+\t\t\t\t  \"INVALID mbuf: %s\\n\", reason);\n+\t\tif (cur_len >= buf_size)\n+\t\t\tprintf(\"%s ...\\n\", print_buf);\n+\t\telse\n+\t\t\tprintf(\"%s\", print_buf);\n+\t\tcur_len = 0;\n \t}\n }\n \n",
    "prefixes": [
        "v7"
    ]
}