get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 2196392,
    "url": "http://patchwork.ozlabs.org/api/patches/2196392/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20260213171622.55629-3-zhangckid@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": "<20260213171622.55629-3-zhangckid@gmail.com>",
    "list_archive_url": null,
    "date": "2026-02-13T17:16:21",
    "name": "[V4,3/4] iothread: track virtio-blk devices using IOThread reference counting",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "9dbf234305e643cb3f1abf23d6be77540e1b2525",
    "submitter": {
        "id": 72278,
        "url": "http://patchwork.ozlabs.org/api/people/72278/?format=api",
        "name": "Zhang Chen",
        "email": "zhangckid@gmail.com"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20260213171622.55629-3-zhangckid@gmail.com/mbox/",
    "series": [
        {
            "id": 492123,
            "url": "http://patchwork.ozlabs.org/api/series/492123/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/list/?series=492123",
            "date": "2026-02-13T17:16:20",
            "name": "[V4,1/4] qapi/misc: Fix missed query-iothreads items",
            "version": 4,
            "mbox": "http://patchwork.ozlabs.org/series/492123/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/2196392/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/2196392/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=NfcI22/j;\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 4fCJlP1NtKz1xvQ\n\tfor <incoming@patchwork.ozlabs.org>; Sat, 14 Feb 2026 04:17:53 +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 1vqwmn-0007bi-8v; Fri, 13 Feb 2026 12:16:57 -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 <zhangckid@gmail.com>)\n id 1vqwmm-0007bX-Bt\n for qemu-devel@nongnu.org; Fri, 13 Feb 2026 12:16:56 -0500",
            "from mail-pl1-x635.google.com ([2607:f8b0:4864:20::635])\n by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)\n (Exim 4.90_1) (envelope-from <zhangckid@gmail.com>)\n id 1vqwmk-0006xa-Un\n for qemu-devel@nongnu.org; Fri, 13 Feb 2026 12:16:56 -0500",
            "by mail-pl1-x635.google.com with SMTP id\n d9443c01a7336-2aaf43014d0so7894395ad.2\n for <qemu-devel@nongnu.org>; Fri, 13 Feb 2026 09:16:54 -0800 (PST)",
            "from localhost.localdomain ([104.168.88.121])\n by smtp.gmail.com with ESMTPSA id\n d9443c01a7336-2ab29998c45sm87095575ad.88.2026.02.13.09.16.47\n (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256);\n Fri, 13 Feb 2026 09:16:52 -0800 (PST)"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=gmail.com; s=20230601; t=1771003013; x=1771607813; 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=AQp38uncl2mXYNc9QQa5vUrymuUT0oK0UGeDzm2QtNY=;\n b=NfcI22/j10uBOEWIv6ePKyA9dF/WN/Y3JhyAR7wDA0cSVUUD8uJd38xJca/IIlAKDp\n UijKVFFg5b82zjYANO/YvCPvgB48OkWad+otXW6vazlhsMkShxbBCBQZrk0pwJ82BiFg\n 8qf94HzrpY3Mc1DNcjcN25Y6B6SaRbk01NoUWRvdDeClhAeEdOzHUOBW1k2KLNTVtNKB\n X+R+LXVaDLAVLedBz/R0VLqVyHvkADrnXEutbGR7tfUKzt6Po8wArt1jYysXAb/R1vcX\n DfKyNyVzPV7CHoaOLbvoA2k1EJCp/ULesHJ6oqelj3ghFqOB9dyhfZA6HkBPF2F7naN9\n ogTQ==",
        "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20230601; t=1771003013; x=1771607813;\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=AQp38uncl2mXYNc9QQa5vUrymuUT0oK0UGeDzm2QtNY=;\n b=wyCGlYoApnUEG03dt1m/miMZBtdPyv0uGeajiFcASCDwlrY0CedPn4O1sJYu4lMzpk\n X1m/HEuU5r/rQK1yLHVhVQsUZU++2F7V+ewwKi64h8KgzKeVhYTlx/P+s6xbscr6Qkr/\n 8Dgk/n+c2fU21qCA47aU8twRoadMEh9zRtfocbrPU9IfjTv4stNL4sNUDvMvWd0BivgO\n mfWbmHtZqicA1xspSWXfQcssPwEyhxSEIK92zYRH0lnOxxTv+bmJvJKETAI3EZJ4zdu/\n dUEGcjQSVpxEZTYDMbb8j5GxsmOipq7XHyHxtayYMdcwq7BzGfy9Ds0bb+JCGjSXV+nt\n Ty2w==",
        "X-Gm-Message-State": "AOJu0YxbnSkPHmKOdioociraYprttFieF/DHVmoig+1gZra4/OoViDqw\n oBhxKKVt2kcwDVlzvzlGMOafqkGup/6zZf4Zd9BZIITHxiaCxJKDQFneu0j6KKkL",
        "X-Gm-Gg": "AZuq6aLKjEB/J1VB/SLAquB+UC2AgR0BRVrGZlPQoSOljMPFJPlXi6myu1IU+Dyx/6l\n 81M2VUbW4371SfPq0P6qhidbynK/ZQq64IMtJeDD8v915voD4hqwrro0bC5NNRKeTPm6yA3eceQ\n nk7Po2XLrC5Sr4BV1Ms2DH53YEAJxwVIvR01p30cKn78w2xuBhQJFIYfMgSkkbS1rHn7JS1DS/j\n gLrmhoL1wC1sEZgtPxHFk1c61ngNr4Ssj1KCxPHiMsZQVDvGzPX7g2BeR8TOu3nAdJBTSXiQyFj\n MRkvVMfF86ygk9J2+CPS8LVshdRWsYiwlFsN5T/n5Uc8TmVPURuoIr3iUJMwMYjguBYsOqBAfPX\n mYqDgDZD/QaobedNZ3Y8dE82JWuyFQzOnvXmzImvxR2AZ9hDNorJK6GTX74clN6fWDZPQ063Vyi\n H/OB6fOf6G+2fmF0UyIVAdVhB9tIb+FwHbd/vVFf+Qq70cdQ==",
        "X-Received": "by 2002:a17:902:fc85:b0:295:745a:8016 with SMTP id\n d9443c01a7336-2ab4cf4f475mr39447505ad.11.1771003013231;\n Fri, 13 Feb 2026 09:16:53 -0800 (PST)",
        "From": "Zhang Chen <zhangckid@gmail.com>",
        "To": "qemu-devel <qemu-devel@nongnu.org>,\n \"Dr . David Alan Gilbert\" <dave@treblig.org>,\n Eric Blake <eblake@redhat.com>, Markus Armbruster <armbru@redhat.com>,\n \"Michael S . Tsirkin\" <mst@redhat.com>,\n Stefan Hajnoczi <stefanha@redhat.com>",
        "Cc": "Zhang Chen <zhangckid@gmail.com>",
        "Subject": "[PATCH V4 3/4] iothread: track virtio-blk devices using IOThread\n reference counting",
        "Date": "Sat, 14 Feb 2026 01:16:21 +0800",
        "Message-ID": "<20260213171622.55629-3-zhangckid@gmail.com>",
        "X-Mailer": "git-send-email 2.49.0",
        "In-Reply-To": "<20260213171622.55629-1-zhangckid@gmail.com>",
        "References": "<20260213171622.55629-1-zhangckid@gmail.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Received-SPF": "pass client-ip=2607:f8b0:4864:20::635;\n envelope-from=zhangckid@gmail.com; helo=mail-pl1-x635.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": "Add reference counting and device path tracking to IOThread to monitor\nwhich devices are currently attached. This is implemented by adding\niothread_ref() and iothread_unref() calls during the virtio-blk\nAioContext initialization and cleanup paths.\n\nThe IOThread now maintains:\n - attached_cnt: A counter of devices using the iothread.\n - attached_dev: A list of QOM paths for the attached devices.\n\nThis tracking is essential for management tools to understand the\nrelationship between IOThreads and devices, especially during hotplug\nand unplug operations.\n\nFuture work will extend this ref/unref mechanism to other iothread-capable\ndevices (e.g. virtio-scsi).\n\nSigned-off-by: Zhang Chen <zhangckid@gmail.com>\n---\n hw/block/virtio-blk.c | 8 ++++++++\n 1 file changed, 8 insertions(+)",
    "diff": "diff --git a/hw/block/virtio-blk.c b/hw/block/virtio-blk.c\nindex ddf0e9ee53..247d6d41f3 100644\n--- a/hw/block/virtio-blk.c\n+++ b/hw/block/virtio-blk.c\n@@ -1462,6 +1462,9 @@ static bool virtio_blk_vq_aio_context_init(VirtIOBlock *s, Error **errp)\n             return false;\n         }\n     } else if (conf->iothread) {\n+        char *path = object_get_canonical_path(OBJECT(s));\n+\n+        iothread_ref(conf->iothread, path);\n         AioContext *ctx = iothread_get_aio_context(conf->iothread);\n         for (unsigned i = 0; i < conf->num_queues; i++) {\n             s->vq_aio_context[i] = ctx;\n@@ -1491,7 +1494,12 @@ static void virtio_blk_vq_aio_context_cleanup(VirtIOBlock *s)\n     }\n \n     if (conf->iothread) {\n+        char *path = object_get_canonical_path(OBJECT(s));\n+\n+        iothread_unref(conf->iothread, path);\n         object_unref(OBJECT(conf->iothread));\n+\n+        g_free(path);\n     }\n \n     g_free(s->vq_aio_context);\n",
    "prefixes": [
        "V4",
        "3/4"
    ]
}