get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 2226021,
    "url": "http://patchwork.ozlabs.org/api/1.2/patches/2226021/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/linux-ext4/patch/20260422021042.4157510-11-yi.zhang@huaweicloud.com/",
    "project": {
        "id": 8,
        "url": "http://patchwork.ozlabs.org/api/1.2/projects/8/?format=api",
        "name": "Linux ext4 filesystem development",
        "link_name": "linux-ext4",
        "list_id": "linux-ext4.vger.kernel.org",
        "list_email": "linux-ext4@vger.kernel.org",
        "web_url": null,
        "scm_url": null,
        "webscm_url": null,
        "list_archive_url": "",
        "list_archive_url_format": "",
        "commit_url_format": ""
    },
    "msgid": "<20260422021042.4157510-11-yi.zhang@huaweicloud.com>",
    "list_archive_url": null,
    "date": "2026-04-22T02:10:30",
    "name": "[v3,10/22] ext4: implement mmap path using iomap",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "fe7328aaa0b35b60a5ee167d9542e976ddee305a",
    "submitter": {
        "id": 85428,
        "url": "http://patchwork.ozlabs.org/api/1.2/people/85428/?format=api",
        "name": "Zhang Yi",
        "email": "yi.zhang@huaweicloud.com"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/linux-ext4/patch/20260422021042.4157510-11-yi.zhang@huaweicloud.com/mbox/",
    "series": [
        {
            "id": 500911,
            "url": "http://patchwork.ozlabs.org/api/1.2/series/500911/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/linux-ext4/list/?series=500911",
            "date": "2026-04-22T02:10:23",
            "name": "ext4: use iomap for regular file's buffered I/O path",
            "version": 3,
            "mbox": "http://patchwork.ozlabs.org/series/500911/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/2226021/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/2226021/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "\n <SRS0=it/1=CV=vger.kernel.org=linux-ext4+bounces-15980-patchwork-incoming=ozlabs.org@ozlabs.org>",
        "X-Original-To": [
            "incoming@patchwork.ozlabs.org",
            "linux-ext4@vger.kernel.org"
        ],
        "Delivered-To": [
            "patchwork-incoming@legolas.ozlabs.org",
            "patchwork-incoming@ozlabs.org"
        ],
        "Authentication-Results": [
            "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=ozlabs.org\n (client-ip=150.107.74.76; helo=mail.ozlabs.org;\n envelope-from=srs0=it/1=cv=vger.kernel.org=linux-ext4+bounces-15980-patchwork-incoming=ozlabs.org@ozlabs.org;\n receiver=patchwork.ozlabs.org)",
            "gandalf.ozlabs.org;\n arc=pass smtp.remote-ip=\"2600:3c0a:e001:db::12fc:5321\"\n arc.chain=subspace.kernel.org",
            "gandalf.ozlabs.org;\n dmarc=none (p=none dis=none) header.from=huaweicloud.com",
            "gandalf.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org\n (client-ip=2600:3c0a:e001:db::12fc:5321; helo=sea.lore.kernel.org;\n envelope-from=linux-ext4+bounces-15980-patchwork-incoming=ozlabs.org@vger.kernel.org;\n receiver=ozlabs.org)",
            "smtp.subspace.kernel.org;\n arc=none smtp.client-ip=45.249.212.51",
            "smtp.subspace.kernel.org;\n dmarc=none (p=none dis=none) header.from=huaweicloud.com",
            "smtp.subspace.kernel.org;\n spf=pass smtp.mailfrom=huaweicloud.com"
        ],
        "Received": [
            "from mail.ozlabs.org (gandalf.ozlabs.org [150.107.74.76])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4g0jhP5gbnz1yD5\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 22 Apr 2026 12:23:49 +1000 (AEST)",
            "from mail.ozlabs.org (mail.ozlabs.org [IPv6:2404:9400:2221:ea00::3])\n\tby gandalf.ozlabs.org (Postfix) with ESMTP id 4g0jhP5CSTz4wK3\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 22 Apr 2026 12:23:49 +1000 (AEST)",
            "by gandalf.ozlabs.org (Postfix)\n\tid 4g0jhP58Bgz4wKJ; Wed, 22 Apr 2026 12:23:49 +1000 (AEST)",
            "from sea.lore.kernel.org (sea.lore.kernel.org\n [IPv6:2600:3c0a:e001:db::12fc:5321])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519)\n\t(No client certificate requested)\n\tby gandalf.ozlabs.org (Postfix) with ESMTPS id 4g0jhL2NXsz4wK3\n\tfor <patchwork-incoming@ozlabs.org>; Wed, 22 Apr 2026 12:23:46 +1000 (AEST)",
            "from smtp.subspace.kernel.org (conduit.subspace.kernel.org\n [100.90.174.1])\n\tby sea.lore.kernel.org (Postfix) with ESMTP id A785230B6601\n\tfor <patchwork-incoming@ozlabs.org>; Wed, 22 Apr 2026 02:17:57 +0000 (UTC)",
            "from localhost.localdomain (localhost.localdomain [127.0.0.1])\n\tby smtp.subspace.kernel.org (Postfix) with ESMTP id 1655B366060;\n\tWed, 22 Apr 2026 02:17:08 +0000 (UTC)",
            "from dggsgout11.his.huawei.com (dggsgout11.his.huawei.com\n [45.249.212.51])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby smtp.subspace.kernel.org (Postfix) with ESMTPS id 8D5B635AC04;\n\tWed, 22 Apr 2026 02:17:05 +0000 (UTC)",
            "from mail.maildlp.com (unknown [172.19.163.170])\n\tby dggsgout11.his.huawei.com (SkyGuard) with ESMTPS id 4g0jWM2N3zzYQtr3;\n\tWed, 22 Apr 2026 10:15:59 +0800 (CST)",
            "from mail02.huawei.com (unknown [10.116.40.252])\n\tby mail.maildlp.com (Postfix) with ESMTP id 82E8A405D6;\n\tWed, 22 Apr 2026 10:16:56 +0800 (CST)",
            "from huaweicloud.com (unknown [10.50.85.155])\n\tby APP3 (Coremail) with SMTP id _Ch0CgB3JL6PL+hpqkgUBQ--.2635S14;\n\tWed, 22 Apr 2026 10:16:56 +0800 (CST)"
        ],
        "ARC-Seal": [
            "i=2; a=rsa-sha256; d=ozlabs.org; s=201707; t=1776824629; cv=pass;\n\tb=fzNI9yGCRrB7ChacKpv0yl1n8sAuvXebJH5VDX4FFgYQBl2HddKDd7mRu9O57OeOVmYNGXeDk34coF+RkBdyhg1xz227C2UdFMvm43NchHRW5Ql8bjPPvk8eOfRrA6VjMNgcaUXnJbk2rkEq0iY+GcT00UIzKfJOr/kT++K4L9mqRJGytVAxhYvkYilKoqXH/FZfJsHZhuxjQlvOeRWxKKoWSepobAru7B9BOnPFk48Rt6UUKqXb8dO4Ch4OHB2lXZ6g08ZZsrSMviqdNZ1qAnJeH2CIMKiZQY3eBKLIUj7/XwlbyR9h4xBvQNx0l7A0gjCPRtyhjvKebJNsWt/bCg==",
            "i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;\n\tt=1776824227; cv=none;\n b=i/gaWQ5IcOEzp0OiU6bWpFtSCY1Bablakb1oVRN4s12sCi+QHFnNEql3V5RGAk+vjYKmfX0b8cC/Yo2HZNMXt0tjn6uurycN11jKdrFHPpozDAyPGWZgL9O5+cXA6zZBkxzicSAtr3+MFQtyAu0Mjuw+NmSFcEkNRXASKCKWFAQ="
        ],
        "ARC-Message-Signature": [
            "i=2; a=rsa-sha256; d=ozlabs.org; s=201707;\n\tt=1776824629; c=relaxed/relaxed;\n\tbh=ylCVlW3lPwbZ4oFcm59DTulTW+ItfFu3Xanh/cmh2+s=;\n\th=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References:\n\t MIME-Version;\n b=gFLWT/hFnxKiAV5p0LjxgcFrgCn5OVK4ehrJRpieBY1CXoLUnqlxf2rscib6pbN0JT5bIYgVhgbgNrBp7Sqgf1PAVpPhazOl6hSK72b22aS2lEWwMGzGFhmNM0W83exQby8v6VZpPjfr8s0o1tvgGqp0liPZ8f+XYOmftvAlWl02yZmmbbfMz5/kdgSAibHzLmaT13F3dzD36hu+TbIk+Gp1oqfJw0ZB07dXeg/gog+V2EQFk964YOtPCsOCbXYepYXwuJmZqI8PfK3Mrw1rjT+Ng/3Bp4W4JLur+MnzqrMev1BOSmZ1mXXfU7TFwp7R5t3Fk+CCcbk0EZ1NyR2epA==",
            "i=1; a=rsa-sha256; d=subspace.kernel.org;\n\ts=arc-20240116; t=1776824227; c=relaxed/simple;\n\tbh=bCJkj+SJLswXyGtg3E1eLMLyPv981Hk0+bNTPn2K5S4=;\n\th=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References:\n\t MIME-Version;\n b=fGf2JIRYK5/fckHiwTgG+tr0nyCn2LrtVzoCCm8+kjHco3rVQ0wH+0E7iTMkikjkOmTq0KG8QyRel/rSeP23rF2+9YSIWazV5gZphHX+BWfHihh4gs/zLMb2HcfdGwWqNETBAXBJ+C67I4M/hPDnjgU+GqhQpMevNvmkerQYfs4="
        ],
        "ARC-Authentication-Results": [
            "i=2; gandalf.ozlabs.org;\n dmarc=none (p=none dis=none) header.from=huaweicloud.com;\n spf=pass (client-ip=2600:3c0a:e001:db::12fc:5321; helo=sea.lore.kernel.org;\n envelope-from=linux-ext4+bounces-15980-patchwork-incoming=ozlabs.org@vger.kernel.org;\n receiver=ozlabs.org) smtp.mailfrom=vger.kernel.org",
            "i=1; smtp.subspace.kernel.org;\n dmarc=none (p=none dis=none) header.from=huaweicloud.com;\n spf=pass smtp.mailfrom=huaweicloud.com; arc=none smtp.client-ip=45.249.212.51"
        ],
        "From": "Zhang Yi <yi.zhang@huaweicloud.com>",
        "To": "linux-ext4@vger.kernel.org,\n\tlinux-fsdevel@vger.kernel.org",
        "Cc": "linux-kernel@vger.kernel.org,\n\ttytso@mit.edu,\n\tadilger.kernel@dilger.ca,\n\tlibaokun@linux.alibaba.com,\n\tjack@suse.cz,\n\tojaswin@linux.ibm.com,\n\tritesh.list@gmail.com,\n\tdjwong@kernel.org,\n\thch@infradead.org,\n\tyi.zhang@huawei.com,\n\tyi.zhang@huaweicloud.com,\n\tyizhang089@gmail.com,\n\tyangerkun@huawei.com,\n\tyukuai@fnnas.com",
        "Subject": "[PATCH v3 10/22] ext4: implement mmap path using iomap",
        "Date": "Wed, 22 Apr 2026 10:10:30 +0800",
        "Message-ID": "<20260422021042.4157510-11-yi.zhang@huaweicloud.com>",
        "X-Mailer": "git-send-email 2.52.0",
        "In-Reply-To": "<20260422021042.4157510-1-yi.zhang@huaweicloud.com>",
        "References": "<20260422021042.4157510-1-yi.zhang@huaweicloud.com>",
        "Precedence": "bulk",
        "X-Mailing-List": "linux-ext4@vger.kernel.org",
        "List-Id": "<linux-ext4.vger.kernel.org>",
        "List-Subscribe": "<mailto:linux-ext4+subscribe@vger.kernel.org>",
        "List-Unsubscribe": "<mailto:linux-ext4+unsubscribe@vger.kernel.org>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "X-CM-TRANSID": "_Ch0CgB3JL6PL+hpqkgUBQ--.2635S14",
        "X-Coremail-Antispam": "1UD129KBjvJXoWxWFW3KryUCFW7CFWkZF1UWrg_yoW5Kw17pF\n\t95K3yrGrsxXwnF9rs7WF4DZr1rKayxtrW7WrW3Wry5ZFy2y340ga10gF1YvF45J3yxAr42\n\tqF4jkr18Ww13A37anT9S1TB71UUUUU7qnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2\n\t9KBjDU0xBIdaVrnRJUUUmS14x267AKxVWrJVCq3wAFc2x0x2IEx4CE42xK8VAvwI8IcIk0\n\trVWrJVCq3wAFIxvE14AKwVWUJVWUGwA2048vs2IY020E87I2jVAFwI0_JF0E3s1l82xGYI\n\tkIc2x26xkF7I0E14v26ryj6s0DM28lY4IEw2IIxxk0rwA2F7IY1VAKz4vEj48ve4kI8wA2\n\tz4x0Y4vE2Ix0cI8IcVAFwI0_tr0E3s1l84ACjcxK6xIIjxv20xvEc7CjxVAFwI0_Gr1j6F\n\t4UJwA2z4x0Y4vEx4A2jsIE14v26rxl6s0DM28EF7xvwVC2z280aVCY1x0267AKxVW0oVCq\n\t3wAS0I0E0xvYzxvE52x082IY62kv0487Mc02F40EFcxC0VAKzVAqx4xG6I80ewAv7VC0I7\n\tIYx2IY67AKxVWUGVWUXwAv7VC2z280aVAFwI0_Jr0_Gr1lOx8S6xCaFVCjc4AY6r1j6r4U\n\tM4x0Y48IcxkI7VAKI48JM4x0x7Aq67IIx4CEVc8vx2IErcIFxwACI402YVCY1x02628vn2\n\tkIc2xKxwCY1x0262kKe7AKxVWUtVW8ZwCF04k20xvY0x0EwIxGrwCFx2IqxVCFs4IE7xkE\n\tbVWUJVW8JwC20s026c02F40E14v26r1j6r18MI8I3I0E7480Y4vE14v26r106r1rMI8E67\n\tAF67kF1VAFwI0_GFv_WrylIxkGc2Ij64vIr41lIxAIcVC0I7IYx2IY67AKxVW8JVW5JwCI\n\t42IY6xIIjxv20xvEc7CjxVAFwI0_Gr1j6F4UJwCI42IY6xAIw20EY4v20xvaj40_Jr0_JF\n\t4lIxAIcVC2z280aVAFwI0_Gr0_Cr1lIxAIcVC2z280aVCY1x0267AKxVW8Jr0_Cr1UYxBI\n\tdaVFxhVjvjDU0xZFpf9x0JUWMKtUUUUU=",
        "X-CM-SenderInfo": "d1lo6xhdqjqx5xdzvxpfor3voofrz/",
        "X-Spam-Status": "No, score=-1.1 required=5.0 tests=ARC_SIGNED,ARC_VALID,\n\tDMARC_MISSING,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,\n\tSPF_HELO_NONE,SPF_PASS autolearn=disabled version=4.0.1",
        "X-Spam-Checker-Version": "SpamAssassin 4.0.1 (2024-03-25) on gandalf.ozlabs.org"
    },
    "content": "From: Zhang Yi <yi.zhang@huawei.com>\n\nIntroduce ext4_iomap_page_mkwrite() to implement the mmap iomap path for\next4. Most of this work is delegated to iomap_page_mkwrite(), which only\nneeds to be called with ext4_iomap_buffer_write_ops and\next4_iomap_buffer_da_write_ops as arguments to allocate and map the\nblocks. However, the lock ordering of the folio lock and transaction\nstart is the opposite of that in the buffer_head buffered write path.\nThe locking documentation in super.c has been updated accordingly.\n\nSigned-off-by: Zhang Yi <yi.zhang@huawei.com>\n---\n fs/ext4/inode.c | 32 +++++++++++++++++++++++++++++++-\n fs/ext4/super.c |  8 ++++++--\n 2 files changed, 37 insertions(+), 3 deletions(-)",
    "diff": "diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c\nindex 76ce43c64c30..26e1366b85fd 100644\n--- a/fs/ext4/inode.c\n+++ b/fs/ext4/inode.c\n@@ -4022,7 +4022,7 @@ static int ext4_iomap_buffered_do_write_begin(struct inode *inode,\n \t/* Inline data support is not yet available. */\n \tif (WARN_ON_ONCE(ext4_has_inline_data(inode)))\n \t\treturn -ERANGE;\n-\tif (WARN_ON_ONCE(!(flags & IOMAP_WRITE)))\n+\tif (WARN_ON_ONCE(!(flags & (IOMAP_WRITE | IOMAP_FAULT))))\n \t\treturn -EINVAL;\n \n \tif (delalloc)\n@@ -4082,6 +4082,14 @@ static int ext4_iomap_buffered_da_write_end(struct inode *inode, loff_t offset,\n \tif (iomap->type != IOMAP_DELALLOC || !(iomap->flags & IOMAP_F_NEW))\n \t\treturn 0;\n \n+\t/*\n+\t * iomap_page_mkwrite() will never fail in a way that requires delalloc\n+\t * extents that it allocated to be revoked.  Hence never try to release\n+\t * them here.\n+\t */\n+\tif (flags & IOMAP_FAULT)\n+\t\treturn 0;\n+\n \t/* Nothing to do if we've written the entire delalloc extent */\n \tstart_byte = iomap_last_written_block(inode, offset, written);\n \tend_byte = round_up(offset + length, i_blocksize(inode));\n@@ -7167,6 +7175,23 @@ static int ext4_block_page_mkwrite(struct inode *inode, struct folio *folio,\n \treturn ret;\n }\n \n+static vm_fault_t ext4_iomap_page_mkwrite(struct vm_fault *vmf)\n+{\n+\tstruct inode *inode = file_inode(vmf->vma->vm_file);\n+\tconst struct iomap_ops *iomap_ops;\n+\n+\t/*\n+\t * ext4_nonda_switch() could writeback this folio, so have to\n+\t * call it before lock folio.\n+\t */\n+\tif (test_opt(inode->i_sb, DELALLOC) && !ext4_nonda_switch(inode->i_sb))\n+\t\tiomap_ops = &ext4_iomap_buffered_da_write_ops;\n+\telse\n+\t\tiomap_ops = &ext4_iomap_buffered_write_ops;\n+\n+\treturn iomap_page_mkwrite(vmf, iomap_ops, NULL);\n+}\n+\n vm_fault_t ext4_page_mkwrite(struct vm_fault *vmf)\n {\n \tstruct vm_area_struct *vma = vmf->vma;\n@@ -7189,6 +7214,11 @@ vm_fault_t ext4_page_mkwrite(struct vm_fault *vmf)\n \n \tfilemap_invalidate_lock_shared(mapping);\n \n+\tif (ext4_inode_buffered_iomap(inode)) {\n+\t\tret = ext4_iomap_page_mkwrite(vmf);\n+\t\tgoto out;\n+\t}\n+\n \terr = ext4_convert_inline_data(inode);\n \tif (err)\n \t\tgoto out_ret;\ndiff --git a/fs/ext4/super.c b/fs/ext4/super.c\nindex 51d87db53543..62bfe05a64bc 100644\n--- a/fs/ext4/super.c\n+++ b/fs/ext4/super.c\n@@ -100,8 +100,12 @@ static const struct fs_parameter_spec ext4_param_specs[];\n  * Lock ordering\n  *\n  * page fault path:\n- * mmap_lock -> sb_start_pagefault -> invalidate_lock (r) -> transaction start\n- *   -> page lock -> i_data_sem (rw)\n+ * - buffer_head path:\n+ *   mmap_lock -> sb_start_pagefault -> invalidate_lock (r) ->\n+ *     transaction start -> folio lock -> i_data_sem (rw)\n+ * - iomap path:\n+ *   mmap_lock -> sb_start_pagefault -> invalidate_lock (r) ->\n+ *     folio lock -> transaction start -> i_data_sem (rw)\n  *\n  * buffered write path:\n  * sb_start_write -> i_rwsem (w) -> mmap_lock\n",
    "prefixes": [
        "v3",
        "10/22"
    ]
}