get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 2216240,
    "url": "http://patchwork.ozlabs.org/api/patches/2216240/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/linuxppc-dev/patch/20260326080836.695207-5-surenb@google.com/",
    "project": {
        "id": 2,
        "url": "http://patchwork.ozlabs.org/api/projects/2/?format=api",
        "name": "Linux PPC development",
        "link_name": "linuxppc-dev",
        "list_id": "linuxppc-dev.lists.ozlabs.org",
        "list_email": "linuxppc-dev@lists.ozlabs.org",
        "web_url": "https://github.com/linuxppc/wiki/wiki",
        "scm_url": "https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git",
        "webscm_url": "https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git/",
        "list_archive_url": "https://lore.kernel.org/linuxppc-dev/",
        "list_archive_url_format": "https://lore.kernel.org/linuxppc-dev/{}/",
        "commit_url_format": "https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git/commit/?id={}"
    },
    "msgid": "<20260326080836.695207-5-surenb@google.com>",
    "list_archive_url": "https://lore.kernel.org/linuxppc-dev/20260326080836.695207-5-surenb@google.com/",
    "date": "2026-03-26T08:08:34",
    "name": "[v5,4/6] mm/vma: use vma_start_write_killable() in vma operations",
    "commit_ref": null,
    "pull_url": null,
    "state": "handled-elsewhere",
    "archived": false,
    "hash": "804a80f146408245adaa0b722baf6d52ad5fe987",
    "submitter": {
        "id": 74729,
        "url": "http://patchwork.ozlabs.org/api/people/74729/?format=api",
        "name": "Suren Baghdasaryan",
        "email": "surenb@google.com"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/linuxppc-dev/patch/20260326080836.695207-5-surenb@google.com/mbox/",
    "series": [
        {
            "id": 497545,
            "url": "http://patchwork.ozlabs.org/api/series/497545/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/linuxppc-dev/list/?series=497545",
            "date": "2026-03-26T08:08:30",
            "name": "[v5,1/6] mm/vma: cleanup error handling path in vma_expand()",
            "version": 5,
            "mbox": "http://patchwork.ozlabs.org/series/497545/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/2216240/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/2216240/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "\n <linuxppc-dev+bounces-18814-incoming=patchwork.ozlabs.org@lists.ozlabs.org>",
        "X-Original-To": [
            "incoming@patchwork.ozlabs.org",
            "linuxppc-dev@lists.ozlabs.org"
        ],
        "Delivered-To": "patchwork-incoming@legolas.ozlabs.org",
        "Authentication-Results": [
            "legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=google.com header.i=@google.com header.a=rsa-sha256\n header.s=20251104 header.b=moZYd8ht;\n\tdkim-atps=neutral",
            "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=lists.ozlabs.org\n (client-ip=2404:9400:21b9:f100::1; helo=lists.ozlabs.org;\n envelope-from=linuxppc-dev+bounces-18814-incoming=patchwork.ozlabs.org@lists.ozlabs.org;\n receiver=patchwork.ozlabs.org)",
            "lists.ozlabs.org;\n arc=none smtp.remote-ip=\"2607:f8b0:4864:20::1249\"",
            "lists.ozlabs.org;\n dmarc=pass (p=reject dis=none) header.from=google.com",
            "lists.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=google.com header.i=@google.com header.a=rsa-sha256\n header.s=20251104 header.b=moZYd8ht;\n\tdkim-atps=neutral",
            "lists.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=flex--surenb.bounces.google.com\n (client-ip=2607:f8b0:4864:20::1249; helo=mail-dl1-x1249.google.com;\n envelope-from=3keneaqykdmwac9w5ty66y3w.u64305cf77u-vwd30aba.6h3sta.69y@flex--surenb.bounces.google.com;\n receiver=lists.ozlabs.org)"
        ],
        "Received": [
            "from lists.ozlabs.org (lists.ozlabs.org\n [IPv6:2404:9400:21b9:f100::1])\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 4fhGdX0jbcz1y1x\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 26 Mar 2026 19:09:20 +1100 (AEDT)",
            "from boromir.ozlabs.org (localhost [127.0.0.1])\n\tby lists.ozlabs.org (Postfix) with ESMTP id 4fhGd06vmpz2yrg;\n\tThu, 26 Mar 2026 19:08:52 +1100 (AEDT)",
            "from mail-dl1-x1249.google.com (mail-dl1-x1249.google.com\n [IPv6:2607:f8b0:4864:20::1249])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature RSA-PSS (2048 bits) server-digest\n SHA256)\n\t(No client certificate requested)\n\tby lists.ozlabs.org (Postfix) with ESMTPS id 4fhGcz6qgkz2yrb\n\tfor <linuxppc-dev@lists.ozlabs.org>; Thu, 26 Mar 2026 19:08:51 +1100 (AEDT)",
            "by mail-dl1-x1249.google.com with SMTP id\n a92af1059eb24-12711ec96fbso3104815c88.0\n        for <linuxppc-dev@lists.ozlabs.org>;\n Thu, 26 Mar 2026 01:08:51 -0700 (PDT)"
        ],
        "ARC-Seal": "i=1; a=rsa-sha256; d=lists.ozlabs.org; s=201707; t=1774512532;\n\tcv=none;\n b=hsC9DI9FDNT1TJrOFyna0ANlrRsVUCR7t8I4e05uXeeui9PSbI/ZoEhcjT8FBmHSl94wPHI0qXg6NxZ0SiiTjCB6fUM00R/pY6pjowTbscRt+iqs+zCtMYLbYl2Thr1feFYfNDqOcnBQEwsqw3DnB4dvqalvBKrKApEcpfMhZuWxdOhvRK6LGdd2wSBTSCN8p71nMREnMCw5kKxdYvu3S7MFkQWtnrXPRW2kr8n9eDCJQATaIFj/IiC1vlL7YkV3+X06mTcyxuYO9ap5+t8v48VRv3rHQbt33RgDQcpC7hOclr1PGhD9odkBp5BEVCyPVgOpMd64vwiMnqXYY9kavA==",
        "ARC-Message-Signature": "i=1; a=rsa-sha256; d=lists.ozlabs.org; s=201707;\n\tt=1774512532; c=relaxed/relaxed;\n\tbh=PUqdYCoBg/kEy42eZkJV8irdcP7MA2fDPdgYAg1G1X4=;\n\th=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From:\n\t To:Cc:Content-Type;\n b=hbf0TYI8uZmd3q9PJXXCMds1CiYZSalj4KOBzE6WVqZh2Mrwn4J/l3VwdZwXM2Fb5LxgjYplH8LrjnhnTQRG7e1hZSHrC8M7UNbh93A44TSSIfkh5T9KF7YCuC6AXJm6aID9MpQxbLFr4LtyWkhhZtfBbjr8ZwABgRCWez1Exm8j1q/7pMg7Kni6+S39Dd3PBcerZAR1sSj/BmS6EN1iYwv/Sij83wTD57XuUVtOu6C7q3MB9NeGxyqphZeHyHai4lTiD8Ej3FdtmRO4hgogNJHdTtKdR9/8g4mHg5lBb2a/qr4ul/vrQGHnlVmyEY7zq/ZvLbBZmeT08cgmPb+n4w==",
        "ARC-Authentication-Results": "i=1; lists.ozlabs.org;\n dmarc=pass (p=reject dis=none) header.from=google.com;\n dkim=pass (2048-bit key;\n unprotected) header.d=google.com header.i=@google.com header.a=rsa-sha256\n header.s=20251104 header.b=moZYd8ht; dkim-atps=neutral;\n spf=pass (client-ip=2607:f8b0:4864:20::1249; helo=mail-dl1-x1249.google.com;\n envelope-from=3keneaqykdmwac9w5ty66y3w.u64305cf77u-vwd30aba.6h3sta.69y@flex--surenb.bounces.google.com;\n receiver=lists.ozlabs.org) smtp.mailfrom=flex--surenb.bounces.google.com",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n        d=google.com; s=20251104; t=1774512530; x=1775117330;\n darn=lists.ozlabs.org;\n        h=cc:to:from:subject:message-id:references:mime-version:in-reply-to\n         :date:from:to:cc:subject:date:message-id:reply-to;\n        bh=PUqdYCoBg/kEy42eZkJV8irdcP7MA2fDPdgYAg1G1X4=;\n        b=moZYd8htLOO/joSVOALyRc5dc6DR/qluuHcYZzDGkbq5qndrHxCr7fBEqYDnmHQJYu\n         UZ7J3GKz+3XO26HafwqGsVDEgyinKdvXRfu4pYDkLce3ra7QPTd5vVexmI+BbZAtzG3m\n         g+WtP8b8oFOVhdFL3aMgUeGgGf2RTwaFvNtU2EnwH1ikmzdV3VzvMAEve7L6kx2diRPZ\n         IswJ506A2av7h8jjoFYMq7t01S7vUfYqYEplwoE0rwB1wvF5ayS9Wrh92ogZ5GK/TlCa\n         yI+o5vSqhI+9bYPMZ+2QkmR7G+AB7Xf7ClNVHsaEVM0zSSHMGCpSeg50gKf3ThXE1cFG\n         2AxQ==",
        "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n        d=1e100.net; s=20251104; t=1774512530; x=1775117330;\n        h=cc:to:from:subject:message-id:references:mime-version:in-reply-to\n         :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to;\n        bh=PUqdYCoBg/kEy42eZkJV8irdcP7MA2fDPdgYAg1G1X4=;\n        b=YUAUJzKAvhcJRnYLz6ovHZkYXerebMoAlOthJMBW31VaPUbQdYIINySaZpI1fnWN9u\n         Tq81h7H29/UJ8HWqFI/Q8482aR8xRCXobSAXAL6oH+DYDNyB5LtzCZ6SiQ7c1ySf36Rn\n         +dWoZRGwXVyilxY/tuIIGXPmDXe+nK8ggiet5r1FIxRMRxpoTYh016j4P6Wq4mi4OEi6\n         o8M+WO8OnmVWanzirgtTJS7rbpQfW8iO71erneOn2+KTXCYPdDVr1ckiTk6i1WyOwlqj\n         m3WYW1VO4TZKd2RpMqSBgv2FCfRboFyW2G/Vy33P3fF3+kBhcpp+5ztsk7M74sO9m/YW\n         VIZw==",
        "X-Forwarded-Encrypted": "i=1;\n AJvYcCWEeRNfaSuDoURRW0p6w1YIhUxec7TSq0Pt0ztdZJC2iIf5bJ142ggzwmT0//z6VfwIVJzMGa8hpcrpKto=@lists.ozlabs.org",
        "X-Gm-Message-State": "AOJu0YxEkgHvInQ9nJLtsGilAr1etDdnAbD5YZgOa6Xi7g9ZHuWZlM0X\n\trIRU0ZJtp8PjZqdt1773QPQTb8AS1TqaZi+WmbnuBgBiVt9GxQaEmwdi0bxtVzVSUhP7tEnVnE6\n\tS1rpPSQ==",
        "X-Received": "from dlx24.prod.google.com ([2002:a05:7022:98:b0:12a:6ccc:6d06])\n (user=surenb job=prod-delivery.src-stubby-dispatcher) by\n 2002:a05:7022:4387:b0:128:d107:da0f\n with SMTP id a92af1059eb24-12a96e5405cmr4138769c88.10.1774512529879; Thu, 26\n Mar 2026 01:08:49 -0700 (PDT)",
        "Date": "Thu, 26 Mar 2026 01:08:34 -0700",
        "In-Reply-To": "<20260326080836.695207-1-surenb@google.com>",
        "X-Mailing-List": "linuxppc-dev@lists.ozlabs.org",
        "List-Id": "<linuxppc-dev.lists.ozlabs.org>",
        "List-Help": "<mailto:linuxppc-dev+help@lists.ozlabs.org>",
        "List-Owner": "<mailto:linuxppc-dev+owner@lists.ozlabs.org>",
        "List-Post": "<mailto:linuxppc-dev@lists.ozlabs.org>",
        "List-Archive": "<https://lore.kernel.org/linuxppc-dev/>,\n  <https://lists.ozlabs.org/pipermail/linuxppc-dev/>",
        "List-Subscribe": "<mailto:linuxppc-dev+subscribe@lists.ozlabs.org>,\n  <mailto:linuxppc-dev+subscribe-digest@lists.ozlabs.org>,\n  <mailto:linuxppc-dev+subscribe-nomail@lists.ozlabs.org>",
        "List-Unsubscribe": "<mailto:linuxppc-dev+unsubscribe@lists.ozlabs.org>",
        "Precedence": "list",
        "Mime-Version": "1.0",
        "References": "<20260326080836.695207-1-surenb@google.com>",
        "X-Mailer": "git-send-email 2.53.0.1018.g2bb0e51243-goog",
        "Message-ID": "<20260326080836.695207-5-surenb@google.com>",
        "Subject": "[PATCH v5 4/6] mm/vma: use vma_start_write_killable() in vma\n operations",
        "From": "Suren Baghdasaryan <surenb@google.com>",
        "To": "akpm@linux-foundation.org",
        "Cc": "willy@infradead.org, david@kernel.org, ziy@nvidia.com,\n\tmatthew.brost@intel.com, joshua.hahnjy@gmail.com, rakie.kim@sk.com,\n\tbyungchul@sk.com, gourry@gourry.net, ying.huang@linux.alibaba.com,\n\tapopple@nvidia.com, lorenzo.stoakes@oracle.com,\n baolin.wang@linux.alibaba.com,\n\tLiam.Howlett@oracle.com, npache@redhat.com, ryan.roberts@arm.com,\n\tdev.jain@arm.com, baohua@kernel.org, lance.yang@linux.dev, vbabka@suse.cz,\n\tjannh@google.com, rppt@kernel.org, mhocko@suse.com, pfalcato@suse.de,\n\tkees@kernel.org, maddy@linux.ibm.com, npiggin@gmail.com, mpe@ellerman.id.au,\n\tchleroy@kernel.org, borntraeger@linux.ibm.com, frankja@linux.ibm.com,\n\timbrenda@linux.ibm.com, hca@linux.ibm.com, gor@linux.ibm.com,\n\tagordeev@linux.ibm.com, svens@linux.ibm.com, gerald.schaefer@linux.ibm.com,\n\tlinux-mm@kvack.org, linuxppc-dev@lists.ozlabs.org, kvm@vger.kernel.org,\n\tlinux-kernel@vger.kernel.org, linux-s390@vger.kernel.org, surenb@google.com",
        "Content-Type": "text/plain; charset=\"UTF-8\"",
        "X-Spam-Status": "No, score=-7.6 required=3.0 tests=DKIMWL_WL_MED,DKIM_SIGNED,\n\tDKIM_VALID,DKIM_VALID_AU,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,\n\tUSER_IN_DEF_DKIM_WL autolearn=disabled version=4.0.1 OzLabs 8",
        "X-Spam-Checker-Version": "SpamAssassin 4.0.1 (2024-03-25) on lists.ozlabs.org"
    },
    "content": "Replace vma_start_write() with vma_start_write_killable(), improving\nreaction time to the kill signal.\nReplace vma_start_write() calls when we operate on VMAs.\n\nIn a number of places we now lock VMA earlier than before to avoid\ndoing work and undoing it later if a fatal signal is pending. This\nis safe because the moves are happening within sections where we\nalready hold the mmap_write_lock, so the moves do not change the\nlocking order relative to other kernel locks.\n\nSuggested-by: Matthew Wilcox <willy@infradead.org>\nSigned-off-by: Suren Baghdasaryan <surenb@google.com>\n---\n mm/vma.c      | 130 +++++++++++++++++++++++++++++++++++++-------------\n mm/vma_exec.c |   6 ++-\n 2 files changed, 101 insertions(+), 35 deletions(-)",
    "diff": "diff --git a/mm/vma.c b/mm/vma.c\nindex ba78ab1f397a..7ee68fbfea03 100644\n--- a/mm/vma.c\n+++ b/mm/vma.c\n@@ -524,6 +524,17 @@ __split_vma(struct vma_iterator *vmi, struct vm_area_struct *vma,\n \t\tnew->vm_pgoff += ((addr - vma->vm_start) >> PAGE_SHIFT);\n \t}\n \n+\t/*\n+\t * Lock VMAs before cloning to avoid extra work if fatal signal\n+\t * is pending.\n+\t */\n+\terr = vma_start_write_killable(vma);\n+\tif (err)\n+\t\tgoto out_free_vma;\n+\terr = vma_start_write_killable(new);\n+\tif (err)\n+\t\tgoto out_free_vma;\n+\n \terr = -ENOMEM;\n \tvma_iter_config(vmi, new->vm_start, new->vm_end);\n \tif (vma_iter_prealloc(vmi, new))\n@@ -543,9 +554,6 @@ __split_vma(struct vma_iterator *vmi, struct vm_area_struct *vma,\n \tif (new->vm_ops && new->vm_ops->open)\n \t\tnew->vm_ops->open(new);\n \n-\tvma_start_write(vma);\n-\tvma_start_write(new);\n-\n \tinit_vma_prep(&vp, vma);\n \tvp.insert = new;\n \tvma_prepare(&vp);\n@@ -900,12 +908,22 @@ static __must_check struct vm_area_struct *vma_merge_existing_range(\n \t}\n \n \t/* No matter what happens, we will be adjusting middle. */\n-\tvma_start_write(middle);\n+\terr = vma_start_write_killable(middle);\n+\tif (err) {\n+\t\t/* Ensure error propagates. */\n+\t\tvmg->give_up_on_oom = false;\n+\t\tgoto abort;\n+\t}\n \n \tif (merge_right) {\n \t\tvma_flags_t next_sticky;\n \n-\t\tvma_start_write(next);\n+\t\terr = vma_start_write_killable(next);\n+\t\tif (err) {\n+\t\t\t/* Ensure error propagates. */\n+\t\t\tvmg->give_up_on_oom = false;\n+\t\t\tgoto abort;\n+\t\t}\n \t\tvmg->target = next;\n \t\tnext_sticky = vma_flags_and_mask(&next->flags, VMA_STICKY_FLAGS);\n \t\tvma_flags_set_mask(&sticky_flags, next_sticky);\n@@ -914,7 +932,12 @@ static __must_check struct vm_area_struct *vma_merge_existing_range(\n \tif (merge_left) {\n \t\tvma_flags_t prev_sticky;\n \n-\t\tvma_start_write(prev);\n+\t\terr = vma_start_write_killable(prev);\n+\t\tif (err) {\n+\t\t\t/* Ensure error propagates. */\n+\t\t\tvmg->give_up_on_oom = false;\n+\t\t\tgoto abort;\n+\t\t}\n \t\tvmg->target = prev;\n \n \t\tprev_sticky = vma_flags_and_mask(&prev->flags, VMA_STICKY_FLAGS);\n@@ -1170,10 +1193,12 @@ int vma_expand(struct vma_merge_struct *vmg)\n \tvma_flags_t sticky_flags =\n \t\tvma_flags_and_mask(&vmg->vma_flags, VMA_STICKY_FLAGS);\n \tvma_flags_t target_sticky;\n-\tint err = 0;\n+\tint err;\n \n \tmmap_assert_write_locked(vmg->mm);\n-\tvma_start_write(target);\n+\terr = vma_start_write_killable(target);\n+\tif (err)\n+\t\treturn err;\n \n \ttarget_sticky = vma_flags_and_mask(&target->flags, VMA_STICKY_FLAGS);\n \n@@ -1201,6 +1226,13 @@ int vma_expand(struct vma_merge_struct *vmg)\n \t * we don't need to account for vmg->give_up_on_mm here.\n \t */\n \tif (remove_next) {\n+\t\t/*\n+\t\t * Lock the VMA early to avoid extra work if fatal signal\n+\t\t * is pending.\n+\t\t */\n+\t\terr = vma_start_write_killable(next);\n+\t\tif (err)\n+\t\t\treturn err;\n \t\terr = dup_anon_vma(target, next, &anon_dup);\n \t\tif (err)\n \t\t\treturn err;\n@@ -1214,7 +1246,6 @@ int vma_expand(struct vma_merge_struct *vmg)\n \tif (remove_next) {\n \t\tvma_flags_t next_sticky;\n \n-\t\tvma_start_write(next);\n \t\tvmg->__remove_next = true;\n \n \t\tnext_sticky = vma_flags_and_mask(&next->flags, VMA_STICKY_FLAGS);\n@@ -1252,9 +1283,14 @@ int vma_shrink(struct vma_iterator *vmi, struct vm_area_struct *vma,\n \t       unsigned long start, unsigned long end, pgoff_t pgoff)\n {\n \tstruct vma_prepare vp;\n+\tint err;\n \n \tWARN_ON((vma->vm_start != start) && (vma->vm_end != end));\n \n+\terr = vma_start_write_killable(vma);\n+\tif (err)\n+\t\treturn err;\n+\n \tif (vma->vm_start < start)\n \t\tvma_iter_config(vmi, vma->vm_start, start);\n \telse\n@@ -1263,8 +1299,6 @@ int vma_shrink(struct vma_iterator *vmi, struct vm_area_struct *vma,\n \tif (vma_iter_prealloc(vmi, NULL))\n \t\treturn -ENOMEM;\n \n-\tvma_start_write(vma);\n-\n \tinit_vma_prep(&vp, vma);\n \tvma_prepare(&vp);\n \tvma_adjust_trans_huge(vma, start, end, NULL);\n@@ -1453,7 +1487,9 @@ static int vms_gather_munmap_vmas(struct vma_munmap_struct *vms,\n \t\t\tif (error)\n \t\t\t\tgoto end_split_failed;\n \t\t}\n-\t\tvma_start_write(next);\n+\t\terror = vma_start_write_killable(next);\n+\t\tif (error)\n+\t\t\tgoto munmap_gather_failed;\n \t\tmas_set(mas_detach, vms->vma_count++);\n \t\terror = mas_store_gfp(mas_detach, next, GFP_KERNEL);\n \t\tif (error)\n@@ -1848,12 +1884,16 @@ static void vma_link_file(struct vm_area_struct *vma, bool hold_rmap_lock)\n static int vma_link(struct mm_struct *mm, struct vm_area_struct *vma)\n {\n \tVMA_ITERATOR(vmi, mm, 0);\n+\tint err;\n+\n+\terr = vma_start_write_killable(vma);\n+\tif (err)\n+\t\treturn err;\n \n \tvma_iter_config(&vmi, vma->vm_start, vma->vm_end);\n \tif (vma_iter_prealloc(&vmi, vma))\n \t\treturn -ENOMEM;\n \n-\tvma_start_write(vma);\n \tvma_iter_store_new(&vmi, vma);\n \tvma_link_file(vma, /* hold_rmap_lock= */false);\n \tmm->map_count++;\n@@ -2239,9 +2279,8 @@ int mm_take_all_locks(struct mm_struct *mm)\n \t * is reached.\n \t */\n \tfor_each_vma(vmi, vma) {\n-\t\tif (signal_pending(current))\n+\t\tif (signal_pending(current) || vma_start_write_killable(vma))\n \t\t\tgoto out_unlock;\n-\t\tvma_start_write(vma);\n \t}\n \n \tvma_iter_init(&vmi, mm, 0);\n@@ -2540,8 +2579,8 @@ static int __mmap_new_vma(struct mmap_state *map, struct vm_area_struct **vmap,\n \tstruct mmap_action *action)\n {\n \tstruct vma_iterator *vmi = map->vmi;\n-\tint error = 0;\n \tstruct vm_area_struct *vma;\n+\tint error;\n \n \t/*\n \t * Determine the object being mapped and call the appropriate\n@@ -2552,6 +2591,14 @@ static int __mmap_new_vma(struct mmap_state *map, struct vm_area_struct **vmap,\n \tif (!vma)\n \t\treturn -ENOMEM;\n \n+\t/*\n+\t * Lock the VMA early to avoid extra work if fatal signal\n+\t * is pending.\n+\t */\n+\terror = vma_start_write_killable(vma);\n+\tif (error)\n+\t\tgoto free_vma;\n+\n \tvma_iter_config(vmi, map->addr, map->end);\n \tvma_set_range(vma, map->addr, map->end, map->pgoff);\n \tvma->flags = map->vma_flags;\n@@ -2582,8 +2629,6 @@ static int __mmap_new_vma(struct mmap_state *map, struct vm_area_struct **vmap,\n \tWARN_ON_ONCE(!arch_validate_flags(map->vm_flags));\n #endif\n \n-\t/* Lock the VMA since it is modified after insertion into VMA tree */\n-\tvma_start_write(vma);\n \tvma_iter_store_new(vmi, vma);\n \tmap->mm->map_count++;\n \tvma_link_file(vma, action->hide_from_rmap_until_complete);\n@@ -2878,6 +2923,7 @@ int do_brk_flags(struct vma_iterator *vmi, struct vm_area_struct *vma,\n \t\t unsigned long addr, unsigned long len, vma_flags_t vma_flags)\n {\n \tstruct mm_struct *mm = current->mm;\n+\tint err;\n \n \t/*\n \t * Check against address space limits by the changed size\n@@ -2910,24 +2956,33 @@ int do_brk_flags(struct vma_iterator *vmi, struct vm_area_struct *vma,\n \n \t\tif (vma_merge_new_range(&vmg))\n \t\t\tgoto out;\n-\t\telse if (vmg_nomem(&vmg))\n+\t\tif (vmg_nomem(&vmg)) {\n+\t\t\terr = -ENOMEM;\n \t\t\tgoto unacct_fail;\n+\t\t}\n \t}\n \n \tif (vma)\n \t\tvma_iter_next_range(vmi);\n \t/* create a vma struct for an anonymous mapping */\n \tvma = vm_area_alloc(mm);\n-\tif (!vma)\n+\tif (!vma) {\n+\t\terr = -ENOMEM;\n \t\tgoto unacct_fail;\n+\t}\n \n \tvma_set_anonymous(vma);\n \tvma_set_range(vma, addr, addr + len, addr >> PAGE_SHIFT);\n \tvma->flags = vma_flags;\n \tvma->vm_page_prot = vm_get_page_prot(vma_flags_to_legacy(vma_flags));\n-\tvma_start_write(vma);\n-\tif (vma_iter_store_gfp(vmi, vma, GFP_KERNEL))\n+\tif (vma_start_write_killable(vma)) {\n+\t\terr = -EINTR;\n+\t\tgoto vma_lock_fail;\n+\t}\n+\tif (vma_iter_store_gfp(vmi, vma, GFP_KERNEL)) {\n+\t\terr = -ENOMEM;\n \t\tgoto mas_store_fail;\n+\t}\n \n \tmm->map_count++;\n \tvalidate_mm(mm);\n@@ -2942,10 +2997,11 @@ int do_brk_flags(struct vma_iterator *vmi, struct vm_area_struct *vma,\n \treturn 0;\n \n mas_store_fail:\n+vma_lock_fail:\n \tvm_area_free(vma);\n unacct_fail:\n \tvm_unacct_memory(len >> PAGE_SHIFT);\n-\treturn -ENOMEM;\n+\treturn err;\n }\n \n /**\n@@ -3112,8 +3168,8 @@ int expand_upwards(struct vm_area_struct *vma, unsigned long address)\n \tstruct mm_struct *mm = vma->vm_mm;\n \tstruct vm_area_struct *next;\n \tunsigned long gap_addr;\n-\tint error = 0;\n \tVMA_ITERATOR(vmi, mm, vma->vm_start);\n+\tint error;\n \n \tif (!vma_test(vma, VMA_GROWSUP_BIT))\n \t\treturn -EFAULT;\n@@ -3149,12 +3205,14 @@ int expand_upwards(struct vm_area_struct *vma, unsigned long address)\n \n \t/* We must make sure the anon_vma is allocated. */\n \tif (unlikely(anon_vma_prepare(vma))) {\n-\t\tvma_iter_free(&vmi);\n-\t\treturn -ENOMEM;\n+\t\terror = -ENOMEM;\n+\t\tgoto vma_prep_fail;\n \t}\n \n \t/* Lock the VMA before expanding to prevent concurrent page faults */\n-\tvma_start_write(vma);\n+\terror = vma_start_write_killable(vma);\n+\tif (error)\n+\t\tgoto vma_lock_fail;\n \t/* We update the anon VMA tree. */\n \tanon_vma_lock_write(vma->anon_vma);\n \n@@ -3183,8 +3241,10 @@ int expand_upwards(struct vm_area_struct *vma, unsigned long address)\n \t\t}\n \t}\n \tanon_vma_unlock_write(vma->anon_vma);\n-\tvma_iter_free(&vmi);\n \tvalidate_mm(mm);\n+vma_lock_fail:\n+vma_prep_fail:\n+\tvma_iter_free(&vmi);\n \treturn error;\n }\n #endif /* CONFIG_STACK_GROWSUP */\n@@ -3197,8 +3257,8 @@ int expand_downwards(struct vm_area_struct *vma, unsigned long address)\n {\n \tstruct mm_struct *mm = vma->vm_mm;\n \tstruct vm_area_struct *prev;\n-\tint error = 0;\n \tVMA_ITERATOR(vmi, mm, vma->vm_start);\n+\tint error;\n \n \tif (!vma_test(vma, VMA_GROWSDOWN_BIT))\n \t\treturn -EFAULT;\n@@ -3228,12 +3288,14 @@ int expand_downwards(struct vm_area_struct *vma, unsigned long address)\n \n \t/* We must make sure the anon_vma is allocated. */\n \tif (unlikely(anon_vma_prepare(vma))) {\n-\t\tvma_iter_free(&vmi);\n-\t\treturn -ENOMEM;\n+\t\terror = -ENOMEM;\n+\t\tgoto vma_prep_fail;\n \t}\n \n \t/* Lock the VMA before expanding to prevent concurrent page faults */\n-\tvma_start_write(vma);\n+\terror = vma_start_write_killable(vma);\n+\tif (error)\n+\t\tgoto vma_lock_fail;\n \t/* We update the anon VMA tree. */\n \tanon_vma_lock_write(vma->anon_vma);\n \n@@ -3263,8 +3325,10 @@ int expand_downwards(struct vm_area_struct *vma, unsigned long address)\n \t\t}\n \t}\n \tanon_vma_unlock_write(vma->anon_vma);\n-\tvma_iter_free(&vmi);\n \tvalidate_mm(mm);\n+vma_lock_fail:\n+vma_prep_fail:\n+\tvma_iter_free(&vmi);\n \treturn error;\n }\n \ndiff --git a/mm/vma_exec.c b/mm/vma_exec.c\nindex 5cee8b7efa0f..8ddcc791d828 100644\n--- a/mm/vma_exec.c\n+++ b/mm/vma_exec.c\n@@ -41,6 +41,7 @@ int relocate_vma_down(struct vm_area_struct *vma, unsigned long shift)\n \tstruct vm_area_struct *next;\n \tstruct mmu_gather tlb;\n \tPAGETABLE_MOVE(pmc, vma, vma, old_start, new_start, length);\n+\tint err;\n \n \tBUG_ON(new_start > new_end);\n \n@@ -56,8 +57,9 @@ int relocate_vma_down(struct vm_area_struct *vma, unsigned long shift)\n \t * cover the whole range: [new_start, old_end)\n \t */\n \tvmg.target = vma;\n-\tif (vma_expand(&vmg))\n-\t\treturn -ENOMEM;\n+\terr = vma_expand(&vmg);\n+\tif (err)\n+\t\treturn err;\n \n \t/*\n \t * move the page tables downwards, on failure we rely on\n",
    "prefixes": [
        "v5",
        "4/6"
    ]
}