get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 815541,
    "url": "http://patchwork.ozlabs.org/api/1.2/patches/815541/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/netdev/patch/1505829088-1823-1-git-send-email-jbacik@fb.com/",
    "project": {
        "id": 7,
        "url": "http://patchwork.ozlabs.org/api/1.2/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": "<1505829088-1823-1-git-send-email-jbacik@fb.com>",
    "list_archive_url": null,
    "date": "2017-09-19T13:51:26",
    "name": "[1/3,v2] selftest: add a reuseaddr test",
    "commit_ref": null,
    "pull_url": null,
    "state": "not-applicable",
    "archived": true,
    "hash": "4c7642e5bbda6530a916c0fdeeb365b46533aabd",
    "submitter": {
        "id": 72383,
        "url": "http://patchwork.ozlabs.org/api/1.2/people/72383/?format=api",
        "name": "Josef Bacik",
        "email": "josef@toxicpanda.com"
    },
    "delegate": {
        "id": 34,
        "url": "http://patchwork.ozlabs.org/api/1.2/users/34/?format=api",
        "username": "davem",
        "first_name": "David",
        "last_name": "Miller",
        "email": "davem@davemloft.net"
    },
    "mbox": "http://patchwork.ozlabs.org/project/netdev/patch/1505829088-1823-1-git-send-email-jbacik@fb.com/mbox/",
    "series": [
        {
            "id": 3886,
            "url": "http://patchwork.ozlabs.org/api/1.2/series/3886/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/netdev/list/?series=3886",
            "date": "2017-09-19T13:51:26",
            "name": "[1/3,v2] selftest: add a reuseaddr test",
            "version": 2,
            "mbox": "http://patchwork.ozlabs.org/series/3886/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/815541/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/815541/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<netdev-owner@vger.kernel.org>",
        "X-Original-To": "patchwork-incoming@ozlabs.org",
        "Delivered-To": "patchwork-incoming@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; dkim=pass (2048-bit key;\n\tunprotected) header.d=toxicpanda-com.20150623.gappssmtp.com\n\theader.i=@toxicpanda-com.20150623.gappssmtp.com\n\theader.b=\"AKDbXoMV\"; dkim-atps=neutral"
        ],
        "Received": [
            "from vger.kernel.org (vger.kernel.org [209.132.180.67])\n\tby ozlabs.org (Postfix) with ESMTP id 3xxPRr0gCRz9s7B\n\tfor <patchwork-incoming@ozlabs.org>;\n\tTue, 19 Sep 2017 23:51:36 +1000 (AEST)",
            "(majordomo@vger.kernel.org) by vger.kernel.org via listexpand\n\tid S1751580AbdISNvd (ORCPT <rfc822;patchwork-incoming@ozlabs.org>);\n\tTue, 19 Sep 2017 09:51:33 -0400",
            "from mail-qk0-f193.google.com ([209.85.220.193]:35152 \"EHLO\n\tmail-qk0-f193.google.com\" rhost-flags-OK-OK-OK-OK) by vger.kernel.org\n\twith ESMTP id S1751361AbdISNvb (ORCPT\n\t<rfc822;netdev@vger.kernel.org>); Tue, 19 Sep 2017 09:51:31 -0400",
            "by mail-qk0-f193.google.com with SMTP id o77so2289915qke.2\n\tfor <netdev@vger.kernel.org>; Tue, 19 Sep 2017 06:51:30 -0700 (PDT)",
            "from localhost ([2606:a000:4381:1201:225:22ff:feb3:e51a])\n\tby smtp.gmail.com with ESMTPSA id\n\tb77sm6756633qkg.26.2017.09.19.06.51.29\n\t(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);\n\tTue, 19 Sep 2017 06:51:29 -0700 (PDT)"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=toxicpanda-com.20150623.gappssmtp.com; s=20150623;\n\th=from:to:cc:subject:date:message-id;\n\tbh=h9CJB2sBk30sJvUC3447jPYVwrGxaPL+MNHwmrs1uXM=;\n\tb=AKDbXoMVNHWlo86nWn4AEahI+Onllizkaa2mgzlaWyQ6Fa1JsxFVX/S/Dms7n7dwsc\n\ttyslv3lEA+cPq0wC/qi3qopA3OZj8ybfJBUJY6DntpmOFF6OA+BuA7S88hADAcJJI4Y1\n\tw3ahhsoEG/DcLNqZeUMfWEV472UwRL4sZXIUQeR3abS5wCnFL2Q6Ju4drPenEvMyVeMR\n\twh+9jlINGvnXTikL9unA32WSxREoR5hzeRZB+Q04QOSsK3grII37GrrmUOlcM/Km2ZRx\n\tF9L5B5dDMnAaA7oo0R+6pzKZrmfrTbBGRPpcUOYH7yi2WrUu757zhrzUq5KnMMRU4KPs\n\tNANg==",
        "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20161025;\n\th=x-gm-message-state:from:to:cc:subject:date:message-id;\n\tbh=h9CJB2sBk30sJvUC3447jPYVwrGxaPL+MNHwmrs1uXM=;\n\tb=oxlc+H4mzLG1zxeKTqb0KaZl/koCIjrc9WZEbGIntYc8Qw/sNh8pRrdMSwyk4IH445\n\th9uqThflBm9WPbVZjnyGexDlzkHjJyucKXapuXj1vtW2qCs6L+XSbCQUU14lAlAKENzX\n\tNsGD/2eGxpw3ASgD2YQvJlurH4vTVUlb0S8O1PD/aPO5f/BdwoW9Dg2x+qHeQNvHHUoD\n\tK22Eu9WAcyrRCe+I/DxUocJHGq66ql68ofymGfL9pv1zBhGRTlU8J3T7xEr+qfMn4Nwn\n\t1qUQixL3UjjnweOGemaCNYxO0i9Vc6HPK6cjDivf5QmgzHFkwUI76I4ceY91+3V730/1\n\tmVWQ==",
        "X-Gm-Message-State": "AHPjjUhr8EGPJrAuCRWqapA++EAcSefSWutsNgErDG8Sl2w0rVC40gfU\n\tGzC9Ixe4gkSd9dHxGqHgmaTS/Q==",
        "X-Google-Smtp-Source": "AOwi7QBbOJWsjg3D/HUexySBH9OkfIF/WVibTCffpU+TUsUXkCO/6ogyKpvMnPFvg3rFC6ByqI1pyQ==",
        "X-Received": "by 10.55.79.79 with SMTP id d76mr2105114qkb.173.1505829090174;\n\tTue, 19 Sep 2017 06:51:30 -0700 (PDT)",
        "From": "josef@toxicpanda.com",
        "X-Google-Original-From": "jbacik@fb.com",
        "To": "shuah@kernel.org, davem@davemloft.net, netdev@vger.kernel.org,\n\tlinux-kselftest@vger.kernel.org",
        "Cc": "Josef Bacik <jbacik@fb.com>",
        "Subject": "[PATCH 1/3][v2] selftest: add a reuseaddr test",
        "Date": "Tue, 19 Sep 2017 09:51:26 -0400",
        "Message-Id": "<1505829088-1823-1-git-send-email-jbacik@fb.com>",
        "X-Mailer": "git-send-email 2.7.4",
        "Sender": "netdev-owner@vger.kernel.org",
        "Precedence": "bulk",
        "List-ID": "<netdev.vger.kernel.org>",
        "X-Mailing-List": "netdev@vger.kernel.org"
    },
    "content": "From: Josef Bacik <jbacik@fb.com>\n\nThis is to test for a regression introduced by\n\nb9470c27607b (\"inet: kill smallest_size and smallest_port\")\n\nwhich introduced a problem with reuseaddr and bind conflicts.\n\nSigned-off-by: Josef Bacik <jbacik@fb.com>\n---\n tools/testing/selftests/net/.gitignore           |   1 +\n tools/testing/selftests/net/Makefile             |   2 +-\n tools/testing/selftests/net/reuseaddr_conflict.c | 114 +++++++++++++++++++++++\n 3 files changed, 116 insertions(+), 1 deletion(-)\n create mode 100644 tools/testing/selftests/net/reuseaddr_conflict.c",
    "diff": "diff --git a/tools/testing/selftests/net/.gitignore b/tools/testing/selftests/net/.gitignore\nindex 9801253e4802..c612d6e38c62 100644\n--- a/tools/testing/selftests/net/.gitignore\n+++ b/tools/testing/selftests/net/.gitignore\n@@ -6,3 +6,4 @@ reuseport_bpf\n reuseport_bpf_cpu\n reuseport_bpf_numa\n reuseport_dualstack\n+reuseaddr_conflict\ndiff --git a/tools/testing/selftests/net/Makefile b/tools/testing/selftests/net/Makefile\nindex de1f5772b878..3df542c84610 100644\n--- a/tools/testing/selftests/net/Makefile\n+++ b/tools/testing/selftests/net/Makefile\n@@ -7,7 +7,7 @@ TEST_PROGS := run_netsocktests run_afpackettests test_bpf.sh netdevice.sh rtnetl\n TEST_GEN_FILES =  socket\n TEST_GEN_FILES += psock_fanout psock_tpacket\n TEST_GEN_FILES += reuseport_bpf reuseport_bpf_cpu reuseport_bpf_numa\n-TEST_GEN_FILES += reuseport_dualstack msg_zerocopy\n+TEST_GEN_FILES += reuseport_dualstack msg_zerocopy reuseaddr_conflict\n \n include ../lib.mk\n \ndiff --git a/tools/testing/selftests/net/reuseaddr_conflict.c b/tools/testing/selftests/net/reuseaddr_conflict.c\nnew file mode 100644\nindex 000000000000..7c5b12664b03\n--- /dev/null\n+++ b/tools/testing/selftests/net/reuseaddr_conflict.c\n@@ -0,0 +1,114 @@\n+/*\n+ * Test for the regression introduced by\n+ *\n+ * b9470c27607b (\"inet: kill smallest_size and smallest_port\")\n+ *\n+ * If we open an ipv4 socket on a port with reuseaddr we shouldn't reset the tb\n+ * when we open the ipv6 conterpart, which is what was happening previously.\n+ */\n+#include <errno.h>\n+#include <error.h>\n+#include <arpa/inet.h>\n+#include <netinet/in.h>\n+#include <stdbool.h>\n+#include <stdio.h>\n+#include <sys/socket.h>\n+#include <sys/types.h>\n+#include <unistd.h>\n+\n+#define PORT 9999\n+\n+int open_port(int ipv6, int any)\n+{\n+\tint fd = -1;\n+\tint reuseaddr = 1;\n+\tint v6only = 1;\n+\tint addrlen;\n+\tint ret = -1;\n+\tstruct sockaddr *addr;\n+\tint family = ipv6 ? AF_INET6 : AF_INET;\n+\n+\tstruct sockaddr_in6 addr6 = {\n+\t\t.sin6_family = AF_INET6,\n+\t\t.sin6_port = htons(PORT),\n+\t\t.sin6_addr = in6addr_any\n+\t};\n+\tstruct sockaddr_in addr4 = {\n+\t\t.sin_family = AF_INET,\n+\t\t.sin_port = htons(PORT),\n+\t\t.sin_addr.s_addr = any ? htonl(INADDR_ANY) : inet_addr(\"127.0.0.1\"),\n+\t};\n+\n+\n+\tif (ipv6) {\n+\t\taddr = (struct sockaddr*)&addr6;\n+\t\taddrlen = sizeof(addr6);\n+\t} else {\n+\t\taddr = (struct sockaddr*)&addr4;\n+\t\taddrlen = sizeof(addr4);\n+\t}\n+\n+\tif ((fd = socket(family, SOCK_STREAM, IPPROTO_TCP)) < 0) {\n+\t\tperror(\"socket\");\n+\t\tgoto out;\n+\t}\n+\n+\tif (ipv6 && setsockopt(fd, IPPROTO_IPV6, IPV6_V6ONLY, (void*)&v6only,\n+\t\t\t       sizeof(v6only)) < 0) {\n+\t\tperror(\"setsockopt IPV6_V6ONLY\");\n+\t\tgoto out;\n+\t}\n+\n+\tif (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &reuseaddr,\n+\t\t       sizeof(reuseaddr)) < 0) {\n+\t\tperror(\"setsockopt SO_REUSEADDR\");\n+\t\tgoto out;\n+\t}\n+\n+\tif (bind(fd, addr, addrlen) < 0) {\n+\t\tperror(\"bind\");\n+\t\tgoto out;\n+\t}\n+\n+\tif (any)\n+\t\treturn fd;\n+\n+\tif (listen(fd, 1) < 0) {\n+\t\tperror(\"listen\");\n+\t\tgoto out;\n+\t}\n+\treturn fd;\n+out:\n+\tclose(fd);\n+\treturn ret;\n+}\n+\n+int main(void)\n+{\n+\tint listenfd;\n+\tint fd1, fd2;\n+\n+\tfprintf(stderr, \"Opening 127.0.0.1:%d\\n\", PORT);\n+\tlistenfd = open_port(0, 0);\n+\tif (listenfd < 0)\n+\t\terror(1, errno, \"Couldn't open listen socket\");\n+\tfprintf(stderr, \"Opening INADDR_ANY:%d\\n\", PORT);\n+\tfd1 = open_port(0, 1);\n+\tif (fd1 >= 0)\n+\t\terror(1, 0, \"Was allowed to create an ipv4 reuseport on a already bound non-reuseport socket\");\n+\tfprintf(stderr, \"Opening in6addr_any:%d\\n\", PORT);\n+\tfd1 = open_port(1, 1);\n+\tif (fd1 < 0)\n+\t\terror(1, errno, \"Couldn't open ipv6 reuseport\");\n+\tfprintf(stderr, \"Opening INADDR_ANY:%d\\n\", PORT);\n+\tfd2 = open_port(0, 1);\n+\tif (fd2 >= 0)\n+\t\terror(1, 0, \"Was allowed to create an ipv4 reuseport on a already bound non-reuseport socket\");\n+\tclose(fd1);\n+\tfprintf(stderr, \"Opening INADDR_ANY:%d after closing ipv6 socket\\n\", PORT);\n+\tfd1 = open_port(0, 1);\n+\tif (fd1 >= 0)\n+\t\terror(1, 0, \"Was allowed to create an ipv4 reuseport on an already bound non-reuseport socket with no ipv6\");\n+\tfprintf(stderr, \"Success\");\n+\treturn 0;\n+}\n",
    "prefixes": [
        "1/3",
        "v2"
    ]
}