From patchwork Tue Feb 14 07:57:09 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Stevens X-Patchwork-Id: 13139582 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 ECDBCC677F1 for ; Tue, 14 Feb 2023 07:57:24 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 08C486B0073; Tue, 14 Feb 2023 02:57:24 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 03B156B0074; Tue, 14 Feb 2023 02:57:23 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id DF7E3280001; Tue, 14 Feb 2023 02:57:23 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id CD2FC6B0073 for ; Tue, 14 Feb 2023 02:57:23 -0500 (EST) Received: from smtpin27.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id A0C4F1A07A6 for ; Tue, 14 Feb 2023 07:57:23 +0000 (UTC) X-FDA: 80465142366.27.68E16F2 Received: from mail-pj1-f43.google.com (mail-pj1-f43.google.com [209.85.216.43]) by imf14.hostedemail.com (Postfix) with ESMTP id CF008100010 for ; Tue, 14 Feb 2023 07:57:20 +0000 (UTC) Authentication-Results: imf14.hostedemail.com; dkim=pass header.d=chromium.org header.s=google header.b=JgLu+1vt; spf=pass (imf14.hostedemail.com: domain of stevensd@chromium.org designates 209.85.216.43 as permitted sender) smtp.mailfrom=stevensd@chromium.org; dmarc=pass (policy=none) header.from=chromium.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1676361440; 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:references:dkim-signature; bh=O7DfH1WNOVf4t8XjgAEqyor0ieXU0nLmep1VXk+2LuQ=; b=hTFDxl5mxT+9m6ZojFVtZxtYIqyr0SP8+sCl1KQiF0Qcv5rbosbPj4MOWJMoLOQyiTVjkR Sh29vZHxZZOVZAVGHEm8n6t2YelKo5UWz+5HpYCHpW1LzV9zQ8Jros4xsR6xZANCYdBdLD T6sb8154+9kBvFumMrSuledWM+tVa54= ARC-Authentication-Results: i=1; imf14.hostedemail.com; dkim=pass header.d=chromium.org header.s=google header.b=JgLu+1vt; spf=pass (imf14.hostedemail.com: domain of stevensd@chromium.org designates 209.85.216.43 as permitted sender) smtp.mailfrom=stevensd@chromium.org; dmarc=pass (policy=none) header.from=chromium.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1676361441; a=rsa-sha256; cv=none; b=eRVoYU47/d9cTTJSm4jJmOFPUvspzuG4+5+QKW93lZPecWtOcGOtFg/o+atSCC7mQpzUn3 hqCDnBF6jH782IDpwGUaB9V1zy8AiSlkE+pujP+M7OHfATPs9MEI3KYahZSK4VuXPGCGga YSj/s+8/6Vn+IWHnajUXwiz/gacIRes= Received: by mail-pj1-f43.google.com with SMTP id rm7-20020a17090b3ec700b0022c05558d22so14659244pjb.5 for ; Mon, 13 Feb 2023 23:57:20 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=O7DfH1WNOVf4t8XjgAEqyor0ieXU0nLmep1VXk+2LuQ=; b=JgLu+1vtOkmwsCN3mtGKQep0/DC4S+kayR7D5/h/M9mQWoDn55NSl/pxsmy26Q0iv0 mZ+yyHegrQKSXmMrSflFTPdrdXHSB97v+65nUUnKidXISbycELbs6KX+KCL4NrJI8VzH MTDC30KzrUwl6T5WRf01DC/YAQkaz2oSKCCFs= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=O7DfH1WNOVf4t8XjgAEqyor0ieXU0nLmep1VXk+2LuQ=; b=SwHBt1/HW53gHN2up03/7XjNqF09aMLQ20T/rZ/8zQ6VUgr7hQs94Vi5XdFacx0Zc0 hAzJtlc0StrNQGvTSvC+efUUBkFejXwaIqCkvs14IiLioWyNgVlBAl993/oCCzQhi7l7 6509bLrX4h/fw1US4EwUFaM7lh++UDRmx7s/XqWOQZm3IIS+cKgh+E2UdpOCVyhFoiXK miuabVxZNbjALRwza3LqOcesXaZ81HaGtO+GpGyIciyjX+zKNGMwDPnzKauZG/ucclrm IZvqTnw/qUil6j+KSsu8Kgi7hkQzFIlltpttThBzkdrYWon9tpSZBkcLM8bxno2FnYQu LkPg== X-Gm-Message-State: AO0yUKXag0a71Jt1y9CMmEO2EdYZGW2lkVXdOdTxZcSPr6xcy3p/LjC2 mWD3TKSeXTySrtACf49rPFYskDsQ6MRVMZYt X-Google-Smtp-Source: AK7set/nm9XIjLUEwnIUiUfsvq5VxOiZljHMLnHXN1Qe4ILFHTpFYXB0qtXRVUOZTIZdGK5qE4uh0g== X-Received: by 2002:a17:902:d489:b0:198:e63d:9a4f with SMTP id c9-20020a170902d48900b00198e63d9a4fmr2053058plg.47.1676361439221; Mon, 13 Feb 2023 23:57:19 -0800 (PST) Received: from localhost ([2401:fa00:8f:203:45f7:92a0:f546:300f]) by smtp.gmail.com with UTF8SMTPSA id i6-20020a170902eb4600b0019a7c890c61sm2981446pli.252.2023.02.13.23.57.16 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 13 Feb 2023 23:57:18 -0800 (PST) From: David Stevens X-Google-Original-From: David Stevens To: linux-mm@kvack.org, Peter Xu , Matthew Wilcox Cc: Andrew Morton , "Kirill A . Shutemov" , Yang Shi , David Hildenbrand , Hugh Dickins , linux-kernel@vger.kernel.org, David Stevens Subject: [PATCH 1/2] mm/khugepaged: set THP as uptodate earlier for shmem Date: Tue, 14 Feb 2023 16:57:09 +0900 Message-Id: <20230214075710.2401855-1-stevensd@google.com> X-Mailer: git-send-email 2.39.1.581.gbfd45094c4-goog MIME-Version: 1.0 X-Rspamd-Queue-Id: CF008100010 X-Stat-Signature: ewzts5g6yxmq93xhrtqgcqbi5tp4d366 X-Rspam-User: X-Rspamd-Server: rspam08 X-HE-Tag: 1676361440-245476 X-HE-Meta: U2FsdGVkX1+wN+9EpWi4E7uEJH7teqAcIBFYJhcNTI8ggp2ZWF+XKjO87gTM6Va9e638YWdELl4ei55yHbct6LhNtFyuVTnfd3Zg5PSW5y6N5abd1FcUZdYscGb9q0p3Ye+2nIgtNenL8MbuY0GhLQ7MoF5kFRckBg4mRvaHDN16y1OdsTswtkH0jBsqB0Svv/bhWg4m82MmFIYzs/5hNKwOn6kCrxfLunZ86ZtI0yRxsAhxLoW0DBNensTyeO5yXXaMvVVkXaQtt45XkMrWuLcqAQvCJoYnZbQzwlPY6mp4c1MT+oXf6AJUSKUbsT+V0vFSI5rxBR32jQxSCuByjWDEliq2EeZVN0Mt7d6WHNKxXybqpfeA31JNe7dYeXfXgD7//tBhDF8PdryRqmAM7XeAzftXLwMERsR8DxM6Ct++zGQpb/e8r9KAroWsciJP2CC2r0gvwpa0tQ5g/FXkrP0L3ozBkaHt9xVIbWWtf58zVCZSYLr2fX0vI3zD6lYgeXX4W7O4YsAl2PeAr8hEebwXLXebpCAzOLfs8W8KAvPYITRT901AwMQFRs4H5I8XTerjvnosIQUOIzOi70k7kne5/YGMQElXqGdNKJ3uErNzCCGJWzD4CexFOHDXswSk3ottdHAdCTC8CGU9CLLMLoUPVDxIw34QYJ0ZhslC6jBdqrfB5pWvVhY7LCglmlpwaN9F8pGEiPd0TmhY7j9edDHmQBAEcC5rvcC+REglj3V//cVJ5C3FqH4d93LdHvhz6d4shUvHklsXZxeUyTql/eiEGe41GlvFCC2CsLpa1pVtxbHrUjKQolw36ttGUK5IBYCN8C0dltTbvdHvyUM0X7hHIwKaohlYDQYbdLaD5ZRHedeXNKkWdebSFmCHp23i5LxP+Jstn5BtwFxpD83K31DVavnxvxXyvHVTXcHl+xbIkU4unlfBQqPvlT0Xc8XeuJ7bVU4Quek1iXp0b1v 9UA2TIO3 aMn3Mpcq4e5lHmz4kTWUVsQrGKJzy8+530p9U2h90T1Nc4DprQcOP4BETdjwFVhaY0giQLq9LIrK+f5l0w+QgYrqCi7jeVPNWsk6bB02+GFA7HS6phQ7B2wvA6ejtjxK4kzdX1g74pY98yF712yA/6VCw/nEsP2WwfKCRsZ4Al5RMsCcJUdj+fuzt2GKYfD0dSH1UtXGHI61cwjhSHSJQRnv9SjAbbwEKPfWOqvxF21jUK1Y0e0GIwd9Ytr3d9X/jtHb2p2BMQZtECvAR3J88Q5sEYed6hfZ8nhHIu3/nd6vzfUpNM9IAEfg1Oo1v8QGDAW1I 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: From: David Stevens In collapse_file, mark the THP as up-to-date before inserting it into the page cache. This fixes a race where folio_seek_hole_data would mistake the THP for an fallocated but unwritten page. This race is visible to userspace via data temporarily disappearing from SEEK_DATA/SEEK_HOLE, which can cause data loss for applications that use lseek to efficiently snapshot sparse shmem. Fixes: f3f0e1d2150b ("khugepaged: add support of collapse for tmpfs/shmem pages") Signed-off-by: David Stevens --- mm/khugepaged.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/mm/khugepaged.c b/mm/khugepaged.c index 79be13133322..b648f1053d95 100644 --- a/mm/khugepaged.c +++ b/mm/khugepaged.c @@ -1779,10 +1779,13 @@ static int collapse_file(struct mm_struct *mm, unsigned long addr, hpage->mapping = mapping; /* - * At this point the hpage is locked and not up-to-date. - * It's safe to insert it into the page cache, because nobody would - * be able to map it or use it in another way until we unlock it. + * Mark hpage as up-to-date before inserting it into the page cache to + * prevent it from being mistaken for an fallocated but unwritten page. + * Inserting the unfinished hpage into the page cache is safe because + * it is locked, so nobody can map it or use it in another way until we + * unlock it. */ + SetPageUptodate(hpage); xas_set(&xas, start); for (index = start; index < end; index++) {