From patchwork Fri Oct 6 19:53:16 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Matthew Wilcox X-Patchwork-Id: 13411939 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 119BFE94107 for ; Fri, 6 Oct 2023 19:53:35 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 5D15680012; Fri, 6 Oct 2023 15:53:34 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 5849580008; Fri, 6 Oct 2023 15:53:34 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 3FB6A80012; Fri, 6 Oct 2023 15:53:34 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id 326B680008 for ; Fri, 6 Oct 2023 15:53:34 -0400 (EDT) Received: from smtpin06.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 03C51120453 for ; Fri, 6 Oct 2023 19:53:33 +0000 (UTC) X-FDA: 81316086348.06.628EB4F Received: from casper.infradead.org (casper.infradead.org [90.155.50.34]) by imf28.hostedemail.com (Postfix) with ESMTP id 5C610C0008 for ; Fri, 6 Oct 2023 19:53:32 +0000 (UTC) Authentication-Results: imf28.hostedemail.com; dkim=pass header.d=infradead.org header.s=casper.20170209 header.b=JQS2xDtf; dmarc=none; spf=none (imf28.hostedemail.com: domain of willy@infradead.org has no SPF policy when checking 90.155.50.34) smtp.mailfrom=willy@infradead.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1696622012; a=rsa-sha256; cv=none; b=u1n2pcGvJTILbURKZ3Q5SDGoUeMZ6Wuf+YKJgo/dpjAJMgH22S4zkMtcGRMi8sY0Phu4NU rBXphRcRbhrzIC0pMmhsIbZ1v3lJBn8LavWdyxQ+sp2WNKYLzAtdLL7WQZoh4ak2tL0oTl ZSXPnf6u1JcD0ur+WnYw4ALxNLE31OU= ARC-Authentication-Results: i=1; imf28.hostedemail.com; dkim=pass header.d=infradead.org header.s=casper.20170209 header.b=JQS2xDtf; dmarc=none; spf=none (imf28.hostedemail.com: domain of willy@infradead.org has no SPF policy when checking 90.155.50.34) smtp.mailfrom=willy@infradead.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1696622012; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=pCVcNzH6myRez0yNN5euVSe8WBMi6PtlgZsJ2oeW4+8=; b=t4GkfAHvd6+wAAan7l9XwKS1h3Y5rZEhiWhYmk8M3VOzCbu7040tPYWr5simNIrwKDL1w4 jBJ7p0w70OzajZz9zaCycpKDOL7OujCtJ2xWSrwFpkcC+Bld/L3/+3dumOy3xDUO5w0JSP F8NabMGbgc4xhYHjR6+RBHpWNwb5EK8= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Sender:Reply-To: Content-Type:Content-ID:Content-Description; bh=pCVcNzH6myRez0yNN5euVSe8WBMi6PtlgZsJ2oeW4+8=; b=JQS2xDtfi0C/mqngYZah8k/Ev6 GoyRy9VcRubAdE7iggIgTkOrt0SUy4GRGLOq8+ut+y47vyTh8iT+tDhI8T+8ZifCEMjPr1SI8tWSm K2lFSs+EfSz0huOMW1SSO65kAnT9LqQ3X1l9RGtno54d9pPt7n2zxTCuUblUPUwCf2tdxbJzvazwp ffWpbWkCiUrCXoEBjR9nC4ZM/RUpU9TNcJo9QXtMQgZjUu1FCx7G0R5ejO3vL0yS3JYpsknxFV8tu Zz4NFPfmd4UpT574IirCHIfZQXeE1vq9m2m8f619w30oMHtvl3R5OaR7U5lrT6nbzBqLYenit0tCv c8Uw+DAg==; Received: from willy by casper.infradead.org with local (Exim 4.94.2 #2 (Red Hat Linux)) id 1qoqsy-00H9Gf-Ph; Fri, 06 Oct 2023 19:53:20 +0000 From: "Matthew Wilcox (Oracle)" To: Andrew Morton Cc: "Matthew Wilcox (Oracle)" , linux-mm@kvack.org, Suren Baghdasaryan Subject: [PATCH v2 4/6] mm: Handle COW faults under the VMA lock Date: Fri, 6 Oct 2023 20:53:16 +0100 Message-Id: <20231006195318.4087158-5-willy@infradead.org> X-Mailer: git-send-email 2.37.1 In-Reply-To: <20231006195318.4087158-1-willy@infradead.org> References: <20231006195318.4087158-1-willy@infradead.org> MIME-Version: 1.0 X-Rspam-User: X-Rspamd-Server: rspam06 X-Rspamd-Queue-Id: 5C610C0008 X-Stat-Signature: m4qhj654kdb5x5oagtcme1n86dan4ma3 X-HE-Tag: 1696622012-240891 X-HE-Meta: U2FsdGVkX19HdRtElymOTLqUwoYyPSp/CrE73jbUPnglwmXptjgKhxuNg8+GCVPneJjW4iaH/1cqqnGHE1ligeiGXTmcwLcwI0Mk7MsPd+cjY+9XmVvjR48wQV+Mz5o/v+29cnGorwIDi4i1lmt2DSvRJu8RJpp16v+AJVEoIuV+ID+/cqitzfwek6F5sIeO+5AvfE8UsdFVkChR+nPfQUMlmItoFfS7YhgObbtTtNCFHHHYcxIs9Ar6TavTUFuXblNtygCFFG45KfyTBWV2esc87/dmUT/5COYf79JTwjc6iBC/ZG6Y4T7ETRLrEpnvbLqJdhL2eDpSckXJgTCaa3JYEU9yay4bSxzWbwX+Y9s6PJSdyYuX9n6Hk7Qx7obQHt/+awXEBA0NOcDkPwIyOBpnR+MS/MOaSD3FMVd3g+q3UpfqcXY3wqWg+vX597VXdlIkx+92tPCO7r5iO1zRtlOd5uhFZ9Hh8sWvikIiOvbcLplcZMiRqIeuyxhwshIFEZvcyUPSfMKpcmLtrAcVM0+kLVRfWBvZPhN1i92x2lAEeihS57xO8BaDDgZYMkh5pIH6svIGDlwVM+rJ3gUn7lMEmv7/kiYoaqrX4e0UOwm6wq0/m5pWnP6OpQfpHRU05vSptaL86gUHvYdjbaLJ6zjbC9Bc7/+fuIGNhlfMXyK09vacRLOVMnSCoM6UJI5RsxJVMIdWTvokboAnR7vjsQLz7Jfu7EYmNmmsiisACoyprgDua1593o1EHKMcWLGO1RGtJyaZoX+zgBaajHRlIYYqOqFSxc2yN33wqMu4gvVuETiTNY5ebO2XtibUSFTujHB1fBKIaiqvFs30Ax0SNO9nS2R0CGWD9XbC5Cp9K/ulTTrKY0eB8sM2f75G5/5SV69BLtOHgJZSf8uTUw/3M9doVth5pH/XFof72zdZ420ZU9XcZAah0keSuKiUiR3VlKFq7h7xzxwrLwRmW60 yYrQUQsz 1f1hGvcxIe5Su0ykSMsUiN4KlG5XbYIAFl3SIdpGh5Ccu1ry74JgPqIaP50apd2pNJ5axTkwiVvB3F+CH8gGsRcXxlrbihth3vEJtfGvAtBAQEc8V7zLRW8NcUGR7WZLrxSi+uUrql9G7h0oyKkhyXJJNRK9jDy62zNwn4cBfdmZzFZL2MgL0PaVUWA== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: If the page is not currently present in the page tables, we need to call the page fault handler to find out which page we're supposed to COW, so we need to both check that there is already an anon_vma and that the fault handler doesn't need the mmap_lock. Signed-off-by: Matthew Wilcox (Oracle) Reviewed-by: Suren Baghdasaryan --- mm/memory.c | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/mm/memory.c b/mm/memory.c index a9b0c135209a..938f481df0ab 100644 --- a/mm/memory.c +++ b/mm/memory.c @@ -4639,13 +4639,11 @@ static vm_fault_t do_cow_fault(struct vm_fault *vmf) struct vm_area_struct *vma = vmf->vma; vm_fault_t ret; - if (vmf->flags & FAULT_FLAG_VMA_LOCK) { - vma_end_read(vma); - return VM_FAULT_RETRY; - } - - if (unlikely(anon_vma_prepare(vma))) - return VM_FAULT_OOM; + ret = vmf_can_call_fault(vmf); + if (!ret) + ret = vmf_anon_prepare(vmf); + if (ret) + return ret; vmf->cow_page = alloc_page_vma(GFP_HIGHUSER_MOVABLE, vma, vmf->address); if (!vmf->cow_page)