get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 2217634,
    "url": "http://patchwork.ozlabs.org/api/patches/2217634/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/netfilter-devel/patch/20260330090402.810083-1-pablo@netfilter.org/",
    "project": {
        "id": 26,
        "url": "http://patchwork.ozlabs.org/api/projects/26/?format=api",
        "name": "Netfilter Development",
        "link_name": "netfilter-devel",
        "list_id": "netfilter-devel.vger.kernel.org",
        "list_email": "netfilter-devel@vger.kernel.org",
        "web_url": null,
        "scm_url": null,
        "webscm_url": null,
        "list_archive_url": "",
        "list_archive_url_format": "",
        "commit_url_format": ""
    },
    "msgid": "<20260330090402.810083-1-pablo@netfilter.org>",
    "list_archive_url": null,
    "date": "2026-03-30T09:04:02",
    "name": "[nf-next] netfilter: nf_tables_offload: add nft_flow_action_entry_next() and use it",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "3e3165a46883e98a04d04ef6fbfa375ffa49a522",
    "submitter": {
        "id": 1315,
        "url": "http://patchwork.ozlabs.org/api/people/1315/?format=api",
        "name": "Pablo Neira Ayuso",
        "email": "pablo@netfilter.org"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/netfilter-devel/patch/20260330090402.810083-1-pablo@netfilter.org/mbox/",
    "series": [
        {
            "id": 497988,
            "url": "http://patchwork.ozlabs.org/api/series/497988/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/netfilter-devel/list/?series=497988",
            "date": "2026-03-30T09:04:02",
            "name": "[nf-next] netfilter: nf_tables_offload: add nft_flow_action_entry_next() and use it",
            "version": 1,
            "mbox": "http://patchwork.ozlabs.org/series/497988/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/2217634/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/2217634/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "\n <netfilter-devel+bounces-11487-incoming=patchwork.ozlabs.org@vger.kernel.org>",
        "X-Original-To": [
            "incoming@patchwork.ozlabs.org",
            "netfilter-devel@vger.kernel.org"
        ],
        "Delivered-To": "patchwork-incoming@legolas.ozlabs.org",
        "Authentication-Results": [
            "legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=netfilter.org header.i=@netfilter.org\n header.a=rsa-sha256 header.s=2025 header.b=ay3SeocO;\n\tdkim-atps=neutral",
            "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org\n (client-ip=104.64.211.4; helo=sin.lore.kernel.org;\n envelope-from=netfilter-devel+bounces-11487-incoming=patchwork.ozlabs.org@vger.kernel.org;\n receiver=patchwork.ozlabs.org)",
            "smtp.subspace.kernel.org;\n\tdkim=pass (2048-bit key) header.d=netfilter.org header.i=@netfilter.org\n header.b=\"ay3SeocO\"",
            "smtp.subspace.kernel.org;\n arc=none smtp.client-ip=217.70.190.124",
            "smtp.subspace.kernel.org;\n dmarc=none (p=none dis=none) header.from=netfilter.org",
            "smtp.subspace.kernel.org;\n spf=pass smtp.mailfrom=netfilter.org"
        ],
        "Received": [
            "from sin.lore.kernel.org (sin.lore.kernel.org [104.64.211.4])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fklxF4Pkfz1y1q\n\tfor <incoming@patchwork.ozlabs.org>; Mon, 30 Mar 2026 20:16:33 +1100 (AEDT)",
            "from smtp.subspace.kernel.org (conduit.subspace.kernel.org\n [100.90.174.1])\n\tby sin.lore.kernel.org (Postfix) with ESMTP id EC4833004041\n\tfor <incoming@patchwork.ozlabs.org>; Mon, 30 Mar 2026 09:04:13 +0000 (UTC)",
            "from localhost.localdomain (localhost.localdomain [127.0.0.1])\n\tby smtp.subspace.kernel.org (Postfix) with ESMTP id AAC103AE71E;\n\tMon, 30 Mar 2026 09:04:11 +0000 (UTC)",
            "from mail.netfilter.org (mail.netfilter.org [217.70.190.124])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby smtp.subspace.kernel.org (Postfix) with ESMTPS id 9A7453AB27C\n\tfor <netfilter-devel@vger.kernel.org>; Mon, 30 Mar 2026 09:04:09 +0000 (UTC)",
            "from localhost.localdomain (mail-agni [217.70.190.124])\n\tby mail.netfilter.org (Postfix) with ESMTPSA id F2CDE60177\n\tfor <netfilter-devel@vger.kernel.org>; Mon, 30 Mar 2026 11:04:06 +0200 (CEST)"
        ],
        "ARC-Seal": "i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;\n\tt=1774861451; cv=none;\n b=VIzcUkodwE+9QI4KT04gXIn0Jc7eBV3MWckRh6wed9wIUg5ke5z3hRLXqBPJV1sXXFLMa/iot3V2GkufyLP/oMyK7jPRF37PijS8F1e8WE8RvILpsofoYG/R5zd//L9Cm60UQMnfoS21H6g6c1jnWfrPl/zX03EXfkS77w+lpZo=",
        "ARC-Message-Signature": "i=1; a=rsa-sha256; d=subspace.kernel.org;\n\ts=arc-20240116; t=1774861451; c=relaxed/simple;\n\tbh=y4jjoljjJl38d3JWVJJ3Y1gxuZusdNwusuQ0lQkghYc=;\n\th=From:To:Subject:Date:Message-ID:MIME-Version;\n b=KCvFE3ROqJV63RQx1fPII3gPv/R4U38J0nCywEippYTNy0Hi00yJEMJZ8OVSMoPk+eWGoDQABhdY0fcelMBLLPtyyDZcBwVeuHTyrrQAQbHKSksgE8jsBBQi7teSb5MRob3mATuR2v0bWq4RDHZVOyYCU9AxrPMWJ0t0oxNr5XA=",
        "ARC-Authentication-Results": "i=1; smtp.subspace.kernel.org;\n dmarc=none (p=none dis=none) header.from=netfilter.org;\n spf=pass smtp.mailfrom=netfilter.org;\n dkim=pass (2048-bit key) header.d=netfilter.org header.i=@netfilter.org\n header.b=ay3SeocO; arc=none smtp.client-ip=217.70.190.124",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=netfilter.org;\n\ts=2025; t=1774861447;\n\tbh=R4bV+OKybGJTVGTJQv9qpMVJBxLZZwoC4FooMpcNHxY=;\n\th=From:To:Subject:Date:From;\n\tb=ay3SeocOcNYQH8DexW4DpOfNnTIJVEXUss3bTniPJh1IA2gJJXhf7lLJczdpryAaR\n\t C1aSuSv6D9GKu7xvFFBvuQgjqHM8lDdjrpImaS9k6pY76Wc1GkncwTaJCKeOkUa5Km\n\t +1j8mayEHdYnSHGwZyezMd++eRlPTGc8sUOEFxNBlRjnR23wUAi0Yt3brzQZueCRiP\n\t lyMkniROF0gaWH6Mk1DjN1VsnVNB8bDuWDTQwk1PHz2/y+Rp4bBlrMg0xWXctRwLNN\n\t 0/7qNcwTI/Xa20yyGZWZ4ZVkylHodI47OqMaeJOe/0QNnmaXauVa+eeWXyeAkFvSDu\n\t XgOwPoxjnpMhw==",
        "From": "Pablo Neira Ayuso <pablo@netfilter.org>",
        "To": "netfilter-devel@vger.kernel.org",
        "Subject": "[PATCH nf-next] netfilter: nf_tables_offload: add\n nft_flow_action_entry_next() and use it",
        "Date": "Mon, 30 Mar 2026 11:04:02 +0200",
        "Message-ID": "<20260330090402.810083-1-pablo@netfilter.org>",
        "X-Mailer": "git-send-email 2.47.3",
        "Precedence": "bulk",
        "X-Mailing-List": "netfilter-devel@vger.kernel.org",
        "List-Id": "<netfilter-devel.vger.kernel.org>",
        "List-Subscribe": "<mailto:netfilter-devel+subscribe@vger.kernel.org>",
        "List-Unsubscribe": "<mailto:netfilter-devel+unsubscribe@vger.kernel.org>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit"
    },
    "content": "Add a new helper function to retrieve the next action entry in flow\nrule, check if the maximum number of actions is reached, bail out in\nsuch case.\n\nReplace existing opencoded iteration on the action array by this\nhelper function.\n\nSigned-off-by: Pablo Neira Ayuso <pablo@netfilter.org>\n---\n include/net/netfilter/nf_tables_offload.h | 10 ++++++++++\n net/netfilter/nf_dup_netdev.c             |  5 ++++-\n net/netfilter/nft_immediate.c             |  4 +++-\n 3 files changed, 17 insertions(+), 2 deletions(-)",
    "diff": "diff --git a/include/net/netfilter/nf_tables_offload.h b/include/net/netfilter/nf_tables_offload.h\nindex 3568b6a2f5f0..14c427891ee6 100644\n--- a/include/net/netfilter/nf_tables_offload.h\n+++ b/include/net/netfilter/nf_tables_offload.h\n@@ -67,6 +67,16 @@ struct nft_flow_rule {\n \tstruct flow_rule\t*rule;\n };\n \n+static inline struct flow_action_entry *\n+nft_flow_action_entry_next(struct nft_offload_ctx *ctx,\n+\t\t\t   struct nft_flow_rule *flow)\n+{\n+\tif (unlikely(ctx->num_actions >= flow->rule->action.num_entries))\n+\t\treturn NULL;\n+\n+\treturn &flow->rule->action.entries[ctx->num_actions++];\n+}\n+\n void nft_flow_rule_set_addr_type(struct nft_flow_rule *flow,\n \t\t\t\t enum flow_dissector_key_id addr_type);\n \ndiff --git a/net/netfilter/nf_dup_netdev.c b/net/netfilter/nf_dup_netdev.c\nindex fab8b9011098..e348fb90b8dc 100644\n--- a/net/netfilter/nf_dup_netdev.c\n+++ b/net/netfilter/nf_dup_netdev.c\n@@ -95,7 +95,10 @@ int nft_fwd_dup_netdev_offload(struct nft_offload_ctx *ctx,\n \tif (!dev)\n \t\treturn -EOPNOTSUPP;\n \n-\tentry = &flow->rule->action.entries[ctx->num_actions++];\n+\tentry = nft_flow_action_entry_next(ctx, flow);\n+\tif (!entry)\n+\t\treturn -E2BIG;\n+\n \tentry->id = id;\n \tentry->dev = dev;\n \ndiff --git a/net/netfilter/nft_immediate.c b/net/netfilter/nft_immediate.c\nindex 37c29947b380..0046baf44bdb 100644\n--- a/net/netfilter/nft_immediate.c\n+++ b/net/netfilter/nft_immediate.c\n@@ -279,7 +279,9 @@ static int nft_immediate_offload_verdict(struct nft_offload_ctx *ctx,\n \tstruct flow_action_entry *entry;\n \tconst struct nft_data *data;\n \n-\tentry = &flow->rule->action.entries[ctx->num_actions++];\n+\tentry = nft_flow_action_entry_next(ctx, flow);\n+\tif (!entry)\n+\t\treturn -E2BIG;\n \n \tdata = &priv->data;\n \tswitch (data->verdict.code) {\n",
    "prefixes": [
        "nf-next"
    ]
}