Show a cover letter.

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

{
    "id": 2177613,
    "url": "http://patchwork.ozlabs.org/api/covers/2177613/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/cover/20251226211930.27565-1-farosas@suse.de/",
    "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": "<20251226211930.27565-1-farosas@suse.de>",
    "list_archive_url": null,
    "date": "2025-12-26T21:19:02",
    "name": "[RFC,00/25] migration: Cleanup early connection code",
    "submitter": {
        "id": 85343,
        "url": "http://patchwork.ozlabs.org/api/people/85343/?format=api",
        "name": "Fabiano Rosas",
        "email": "farosas@suse.de"
    },
    "mbox": "http://patchwork.ozlabs.org/project/qemu-devel/cover/20251226211930.27565-1-farosas@suse.de/mbox/",
    "series": [
        {
            "id": 486505,
            "url": "http://patchwork.ozlabs.org/api/series/486505/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/list/?series=486505",
            "date": "2025-12-26T21:19:04",
            "name": "migration: Cleanup early connection code",
            "version": 1,
            "mbox": "http://patchwork.ozlabs.org/series/486505/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/covers/2177613/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=suse.de header.i=@suse.de header.a=rsa-sha256\n header.s=susede2_rsa header.b=HT6tqcNo;\n\tdkim=pass header.d=suse.de header.i=@suse.de header.a=ed25519-sha256\n header.s=susede2_ed25519 header.b=J0ArVPaX;\n\tdkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de\n header.a=rsa-sha256 header.s=susede2_rsa header.b=2Q0qtq2x;\n\tdkim=neutral header.d=suse.de header.i=@suse.de header.a=ed25519-sha256\n header.s=susede2_ed25519 header.b=x67fQCVY;\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)",
            "smtp-out1.suse.de;\n\tnone"
        ],
        "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 4ddJTC1Q12z1y3s\n\tfor <incoming@patchwork.ozlabs.org>; Sat, 27 Dec 2025 08:21:35 +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 1vZFE2-0001HJ-4m; Fri, 26 Dec 2025 16:19:54 -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 <farosas@suse.de>) id 1vZFDm-0001DE-Ra\n for qemu-devel@nongnu.org; Fri, 26 Dec 2025 16:19:44 -0500",
            "from smtp-out1.suse.de ([195.135.223.130])\n by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)\n (Exim 4.90_1) (envelope-from <farosas@suse.de>) id 1vZFDk-0003Rl-UF\n for qemu-devel@nongnu.org; Fri, 26 Dec 2025 16:19:38 -0500",
            "from imap1.dmz-prg2.suse.org (unknown [10.150.64.97])\n (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest\n SHA256)\n (No client certificate requested)\n by smtp-out1.suse.de (Postfix) with ESMTPS id 177A03368B;\n Fri, 26 Dec 2025 21:19:34 +0000 (UTC)",
            "from imap1.dmz-prg2.suse.org (localhost [127.0.0.1])\n (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest\n SHA256)\n (No client certificate requested)\n by imap1.dmz-prg2.suse.org (Postfix) with ESMTPS id 020AD3EA63;\n Fri, 26 Dec 2025 21:19:32 +0000 (UTC)",
            "from dovecot-director2.suse.de ([2a07:de40:b281:106:10:150:64:167])\n by imap1.dmz-prg2.suse.org with ESMTPSA id WlTSLOT7TmnwJwAAD6G6ig\n (envelope-from <farosas@suse.de>); Fri, 26 Dec 2025 21:19:32 +0000"
        ],
        "DKIM-Signature": [
            "v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de;\n s=susede2_rsa;\n t=1766783975;\n h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:\n mime-version:mime-version:\n content-transfer-encoding:content-transfer-encoding;\n bh=FpDCzWxTu1Gv+zLOSQyylUWUMP9Ry+EHo8ZxSwH+bM4=;\n b=HT6tqcNoWKMueuGR12rDJ3d/36nPIHo6D/85gw4NeuoH8M30TteAsPV9rVgW72AZ8DqBrJ\n H81Ia49gS773JeeyJChxYqwS0ocTKUpFRkWc1oRj2bg/6UYSGMx8qYPhR96KQMu8rD1pZ9\n P4Q9twe6VuSAPzbiZ8d5tbji9yUlyFA=",
            "v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de;\n s=susede2_ed25519; t=1766783975;\n h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:\n mime-version:mime-version:\n content-transfer-encoding:content-transfer-encoding;\n bh=FpDCzWxTu1Gv+zLOSQyylUWUMP9Ry+EHo8ZxSwH+bM4=;\n b=J0ArVPaXr6rw08WBHD0uLdqhUIT5dA06Z1nlMS2+y0VooYQnjjyic5qIn6wui3hwA5exXa\n Hp+E2HWEsalsReBg==",
            "v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de;\n s=susede2_rsa;\n t=1766783974;\n h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:\n mime-version:mime-version:\n content-transfer-encoding:content-transfer-encoding;\n bh=FpDCzWxTu1Gv+zLOSQyylUWUMP9Ry+EHo8ZxSwH+bM4=;\n b=2Q0qtq2xhFrpt6apuoFr6AUdBzcW1fUZJts55ImC0J6UtpgaofEUTqriEmO0ZezNMxLDjy\n +ygYKoNBBQiF9wuzGj7RQJYos6MzK5Wb72KPKps7eMvRGc5UoaCa9cfkxICIjtzqwOQGp0\n qrS8VE5TKEc2YSjPg3l+CvrAgdkWu40=",
            "v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de;\n s=susede2_ed25519; t=1766783974;\n h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:\n mime-version:mime-version:\n content-transfer-encoding:content-transfer-encoding;\n bh=FpDCzWxTu1Gv+zLOSQyylUWUMP9Ry+EHo8ZxSwH+bM4=;\n b=x67fQCVY8HMqD4RL9zC9a1zSpqzacycyxUzG2MYl9DNJuVpH4JieIN2nwzMegNTvbv1Jp4\n tQ53WfqO+tSljtCA=="
        ],
        "From": "Fabiano Rosas <farosas@suse.de>",
        "To": "qemu-devel@nongnu.org",
        "Cc": "peterx@redhat.com",
        "Subject": "[RFC PATCH 00/25] migration: Cleanup early connection code",
        "Date": "Fri, 26 Dec 2025 18:19:02 -0300",
        "Message-ID": "<20251226211930.27565-1-farosas@suse.de>",
        "X-Mailer": "git-send-email 2.51.0",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "X-Spam-Score": "-2.80",
        "X-Spamd-Result": "default: False [-2.80 / 50.00]; BAYES_HAM(-3.00)[100.00%];\n MID_CONTAINS_FROM(1.00)[]; NEURAL_HAM_LONG(-1.00)[-1.000];\n R_MISSING_CHARSET(0.50)[]; NEURAL_HAM_SHORT(-0.20)[-0.992];\n MIME_GOOD(-0.10)[text/plain]; RCPT_COUNT_TWO(0.00)[2];\n FUZZY_RATELIMITED(0.00)[rspamd.com]; ARC_NA(0.00)[];\n RCVD_VIA_SMTP_AUTH(0.00)[];\n DKIM_SIGNED(0.00)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519];\n DBL_BLOCKED_OPENRESOLVER(0.00)[suse.de:mid,imap1.dmz-prg2.suse.org:helo,gitlab.com:url];\n URIBL_BLOCKED(0.00)[imap1.dmz-prg2.suse.org:helo,gitlab.com:url,suse.de:mid];\n FROM_EQ_ENVFROM(0.00)[]; FROM_HAS_DN(0.00)[];\n MIME_TRACE(0.00)[0:+]; RCVD_COUNT_TWO(0.00)[2];\n TO_MATCH_ENVRCPT_ALL(0.00)[]; TO_DN_NONE(0.00)[];\n RCVD_TLS_ALL(0.00)[]",
        "Received-SPF": "pass client-ip=195.135.223.130; envelope-from=farosas@suse.de;\n helo=smtp-out1.suse.de",
        "X-Spam_score_int": "-43",
        "X-Spam_score": "-4.4",
        "X-Spam_bar": "----",
        "X-Spam_report": "(-4.4 / 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,\n RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001,\n RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, 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-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": "Based-on: <20251223142959.1460293-1-peterx@redhat.com>\n\n[PULL 00/31] Next patches\nhttps://lore.kernel.org/r/20251223142959.1460293-1-peterx@redhat.com\n--\n\nAddress some of the issues that make the early connection code a bit\ntoo idiosyncratic. By \"early connection\" I mean from\nqmp_migrate[_incoming] until the start of the migration\nthread|coroutine.\n\n(IOW, the whole dance of going into socket code, starting an async\nroutine, calling back to migration code, checking TLS, going back\nagain, coming back once more, etc. All while passing an error_in and\nhostname string that eventually gets (maybe) ignored in tls code,\nalong with some is_resume checks along the way)\n\nThis series is mostly inspired by the work Markus and Peter did\nrecently in organizing some of the error handling code. The new\nmigration_connect_error_propagate() function seems like a good place\nto centralize the error handling and call migration_cleanup() during\nthis early connection phase when everything is still fairly\nlinear. (apologies if I'm dirtying your design =)\n\nAside from the initial patches that are a bit disruptive, most of the\nseries is just refactoring to make the code easier to navigate, names\nmore consistent and some general cleanups.\n\n- patches 1-8:\n\nGeneral cleanups, could be applied standalone, although they are\nprerequisites for the rest of the series.\n\n- patches 9-12:\n\nChanges to allow calling migration_cleanup() from\nmigration_connect_error_propagate().\n\nThe idea here is to make sure error propagation and cleanup happen\nwhen the error is detected, without calling into non-error-path\nfunctions.\n\nThis is the more risky change because it will cause cleanup to run in\nplaces where it didn't before.\n\n- patch 13 & 19:\n\nThe main change of this series, simplifying the\nqmp-migrate --> migration_connect path. Stops calling the connection\nfunctions when an error happens in the transport code, adds\nclarification around which paths have asynchronous completion and\nmakes the synchronous path return to their caller to start the\nmigration instead of initiating it themselves.\n\n- patches 14-18, 20-22:\n\nMoves code out of migration.c and into channel.c. Now that the code is\nmore compartmentalized, move it to a more appropriate source file.\n\n- patches 23-25:\n\nBONUS CONTENT, wrap the uri/channels parsing and move it to channel.c\nas well.\n\n- future work?\n\nI think we could move all QMP command functions to a QAPI-specific\nfile, but I don't see any standardization in the tree, there's\nblock/qapi.c, various instances of foo-qmp-cmds.c and many more just\nlaying along with the rest of the code. So I left this for another\nmoment.\n\nCI run: https://gitlab.com/farosas/qemu/-/pipelines/2233810778\n\nFabiano Rosas (25):\n  migration: Remove redundant state change\n  migration: Fix state change at migration_channel_process_incoming\n  migration/tls: Remove unused parameter\n  migration: Move multifd_recv_setup call\n  migration: Cleanup TLS handshake hostname passing\n  migration: Move postcopy_try_recover into migration_incoming_process\n  migration: Use migrate_mode() to query for cpr-transfer\n  migration: Free the error earlier in the resume case\n  migration: Move error reporting out of migration_cleanup\n  migration: Expand migration_connect_error_propagate to cover\n    cancelling\n  migration: yank: Move register instance earlier\n  migration: Fold migration_cleanup() into\n    migration_connect_error_propagate()\n  migration: Handle error in the early async paths\n  migration: Remove QEMUFile from channel.c\n  migration/channel: Rename migration_channel_connect\n  migration: Rename instances of start\n  migration: Move channel code to channel.c\n  migration: Move transport connection code into channel.c\n  migration/channel: Make synchronous calls evident\n  migration/channel: Use switch statements in outgoing code\n  migration/channel: Cleanup early passing of MigrationState\n  migration/channel: Merge both sides of the connection initiation code\n  migration: Move channel parsing to channel.c\n  migration: Move URI parsing to channel.c\n  migration: Remove qmp_migrate_finish\n\n migration/channel.c      | 410 +++++++++++++++++++++++++----\n migration/channel.h      |  36 ++-\n migration/exec.c         |  10 +-\n migration/exec.h         |   7 +-\n migration/fd.c           |  14 +-\n migration/fd.h           |   8 +-\n migration/file.c         |  19 +-\n migration/file.h         |   6 +-\n migration/migration.c    | 540 ++++++++++-----------------------------\n migration/migration.h    |  11 +-\n migration/multifd.c      |  16 +-\n migration/multifd.h      |   2 +-\n migration/options.c      |   5 +\n migration/postcopy-ram.c |   2 +-\n migration/rdma.c         |  52 ++--\n migration/rdma.h         |   5 +-\n migration/socket.c       |  54 ++--\n migration/socket.h       |   5 +-\n migration/tls.c          |  39 +--\n migration/tls.h          |  10 +-\n migration/trace-events   |  20 +-\n 21 files changed, 654 insertions(+), 617 deletions(-)"
}