Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/2194213/?format=api
{ "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" ] }