get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 2221788,
    "url": "http://patchwork.ozlabs.org/api/1.2/patches/2221788/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/netfilter-devel/patch/20260410114144.10785-1-fw@strlen.de/",
    "project": {
        "id": 26,
        "url": "http://patchwork.ozlabs.org/api/1.2/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": "<20260410114144.10785-1-fw@strlen.de>",
    "list_archive_url": null,
    "date": "2026-04-10T11:41:38",
    "name": "[nf-next] netfilter: nat: switch release of ops to kfree_rcu",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "c63d41a418b6824eacb7c768343c196862f1c5ea",
    "submitter": {
        "id": 1025,
        "url": "http://patchwork.ozlabs.org/api/1.2/people/1025/?format=api",
        "name": "Florian Westphal",
        "email": "fw@strlen.de"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/netfilter-devel/patch/20260410114144.10785-1-fw@strlen.de/mbox/",
    "series": [
        {
            "id": 499445,
            "url": "http://patchwork.ozlabs.org/api/1.2/series/499445/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/netfilter-devel/list/?series=499445",
            "date": "2026-04-10T11:41:38",
            "name": "[nf-next] netfilter: nat: switch release of ops to kfree_rcu",
            "version": 1,
            "mbox": "http://patchwork.ozlabs.org/series/499445/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/2221788/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/2221788/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "\n <netfilter-devel+bounces-11808-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 spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org\n (client-ip=172.234.253.10; helo=sea.lore.kernel.org;\n envelope-from=netfilter-devel+bounces-11808-incoming=patchwork.ozlabs.org@vger.kernel.org;\n receiver=patchwork.ozlabs.org)",
            "smtp.subspace.kernel.org;\n arc=none smtp.client-ip=91.216.245.30",
            "smtp.subspace.kernel.org;\n dmarc=none (p=none dis=none) header.from=strlen.de",
            "smtp.subspace.kernel.org;\n spf=pass smtp.mailfrom=Chamillionaire.breakpoint.cc"
        ],
        "Received": [
            "from sea.lore.kernel.org (sea.lore.kernel.org [172.234.253.10])\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 4fsZn26yGcz1yGS\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 10 Apr 2026 21:48:06 +1000 (AEST)",
            "from smtp.subspace.kernel.org (conduit.subspace.kernel.org\n [100.90.174.1])\n\tby sea.lore.kernel.org (Postfix) with ESMTP id 50450302C6E5\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 10 Apr 2026 11:41:56 +0000 (UTC)",
            "from localhost.localdomain (localhost.localdomain [127.0.0.1])\n\tby smtp.subspace.kernel.org (Postfix) with ESMTP id A1ACB3A9635;\n\tFri, 10 Apr 2026 11:41:55 +0000 (UTC)",
            "from Chamillionaire.breakpoint.cc (Chamillionaire.breakpoint.cc\n [91.216.245.30])\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 DDE4F312832\n\tfor <netfilter-devel@vger.kernel.org>; Fri, 10 Apr 2026 11:41:53 +0000 (UTC)",
            "by Chamillionaire.breakpoint.cc (Postfix, from userid 1003)\n\tid 8232E60CFA; Fri, 10 Apr 2026 13:41:51 +0200 (CEST)"
        ],
        "ARC-Seal": "i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;\n\tt=1775821315; cv=none;\n b=qRkteQatIE867scqTgYsUKz+ITTeK8h3cVRQKUfUeqA2EF1xJpMrsuh6wXDQourKOsQoncWYrCUzk4OLn9bqGdA4XipOwgCHvBLu8GuSrPkiRkiCPT86WNWB3qaCU29I5ByjUTwtGxEFiXhIvjtOPv2WnaqKPWLyMpusQGApCs0=",
        "ARC-Message-Signature": "i=1; a=rsa-sha256; d=subspace.kernel.org;\n\ts=arc-20240116; t=1775821315; c=relaxed/simple;\n\tbh=FSX0U4E9Ywv9e5U4nRaUtDh5Jpuxs5Ql9zSAIOIN0lI=;\n\th=From:To:Cc:Subject:Date:Message-ID:MIME-Version;\n b=GFi2Tbc8XR5TRL4ItI7ddl59NUVjmoxSMbhHoEkM+sgqhRQ3hTLm8TT+TBSVyOZXbX5A/2TUifQygfVbFu67tokTZoavO84aUR+yS5I0BrilHHK8pFr82xPpSt9q+NO0KRdrAQwkaexGyhgUTEyn+9v52xGAgGM6VT2+kVGvXzg=",
        "ARC-Authentication-Results": "i=1; smtp.subspace.kernel.org;\n dmarc=none (p=none dis=none) header.from=strlen.de;\n spf=pass smtp.mailfrom=Chamillionaire.breakpoint.cc;\n arc=none smtp.client-ip=91.216.245.30",
        "From": "Florian Westphal <fw@strlen.de>",
        "To": "<netfilter-devel@vger.kernel.org>",
        "Cc": "Florian Westphal <fw@strlen.de>,\n\tPablo Neira Ayuso <pablo@netfilter.org>",
        "Subject": "[PATCH nf-next] netfilter: nat: switch release of ops to kfree_rcu",
        "Date": "Fri, 10 Apr 2026 13:41:38 +0200",
        "Message-ID": "<20260410114144.10785-1-fw@strlen.de>",
        "X-Mailer": "git-send-email 2.52.0",
        "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": "Historically this is't an issue, even for normal base hooks: the data\npath doesn't use the original nf_hook_ops that are used to register\nthe callbacks.\n\nHowever, in v5.14 I added the ability to dump the active netfilter\nhooks from userspace.\n\nThis code will peek back into the nf_hook_ops that are available\nat the tail of the pointer-array blob used by the datapath.\n\nThe nat hooks are special, because they are called indirectly from\nthe central nat dispatcher hook.  They are currently invisible to\nthe nfnl hook dump subsystem.\n\nBut once that changes the nat ops structures have to be deferred too.\n\nReported-by: Pablo Neira Ayuso <pablo@netfilter.org>\nSigned-off-by: Florian Westphal <fw@strlen.de>\n---\n @pablo: route via nf if you prefer, in that case you can\n add:\n  Fixes: e2cf17d3774c (\"netfilter: add new hook nfnl subsystem\")\n\n But as explained above, I don't think its a problem for current\n nf/net; the nat hooks are currently not dumpable from nfnl_hook.\n\n net/ipv4/netfilter/iptable_nat.c  | 2 +-\n net/ipv6/netfilter/ip6table_nat.c | 2 +-\n net/netfilter/nf_nat_core.c       | 2 +-\n 3 files changed, 3 insertions(+), 3 deletions(-)",
    "diff": "diff --git a/net/ipv4/netfilter/iptable_nat.c b/net/ipv4/netfilter/iptable_nat.c\nindex a5db7c67d61b..3b1de7f82bf8 100644\n--- a/net/ipv4/netfilter/iptable_nat.c\n+++ b/net/ipv4/netfilter/iptable_nat.c\n@@ -100,7 +100,7 @@ static void ipt_nat_unregister_lookups(struct net *net)\n \tfor (i = 0; i < ARRAY_SIZE(nf_nat_ipv4_ops); i++)\n \t\tnf_nat_ipv4_unregister_fn(net, &ops[i]);\n \n-\tkfree(ops);\n+\tkfree_rcu(ops, rcu);\n }\n \n static int iptable_nat_table_init(struct net *net)\ndiff --git a/net/ipv6/netfilter/ip6table_nat.c b/net/ipv6/netfilter/ip6table_nat.c\nindex e119d4f090cc..9adfbfeaab0c 100644\n--- a/net/ipv6/netfilter/ip6table_nat.c\n+++ b/net/ipv6/netfilter/ip6table_nat.c\n@@ -102,7 +102,7 @@ static void ip6t_nat_unregister_lookups(struct net *net)\n \tfor (i = 0; i < ARRAY_SIZE(nf_nat_ipv6_ops); i++)\n \t\tnf_nat_ipv6_unregister_fn(net, &ops[i]);\n \n-\tkfree(ops);\n+\tkfree_rcu(ops, rcu);\n }\n \n static int ip6table_nat_table_init(struct net *net)\ndiff --git a/net/netfilter/nf_nat_core.c b/net/netfilter/nf_nat_core.c\nindex 3b5434e4ec9c..e8beefa503e5 100644\n--- a/net/netfilter/nf_nat_core.c\n+++ b/net/netfilter/nf_nat_core.c\n@@ -1294,7 +1294,7 @@ void nf_nat_unregister_fn(struct net *net, u8 pf, const struct nf_hook_ops *ops,\n \t\t}\n \n \t\tnat_proto_net->nat_hook_ops = NULL;\n-\t\tkfree(nat_ops);\n+\t\tkfree_rcu(nat_ops, rcu);\n \t}\n unlock:\n \tmutex_unlock(&nf_nat_proto_mutex);\n",
    "prefixes": [
        "nf-next"
    ]
}