get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 2231581,
    "url": "http://patchwork.ozlabs.org/api/1.1/patches/2231581/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/linux-ext4/patch/177758363766.1314717.14077992750227350643.stgit@frogsfrogsfrogs/",
    "project": {
        "id": 8,
        "url": "http://patchwork.ozlabs.org/api/1.1/projects/8/?format=api",
        "name": "Linux ext4 filesystem development",
        "link_name": "linux-ext4",
        "list_id": "linux-ext4.vger.kernel.org",
        "list_email": "linux-ext4@vger.kernel.org",
        "web_url": null,
        "scm_url": null,
        "webscm_url": null
    },
    "msgid": "<177758363766.1314717.14077992750227350643.stgit@frogsfrogsfrogs>",
    "date": "2026-04-30T21:18:24",
    "name": "[13/13] nullfs: support fuse systemd service mode",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "984976e524f3682b40c1ac9c25bb8cbd0a6bdbbf",
    "submitter": {
        "id": 77032,
        "url": "http://patchwork.ozlabs.org/api/1.1/people/77032/?format=api",
        "name": "Darrick J. Wong",
        "email": "djwong@kernel.org"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/linux-ext4/patch/177758363766.1314717.14077992750227350643.stgit@frogsfrogsfrogs/mbox/",
    "series": [
        {
            "id": 502386,
            "url": "http://patchwork.ozlabs.org/api/1.1/series/502386/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/linux-ext4/list/?series=502386",
            "date": "2026-04-30T21:15:17",
            "name": "[01/13] Refactor mount code / move common functions to mount_util.c",
            "version": 1,
            "mbox": "http://patchwork.ozlabs.org/series/502386/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/2231581/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/2231581/checks/",
    "tags": {},
    "headers": {
        "Return-Path": "\n <SRS0=w5nE=C5=vger.kernel.org=linux-ext4+bounces-16265-patchwork-incoming=ozlabs.org@ozlabs.org>",
        "X-Original-To": [
            "incoming@patchwork.ozlabs.org",
            "linux-ext4@vger.kernel.org"
        ],
        "Delivered-To": [
            "patchwork-incoming@legolas.ozlabs.org",
            "patchwork-incoming@ozlabs.org"
        ],
        "Authentication-Results": [
            "legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=kernel.org header.i=@kernel.org header.a=rsa-sha256\n header.s=k20201202 header.b=VdiTJcJT;\n\tdkim-atps=neutral",
            "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=ozlabs.org\n (client-ip=150.107.74.76; helo=mail.ozlabs.org;\n envelope-from=srs0=w5ne=c5=vger.kernel.org=linux-ext4+bounces-16265-patchwork-incoming=ozlabs.org@ozlabs.org;\n receiver=patchwork.ozlabs.org)",
            "gandalf.ozlabs.org;\n arc=pass smtp.remote-ip=\"2600:3c04:e001:36c::12fc:5321\"\n arc.chain=subspace.kernel.org",
            "gandalf.ozlabs.org;\n dmarc=pass (p=quarantine dis=none) header.from=kernel.org",
            "gandalf.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=kernel.org header.i=@kernel.org header.a=rsa-sha256\n header.s=k20201202 header.b=VdiTJcJT;\n\tdkim-atps=neutral",
            "gandalf.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org\n (client-ip=2600:3c04:e001:36c::12fc:5321; helo=tor.lore.kernel.org;\n envelope-from=linux-ext4+bounces-16265-patchwork-incoming=ozlabs.org@vger.kernel.org;\n receiver=ozlabs.org)",
            "smtp.subspace.kernel.org;\n\tdkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org\n header.b=\"VdiTJcJT\"",
            "smtp.subspace.kernel.org;\n arc=none smtp.client-ip=10.30.226.201"
        ],
        "Received": [
            "from mail.ozlabs.org (gandalf.ozlabs.org [150.107.74.76])\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 4g66XT2Sm9z1yGq\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 01 May 2026 07:20:41 +1000 (AEST)",
            "from mail.ozlabs.org (mail.ozlabs.org [IPv6:2404:9400:2221:ea00::3])\n\tby gandalf.ozlabs.org (Postfix) with ESMTP id 4g66XT1zwPz4wLX\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 01 May 2026 07:20:41 +1000 (AEST)",
            "by gandalf.ozlabs.org (Postfix)\n\tid 4g66XT1sYNz4whS; Fri, 01 May 2026 07:20:41 +1000 (AEST)",
            "from tor.lore.kernel.org (tor.lore.kernel.org\n [IPv6:2600:3c04:e001:36c::12fc:5321])\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 gandalf.ozlabs.org (Postfix) with ESMTPS id 4g66XP4c20z4wLX\n\tfor <patchwork-incoming@ozlabs.org>; Fri, 01 May 2026 07:20:37 +1000 (AEST)",
            "from smtp.subspace.kernel.org (conduit.subspace.kernel.org\n [100.90.174.1])\n\tby tor.lore.kernel.org (Postfix) with ESMTP id 1107D3049791\n\tfor <patchwork-incoming@ozlabs.org>; Thu, 30 Apr 2026 21:18:29 +0000 (UTC)",
            "from localhost.localdomain (localhost.localdomain [127.0.0.1])\n\tby smtp.subspace.kernel.org (Postfix) with ESMTP id 079023B2FEE;\n\tThu, 30 Apr 2026 21:18:26 +0000 (UTC)",
            "from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org\n [10.30.226.201])\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 BEE85376BD6;\n\tThu, 30 Apr 2026 21:18:25 +0000 (UTC)",
            "by smtp.kernel.org (Postfix) with ESMTPSA id 6496BC2BCB3;\n\tThu, 30 Apr 2026 21:18:25 +0000 (UTC)"
        ],
        "ARC-Seal": [
            "i=2; a=rsa-sha256; d=ozlabs.org; s=201707; t=1777584041; cv=pass;\n\tb=DIDFCjnM4meoKPC3B3ACiKSWX7NlMv+xekzzTmrWevlrh0WhYEFbkpZ2DKe8lWKW0E86fb9U0xAJzmDOwTO6HruKA9gg3heXW7wcz4NTxbIG90altuyUO8Zf8TpYCSJ2ButjO16GayTa1USmfaWqCUTWDRgrhoW/p896xxCuMM6nycSngBLgTo0htOGMxBQVP5Drqz0JT3imkG0SzM6X7CBzVk8THhimtLGccueFmpYQfEoZbtwtV3apM9aS0qncisiH+KvVcBUvQV1dOdBkqEzzQtEbCVrIcrHZOl9JSABU/khDLazNFYmb+25e3jYJacCMFeY97m5cHmo3jRt76g==",
            "i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;\n\tt=1777583905; cv=none;\n b=VVmVlZEas5Y3ZjK31rH534f4r1T99nYjxo/DCDMdE+EDE9wXyCsc1RWfW4dJnvdC+Ec8QdPjcUo7YMMc47xbhwa7O4RYIH5Np90LIRAHWOjwemOU7rYl93XRW1BI87Y9QI04sxiciUS9JUJRbqrhDVMCulSWF9KGmE+Np21Rghg="
        ],
        "ARC-Message-Signature": [
            "i=2; a=rsa-sha256; d=ozlabs.org; s=201707;\n\tt=1777584041; c=relaxed/relaxed;\n\tbh=Sl44NbqEqKzNH4JRJYbuSnKj7wnxfsfBH28Ja7m36cE=;\n\th=Date:Subject:From:To:Cc:Message-ID:In-Reply-To:References:\n\t MIME-Version:Content-Type;\n b=yEZKFaHlu4K840zZkaXd8dkE7MBfPb7tNsCwjQlVImDatIH8bFHRzuMfyIryi+quyYBNFLaLJcluAGc93/hZYs75h7juVZhuBvXsKw1ae8P/Hqa/rPC9htmA1RAPrvckIDyAm6H/tNvw83F6Zlb57UGX2Ei7O5PjPtXS1AWyJeFeskAugzpSkyrl9FAgWZMjgSBn7yaT7XFWSAuJHHnNCDEICBCjG8X2d8Nar/HWVClQeukGx/MlYXK2yjPhBFBQONDgbRpdrX+9d0HQ5C6wFPOh/8Yre2LuYexdHrUgKTZpwhQTK6ofPwCzXzGc+FbhhXR/ntTS4z5ZhmgkTy1Eog==",
            "i=1; a=rsa-sha256; d=subspace.kernel.org;\n\ts=arc-20240116; t=1777583905; c=relaxed/simple;\n\tbh=XMfQWfN1ZSoga89cy7a4ogwETMr/FjARcc0gHZC2BPU=;\n\th=Date:Subject:From:To:Cc:Message-ID:In-Reply-To:References:\n\t MIME-Version:Content-Type;\n b=QMjUbLzv6ZFgILtQJvVrrYNuuyRLbJtkpL62gU+8U+wQAud2uNIUWYmkbePuzg0LwNo4NBWv1uvpmPwV5Yg/ji4kMDZrQvODiFHtTSZrRk+U0fC3UOidPjjmF7Jh8jk/SeranjvClYdcxvBWDPp/qjjU9aWb3A/Gb3cDIC1BhgY="
        ],
        "ARC-Authentication-Results": [
            "i=2; gandalf.ozlabs.org;\n dmarc=pass (p=quarantine dis=none) header.from=kernel.org;\n dkim=pass (2048-bit key;\n unprotected) header.d=kernel.org header.i=@kernel.org header.a=rsa-sha256\n header.s=k20201202 header.b=VdiTJcJT; dkim-atps=neutral;\n spf=pass (client-ip=2600:3c04:e001:36c::12fc:5321; helo=tor.lore.kernel.org;\n envelope-from=linux-ext4+bounces-16265-patchwork-incoming=ozlabs.org@vger.kernel.org;\n receiver=ozlabs.org) smtp.mailfrom=vger.kernel.org",
            "i=1; smtp.subspace.kernel.org;\n dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org\n header.b=VdiTJcJT; arc=none smtp.client-ip=10.30.226.201"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;\n\ts=k20201202; t=1777583905;\n\tbh=XMfQWfN1ZSoga89cy7a4ogwETMr/FjARcc0gHZC2BPU=;\n\th=Date:Subject:From:To:Cc:In-Reply-To:References:From;\n\tb=VdiTJcJTbZz71Xl3VOE6MqljAFJtSezkq0BZBu4MiWYJTiYLhWQ5RGR8MKikAAR9f\n\t 7Sfpwas59Zd37COU4gCFVjVvZV6oO0mvtohkOsc8T9eXT9jEHQ8STwgdhXDv9XJ0t3\n\t u2lUIWNfI+plc61rJlSqPN4WyJ4VKzS6GfEPoZ0DNUA1JxcanSJS/9+ERYS1k8Er+T\n\t m02qWjBPvyNlYlz9agrcKPR/nsuvychmHRPAHlJ6xa6Iw3ZKdP9pK2UrauiO+q0kN+\n\t LAK2J0BlJ0nuWPekngX8d/F4WW6RFVakHYOc/L+PrnLU5cu2uzmeOozZv6nFEz2PnX\n\t TSDp3CFEfwQBw==",
        "Date": "Thu, 30 Apr 2026 14:18:24 -0700",
        "Subject": "[PATCH 13/13] nullfs: support fuse systemd service mode",
        "From": "\"Darrick J. Wong\" <djwong@kernel.org>",
        "To": "bernd@bsbernd.com, djwong@kernel.org",
        "Cc": "linux-fsdevel@vger.kernel.org, fuse-devel@lists.linux.dev,\n linux-ext4@vger.kernel.org, miklos@szeredi.hu, neal@gompa.dev,\n joannelkoong@gmail.com",
        "Message-ID": "<177758363766.1314717.14077992750227350643.stgit@frogsfrogsfrogs>",
        "In-Reply-To": "<177758363484.1314717.11777978893472254088.stgit@frogsfrogsfrogs>",
        "References": "<177758363484.1314717.11777978893472254088.stgit@frogsfrogsfrogs>",
        "Precedence": "bulk",
        "X-Mailing-List": "linux-ext4@vger.kernel.org",
        "List-Id": "<linux-ext4.vger.kernel.org>",
        "List-Subscribe": "<mailto:linux-ext4+subscribe@vger.kernel.org>",
        "List-Unsubscribe": "<mailto:linux-ext4+unsubscribe@vger.kernel.org>",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain; charset=\"utf-8\"",
        "Content-Transfer-Encoding": "7bit",
        "X-Spam-Status": "No, score=-1.2 required=5.0 tests=ARC_SIGNED,ARC_VALID,\n\tDKIMWL_WL_HIGH,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DMARC_PASS,\n\tMAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=disabled\n\tversion=4.0.1",
        "X-Spam-Checker-Version": "SpamAssassin 4.0.1 (2024-03-25) on gandalf.ozlabs.org"
    },
    "content": "From: Darrick J. Wong <djwong@kernel.org>\n\nThis is the only example fuse server that exports a regular file instead\nof a directory tree.  Port it to be usable as a systemd fuse service so\nthat we can test that capability.\n\nSigned-off-by: Darrick J. Wong <djwong@kernel.org>\n---\n example/meson.build    |    6 +++\n example/null.c         |   51 +++++++++++++++++++++++-\n example/null.socket.in |   15 +++++++\n example/null@.service  |  102 ++++++++++++++++++++++++++++++++++++++++++++++++\n 4 files changed, 171 insertions(+), 3 deletions(-)\n create mode 100644 example/null.socket.in\n create mode 100644 example/null@.service",
    "diff": "diff --git a/example/meson.build b/example/meson.build\nindex 19a383f7cd2c74..45dbf26eb355a7 100644\n--- a/example/meson.build\n+++ b/example/meson.build\n@@ -10,6 +10,12 @@ if not platform.endswith('bsd') and platform != 'dragonfly'\n     # support mounting files, This is enforced in vfs_domount_first()\n     # with the v_type != VDIR check.\n     examples += [ 'null' ]\n+\n+    if platform.endswith('linux')\n+        configure_file(input: 'null.socket.in',\n+                       output: 'null.socket',\n+                       configuration: private_cfg)\n+    endif\n endif\n \n single_file_examples = [ ]\ndiff --git a/example/null.c b/example/null.c\nindex ec41def40ed5c5..43135cde39713e 100644\n--- a/example/null.c\n+++ b/example/null.c\n@@ -17,15 +17,24 @@\n  *\n  *     gcc -Wall null.c `pkg-config fuse3 --cflags --libs` -o null\n  *\n+ * Change the ExecStart line in nullfile@.service:\n+ *\n+ *     ExecStart=/path/to/null\n+ *\n+ * to point to the actual path of the null binary.\n+ *\n+ * Finally, install the null@.service and null.socket files to the\n+ * systemd service directory, usually /run/systemd/system.\n+ *\n  * ## Source code ##\n  * \\include passthrough_fh.c\n  */\n \n-\n-#define FUSE_USE_VERSION 31\n+#define FUSE_USE_VERSION FUSE_MAKE_VERSION(3, 19)\n \n #include <fuse.h>\n #include <fuse_lowlevel.h>\n+#include <fuse_service.h>\n #include <stdio.h>\n #include <stdlib.h>\n #include <string.h>\n@@ -33,6 +42,8 @@\n #include <time.h>\n #include <errno.h>\n \n+static mode_t mode = 0644;\n+\n static int null_getattr(const char *path, struct stat *stbuf,\n \t\t\tstruct fuse_file_info *fi)\n {\n@@ -41,7 +52,7 @@ static int null_getattr(const char *path, struct stat *stbuf,\n \tif(strcmp(path, \"/\") != 0)\n \t\treturn -ENOENT;\n \n-\tstbuf->st_mode = S_IFREG | 0644;\n+\tstbuf->st_mode = S_IFREG | mode;\n \tstbuf->st_nlink = 1;\n \tstbuf->st_uid = getuid();\n \tstbuf->st_gid = getgid();\n@@ -112,11 +123,45 @@ static const struct fuse_operations null_oper = {\n \t.write\t\t= null_write,\n };\n \n+static int null_service(struct fuse_service *service, struct fuse_args *args)\n+{\n+\tint ret = 1;\n+\n+\tif (fuse_service_append_args(service, args))\n+\t\tgoto err_service;\n+\n+\tif (fuse_service_finish_file_requests(service))\n+\t\tgoto err_service;\n+\n+\tfuse_service_expect_mount_format(service, S_IFREG);\n+\n+\t/*\n+\t * In non-service mode, we set up the file to be owned and writable\n+\t * by the same user that starts the fuse server.  When running in a\n+\t * container as a dynamic user, we just grant world write access.\n+\t */\n+\tmode = 0666;\n+\tret = fuse_service_main(service, args, &null_oper, NULL);\n+\n+err_service:\n+\tfuse_service_send_goodbye(service, ret);\n+\tfuse_service_destroy(&service);\n+\tfuse_opt_free_args(args);\n+\treturn fuse_service_exit(ret);\n+}\n+\n int main(int argc, char *argv[])\n {\n \tstruct fuse_args args = FUSE_ARGS_INIT(argc, argv);\n \tstruct fuse_cmdline_opts opts;\n \tstruct stat stbuf;\n+\tstruct fuse_service *service = NULL;\n+\n+\tif (fuse_service_accept(&service) != 0)\n+\t\treturn 1;\n+\n+\tif (fuse_service_accepted(service))\n+\t\treturn null_service(service, &args);\n \n \tif (fuse_parse_cmdline(&args, &opts) != 0)\n \t\treturn 1;\ndiff --git a/example/null.socket.in b/example/null.socket.in\nnew file mode 100644\nindex 00000000000000..865e739561a45e\n--- /dev/null\n+++ b/example/null.socket.in\n@@ -0,0 +1,15 @@\n+# SPDX-License-Identifier: GPL-2.0-or-later\n+#\n+# Copyright (C) 2026 Oracle.  All Rights Reserved.\n+# Author: Darrick J. Wong <djwong@kernel.org>\n+[Unit]\n+Description=Socket for null Service\n+\n+[Socket]\n+ListenSequentialPacket=@FUSE_SERVICE_SOCKET_DIR_RAW@/null\n+Accept=yes\n+SocketMode=@FUSE_SERVICE_SOCKET_PERMS@\n+RemoveOnStop=yes\n+\n+[Install]\n+WantedBy=sockets.target\ndiff --git a/example/null@.service b/example/null@.service\nnew file mode 100644\nindex 00000000000000..f77fbe927217cf\n--- /dev/null\n+++ b/example/null@.service\n@@ -0,0 +1,102 @@\n+# SPDX-License-Identifier: GPL-2.0-or-later\n+#\n+# Copyright (C) 2026 Oracle.  All Rights Reserved.\n+# Author: Darrick J. Wong <djwong@kernel.org>\n+[Unit]\n+Description=null Sample Fuse Service\n+\n+# Don't leave failed units behind, systemd does not clean them up!\n+CollectMode=inactive-or-failed\n+\n+[Service]\n+Type=exec\n+ExecStart=/path/to/null\n+\n+# Try to capture core dumps\n+LimitCORE=infinity\n+\n+SyslogIdentifier=%N\n+\n+# No realtime CPU scheduling\n+RestrictRealtime=true\n+\n+# Don't let us see anything in the regular system, and don't run as root\n+DynamicUser=true\n+ProtectSystem=strict\n+ProtectHome=true\n+PrivateTmp=true\n+PrivateDevices=true\n+PrivateUsers=true\n+\n+# No network access\n+PrivateNetwork=true\n+ProtectHostname=true\n+RestrictAddressFamilies=none\n+IPAddressDeny=any\n+\n+# Don't let the program mess with the kernel configuration at all\n+ProtectKernelLogs=true\n+ProtectKernelModules=true\n+ProtectKernelTunables=true\n+ProtectControlGroups=true\n+ProtectProc=invisible\n+RestrictNamespaces=true\n+RestrictFileSystems=\n+\n+# Hide everything in /proc, even /proc/mounts\n+ProcSubset=pid\n+\n+# Only allow the default personality Linux\n+LockPersonality=true\n+\n+# No writable memory pages\n+MemoryDenyWriteExecute=true\n+\n+# Don't let our mounts leak out to the host\n+PrivateMounts=true\n+\n+# Restrict system calls to the native arch and only enough to get things going\n+SystemCallArchitectures=native\n+SystemCallFilter=@system-service\n+SystemCallFilter=~@privileged\n+SystemCallFilter=~@resources\n+\n+SystemCallFilter=~@clock\n+SystemCallFilter=~@cpu-emulation\n+SystemCallFilter=~@debug\n+SystemCallFilter=~@module\n+SystemCallFilter=~@reboot\n+SystemCallFilter=~@swap\n+\n+SystemCallFilter=~@mount\n+\n+# libfuse io_uring wants to pin cores and memory\n+SystemCallFilter=mbind\n+SystemCallFilter=sched_setaffinity\n+\n+# Leave a breadcrumb if we get whacked by the system call filter\n+SystemCallErrorNumber=EL3RST\n+\n+# Log to the kernel dmesg, just like an in-kernel filesystem driver\n+StandardOutput=append:/dev/ttyprintk\n+StandardError=append:/dev/ttyprintk\n+\n+# Run with no capabilities at all\n+CapabilityBoundingSet=\n+AmbientCapabilities=\n+NoNewPrivileges=true\n+\n+# We don't create files\n+UMask=7777\n+\n+# No access to hardware /dev files at all\n+ProtectClock=true\n+DevicePolicy=closed\n+\n+# Don't mess with set[ug]id anything.\n+RestrictSUIDSGID=true\n+\n+# Don't let OOM kills of processes in this containment group kill the whole\n+# service, because we don't want filesystem drivers to go down.\n+OOMPolicy=continue\n+OOMScoreAdjust=-1000\n",
    "prefixes": [
        "13/13"
    ]
}