get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 807494,
    "url": "http://patchwork.ozlabs.org/api/patches/807494/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/patch/1504081950-2528-13-git-send-email-peterx@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": "<1504081950-2528-13-git-send-email-peterx@redhat.com>",
    "list_archive_url": null,
    "date": "2017-08-30T08:32:09",
    "name": "[RFC,v2,12/33] migration: allow send_rq to fail",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "89099609ea82f6bd35a216ea30a9ed18b68730e0",
    "submitter": {
        "id": 67717,
        "url": "http://patchwork.ozlabs.org/api/people/67717/?format=api",
        "name": "Peter Xu",
        "email": "peterx@redhat.com"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/qemu-devel/patch/1504081950-2528-13-git-send-email-peterx@redhat.com/mbox/",
    "series": [
        {
            "id": 552,
            "url": "http://patchwork.ozlabs.org/api/series/552/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/list/?series=552",
            "date": "2017-08-30T08:31:59",
            "name": "Migration: postcopy failure recovery",
            "version": 2,
            "mbox": "http://patchwork.ozlabs.org/series/552/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/807494/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/807494/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@bilbo.ozlabs.org",
        "Authentication-Results": [
            "ozlabs.org;\n\tspf=pass (mailfrom) smtp.mailfrom=nongnu.org\n\t(client-ip=2001:4830:134:3::11; helo=lists.gnu.org;\n\tenvelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n\treceiver=<UNKNOWN>)",
            "ext-mx05.extmail.prod.ext.phx2.redhat.com;\n\tdmarc=none (p=none dis=none) header.from=redhat.com",
            "ext-mx05.extmail.prod.ext.phx2.redhat.com;\n\tspf=fail smtp.mailfrom=peterx@redhat.com"
        ],
        "Received": [
            "from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11])\n\t(using TLSv1 with cipher AES256-SHA (256/256 bits))\n\t(No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3xhzTL47R2z9sRq\n\tfor <incoming@patchwork.ozlabs.org>;\n\tWed, 30 Aug 2017 18:39:50 +1000 (AEST)",
            "from localhost ([::1]:49036 helo=lists.gnu.org)\n\tby lists.gnu.org with esmtp (Exim 4.71) (envelope-from\n\t<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>)\n\tid 1dmyXM-0003ck-6m\n\tfor incoming@patchwork.ozlabs.org; Wed, 30 Aug 2017 04:39:48 -0400",
            "from eggs.gnu.org ([2001:4830:134:3::10]:34171)\n\tby lists.gnu.org with esmtp (Exim 4.71)\n\t(envelope-from <peterx@redhat.com>) id 1dmyRH-0007KI-NG\n\tfor qemu-devel@nongnu.org; Wed, 30 Aug 2017 04:33:32 -0400",
            "from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71)\n\t(envelope-from <peterx@redhat.com>) id 1dmyRG-0003Nj-E8\n\tfor qemu-devel@nongnu.org; Wed, 30 Aug 2017 04:33:31 -0400",
            "from mx1.redhat.com ([209.132.183.28]:48852)\n\tby eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32)\n\t(Exim 4.71) (envelope-from <peterx@redhat.com>) id 1dmyRG-0003NP-5G\n\tfor qemu-devel@nongnu.org; Wed, 30 Aug 2017 04:33:30 -0400",
            "from smtp.corp.redhat.com\n\t(int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15])\n\t(using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits))\n\t(No client certificate requested)\n\tby mx1.redhat.com (Postfix) with ESMTPS id 2DC4C5CE;\n\tWed, 30 Aug 2017 08:33:29 +0000 (UTC)",
            "from pxdev.xzpeter.org.com (dhcp-14-103.nay.redhat.com\n\t[10.66.14.103])\n\tby smtp.corp.redhat.com (Postfix) with ESMTP id 0D6D28479A;\n\tWed, 30 Aug 2017 08:33:25 +0000 (UTC)"
        ],
        "DMARC-Filter": "OpenDMARC Filter v1.3.2 mx1.redhat.com 2DC4C5CE",
        "From": "Peter Xu <peterx@redhat.com>",
        "To": "qemu-devel@nongnu.org",
        "Date": "Wed, 30 Aug 2017 16:32:09 +0800",
        "Message-Id": "<1504081950-2528-13-git-send-email-peterx@redhat.com>",
        "In-Reply-To": "<1504081950-2528-1-git-send-email-peterx@redhat.com>",
        "References": "<1504081950-2528-1-git-send-email-peterx@redhat.com>",
        "X-Scanned-By": "MIMEDefang 2.79 on 10.5.11.15",
        "X-Greylist": "Sender IP whitelisted, not delayed by milter-greylist-4.5.16\n\t(mx1.redhat.com [10.5.110.29]);\n\tWed, 30 Aug 2017 08:33:29 +0000 (UTC)",
        "X-detected-operating-system": "by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic]\n\t[fuzzy]",
        "X-Received-From": "209.132.183.28",
        "Subject": "[Qemu-devel] [RFC v2 12/33] migration: allow send_rq to fail",
        "X-BeenThere": "qemu-devel@nongnu.org",
        "X-Mailman-Version": "2.1.21",
        "Precedence": "list",
        "List-Id": "<qemu-devel.nongnu.org>",
        "List-Unsubscribe": "<https://lists.nongnu.org/mailman/options/qemu-devel>,\n\t<mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>",
        "List-Archive": "<http://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\t<mailto:qemu-devel-request@nongnu.org?subject=subscribe>",
        "Cc": "Laurent Vivier <lvivier@redhat.com>,\n\tAndrea Arcangeli <aarcange@redhat.com>, \n\tJuan Quintela <quintela@redhat.com>,\n\tAlexey Perevalov <a.perevalov@samsung.com>, peterx@redhat.com,\n\t\"Dr . David Alan Gilbert\" <dgilbert@redhat.com>",
        "Errors-To": "qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org",
        "Sender": "\"Qemu-devel\"\n\t<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>"
    },
    "content": "We will not allow failures to happen when sending data from destination\nto source via the return path. However it is possible that there can be\nerrors along the way.  This patch allows the migrate_send_rp_message()\nto return error when it happens, and further extended it to\nmigrate_send_rp_req_pages().\n\nReviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>\nSigned-off-by: Peter Xu <peterx@redhat.com>\n---\n migration/migration.c | 38 ++++++++++++++++++++++++++++++--------\n migration/migration.h |  2 +-\n 2 files changed, 31 insertions(+), 9 deletions(-)",
    "diff": "diff --git a/migration/migration.c b/migration/migration.c\nindex b3cd8be..d42209d 100644\n--- a/migration/migration.c\n+++ b/migration/migration.c\n@@ -195,17 +195,35 @@ static void deferred_incoming_migration(Error **errp)\n  * Send a message on the return channel back to the source\n  * of the migration.\n  */\n-static void migrate_send_rp_message(MigrationIncomingState *mis,\n-                                    enum mig_rp_message_type message_type,\n-                                    uint16_t len, void *data)\n+static int migrate_send_rp_message(MigrationIncomingState *mis,\n+                                   enum mig_rp_message_type message_type,\n+                                   uint16_t len, void *data)\n {\n+    int ret = 0;\n+\n     trace_migrate_send_rp_message((int)message_type, len);\n     qemu_mutex_lock(&mis->rp_mutex);\n+\n+    /*\n+     * It's possible that the file handle got lost due to network\n+     * failures.\n+     */\n+    if (!mis->to_src_file) {\n+        ret = -EIO;\n+        goto error;\n+    }\n+\n     qemu_put_be16(mis->to_src_file, (unsigned int)message_type);\n     qemu_put_be16(mis->to_src_file, len);\n     qemu_put_buffer(mis->to_src_file, data, len);\n     qemu_fflush(mis->to_src_file);\n+\n+    /* It's possible that qemu file got error during sending */\n+    ret = qemu_file_get_error(mis->to_src_file);\n+\n+error:\n     qemu_mutex_unlock(&mis->rp_mutex);\n+    return ret;\n }\n \n /* Request a range of pages from the source VM at the given\n@@ -215,26 +233,30 @@ static void migrate_send_rp_message(MigrationIncomingState *mis,\n  *   Start: Address offset within the RB\n  *   Len: Length in bytes required - must be a multiple of pagesize\n  */\n-void migrate_send_rp_req_pages(MigrationIncomingState *mis, const char *rbname,\n-                               ram_addr_t start, size_t len)\n+int migrate_send_rp_req_pages(MigrationIncomingState *mis, const char *rbname,\n+                              ram_addr_t start, size_t len)\n {\n     uint8_t bufc[12 + 1 + 255]; /* start (8), len (4), rbname up to 256 */\n     size_t msglen = 12; /* start + len */\n+    int rbname_len;\n+    enum mig_rp_message_type msg_type;\n \n     *(uint64_t *)bufc = cpu_to_be64((uint64_t)start);\n     *(uint32_t *)(bufc + 8) = cpu_to_be32((uint32_t)len);\n \n     if (rbname) {\n-        int rbname_len = strlen(rbname);\n+        rbname_len = strlen(rbname);\n         assert(rbname_len < 256);\n \n         bufc[msglen++] = rbname_len;\n         memcpy(bufc + msglen, rbname, rbname_len);\n         msglen += rbname_len;\n-        migrate_send_rp_message(mis, MIG_RP_MSG_REQ_PAGES_ID, msglen, bufc);\n+        msg_type = MIG_RP_MSG_REQ_PAGES_ID;\n     } else {\n-        migrate_send_rp_message(mis, MIG_RP_MSG_REQ_PAGES, msglen, bufc);\n+        msg_type = MIG_RP_MSG_REQ_PAGES;\n     }\n+\n+    return migrate_send_rp_message(mis, msg_type, msglen, bufc);\n }\n \n void qemu_start_incoming_migration(const char *uri, Error **errp)\ndiff --git a/migration/migration.h b/migration/migration.h\nindex 323d88d..6333391 100644\n--- a/migration/migration.h\n+++ b/migration/migration.h\n@@ -199,7 +199,7 @@ void migrate_send_rp_shut(MigrationIncomingState *mis,\n                           uint32_t value);\n void migrate_send_rp_pong(MigrationIncomingState *mis,\n                           uint32_t value);\n-void migrate_send_rp_req_pages(MigrationIncomingState *mis, const char* rbname,\n+int migrate_send_rp_req_pages(MigrationIncomingState *mis, const char* rbname,\n                               ram_addr_t start, size_t len);\n \n #endif\n",
    "prefixes": [
        "RFC",
        "v2",
        "12/33"
    ]
}