Show a cover letter.

GET /api/covers/2197739/?format=api
HTTP 200 OK
Allow: GET, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 2197739,
    "url": "http://patchwork.ozlabs.org/api/covers/2197739/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/cover/20260218132633.29748-1-hreitz@redhat.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": "<20260218132633.29748-1-hreitz@redhat.com>",
    "list_archive_url": null,
    "date": "2026-02-18T13:26:09",
    "name": "[v4,00/24] export/fuse: Use coroutines and multi-threading",
    "submitter": {
        "id": 82279,
        "url": "http://patchwork.ozlabs.org/api/people/82279/?format=api",
        "name": "Hanna Czenczek",
        "email": "hreitz@redhat.com"
    },
    "mbox": "http://patchwork.ozlabs.org/project/qemu-devel/cover/20260218132633.29748-1-hreitz@redhat.com/mbox/",
    "series": [
        {
            "id": 492547,
            "url": "http://patchwork.ozlabs.org/api/series/492547/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/list/?series=492547",
            "date": "2026-02-18T13:26:09",
            "name": "export/fuse: Use coroutines and multi-threading",
            "version": 4,
            "mbox": "http://patchwork.ozlabs.org/series/492547/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/covers/2197739/comments/",
    "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 (1024-bit key;\n unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256\n header.s=mimecast20190719 header.b=KK5SS2ok;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256\n header.s=google header.b=HYRJ5yIp;\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 4fGHWr40Rsz1xwr\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 19 Feb 2026 00:33:12 +1100 (AEDT)",
            "from localhost ([::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 1vshfM-0003wU-3w; Wed, 18 Feb 2026 08:32:33 -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 <hreitz@redhat.com>) id 1vshfI-0003vG-9J\n for qemu-devel@nongnu.org; Wed, 18 Feb 2026 08:32:28 -0500",
            "from us-smtp-delivery-124.mimecast.com ([170.10.133.124])\n by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <hreitz@redhat.com>) id 1vshf4-00053X-Po\n for qemu-devel@nongnu.org; Wed, 18 Feb 2026 08:32:28 -0500",
            "from mail-wm1-f70.google.com (mail-wm1-f70.google.com\n [209.85.128.70]) by relay.mimecast.com with ESMTP with STARTTLS\n (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id\n us-mta-424-erO8PW0XMIqsjIkhbWA8dQ-1; Wed, 18 Feb 2026 08:26:43 -0500",
            "by mail-wm1-f70.google.com with SMTP id\n 5b1f17b1804b1-4836e35292cso41345905e9.1\n for <qemu-devel@nongnu.org>; Wed, 18 Feb 2026 05:26:42 -0800 (PST)",
            "from localhost\n (p200300cfd737d029edef7b8da7441ac2.dip0.t-ipconnect.de.\n [2003:cf:d737:d029:edef:7b8d:a744:1ac2])\n by smtp.gmail.com with ESMTPSA id\n 5b1f17b1804b1-4834d8334a8sm618595665e9.12.2026.02.18.05.26.39\n (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n Wed, 18 Feb 2026 05:26:39 -0800 (PST)"
        ],
        "DKIM-Signature": [
            "v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n s=mimecast20190719; t=1771421521;\n h=from:from:reply-to:subject:subject:date:date:message-id:message-id:\n to:to:cc:cc:mime-version:mime-version:\n content-type:content-type:content-type:\n content-transfer-encoding:content-transfer-encoding;\n bh=1kmaGr0mcvHIgHTxsf78XZVt9XWkGt61UUQPx8EQH1s=;\n b=KK5SS2okh2wc4QUPMqVN4/0dxWlj1cay5N9X1D5UcMuF18Ha9+SKbCx7J2+RZKk5rgcHny\n n2Rfgq/q6CzPGCBYIQVpToO6iaNt7risbuDRZKH0xzjvWmplv0hMQiO8CtSmo9oFKySC1P\n fl2Tian3eBQZZJ0clC4qXZvMSAcNlyc=",
            "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=redhat.com; s=google; t=1771421202; x=1772026002; darn=nongnu.org;\n h=content-transfer-encoding:mime-version:message-id:date:subject:cc\n :to:from:from:to:cc:subject:date:message-id:reply-to;\n bh=1kmaGr0mcvHIgHTxsf78XZVt9XWkGt61UUQPx8EQH1s=;\n b=HYRJ5yIpv9pZXRRcYahkHWAzTJnpu5yPxAs2hxLRu8dCfB75HtYlW1TWfxgtTwAGN8\n NrSmDzn/kdtm83co4iJg9lDou6uglQ8M9/UQYTbXUmOkKZO09kvBa4Ct7Sji7gvaUQVa\n c0AUAyTHN7BGynIefAJyTAxVM3HyTqItnRblu/LnDCIc8gQHmVu7JfXVaRqZo4JaOLtV\n s2hVQveuxUQ4YNV+nuX17YsX5+K1YL0moOAu6FiIWJppBx2vJPk/CpX3M6cJUUXA5Rsw\n lZvvbQFPQc0hVkPsBDCUPK0oczlqsqBNWei2MO6lcctduhJnjQW5EzHq1wsF5Hfro1+y\n P4AQ=="
        ],
        "X-MC-Unique": "erO8PW0XMIqsjIkhbWA8dQ-1",
        "X-Mimecast-MFC-AGG-ID": "erO8PW0XMIqsjIkhbWA8dQ_1771421202",
        "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20230601; t=1771421202; x=1772026002;\n h=content-transfer-encoding:mime-version:message-id:date:subject:cc\n :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date\n :message-id:reply-to;\n bh=1kmaGr0mcvHIgHTxsf78XZVt9XWkGt61UUQPx8EQH1s=;\n b=kVJO6f7iC5+HfOZ7/66a7TSjM0h6FbQhVouwA+liIW/1xI9sG4V+FYPNpJfOQ2B7hG\n BW3ASlxU3RjwZIG5aMcg6XbSTG3S1YkwsH/uYgsKvggQc/1AGqWZccBEO3XHQWfwTdrl\n RdxbooSf6EK3TP8j8q9qH2n//MiGE+Y5nKilTCyf31PjHq/3jt4WEfuk6t6oHAJ1poRw\n qbBH4d0DinxTWa5Q209NRkxAphxl5yCeaCa+HPmnshLoS4bKepvZawvK6coJJXLvQRM4\n K59vqlEwBj6GiKa04sOWvvdVJUaHE6/fc+oWD+dNjJ84CQEHWFwKT0vukX2nGLEEW9wZ\n FSUQ==",
        "X-Gm-Message-State": "AOJu0YzbDthwMD24tcziNYAm2MWHkLeXiLvwsekY85K+juHM+y1tsfqt\n G3CX4drnquXf+zZ/IeAKzI5UQ40a1ucgCwg7XteKJYDgaz6ONvr5Eo0MGnmPY5DU0eqjESIidvp\n zEyh+OkNL+TvvkvLxmtpUboMXXnN9tUNUn8TtJIjRLg63Mhv95FUfUemo",
        "X-Gm-Gg": "AZuq6aJHxzQRksae755+bd1QBaHS4URG4Y99ZMt6KL7/MkhPKkyetn/m6EBapEN2xlw\n dZ9MBZkz1En/1FEEXEWizR0Y0hyPXcyo2Ogd+xC7uQK/4FWAteUaswjvP4I6KK29TyiyxjtxAzo\n CRLD860RF9wzaXvaDeep80xh0HMVeHVGc22QZXlCDhyF7aCtfTT1jEel4efqJ0xQ+CIPS9YFhS2\n +LSlsCwD0e5O4pcV0iG+FD00bbnJJD6aKEuPqwuwWgLL2tfbSErSO99gn8RzVx1op/KkEite1lb\n 67ac0JhTp3GMTZnhR5BWweIV1iHkNvWoMxqH4iYoYFPTaf+HXjMptfpypEv4TSSFu+uXAiJ1k5/\n CXJPcIkasf/yneCktXfpe75i3h2m0l4QDTemm0aB4vXVu9IcheLDsWvVFVSLAGExUxLl8facGfl\n 7/F4Vi",
        "X-Received": [
            "by 2002:a05:600c:4e4d:b0:477:c478:46d7 with SMTP id\n 5b1f17b1804b1-48373a3e749mr294261185e9.22.1771421201608;\n Wed, 18 Feb 2026 05:26:41 -0800 (PST)",
            "by 2002:a05:600c:4e4d:b0:477:c478:46d7 with SMTP id\n 5b1f17b1804b1-48373a3e749mr294260705e9.22.1771421201143;\n Wed, 18 Feb 2026 05:26:41 -0800 (PST)"
        ],
        "From": "Hanna Czenczek <hreitz@redhat.com>",
        "To": "qemu-block@nongnu.org",
        "Cc": "qemu-devel@nongnu.org, Hanna Czenczek <hreitz@redhat.com>,\n Kevin Wolf <kwolf@redhat.com>, Brian Song <hibriansong@gmail.com>",
        "Subject": "[PATCH v4 00/24] export/fuse: Use coroutines and multi-threading",
        "Date": "Wed, 18 Feb 2026 14:26:09 +0100",
        "Message-ID": "<20260218132633.29748-1-hreitz@redhat.com>",
        "X-Mailer": "git-send-email 2.53.0",
        "MIME-Version": "1.0",
        "Content-Type": [
            "text/plain; charset=UTF-8",
            "text/plain; charset=UTF-8"
        ],
        "Content-Transfer-Encoding": "8bit",
        "Received-SPF": "pass client-ip=170.10.133.124; envelope-from=hreitz@redhat.com;\n helo=us-smtp-delivery-124.mimecast.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, DKIMWL_WL_HIGH=-0.043,\n DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,\n RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001,\n RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001,\n SPF_HELO_PASS=-0.001,\n SPF_PASS=-0.001 autolearn=unavailable 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": "Hi,\n\nThis series:\n- Fixes some bugs/minor inconveniences,\n- Removes libfuse from the request processing path,\n- Make the FUSE export use coroutines for request handling,\n\nMore detail on the v1 cover letter:\nhttps://lists.nongnu.org/archive/html/qemu-block/2025-03/msg00359.html\n\nv2 cover letter:\nhttps://lists.nongnu.org/archive/html/qemu-block/2025-06/msg00040.html\n\nv3 cover letter:\nhttps://lists.nongnu.org/archive/html/qemu-block/2025-07/msg00005.html\n\n\nI noticed some performance differences vs. my previous benchmarks;\nnotably, performance didn’t improve with the introduction of coroutines\nmuch (except for random read performance).  However, when I run the same\nbenchmarks on the old branch again, I see no performance improvement\neither.  Something about my host system must have changed.\n\n\nChanges from v3:\n- Patch 1: Use QEMU_AUTO_VFREE\n- Patch 6: Added (fix for pre-existing bug)\n- Patch 11: Make flag atomic, better this way for multithreading later\n- Patch 12: Rename not only in fuse_write(), but fuse_read() as well\n- Patch 13: Added (don’t truncate if we don’t want to test that)\n- Patch 14: Added (fix for pre-existing bugs)\n- Patch 16: Rewrote core parts:\n  - Remove the macros to handle different FUSE requests in the same\n    buffer, instead use unions\n  - Restructure how we read data from FUSE:\n    No longer one request_buf per queue, but instead a non-WRITE buffer\n    on the stack, and a WRITE data buffer on the heap. We pass this via\n    readv(), but it means that for non-WRITE requests, data that we want\n    on the stack may spill into the heap buffer, so we need to copy it\n    back. We cache the data buffer between non-WRITE requests so we at\n    least don’t have to reallocate it all the time.\n  - Actually take care of older FUSE versions down to 7.9 (2007)\n  - Handle some more requests that should be handled: STATFS, DESTROY,\n    FORGET, BATCH_FORGET\n  - Don’t handle short writes on /dev/fuse\n  - Move initializing fuse_out_header into the callers of\n    fuse_write_response() and fuse_write_buf_response()\n- Patch 18: Rebase conflicts because of patch 16, and removed the unused\n  FuseRequestCoParam\n- Patch 19: Adhere to QAPI max line length\n- Patch 21: Added, not sure if absolutely necessary, but won’t hurt\n  either\n- Patch 22: Rebase conflicts because of patch 16\n\n\ngit-backport-diff from v3:\n\nKey:\n[----] : patches are identical\n[####] : number of functional differences between upstream/downstream patch\n[down] : patch is downstream-only\nThe flags [FC] indicate (F)unctional and (C)ontextual differences, respectively\n\n001/24:[0009] [FC] 'fuse: Copy write buffer content before polling'\n002/24:[----] [--] 'fuse: Ensure init clean-up even with error_fatal'\n003/24:[----] [--] 'fuse: Remove superfluous empty line'\n004/24:[----] [--] 'fuse: Explicitly set inode ID to 1'\n005/24:[----] [--] 'fuse: Change setup_... to mount_fuse_export()'\n006/24:[down] 'fuse: Destroy session on mount_fuse_export() fail'\n007/24:[----] [--] 'fuse: Fix mount options'\n008/24:[----] [--] 'fuse: Set direct_io and parallel_direct_writes'\n009/24:[----] [--] 'fuse: Introduce fuse_{at,de}tach_handlers()'\n010/24:[----] [--] 'fuse: Introduce fuse_{inc,dec}_in_flight()'\n011/24:[0008] [FC] 'fuse: Add halted flag'\n012/24:[0012] [FC] 'fuse: fuse_{read,write}: Rename length to blk_len'\n013/24:[down] 'iotests/308: Use conv=notrunc to test growability'\n014/24:[down] 'fuse: Explicitly handle non-grow post-EOF accesses'\n015/24:[----] [--] 'block: Move qemu_fcntl_addfl() into osdep.c'\n016/24:[0718] [FC] 'fuse: Manually process requests (without libfuse)'\n017/24:[----] [-C] 'fuse: Reduce max read size'\n018/24:[0102] [FC] 'fuse: Process requests in coroutines'\n019/24:[0018] [FC] 'block/export: Add multi-threading interface'\n020/24:[----] [--] 'iotests/307: Test multi-thread export interface'\n021/24:[down] 'fuse: Make shared export state atomic'\n022/24:[0084] [FC] 'fuse: Implement multi-threading'\n023/24:[----] [--] 'qapi/block-export: Document FUSE's multi-threading'\n024/24:[----] [--] 'iotests/308: Add multi-threading sanity test'\n\n\nHanna Czenczek (24):\n  fuse: Copy write buffer content before polling\n  fuse: Ensure init clean-up even with error_fatal\n  fuse: Remove superfluous empty line\n  fuse: Explicitly set inode ID to 1\n  fuse: Change setup_... to mount_fuse_export()\n  fuse: Destroy session on mount_fuse_export() fail\n  fuse: Fix mount options\n  fuse: Set direct_io and parallel_direct_writes\n  fuse: Introduce fuse_{at,de}tach_handlers()\n  fuse: Introduce fuse_{inc,dec}_in_flight()\n  fuse: Add halted flag\n  fuse: fuse_{read,write}: Rename length to blk_len\n  iotests/308: Use conv=notrunc to test growability\n  fuse: Explicitly handle non-grow post-EOF accesses\n  block: Move qemu_fcntl_addfl() into osdep.c\n  fuse: Manually process requests (without libfuse)\n  fuse: Reduce max read size\n  fuse: Process requests in coroutines\n  block/export: Add multi-threading interface\n  iotests/307: Test multi-thread export interface\n  fuse: Make shared export state atomic\n  fuse: Implement multi-threading\n  qapi/block-export: Document FUSE's multi-threading\n  iotests/308: Add multi-threading sanity test\n\n qapi/block-export.json               |   41 +-\n include/block/export.h               |   12 +-\n include/qemu/osdep.h                 |    1 +\n block/export/export.c                |   48 +-\n block/export/fuse.c                  | 1278 ++++++++++++++++++++------\n block/export/vduse-blk.c             |    7 +\n block/export/vhost-user-blk-server.c |    8 +\n block/file-posix.c                   |   17 +-\n nbd/server.c                         |    6 +\n util/osdep.c                         |   18 +\n tests/qemu-iotests/307               |   47 +\n tests/qemu-iotests/307.out           |   18 +\n tests/qemu-iotests/308               |   95 +-\n tests/qemu-iotests/308.out           |   71 +-\n 14 files changed, 1358 insertions(+), 309 deletions(-)"
}