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 BC4A5C43334 for ; Mon, 20 Jun 2022 09:57:21 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 2B2E46B0073; Mon, 20 Jun 2022 05:57:21 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 261C06B0074; Mon, 20 Jun 2022 05:57:21 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 12BE58E0001; Mon, 20 Jun 2022 05:57:21 -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 0156A6B0073 for ; Mon, 20 Jun 2022 05:57:20 -0400 (EDT) Received: from smtpin25.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id C1B7A34766 for ; Mon, 20 Jun 2022 09:57:20 +0000 (UTC) X-FDA: 79598161440.25.8D40637 Received: from smtp-out2.suse.de (smtp-out2.suse.de [195.135.220.29]) by imf18.hostedemail.com (Postfix) with ESMTP id 3AAC91C0092 for ; Mon, 20 Jun 2022 09:57:20 +0000 (UTC) Received: from relay2.suse.de (relay2.suse.de [149.44.160.134]) by smtp-out2.suse.de (Postfix) with ESMTP id AC1221F460; Mon, 20 Jun 2022 09:57:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_rsa; t=1655719038; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=y5ljhy+0PjitjfaSkZTo7GNRdujHiGTLojwz/HSBzzw=; b=oe897hR/vM6Nmxpgqcmd4wAX7dnLy4oyT0ODe6V1/d54KMmytyR0GmJvLz9zeyZSoI33dr lxssarQvJCGgahS4hf3ehvYIL2LeSDXcxJplg/mvUrgUyGKZZg0ry/O2diEINHz6zf8n0r FAdjBc+zHowAxm2yvo3JIH7h0LiGYcE= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_ed25519; t=1655719038; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=y5ljhy+0PjitjfaSkZTo7GNRdujHiGTLojwz/HSBzzw=; b=+vQkz8yw3N/PM5CiPBdnz/xAdHM9ZvHKqJqMjYqyuNOGpBfjAmwX1OUUK3FVxAkJxvMLkb tnldP4fH+LwX2lDw== Received: from quack3.suse.cz (unknown [10.100.224.230]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by relay2.suse.de (Postfix) with ESMTPS id 7D5A62C143; Mon, 20 Jun 2022 09:57:18 +0000 (UTC) Received: by quack3.suse.cz (Postfix, from userid 1000) id 1644BA0636; Mon, 20 Jun 2022 11:57:18 +0200 (CEST) Date: Mon, 20 Jun 2022 11:57:18 +0200 From: Jan Kara To: Alistair Popple Cc: akpm@linux-foundation.org, willy@infradead.org, linux-mm@kvack.org, jack@suse.cz, david@fromorbit.com, jhubbard@nvidia.com Subject: Re: [PATCH] mm: Fix serialization adding transparent huge pages to page cache Message-ID: <20220620095718.47ey75hohdaoh3xw@quack3.lan> References: <20220620090536.1474002-1-apopple@nvidia.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20220620090536.1474002-1-apopple@nvidia.com> ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1655719040; a=rsa-sha256; cv=none; b=QFU3OanyhEG4TVFw2/vPou2F6ICU3AuKVQm0eHmKC5QkIzUd2cYBa2STMFhXqWQiCz4gNh AnqT8hGfr3p6QRWXAIhaCrEL8a6KM0+CCj4NzVrNyIaQSe0M1lfzcxCmqKvCqV/PEHeWP4 mhLz4aw+1ETmPIdSfJ2JIMsSkdyRk+o= ARC-Authentication-Results: i=1; imf18.hostedemail.com; dkim=pass header.d=suse.cz header.s=susede2_rsa header.b="oe897hR/"; dkim=pass header.d=suse.cz header.s=susede2_ed25519 header.b=+vQkz8yw; dmarc=none; spf=pass (imf18.hostedemail.com: domain of jack@suse.cz designates 195.135.220.29 as permitted sender) smtp.mailfrom=jack@suse.cz ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1655719040; 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-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=y5ljhy+0PjitjfaSkZTo7GNRdujHiGTLojwz/HSBzzw=; b=oJdEmAZRxOyB49EmkS1DSR9gFFitoR3rtQ/LLJKpjo+tBusvSrcvuRrxVf6cnle6Y6y2GG CDSTXqWOvQBH/jM2Yw83Ddiuq7JvVbOlLiiD717Dy0KeSBRTuwhSpyDaFARL9rPXJUCXrD Y7kEe/4UzWLZ4IRmLcxEqAm99yGqBVE= X-Rspamd-Queue-Id: 3AAC91C0092 X-Rspam-User: Authentication-Results: imf18.hostedemail.com; dkim=pass header.d=suse.cz header.s=susede2_rsa header.b="oe897hR/"; dkim=pass header.d=suse.cz header.s=susede2_ed25519 header.b=+vQkz8yw; dmarc=none; spf=pass (imf18.hostedemail.com: domain of jack@suse.cz designates 195.135.220.29 as permitted sender) smtp.mailfrom=jack@suse.cz X-Rspamd-Server: rspam06 X-Stat-Signature: gifgw5tib8sc5kywhauc1pee8agr3nk1 X-HE-Tag: 1655719040-403459 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: On Mon 20-06-22 19:05:36, Alistair Popple wrote: > Commit 793917d997df ("mm/readahead: Add large folio readahead") > introduced support for using large folios for filebacked pages if the > filesystem supports it. > > page_cache_ra_order() was introduced to allocate and add these large > folios to the page cache. However adding pages to the page cache should > be serialized against truncation and hole punching by taking > invalidate_lock. Not doing so can lead to data races resulting in stale > data getting added to the page cache and marked up-to-date. See commit > 730633f0b7f9 ("mm: Protect operations adding pages to page cache with > invalidate_lock") for more details. > > This issue was found by inspection but a testcase revealed it was > possible to observe in practice on XFS. Fix this by taking > invalidate_lock in page_cache_ra_order(), to mirror what is done for the > non-thp case in page_cache_ra_unbounded(). > > Signed-off-by: Alistair Popple > Fixes: 793917d997df ("mm/readahead: Add large folio readahead") Thanks for catching this! Your fix looks good to me so feel free to add: Reviewed-by: Jan Kara Honza > --- > mm/readahead.c | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/mm/readahead.c b/mm/readahead.c > index 4a60cdb64262..38635af5bab7 100644 > --- a/mm/readahead.c > +++ b/mm/readahead.c > @@ -508,6 +508,7 @@ void page_cache_ra_order(struct readahead_control *ractl, > new_order--; > } > > + filemap_invalidate_lock_shared(mapping); > while (index <= limit) { > unsigned int order = new_order; > > @@ -534,6 +535,7 @@ void page_cache_ra_order(struct readahead_control *ractl, > } > > read_pages(ractl); > + filemap_invalidate_unlock_shared(mapping); > > /* > * If there were already pages in the page cache, then we may have > -- > 2.35.1 > -- Jan Kara SUSE Labs, CR