get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 2194213,
    "url": "http://patchwork.ozlabs.org/api/patches/2194213/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20260207120901.17222-8-hibriansong@gmail.com/",
    "project": {
        "id": 14,
        "url": "http://patchwork.ozlabs.org/api/projects/14/?format=api",
        "name": "QEMU Development",
        "link_name": "qemu-devel",
        "list_id": "qemu-devel.nongnu.org",
        "list_email": "qemu-devel@nongnu.org",
        "web_url": "",
        "scm_url": "",
        "webscm_url": "",
        "list_archive_url": "",
        "list_archive_url_format": "",
        "commit_url_format": ""
    },
    "msgid": "<20260207120901.17222-8-hibriansong@gmail.com>",
    "list_archive_url": null,
    "date": "2026-02-07T12:09:01",
    "name": "[v4,7/7] fuse: add io_uring test support",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "01601b0649d7a6a0ce830fd5bf5b196a4254f38c",
    "submitter": {
        "id": 90672,
        "url": "http://patchwork.ozlabs.org/api/people/90672/?format=api",
        "name": "Brian Song",
        "email": "hibriansong@gmail.com"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20260207120901.17222-8-hibriansong@gmail.com/mbox/",
    "series": [
        {
            "id": 491376,
            "url": "http://patchwork.ozlabs.org/api/series/491376/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/list/?series=491376",
            "date": "2026-02-07T12:08:56",
            "name": "add fuse-over-io_uring support",
            "version": 4,
            "mbox": "http://patchwork.ozlabs.org/series/491376/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/2194213/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/2194213/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>",
        "X-Original-To": "incoming@patchwork.ozlabs.org",
        "Delivered-To": "patchwork-incoming@legolas.ozlabs.org",
        "Authentication-Results": [
            "legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256\n header.s=20230601 header.b=LNVSBaas;\n\tdkim-atps=neutral",
            "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org\n (client-ip=209.51.188.17; helo=lists.gnu.org;\n envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n receiver=patchwork.ozlabs.org)"
        ],
        "Received": [
            "from lists.gnu.org (lists.gnu.org [209.51.188.17])\n\t(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4f7VFG3Jpwz1xvj\n\tfor <incoming@patchwork.ozlabs.org>; Sat, 07 Feb 2026 23:12:02 +1100 (AEDT)",
            "from [::1] (helo=lists1p.gnu.org)\n\tby lists.gnu.org with esmtp (Exim 4.90_1)\n\t(envelope-from <qemu-devel-bounces@nongnu.org>)\n\tid 1voh8v-0007W3-Kn; Sat, 07 Feb 2026 07:10:31 -0500",
            "from eggs.gnu.org ([2001:470:142:3::10])\n by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <hibriansong@gmail.com>)\n id 1voh8m-0007GI-Lj\n for qemu-devel@nongnu.org; Sat, 07 Feb 2026 07:10:21 -0500",
            "from mail-pj1-x1035.google.com ([2607:f8b0:4864:20::1035])\n by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)\n (Exim 4.90_1) (envelope-from <hibriansong@gmail.com>)\n id 1voh8k-00038S-Ng\n for qemu-devel@nongnu.org; Sat, 07 Feb 2026 07:10:20 -0500",
            "by mail-pj1-x1035.google.com with SMTP id\n 98e67ed59e1d1-3530715386cso1260650a91.2\n for <qemu-devel@nongnu.org>; Sat, 07 Feb 2026 04:10:17 -0800 (PST)",
            "from brian.. (n058152022104.netvigator.com. [58.152.22.104])\n by smtp.gmail.com with ESMTPSA id\n 98e67ed59e1d1-354b30f899csm2178530a91.3.2026.02.07.04.10.13\n (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n Sat, 07 Feb 2026 04:10:16 -0800 (PST)"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=gmail.com; s=20230601; t=1770466217; x=1771071017; darn=nongnu.org;\n h=content-transfer-encoding:mime-version:references:in-reply-to\n :message-id:date:subject:cc:to:from:from:to:cc:subject:date\n :message-id:reply-to;\n bh=JCy3i99i+qLbs/wAQI3hvrm5l/vGSJb2OpG7ZQh/YMA=;\n b=LNVSBaasX0HGb4h/d0CaoETSNAsUhQtvqCemdbZvTnhzjhKXtF94Vj80QebxVJqsIO\n VZ14NzV2LRvK7D7M+0HPsrrog48DlhIBRlk188AWLmsGDULMjF+Vtpbwc8IWcZjKMuKz\n 5Vk2+Ws/v7WONu4tAc47E0lGwagl2ym3XQUsEa+CGeTjf4rehgIIpUfIJbCvdlVNNxKC\n ffsOBfFvF55XtRFVZ5IwS4Rey/KchINAcD6uce2iuxzUNZ80ksVq6/pty0kz78305avc\n NDvugQYSL1Jw+mj78OVxXnc7T7wEAOss9nAYUeL4qmaTSI3V/koHlqdyu13jrF0EvXYs\n CqIw==",
        "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20230601; t=1770466217; x=1771071017;\n h=content-transfer-encoding:mime-version:references:in-reply-to\n :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from\n :to:cc:subject:date:message-id:reply-to;\n bh=JCy3i99i+qLbs/wAQI3hvrm5l/vGSJb2OpG7ZQh/YMA=;\n b=M9bYv9I6/7EC2KOK0knOq1FgbJhvVC3Hx1BttBG1C/hlO91TCDKqI5eDbLVgHZxDVk\n 0J9hqqgzpqeJ0NN61dcgovv7WM9cP77YxRwm9VM/QTJaCcpO5oUnEwxalxVvErwkol7w\n VSQr7xgIaBiFyfu4Ap/CKDzSBX0nugInO9s6+LlEwQTZUexlP8Y335bxYz2C/yivTAkX\n Pri7xVw2ULgjxbDqEdYkYTUqmQDX3v7D3y4+TR3fzB+nAO/5jOGBph4j0hTzddeZinOb\n Z7Dvj8hbSJSTKZqvgEkggVULiivV7/w4mnqkWHR/ElH6t8ClgOPlUv7N1PivjC1enZlm\n 81RA==",
        "X-Gm-Message-State": "AOJu0YyTiOm6JCpedXoc4MW5oIfNkoFjiWWzTwuLthwESrO7axo6CjVH\n fOkc93ANKEpBBwOmVnoxbHghFrvv1xPxB/7+3jSf2NaBnVPTm2GTsmkX",
        "X-Gm-Gg": "AZuq6aI8W2u1dX0Rhhfs9ONe+esXFwv0th08gZkOc0fR/NogTOYTAaw7+G5b6hkciKJ\n 2r//kh5/8ilyFk/cyDBSoyClA1Qb3NRIytT7LWjBIV4ZrIdTFPImyo5/0a+6HxrR5NrMAD/xAg6\n bNqBCmDmbJG3ofIP8PyiIJCh6N3gUPhB5cGQxl61282PJ5eFbsYWk8OidXUtYAMZXdTkjjiWTs5\n u6jPpXL2sUwI5y5fG2wnbwa//ZCy81pDJ/KAs8sEAhi+aIczS3+xoY3HUsjg6g1WgjXlMeLzBBW\n zXS0n0hwoKPfY6IjJZNuFrokOjGJR+1mW8bO5tJbSARgz03/4/dW8Rx0AyNnQIJZh6Y+I/bq04c\n W6mehdfOJBYkz3TtmBFXGVzZJsyqWtCflrqg7myQRcqbpG6oaQYrWQ1KQG8ugKaL/YbTK1YVqvx\n /0Rp8vuDNHnj1aJ/w+QCjAef8hEYPKBeP0KY0p",
        "X-Received": "by 2002:a17:90b:380b:b0:340:ca7d:936a with SMTP id\n 98e67ed59e1d1-354b3e338d5mr4916969a91.18.1770466216716;\n Sat, 07 Feb 2026 04:10:16 -0800 (PST)",
        "From": "Brian Song <hibriansong@gmail.com>",
        "To": "qemu-block@nongnu.org",
        "Cc": "qemu-devel@nongnu.org, hibriansong@gmail.com, hreitz@redhat.com,\n kwolf@redhat.com, eblake@redhat.com, armbru@redhat.com,\n stefanha@redhat.com, fam@euphon.net, bernd@bsbernd.com",
        "Subject": "[Patch v4 7/7] fuse: add io_uring test support",
        "Date": "Sat,  7 Feb 2026 20:09:01 +0800",
        "Message-ID": "<20260207120901.17222-8-hibriansong@gmail.com>",
        "X-Mailer": "git-send-email 2.43.0",
        "In-Reply-To": "<20260207120901.17222-1-hibriansong@gmail.com>",
        "References": "<20260207120901.17222-1-hibriansong@gmail.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Received-SPF": "pass client-ip=2607:f8b0:4864:20::1035;\n envelope-from=hibriansong@gmail.com; helo=mail-pj1-x1035.google.com",
        "X-Spam_score_int": "-20",
        "X-Spam_score": "-2.1",
        "X-Spam_bar": "--",
        "X-Spam_report": "(-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,\n DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001,\n RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001,\n SPF_PASS=-0.001 autolearn=ham autolearn_force=no",
        "X-Spam_action": "no action",
        "X-BeenThere": "qemu-devel@nongnu.org",
        "X-Mailman-Version": "2.1.29",
        "Precedence": "list",
        "List-Id": "qemu development <qemu-devel.nongnu.org>",
        "List-Unsubscribe": "<https://lists.nongnu.org/mailman/options/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>",
        "List-Archive": "<https://lists.nongnu.org/archive/html/qemu-devel>",
        "List-Post": "<mailto:qemu-devel@nongnu.org>",
        "List-Help": "<mailto:qemu-devel-request@nongnu.org?subject=help>",
        "List-Subscribe": "<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=subscribe>",
        "Errors-To": "qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org",
        "Sender": "qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org"
    },
    "content": "This patch adds support for testing FUSE-over-io_uring. It can be\nenabled by setting the environment variable FUSE_OVER_IO_URING=1.\n\n    $ FUSE_OVER_IO_URING=1 ./check -fuse\n\nAdditionally, the unmount detection logic is switched from `df` to\n`mount`. Using `df` triggers `statfs()`, which attempts to communicate\nwith the FUSE daemon. During test teardown (when the daemon is being\nkilled), this often fails or returns stale data, causing the test to\nmisjudge the mount status.\n\nSuggested-by: Kevin Wolf <kwolf@redhat.com>\nSuggested-by: Stefan Hajnoczi <stefanha@redhat.com>\nSigned-off-by: Brian Song <hibriansong@gmail.com>\n---\n tests/qemu-iotests/check     |  2 ++\n tests/qemu-iotests/common.rc | 47 +++++++++++++++++++++++++-----------\n 2 files changed, 35 insertions(+), 14 deletions(-)\n\n--\n2.43.0",
    "diff": "diff --git a/tests/qemu-iotests/check b/tests/qemu-iotests/check\nindex 545f9ec7bd..c6fa0f9e3d 100755\n--- a/tests/qemu-iotests/check\n+++ b/tests/qemu-iotests/check\n@@ -94,6 +94,8 @@ def make_argparser() -> argparse.ArgumentParser:\n         mg.add_argument('-' + fmt, dest='imgfmt', action='store_const',\n                         const=fmt, help=f'test {fmt}')\n\n+    # To test FUSE-over-io_uring, set the environment variable\n+    # FUSE_OVER_IO_URING=1. This applies only when using the 'fuse' protocol\n     protocol_list = ['file', 'rbd', 'nbd', 'ssh', 'nfs', 'fuse']\n     g_prt = p.add_argument_group(\n         '  image protocol options',\ndiff --git a/tests/qemu-iotests/common.rc b/tests/qemu-iotests/common.rc\nindex e977cb4eb6..a3e0ccb3d2 100644\n--- a/tests/qemu-iotests/common.rc\n+++ b/tests/qemu-iotests/common.rc\n@@ -546,10 +546,37 @@ _make_test_img()\n         # iotests.  The default allow-other=auto has the downside of printing a\n         # fusermount error on its first attempt if allow_other is not\n         # permissible, which we would need to filter.\n-        QSD_NEED_PID=y $QSD \\\n-              --blockdev file,node-name=export-node,filename=$img_name,discard=unmap \\\n-              --export fuse,id=fuse-export,node-name=export-node,mountpoint=\"$export_mp\",writable=on,growable=on,allow-other=off \\\n-              &\n+        if [ -n \"$FUSE_OVER_IO_URING\" ]; then\n+            # The current Linux kernel requires registering `nr_cpu` Ring Queues\n+            # when FUSE-over-io_uring is enabled. Here, we set half of the\n+            # Ring Queues to FUSE Queues (`nr_iothreads`) to test the queue\n+            # distribution feature.\n+            # See the comments in fuse.c regarding the round-robin distribution\n+            # between Ring Queues and FUSE Queues.\n+            nr_cpu=$(nproc 2>/dev/null || echo 1)\n+            nr_iothreads=$((nr_cpu / 2))\n+            if [ $nr_iothreads -lt 1 ]; then\n+                nr_iothreads=1\n+            fi\n+\n+            iothread_args=\"\"\n+            iothread_export_args=\"\"\n+            for ((i=0; i<$nr_iothreads; i++)); do\n+                iothread_args=\"$iothread_args --object iothread,id=iothread$i\"\n+                iothread_export_args=\"$iothread_export_args,iothread.$i=iothread$i\"\n+            done\n+\n+            QSD_NEED_PID=y $QSD \\\n+                    $iothread_args \\\n+                    --blockdev file,node-name=export-node,filename=$img_name,discard=unmap \\\n+                    --export fuse,id=fuse-export,node-name=export-node,mountpoint=\"$export_mp\",writable=on,growable=on,allow-other=off,io-uring=on$iothread_export_args \\\n+                &\n+        else\n+            QSD_NEED_PID=y $QSD \\\n+                --blockdev file,node-name=export-node,filename=$img_name,discard=unmap \\\n+                --export fuse,id=fuse-export,node-name=export-node,mountpoint=\"$export_mp\",writable=on,growable=on,allow-other=off \\\n+                &\n+        fi\n\n         pidfile=\"$QEMU_TEST_DIR/qemu-storage-daemon.pid\"\n\n@@ -595,16 +622,8 @@ _rm_test_img()\n         # Wait until the mount is gone\n         timeout=10 # *0.5 s\n         while true; do\n-            # Will show the mount point; if the mount is still there,\n-            # it will be $img.\n-            df_output=$(df \"$img\" 2>/dev/null)\n-\n-            # But df may also show an error (\"Transpoint endpoint not\n-            # connected\"), so retry in such cases\n-            if [ -n \"$df_output\" ]; then\n-                if ! echo \"$df_output\" | grep -q \"$img\"; then\n-                    break\n-                fi\n+            if ! mount | grep -q \"$img\"; then\n+                break\n             fi\n\n             sleep 0.5\n",
    "prefixes": [
        "v4",
        "7/7"
    ]
}