get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 806835,
    "url": "http://patchwork.ozlabs.org/api/patches/806835/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/patch/1503965694-10794-43-git-send-email-mdroth@linux.vnet.ibm.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": "<1503965694-10794-43-git-send-email-mdroth@linux.vnet.ibm.com>",
    "list_archive_url": null,
    "date": "2017-08-29T00:14:17",
    "name": "[42/79] blkdebug: Add ability to override unmap geometries",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "9cb381e7eaac43e76607667444da6b85ec38612a",
    "submitter": {
        "id": 5549,
        "url": "http://patchwork.ozlabs.org/api/people/5549/?format=api",
        "name": "Michael Roth",
        "email": "mdroth@linux.vnet.ibm.com"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/qemu-devel/patch/1503965694-10794-43-git-send-email-mdroth@linux.vnet.ibm.com/mbox/",
    "series": [
        {
            "id": 281,
            "url": "http://patchwork.ozlabs.org/api/series/281/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/list/?series=281",
            "date": "2017-08-29T00:13:45",
            "name": "Patch Round-up for stable 2.9.1, freeze on 2017-09-04",
            "version": 1,
            "mbox": "http://patchwork.ozlabs.org/series/281/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/806835/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/806835/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>)",
        "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 3xh8mT18p2z9s4s\n\tfor <incoming@patchwork.ozlabs.org>;\n\tTue, 29 Aug 2017 10:35:05 +1000 (AEST)",
            "from localhost ([::1]:41982 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 1dmUUh-0000zz-0t\n\tfor incoming@patchwork.ozlabs.org; Mon, 28 Aug 2017 20:35:03 -0400",
            "from eggs.gnu.org ([2001:4830:134:3::10]:48115)\n\tby lists.gnu.org with esmtp (Exim 4.71)\n\t(envelope-from <mdroth@linux.vnet.ibm.com>) id 1dmUCV-0001KN-Hd\n\tfor qemu-devel@nongnu.org; Mon, 28 Aug 2017 20:16:18 -0400",
            "from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71)\n\t(envelope-from <mdroth@linux.vnet.ibm.com>) id 1dmUCT-0005VW-0C\n\tfor qemu-devel@nongnu.org; Mon, 28 Aug 2017 20:16:15 -0400",
            "from mx0b-001b2d01.pphosted.com ([148.163.158.5]:57214\n\thelo=mx0a-001b2d01.pphosted.com)\n\tby eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32)\n\t(Exim 4.71) (envelope-from <mdroth@linux.vnet.ibm.com>)\n\tid 1dmUCS-0005V6-Qx\n\tfor qemu-devel@nongnu.org; Mon, 28 Aug 2017 20:16:12 -0400",
            "from pps.filterd (m0098420.ppops.net [127.0.0.1])\n\tby mx0b-001b2d01.pphosted.com (8.16.0.21/8.16.0.21) with SMTP id\n\tv7T0E9EA099569\n\tfor <qemu-devel@nongnu.org>; Mon, 28 Aug 2017 20:16:12 -0400",
            "from e15.ny.us.ibm.com (e15.ny.us.ibm.com [129.33.205.205])\n\tby mx0b-001b2d01.pphosted.com with ESMTP id 2cmr22yk7w-1\n\t(version=TLSv1.2 cipher=AES256-SHA bits=256 verify=NOT)\n\tfor <qemu-devel@nongnu.org>; Mon, 28 Aug 2017 20:16:12 -0400",
            "from localhost\n\tby e15.ny.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use\n\tOnly! Violators will be prosecuted\n\tfor <qemu-devel@nongnu.org> from <mdroth@linux.vnet.ibm.com>;\n\tMon, 28 Aug 2017 20:16:11 -0400",
            "from b01cxnp22033.gho.pok.ibm.com (9.57.198.23)\n\tby e15.ny.us.ibm.com (146.89.104.202) with IBM ESMTP SMTP Gateway:\n\tAuthorized Use Only! Violators will be prosecuted; \n\tMon, 28 Aug 2017 20:16:08 -0400",
            "from b01ledav004.gho.pok.ibm.com (b01ledav004.gho.pok.ibm.com\n\t[9.57.199.109])\n\tby b01cxnp22033.gho.pok.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP\n\tid v7T0G75f23593076; Tue, 29 Aug 2017 00:16:08 GMT",
            "from b01ledav004.gho.pok.ibm.com (unknown [127.0.0.1])\n\tby IMSVA (Postfix) with ESMTP id BD70C112056;\n\tMon, 28 Aug 2017 20:15:54 -0400 (EDT)",
            "from localhost (unknown [9.80.85.217])\n\tby b01ledav004.gho.pok.ibm.com (Postfix) with ESMTP id 843BA112054;\n\tMon, 28 Aug 2017 20:15:54 -0400 (EDT)"
        ],
        "From": "Michael Roth <mdroth@linux.vnet.ibm.com>",
        "To": "qemu-devel@nongnu.org",
        "Date": "Mon, 28 Aug 2017 19:14:17 -0500",
        "X-Mailer": "git-send-email 2.7.4",
        "In-Reply-To": "<1503965694-10794-1-git-send-email-mdroth@linux.vnet.ibm.com>",
        "References": "<1503965694-10794-1-git-send-email-mdroth@linux.vnet.ibm.com>",
        "X-TM-AS-GCONF": "00",
        "x-cbid": "17082900-0036-0000-0000-000002603F74",
        "X-IBM-SpamModules-Scores": "",
        "X-IBM-SpamModules-Versions": "BY=3.00007630; HX=3.00000241; KW=3.00000007;\n\tPH=3.00000004; SC=3.00000226; SDB=6.00909027; UDB=6.00455849;\n\tIPR=6.00689279; \n\tBA=6.00005557; NDR=6.00000001; ZLA=6.00000005; ZF=6.00000009;\n\tZB=6.00000000; \n\tZP=6.00000000; ZH=6.00000000; ZU=6.00000002; MB=3.00016909;\n\tXFM=3.00000015; UTC=2017-08-29 00:16:10",
        "X-IBM-AV-DETECTION": "SAVI=unused REMOTE=unused XFE=unused",
        "x-cbparentid": "17082900-0037-0000-0000-000041964A7C",
        "Message-Id": "<1503965694-10794-43-git-send-email-mdroth@linux.vnet.ibm.com>",
        "X-Proofpoint-Virus-Version": "vendor=fsecure engine=2.50.10432:, ,\n\tdefinitions=2017-08-28_13:, , signatures=0",
        "X-Proofpoint-Spam-Details": "rule=outbound_notspam policy=outbound score=0\n\tspamscore=0 suspectscore=1\n\tmalwarescore=0 phishscore=0 adultscore=0 bulkscore=0 classifier=spam\n\tadjust=0 reason=mlx scancount=1 engine=8.0.1-1707230000\n\tdefinitions=main-1708290001",
        "X-detected-operating-system": "by eggs.gnu.org: GNU/Linux 3.x [generic] [fuzzy]",
        "X-Received-From": "148.163.158.5",
        "Subject": "[Qemu-devel] [PATCH 42/79] blkdebug: Add ability to override unmap\n\tgeometries",
        "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": "qemu-stable@nongnu.org, Max Reitz <mreitz@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": "From: Eric Blake <eblake@redhat.com>\n\nMake it easier to simulate various unusual hardware setups (for\nexample, recent commits 3482b9b and b8d0a98 affect the Dell\nEquallogic iSCSI with its 15M preferred and maximum unmap and\nwrite zero sizing, or b2f95fe deals with the Linux loopback\nblock device having a max_transfer of 64k), by allowing blkdebug\nto wrap any other device with further restrictions on various\nalignments.\n\nSigned-off-by: Eric Blake <eblake@redhat.com>\nReviewed-by: Max Reitz <mreitz@redhat.com>\nMessage-id: 20170429191419.30051-9-eblake@redhat.com\nSigned-off-by: Max Reitz <mreitz@redhat.com>\n(cherry picked from commit 430b26a82da61876c4eaf559ae02332582968043)\n* prereq for 81c219a\nSigned-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>\n---\n block/blkdebug.c     | 96 +++++++++++++++++++++++++++++++++++++++++++++++++++-\n qapi/block-core.json | 33 ++++++++++++++++--\n 2 files changed, 125 insertions(+), 4 deletions(-)",
    "diff": "diff --git a/block/blkdebug.c b/block/blkdebug.c\nindex 2b934ef..5ccb9ce 100644\n--- a/block/blkdebug.c\n+++ b/block/blkdebug.c\n@@ -39,6 +39,11 @@ typedef struct BDRVBlkdebugState {\n     int state;\n     int new_state;\n     uint64_t align;\n+    uint64_t max_transfer;\n+    uint64_t opt_write_zero;\n+    uint64_t max_write_zero;\n+    uint64_t opt_discard;\n+    uint64_t max_discard;\n \n     /* For blkdebug_refresh_filename() */\n     char *config_file;\n@@ -343,6 +348,31 @@ static QemuOptsList runtime_opts = {\n             .type = QEMU_OPT_SIZE,\n             .help = \"Required alignment in bytes\",\n         },\n+        {\n+            .name = \"max-transfer\",\n+            .type = QEMU_OPT_SIZE,\n+            .help = \"Maximum transfer size in bytes\",\n+        },\n+        {\n+            .name = \"opt-write-zero\",\n+            .type = QEMU_OPT_SIZE,\n+            .help = \"Optimum write zero alignment in bytes\",\n+        },\n+        {\n+            .name = \"max-write-zero\",\n+            .type = QEMU_OPT_SIZE,\n+            .help = \"Maximum write zero size in bytes\",\n+        },\n+        {\n+            .name = \"opt-discard\",\n+            .type = QEMU_OPT_SIZE,\n+            .help = \"Optimum discard alignment in bytes\",\n+        },\n+        {\n+            .name = \"max-discard\",\n+            .type = QEMU_OPT_SIZE,\n+            .help = \"Maximum discard size in bytes\",\n+        },\n         { /* end of list */ }\n     },\n };\n@@ -354,6 +384,7 @@ static int blkdebug_open(BlockDriverState *bs, QDict *options, int flags,\n     QemuOpts *opts;\n     Error *local_err = NULL;\n     int ret;\n+    uint64_t align;\n \n     opts = qemu_opts_create(&runtime_opts, NULL, 0, &error_abort);\n     qemu_opts_absorb_qdict(opts, options, &local_err);\n@@ -388,13 +419,61 @@ static int blkdebug_open(BlockDriverState *bs, QDict *options, int flags,\n         bs->file->bs->supported_zero_flags;\n     ret = -EINVAL;\n \n-    /* Set request alignment */\n+    /* Set alignment overrides */\n     s->align = qemu_opt_get_size(opts, \"align\", 0);\n     if (s->align && (s->align >= INT_MAX || !is_power_of_2(s->align))) {\n         error_setg(errp, \"Cannot meet constraints with align %\" PRIu64,\n                    s->align);\n         goto out;\n     }\n+    align = MAX(s->align, bs->file->bs->bl.request_alignment);\n+\n+    s->max_transfer = qemu_opt_get_size(opts, \"max-transfer\", 0);\n+    if (s->max_transfer &&\n+        (s->max_transfer >= INT_MAX ||\n+         !QEMU_IS_ALIGNED(s->max_transfer, align))) {\n+        error_setg(errp, \"Cannot meet constraints with max-transfer %\" PRIu64,\n+                   s->max_transfer);\n+        goto out;\n+    }\n+\n+    s->opt_write_zero = qemu_opt_get_size(opts, \"opt-write-zero\", 0);\n+    if (s->opt_write_zero &&\n+        (s->opt_write_zero >= INT_MAX ||\n+         !QEMU_IS_ALIGNED(s->opt_write_zero, align))) {\n+        error_setg(errp, \"Cannot meet constraints with opt-write-zero %\" PRIu64,\n+                   s->opt_write_zero);\n+        goto out;\n+    }\n+\n+    s->max_write_zero = qemu_opt_get_size(opts, \"max-write-zero\", 0);\n+    if (s->max_write_zero &&\n+        (s->max_write_zero >= INT_MAX ||\n+         !QEMU_IS_ALIGNED(s->max_write_zero,\n+                          MAX(s->opt_write_zero, align)))) {\n+        error_setg(errp, \"Cannot meet constraints with max-write-zero %\" PRIu64,\n+                   s->max_write_zero);\n+        goto out;\n+    }\n+\n+    s->opt_discard = qemu_opt_get_size(opts, \"opt-discard\", 0);\n+    if (s->opt_discard &&\n+        (s->opt_discard >= INT_MAX ||\n+         !QEMU_IS_ALIGNED(s->opt_discard, align))) {\n+        error_setg(errp, \"Cannot meet constraints with opt-discard %\" PRIu64,\n+                   s->opt_discard);\n+        goto out;\n+    }\n+\n+    s->max_discard = qemu_opt_get_size(opts, \"max-discard\", 0);\n+    if (s->max_discard &&\n+        (s->max_discard >= INT_MAX ||\n+         !QEMU_IS_ALIGNED(s->max_discard,\n+                          MAX(s->opt_discard, align)))) {\n+        error_setg(errp, \"Cannot meet constraints with max-discard %\" PRIu64,\n+                   s->max_discard);\n+        goto out;\n+    }\n \n     ret = 0;\n out:\n@@ -789,6 +868,21 @@ static void blkdebug_refresh_limits(BlockDriverState *bs, Error **errp)\n     if (s->align) {\n         bs->bl.request_alignment = s->align;\n     }\n+    if (s->max_transfer) {\n+        bs->bl.max_transfer = s->max_transfer;\n+    }\n+    if (s->opt_write_zero) {\n+        bs->bl.pwrite_zeroes_alignment = s->opt_write_zero;\n+    }\n+    if (s->max_write_zero) {\n+        bs->bl.max_pwrite_zeroes = s->max_write_zero;\n+    }\n+    if (s->opt_discard) {\n+        bs->bl.pdiscard_alignment = s->opt_discard;\n+    }\n+    if (s->max_discard) {\n+        bs->bl.max_pdiscard = s->max_discard;\n+    }\n }\n \n static int blkdebug_reopen_prepare(BDRVReopenState *reopen_state,\ndiff --git a/qapi/block-core.json b/qapi/block-core.json\nindex 033457c..38edada 100644\n--- a/qapi/block-core.json\n+++ b/qapi/block-core.json\n@@ -2428,8 +2428,33 @@\n #\n # @config:          filename of the configuration file\n #\n-# @align:           required alignment for requests in bytes,\n-#                   must be power of 2, or 0 for default\n+# @align:           required alignment for requests in bytes, must be\n+#                   positive power of 2, or 0 for default\n+#\n+# @max-transfer:    maximum size for I/O transfers in bytes, must be\n+#                   positive multiple of @align and of the underlying\n+#                   file's request alignment (but need not be a power of\n+#                   2), or 0 for default (since 2.10)\n+#\n+# @opt-write-zero:  preferred alignment for write zero requests in bytes,\n+#                   must be positive multiple of @align and of the\n+#                   underlying file's request alignment (but need not be a\n+#                   power of 2), or 0 for default (since 2.10)\n+#\n+# @max-write-zero:  maximum size for write zero requests in bytes, must be\n+#                   positive multiple of @align, of @opt-write-zero, and of\n+#                   the underlying file's request alignment (but need not\n+#                   be a power of 2), or 0 for default (since 2.10)\n+#\n+# @opt-discard:     preferred alignment for discard requests in bytes, must\n+#                   be positive multiple of @align and of the underlying\n+#                   file's request alignment (but need not be a power of\n+#                   2), or 0 for default (since 2.10)\n+#\n+# @max-discard:     maximum size for discard requests in bytes, must be\n+#                   positive multiple of @align, of @opt-discard, and of\n+#                   the underlying file's request alignment (but need not\n+#                   be a power of 2), or 0 for default (since 2.10)\n #\n # @inject-error:    array of error injection descriptions\n #\n@@ -2440,7 +2465,9 @@\n { 'struct': 'BlockdevOptionsBlkdebug',\n   'data': { 'image': 'BlockdevRef',\n             '*config': 'str',\n-            '*align': 'int',\n+            '*align': 'int', '*max-transfer': 'int32',\n+            '*opt-write-zero': 'int32', '*max-write-zero': 'int32',\n+            '*opt-discard': 'int32', '*max-discard': 'int32',\n             '*inject-error': ['BlkdebugInjectErrorOptions'],\n             '*set-state': ['BlkdebugSetStateOptions'] } }\n \n",
    "prefixes": [
        "42/79"
    ]
}