From mboxrd@z Thu Jan 1 00:00:00 1970 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 3C7DFCD11DF for ; Thu, 28 Mar 2024 22:58:42 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 4881A6B0082; Thu, 28 Mar 2024 18:58:41 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 435BA6B0085; Thu, 28 Mar 2024 18:58:41 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 2D67E6B0087; Thu, 28 Mar 2024 18:58:41 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id 1242A6B0082 for ; Thu, 28 Mar 2024 18:58:41 -0400 (EDT) Received: from smtpin11.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 944D2121039 for ; Thu, 28 Mar 2024 22:58:40 +0000 (UTC) X-FDA: 81947964000.11.F5B82DC Received: from casper.infradead.org (casper.infradead.org [90.155.50.34]) by imf14.hostedemail.com (Postfix) with ESMTP id B2EF410000B for ; Thu, 28 Mar 2024 22:58:38 +0000 (UTC) Authentication-Results: imf14.hostedemail.com; dkim=pass header.d=infradead.org header.s=casper.20170209 header.b="Ns/P3EQT"; spf=none (imf14.hostedemail.com: domain of willy@infradead.org has no SPF policy when checking 90.155.50.34) smtp.mailfrom=willy@infradead.org; dmarc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1711666719; 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=ldZ17F3Adq/6bP/s+Hr86QyI0PsgoP/z7Yss7kselIU=; b=tG/6M0j6uYCAfM80RrgGKLiUcZhINufyCWgLCF5BOPEtc4ndfszWNYIW6Mv3h3aeI+jvHa UIrY1Fcx0N2NOdNiBryuJUfEEks/WBtwNnsRK+Iz8TWFPHcgQA4Q4xcz/wA21MwqhExQ7A DHtuNlsPo13L/1Db/KAmYxlAgv38/4Y= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1711666719; a=rsa-sha256; cv=none; b=5M7ARJlaMpxdM0i345GNZb/Lzq/P5BfgKrc3+E8j9gv8DaJpJ8J5GgA9B76Lr37si7isni 7d6z6mMcHES2ghOQI15Gu71PACMxTak1II1St7yGd3pTtWh3BhelqOF/6bP6Fqerfqth0G W/eATfnVV4Q9CGocw7N82I2V60x6Rzw= ARC-Authentication-Results: i=1; imf14.hostedemail.com; dkim=pass header.d=infradead.org header.s=casper.20170209 header.b="Ns/P3EQT"; spf=none (imf14.hostedemail.com: domain of willy@infradead.org has no SPF policy when checking 90.155.50.34) smtp.mailfrom=willy@infradead.org; dmarc=none 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=ldZ17F3Adq/6bP/s+Hr86QyI0PsgoP/z7Yss7kselIU=; b=Ns/P3EQT3Ej42nCXHhX+aXMKTV 3qFcIUpVmynFcPeFzMT+F1GvFwvrb3KnZ913+kLJ7B0xj3UX09PT6ZgG8w/8NSyLpg3T+jmK0P9lw BNAtNvCBkUBz5u1z6J45Qf0xrcuH6v/HwokiieRQdQduPAOwaVl+LmxwiTbP4sL/6aQgHlt9TlHWL y1nhuZ0083cO+0Nkn16H02IqIdzZDwtF2/gMyyVseUQr7lgZEqo3tmpAXctqcm9hu628qom7ne/AA HbFI/E1csvdj3vpe4WZWVeOPDYPHSxkZspuP31fKR/R3ybyn+ibLUIMYphDTp7bMDaN809pTNYwed Mg3kNqzA==; Received: from willy by casper.infradead.org with local (Exim 4.97.1 #2 (Red Hat Linux)) id 1rpyhd-00000007PFS-2vJY; Thu, 28 Mar 2024 22:58:33 +0000 From: "Matthew Wilcox (Oracle)" To: Andrew Morton Cc: "Matthew Wilcox (Oracle)" , linux-mm@kvack.org Subject: [PATCH 1/3] mm: Correct page_mapped_in_vma() for large folios Date: Thu, 28 Mar 2024 22:58:27 +0000 Message-ID: <20240328225831.1765286-2-willy@infradead.org> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240328225831.1765286-1-willy@infradead.org> References: <20240328225831.1765286-1-willy@infradead.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Rspamd-Queue-Id: B2EF410000B X-Rspam-User: X-Stat-Signature: gf79bnxx39kswok856q1cd6r9d97eag4 X-Rspamd-Server: rspam03 X-HE-Tag: 1711666718-967484 X-HE-Meta: U2FsdGVkX1+389kPqqiPrhQc3qFn7DLGeXW/pHD4GyNk9gdSsq7oYpM/h+o57WshrAqrRhIusaiWYQ4UUjtMNgQ2HHBdCGWBuLBVmW+9WgnD2f1Bp5s05UioHIAyeEBQvSjEEo4tAExH/aedrPtW3DnyppQ3R7kCmDpTTtIvkaSjzSukkOQkXTtpO7OFhES80oyJ6sGTI2fOT5j5sDxIM06kVLbQAB36AjJ/CZbMz51bAu9tOSkRThzyZ8vd1N05AvwnLoSrU6gZ6eu7bOEJ9gcRGD4wzzAHbuQSkwQI99uySJ+gmeCl8ZV42SH9ZMAv7mtWZPFGu2iNnCUIJXymHtKe1HNJShSkqKe/C0ecNCAp9n/rK5WpFOAejskV8PODNqfjok7XtMRbj1ltabl14f+oX/0/C0d1/Di9dN397aqOszWGSnctlK8dlKkl3xyQ3jE2Lm45tdNZPl3cteJrcZoDRdqoYcW+6n4XUTkF5RqDi5oJAzOc5uhOFXvW4UI/SScGtQT6PUizrdM0soKGJWb2F/g1YhMnSSVGMA5AVbUSXUIX0QJPeCONDqGbIidkSfCJJsDSWzoWQpNsAhDWtkCoPDi/OS0MFaTAj73dwmMTExHavvksTZknEVSTBrQy9vAgCA74LMZ2J72VxfWc+DnKhAihyZHauClykygecueNSz6EOW3KoYWIdEBqwaC0L0se8dazmubqWj+BmSKGMT6dZUenkjb+5HnBR6KVUGUD3y7jvIAGR5iSgnPyw/llQSwh9WIfbFsDBScHCGmkPsU/MaBmM0A1NYIYp60PPkXyNw/HHWL9tLwiFP8m0M70wFU2ZChibVynLuDFgv5BYDhsButJLsuSOQ41n5N4eSMMMqDv0KDPZAgf6N623RMbpmrSg472zhAfzkL1gGViUcDwJRM7jrbq 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: List-Subscribe: List-Unsubscribe: If 'page' is the first page of a large folio then vma_address() will scan for any page in the entire folio. This can lead to page_mapped_in_vma() returning true if some of the tail pages are mapped and the head page is not. This could lead to memory failure choosing to kill a task unnecessarily. Signed-off-by: Matthew Wilcox (Oracle) --- mm/page_vma_mapped.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/mm/page_vma_mapped.c b/mm/page_vma_mapped.c index 74d2de15fb5e..ac48d6284bad 100644 --- a/mm/page_vma_mapped.c +++ b/mm/page_vma_mapped.c @@ -325,6 +325,8 @@ bool page_vma_mapped_walk(struct page_vma_mapped_walk *pvmw) */ int page_mapped_in_vma(struct page *page, struct vm_area_struct *vma) { + struct folio *folio = page_folio(page); + pgoff_t pgoff = folio->index + folio_page_idx(folio, page); struct page_vma_mapped_walk pvmw = { .pfn = page_to_pfn(page), .nr_pages = 1, @@ -332,7 +334,7 @@ int page_mapped_in_vma(struct page *page, struct vm_area_struct *vma) .flags = PVMW_SYNC, }; - pvmw.address = vma_address(page, vma); + pvmw.address = vma_pgoff_address(pgoff, 1, vma); if (pvmw.address == -EFAULT) return 0; if (!page_vma_mapped_walk(&pvmw)) -- 2.43.0