get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 833386,
    "url": "http://patchwork.ozlabs.org/api/1.2/patches/833386/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/netdev/patch/1509633431-2184-3-git-send-email-josef@toxicpanda.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": "<1509633431-2184-3-git-send-email-josef@toxicpanda.com>",
    "list_archive_url": null,
    "date": "2017-11-02T14:37:11",
    "name": "[2/2] samples/bpf: add a test for bpf_override_return",
    "commit_ref": null,
    "pull_url": null,
    "state": "changes-requested",
    "archived": true,
    "hash": "f767335782ba8de995a14d9470f7d39be03f8a60",
    "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/1509633431-2184-3-git-send-email-josef@toxicpanda.com/mbox/",
    "series": [
        {
            "id": 11520,
            "url": "http://patchwork.ozlabs.org/api/1.2/series/11520/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/netdev/list/?series=11520",
            "date": "2017-11-02T14:37:10",
            "name": "Add the ability to do BPF directed error injection",
            "version": 1,
            "mbox": "http://patchwork.ozlabs.org/series/11520/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/833386/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/833386/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=\"rq8w13Tf\"; dkim-atps=neutral"
        ],
        "Received": [
            "from vger.kernel.org (vger.kernel.org [209.132.180.67])\n\tby ozlabs.org (Postfix) with ESMTP id 3ySSPG4NfJz9sNw\n\tfor <patchwork-incoming@ozlabs.org>;\n\tFri,  3 Nov 2017 01:38:10 +1100 (AEDT)",
            "(majordomo@vger.kernel.org) by vger.kernel.org via listexpand\n\tid S933627AbdKBOhh (ORCPT <rfc822;patchwork-incoming@ozlabs.org>);\n\tThu, 2 Nov 2017 10:37:37 -0400",
            "from mail-qk0-f196.google.com ([209.85.220.196]:56116 \"EHLO\n\tmail-qk0-f196.google.com\" rhost-flags-OK-OK-OK-OK) by vger.kernel.org\n\twith ESMTP id S933458AbdKBOhT (ORCPT\n\t<rfc822;netdev@vger.kernel.org>); Thu, 2 Nov 2017 10:37:19 -0400",
            "by mail-qk0-f196.google.com with SMTP id x82so6386741qkb.12\n\tfor <netdev@vger.kernel.org>; Thu, 02 Nov 2017 07:37:18 -0700 (PDT)",
            "from localhost\n\t(cpe-2606-A000-4381-1201-225-22FF-FEB3-E51A.dyn6.twc.com.\n\t[2606:a000:4381:1201:225:22ff:feb3:e51a])\n\tby smtp.gmail.com with ESMTPSA id\n\tk126sm2148538qkc.69.2017.11.02.07.37.17\n\t(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);\n\tThu, 02 Nov 2017 07:37:17 -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:in-reply-to:references;\n\tbh=/xZ+xdxCmKjNGEQmfg98zrHbzr6GBRz/LJMbBzz29o0=;\n\tb=rq8w13TfuSD8sfBon9jeMtN8hrHXSECNaWVsqi7JCYFTsKmt7RGkF5z8pPY5yo8HTX\n\tPlyNBeNVsoVrzrQKzv3f0wUMfYzq2owVl0JtSdlUFycRoQLag5PxN2t0jF3ZQ34LXsH1\n\tWfy9dh9QhluywZSW2E59j1zcvUN75zwk1O2s/CFmgt4D0mn6rkj5fCL2G1/ApgNQLCMb\n\t1Bv6b7mSCoyhYk5AfgHkh4G0GuAw+bvQkJVlOcOVM3YWp4/mte0IlwbrLfl1qYvLcpxh\n\tiBpcDwRAFe5jiaV1Kj/Elvf/fSowdL00wPxefLpUWut1Qlu2U8n3pXU2lvN3AQBPLeaq\n\tMjoA==",
        "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:in-reply-to\n\t:references;\n\tbh=/xZ+xdxCmKjNGEQmfg98zrHbzr6GBRz/LJMbBzz29o0=;\n\tb=T4JSta2877XYAnPzQcs4oK/YcKSKhGVhJk/uoLB0l8aWXCTgYD8iLAv4mPl+B2IlsF\n\tspSmvjcdWEG9TeFebh0X4/LhnhY5HMzu695EfZIyOVkvEVriAm2qA2PL899KzAbVc3BM\n\tnoCoj14uKWM8JwOGDEzTqoxEnmAA8hX14gGQFWQGWPFW8o9eHv7DhoGmZBkvqyiBJ4m+\n\tgRV9TxV9SU3KeQH6J3ATAqEknkjADfSR4euGwHy9zglqJsm/GMuYHTx/3SKLHiDJTOhU\n\txqmr+5DMib4uRPVKQwEs9svCaGC6/HnVpKKXbNVMDKkrRG75X+H44lYFyLlXKUYUYebq\n\tIjsA==",
        "X-Gm-Message-State": "AJaThX4V9p4uwoJzig3MclbBcQc2guJtMcecJhWqSv9n2ygqGmVTi44x\n\tKod5l3Y01CHz2S9kzNN/vtwigg==",
        "X-Google-Smtp-Source": "ABhQp+Q/9Ep8KAcgmKnFFdFyCQkpOcW6NT2gM6qMZb+vpYCuzsZmuzHUMKaeDPsrIPSJmma867m4Og==",
        "X-Received": "by 10.55.18.28 with SMTP id c28mr5014198qkh.297.1509633438364;\n\tThu, 02 Nov 2017 07:37:18 -0700 (PDT)",
        "From": "Josef Bacik <josef@toxicpanda.com>",
        "To": "rostedt@goodmis.org, mingo@redhat.com, davem@davemloft.net,\n\tnetdev@vger.kernel.org, linux-kernel@vger.kernel.org,\n\tast@kernel.org, kernel-team@fb.com, daniel@iogearbox.net",
        "Cc": "Josef Bacik <jbacik@fb.com>",
        "Subject": "[PATCH 2/2] samples/bpf: add a test for bpf_override_return",
        "Date": "Thu,  2 Nov 2017 10:37:11 -0400",
        "Message-Id": "<1509633431-2184-3-git-send-email-josef@toxicpanda.com>",
        "X-Mailer": "git-send-email 2.7.5",
        "In-Reply-To": "<1509633431-2184-1-git-send-email-josef@toxicpanda.com>",
        "References": "<1509633431-2184-1-git-send-email-josef@toxicpanda.com>",
        "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 adds a basic test for bpf_override_return to verify it works.  We\noverride the main function for mounting a btrfs fs so it'll return\n-ENOMEM and then make sure that trying to mount a btrfs fs will fail.\n\nAcked-by: Alexei Starovoitov <ast@kernel.org>\nSigned-off-by: Josef Bacik <jbacik@fb.com>\n---\n samples/bpf/Makefile                      |  4 ++++\n samples/bpf/test_override_return.sh       | 15 +++++++++++++++\n samples/bpf/tracex7_kern.c                | 16 ++++++++++++++++\n samples/bpf/tracex7_user.c                | 28 ++++++++++++++++++++++++++++\n tools/include/uapi/linux/bpf.h            |  7 ++++++-\n tools/testing/selftests/bpf/bpf_helpers.h |  3 ++-\n 6 files changed, 71 insertions(+), 2 deletions(-)\n create mode 100755 samples/bpf/test_override_return.sh\n create mode 100644 samples/bpf/tracex7_kern.c\n create mode 100644 samples/bpf/tracex7_user.c",
    "diff": "diff --git a/samples/bpf/Makefile b/samples/bpf/Makefile\nindex ea2b9e6135f3..83d06bc1f710 100644\n--- a/samples/bpf/Makefile\n+++ b/samples/bpf/Makefile\n@@ -14,6 +14,7 @@ hostprogs-y += tracex3\n hostprogs-y += tracex4\n hostprogs-y += tracex5\n hostprogs-y += tracex6\n+hostprogs-y += tracex7\n hostprogs-y += test_probe_write_user\n hostprogs-y += trace_output\n hostprogs-y += lathist\n@@ -58,6 +59,7 @@ tracex3-objs := bpf_load.o $(LIBBPF) tracex3_user.o\n tracex4-objs := bpf_load.o $(LIBBPF) tracex4_user.o\n tracex5-objs := bpf_load.o $(LIBBPF) tracex5_user.o\n tracex6-objs := bpf_load.o $(LIBBPF) tracex6_user.o\n+tracex7-objs := bpf_load.o $(LIBBPF) tracex7_user.o\n load_sock_ops-objs := bpf_load.o $(LIBBPF) load_sock_ops.o\n test_probe_write_user-objs := bpf_load.o $(LIBBPF) test_probe_write_user_user.o\n trace_output-objs := bpf_load.o $(LIBBPF) trace_output_user.o\n@@ -100,6 +102,7 @@ always += tracex3_kern.o\n always += tracex4_kern.o\n always += tracex5_kern.o\n always += tracex6_kern.o\n+always += tracex7_kern.o\n always += sock_flags_kern.o\n always += test_probe_write_user_kern.o\n always += trace_output_kern.o\n@@ -153,6 +156,7 @@ HOSTLOADLIBES_tracex3 += -lelf\n HOSTLOADLIBES_tracex4 += -lelf -lrt\n HOSTLOADLIBES_tracex5 += -lelf\n HOSTLOADLIBES_tracex6 += -lelf\n+HOSTLOADLIBES_tracex7 += -lelf\n HOSTLOADLIBES_test_cgrp2_sock2 += -lelf\n HOSTLOADLIBES_load_sock_ops += -lelf\n HOSTLOADLIBES_test_probe_write_user += -lelf\ndiff --git a/samples/bpf/test_override_return.sh b/samples/bpf/test_override_return.sh\nnew file mode 100755\nindex 000000000000..e68b9ee6814b\n--- /dev/null\n+++ b/samples/bpf/test_override_return.sh\n@@ -0,0 +1,15 @@\n+#!/bin/bash\n+\n+rm -f testfile.img\n+dd if=/dev/zero of=testfile.img bs=1M seek=1000 count=1\n+DEVICE=$(losetup --show -f testfile.img)\n+mkfs.btrfs -f $DEVICE\n+mkdir tmpmnt\n+./tracex7 $DEVICE\n+if [ $? -eq 0 ]\n+then\n+\techo \"SUCCESS!\"\n+else\n+\techo \"FAILED!\"\n+fi\n+losetup -d $DEVICE\ndiff --git a/samples/bpf/tracex7_kern.c b/samples/bpf/tracex7_kern.c\nnew file mode 100644\nindex 000000000000..1ab308a43e0f\n--- /dev/null\n+++ b/samples/bpf/tracex7_kern.c\n@@ -0,0 +1,16 @@\n+#include <uapi/linux/ptrace.h>\n+#include <uapi/linux/bpf.h>\n+#include <linux/version.h>\n+#include \"bpf_helpers.h\"\n+\n+SEC(\"kprobe/open_ctree\")\n+int bpf_prog1(struct pt_regs *ctx)\n+{\n+\tunsigned long rc = -12;\n+\n+\tbpf_override_return(ctx, rc);\n+\treturn 0;\n+}\n+\n+char _license[] SEC(\"license\") = \"GPL\";\n+u32 _version SEC(\"version\") = LINUX_VERSION_CODE;\ndiff --git a/samples/bpf/tracex7_user.c b/samples/bpf/tracex7_user.c\nnew file mode 100644\nindex 000000000000..8a52ac492e8b\n--- /dev/null\n+++ b/samples/bpf/tracex7_user.c\n@@ -0,0 +1,28 @@\n+#define _GNU_SOURCE\n+\n+#include <stdio.h>\n+#include <linux/bpf.h>\n+#include <unistd.h>\n+#include \"libbpf.h\"\n+#include \"bpf_load.h\"\n+\n+int main(int argc, char **argv)\n+{\n+\tFILE *f;\n+\tchar filename[256];\n+\tchar command[256];\n+\tint ret;\n+\n+\tsnprintf(filename, sizeof(filename), \"%s_kern.o\", argv[0]);\n+\n+\tif (load_bpf_file(filename)) {\n+\t\tprintf(\"%s\", bpf_log_buf);\n+\t\treturn 1;\n+\t}\n+\n+\tsnprintf(command, 256, \"mount %s tmpmnt/\", argv[1]);\n+\tf = popen(command, \"r\");\n+\tret = pclose(f);\n+\n+\treturn ret ? 0 : 1;\n+}\ndiff --git a/tools/include/uapi/linux/bpf.h b/tools/include/uapi/linux/bpf.h\nindex 4a4b6e78c977..3756dde69834 100644\n--- a/tools/include/uapi/linux/bpf.h\n+++ b/tools/include/uapi/linux/bpf.h\n@@ -673,6 +673,10 @@ union bpf_attr {\n  *     @buf: buf to fill\n  *     @buf_size: size of the buf\n  *     Return : 0 on success or negative error code\n+ *\n+ * int bpf_override_return(pt_regs, rc)\n+ *\t@pt_regs: pointer to struct pt_regs\n+ *\t@rc: the return value to set\n  */\n #define __BPF_FUNC_MAPPER(FN)\t\t\\\n \tFN(unspec),\t\t\t\\\n@@ -732,7 +736,8 @@ union bpf_attr {\n \tFN(xdp_adjust_meta),\t\t\\\n \tFN(perf_event_read_value),\t\\\n \tFN(perf_prog_read_value),\t\\\n-\tFN(getsockopt),\n+\tFN(getsockopt),\t\t\t\\\n+\tFN(override_return),\n \n /* integer value in 'imm' field of BPF_CALL instruction selects which helper\n  * function eBPF program intends to call\ndiff --git a/tools/testing/selftests/bpf/bpf_helpers.h b/tools/testing/selftests/bpf/bpf_helpers.h\nindex abfa4c5c8527..086733298d5e 100644\n--- a/tools/testing/selftests/bpf/bpf_helpers.h\n+++ b/tools/testing/selftests/bpf/bpf_helpers.h\n@@ -81,7 +81,8 @@ static int (*bpf_perf_event_read_value)(void *map, unsigned long long flags,\n static int (*bpf_perf_prog_read_value)(void *ctx, void *buf,\n \t\t\t\t       unsigned int buf_size) =\n \t(void *) BPF_FUNC_perf_prog_read_value;\n-\n+static int (*bpf_override_return)(void *ctx, unsigned long rc) =\n+\t(void *) BPF_FUNC_override_return;\n \n /* llvm builtin functions that eBPF C program may use to\n  * emit BPF_LD_ABS and BPF_LD_IND instructions\n",
    "prefixes": [
        "2/2"
    ]
}