get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 1168601,
    "url": "http://patchwork.ozlabs.org/api/patches/1168601/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/netdev/patch/26101ca486b744bcb658c87d09d97972f047e7f9.1569491461.git.sd@queasysnail.net/",
    "project": {
        "id": 7,
        "url": "http://patchwork.ozlabs.org/api/projects/7/?format=api",
        "name": "Linux network development",
        "link_name": "netdev",
        "list_id": "netdev.vger.kernel.org",
        "list_email": "netdev@vger.kernel.org",
        "web_url": null,
        "scm_url": null,
        "webscm_url": null,
        "list_archive_url": "",
        "list_archive_url_format": "",
        "commit_url_format": ""
    },
    "msgid": "<26101ca486b744bcb658c87d09d97972f047e7f9.1569491461.git.sd@queasysnail.net>",
    "list_archive_url": null,
    "date": "2019-09-27T14:58:57",
    "name": "[ipsec-next,v3,2/6] xfrm: introduce xfrm_trans_queue_net",
    "commit_ref": null,
    "pull_url": null,
    "state": "awaiting-upstream",
    "archived": false,
    "hash": "0aac60c3e8e95997ed2f3a40cedf504e869d44d5",
    "submitter": {
        "id": 47767,
        "url": "http://patchwork.ozlabs.org/api/people/47767/?format=api",
        "name": "Sabrina Dubroca",
        "email": "sd@queasysnail.net"
    },
    "delegate": {
        "id": 34,
        "url": "http://patchwork.ozlabs.org/api/users/34/?format=api",
        "username": "davem",
        "first_name": "David",
        "last_name": "Miller",
        "email": "davem@davemloft.net"
    },
    "mbox": "http://patchwork.ozlabs.org/project/netdev/patch/26101ca486b744bcb658c87d09d97972f047e7f9.1569491461.git.sd@queasysnail.net/mbox/",
    "series": [
        {
            "id": 132948,
            "url": "http://patchwork.ozlabs.org/api/series/132948/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/netdev/list/?series=132948",
            "date": "2019-09-27T14:58:55",
            "name": "ipsec: add TCP encapsulation support (RFC 8229)",
            "version": 3,
            "mbox": "http://patchwork.ozlabs.org/series/132948/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/1168601/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/1168601/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<netdev-owner@vger.kernel.org>",
        "X-Original-To": "patchwork-incoming-netdev@ozlabs.org",
        "Delivered-To": "patchwork-incoming-netdev@ozlabs.org",
        "Authentication-Results": [
            "ozlabs.org;\n\tspf=none (mailfrom) smtp.mailfrom=vger.kernel.org\n\t(client-ip=209.132.180.67; helo=vger.kernel.org;\n\tenvelope-from=netdev-owner@vger.kernel.org;\n\treceiver=<UNKNOWN>)",
            "ozlabs.org; dmarc=none (p=none dis=none)\n\theader.from=queasysnail.net"
        ],
        "Received": [
            "from vger.kernel.org (vger.kernel.org [209.132.180.67])\n\tby ozlabs.org (Postfix) with ESMTP id 46fw0b3YLrz9sP3\n\tfor <patchwork-incoming-netdev@ozlabs.org>;\n\tSat, 28 Sep 2019 00:58:39 +1000 (AEST)",
            "(majordomo@vger.kernel.org) by vger.kernel.org via listexpand\n\tid S1727797AbfI0O6i (ORCPT\n\t<rfc822;patchwork-incoming-netdev@ozlabs.org>);\n\tFri, 27 Sep 2019 10:58:38 -0400",
            "from mx1.redhat.com ([209.132.183.28]:46892 \"EHLO mx1.redhat.com\"\n\trhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP\n\tid S1727769AbfI0O6g (ORCPT <rfc822;netdev@vger.kernel.org>);\n\tFri, 27 Sep 2019 10:58:36 -0400",
            "from smtp.corp.redhat.com\n\t(int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13])\n\t(using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits))\n\t(No client certificate requested)\n\tby mx1.redhat.com (Postfix) with ESMTPS id 46C1C369D3;\n\tFri, 27 Sep 2019 14:58:35 +0000 (UTC)",
            "from hog.localdomain, (unknown [10.40.206.20])\n\tby smtp.corp.redhat.com (Postfix) with ESMTP id 31A7C8DC00;\n\tFri, 27 Sep 2019 14:58:34 +0000 (UTC)"
        ],
        "From": "Sabrina Dubroca <sd@queasysnail.net>",
        "To": "netdev@vger.kernel.org",
        "Cc": "Herbert Xu <herbert@gondor.apana.org.au>,\n\tSteffen Klassert <steffen.klassert@secunet.com>,\n\tSabrina Dubroca <sd@queasysnail.net>",
        "Subject": "[PATCH ipsec-next v3 2/6] xfrm: introduce xfrm_trans_queue_net",
        "Date": "Fri, 27 Sep 2019 16:58:57 +0200",
        "Message-Id": "<26101ca486b744bcb658c87d09d97972f047e7f9.1569491461.git.sd@queasysnail.net>",
        "In-Reply-To": "<cover.1569491461.git.sd@queasysnail.net>",
        "References": "<cover.1569491461.git.sd@queasysnail.net>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "X-Scanned-By": "MIMEDefang 2.79 on 10.5.11.13",
        "X-Greylist": "Sender IP whitelisted, not delayed by milter-greylist-4.5.16\n\t(mx1.redhat.com [10.5.110.30]);\n\tFri, 27 Sep 2019 14:58:35 +0000 (UTC)",
        "Sender": "netdev-owner@vger.kernel.org",
        "Precedence": "bulk",
        "List-ID": "<netdev.vger.kernel.org>",
        "X-Mailing-List": "netdev@vger.kernel.org"
    },
    "content": "This will be used by TCP encapsulation to write packets to the encap\nsocket without holding the user socket's lock. Without this reinjection,\nwe're already holding the lock of the user socket, and then try to lock\nthe encap socket as well when we enqueue the encrypted packet.\n\nWhile at it, add a BUILD_BUG_ON like we usually do for skb->cb, since\nit's missing for struct xfrm_trans_cb.\n\nCo-developed-by: Herbert Xu <herbert@gondor.apana.org.au>\nSigned-off-by: Herbert Xu <herbert@gondor.apana.org.au>\nSigned-off-by: Sabrina Dubroca <sd@queasysnail.net>\n---\n include/net/xfrm.h    |  3 +++\n net/xfrm/xfrm_input.c | 21 +++++++++++++++++----\n 2 files changed, 20 insertions(+), 4 deletions(-)",
    "diff": "diff --git a/include/net/xfrm.h b/include/net/xfrm.h\nindex aa08a7a5f6ac..a0199f8251ec 100644\n--- a/include/net/xfrm.h\n+++ b/include/net/xfrm.h\n@@ -1547,6 +1547,9 @@ int __xfrm_init_state(struct xfrm_state *x, bool init_replay, bool offload);\n int xfrm_init_state(struct xfrm_state *x);\n int xfrm_input(struct sk_buff *skb, int nexthdr, __be32 spi, int encap_type);\n int xfrm_input_resume(struct sk_buff *skb, int nexthdr);\n+int xfrm_trans_queue_net(struct net *net, struct sk_buff *skb,\n+\t\t\t int (*finish)(struct net *, struct sock *,\n+\t\t\t\t       struct sk_buff *));\n int xfrm_trans_queue(struct sk_buff *skb,\n \t\t     int (*finish)(struct net *, struct sock *,\n \t\t\t\t   struct sk_buff *));\ndiff --git a/net/xfrm/xfrm_input.c b/net/xfrm/xfrm_input.c\nindex 6088bc2dc11e..eb0f0e64c71c 100644\n--- a/net/xfrm/xfrm_input.c\n+++ b/net/xfrm/xfrm_input.c\n@@ -36,6 +36,7 @@ struct xfrm_trans_cb {\n #endif\n \t} header;\n \tint (*finish)(struct net *net, struct sock *sk, struct sk_buff *skb);\n+\tstruct net *net;\n };\n \n #define XFRM_TRANS_SKB_CB(__skb) ((struct xfrm_trans_cb *)&((__skb)->cb[0]))\n@@ -763,12 +764,13 @@ static void xfrm_trans_reinject(unsigned long data)\n \tskb_queue_splice_init(&trans->queue, &queue);\n \n \twhile ((skb = __skb_dequeue(&queue)))\n-\t\tXFRM_TRANS_SKB_CB(skb)->finish(dev_net(skb->dev), NULL, skb);\n+\t\tXFRM_TRANS_SKB_CB(skb)->finish(XFRM_TRANS_SKB_CB(skb)->net,\n+\t\t\t\t\t       NULL, skb);\n }\n \n-int xfrm_trans_queue(struct sk_buff *skb,\n-\t\t     int (*finish)(struct net *, struct sock *,\n-\t\t\t\t   struct sk_buff *))\n+int xfrm_trans_queue_net(struct net *net, struct sk_buff *skb,\n+\t\t\t int (*finish)(struct net *, struct sock *,\n+\t\t\t\t       struct sk_buff *))\n {\n \tstruct xfrm_trans_tasklet *trans;\n \n@@ -777,11 +779,22 @@ int xfrm_trans_queue(struct sk_buff *skb,\n \tif (skb_queue_len(&trans->queue) >= netdev_max_backlog)\n \t\treturn -ENOBUFS;\n \n+\tBUILD_BUG_ON(sizeof(struct xfrm_trans_cb) > sizeof(skb->cb));\n+\n \tXFRM_TRANS_SKB_CB(skb)->finish = finish;\n+\tXFRM_TRANS_SKB_CB(skb)->net = net;\n \t__skb_queue_tail(&trans->queue, skb);\n \ttasklet_schedule(&trans->tasklet);\n \treturn 0;\n }\n+EXPORT_SYMBOL(xfrm_trans_queue_net);\n+\n+int xfrm_trans_queue(struct sk_buff *skb,\n+\t\t     int (*finish)(struct net *, struct sock *,\n+\t\t\t\t   struct sk_buff *))\n+{\n+\treturn xfrm_trans_queue_net(dev_net(skb->dev), skb, finish);\n+}\n EXPORT_SYMBOL(xfrm_trans_queue);\n \n void __init xfrm_input_init(void)\n",
    "prefixes": [
        "ipsec-next",
        "v3",
        "2/6"
    ]
}