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 51B5FEB64DD for ; Wed, 9 Aug 2023 09:27:14 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id C4D7C6B0071; Wed, 9 Aug 2023 05:27:13 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id BD6736B0074; Wed, 9 Aug 2023 05:27:13 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id A4FEA8E0001; Wed, 9 Aug 2023 05:27:13 -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 929A06B0071 for ; Wed, 9 Aug 2023 05:27:13 -0400 (EDT) Received: from smtpin03.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id 613FE160C83 for ; Wed, 9 Aug 2023 09:27:13 +0000 (UTC) X-FDA: 81104037546.03.0E1B7FF Received: from smtp-out2.suse.de (smtp-out2.suse.de [195.135.220.29]) by imf26.hostedemail.com (Postfix) with ESMTP id 5C622140011 for ; Wed, 9 Aug 2023 09:27:11 +0000 (UTC) Authentication-Results: imf26.hostedemail.com; dkim=pass header.d=suse.cz header.s=susede2_rsa header.b=IHQMNq8T; dkim=pass header.d=suse.cz header.s=susede2_ed25519 header.b=hFblZAA7; dmarc=none; spf=pass (imf26.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=1691573231; 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=4/nJQNjaMMEHAsgznZRbLNZIMyktkhNvdUrfDdvlYvM=; b=yZQXds4rjr+f/G6rh+NttFiUoZk+CTlN0Ax5pejJc+crARXfIOppw6Fy5lRxEIiJfiiQ4G j3CjzS0JCMg15tBROHGW2dlF9GEW6Lc523Ic59MVmSnEwwN6qF7l97FdHos7ttSSKduCuZ POSMOaq/osErOUYxp5zQ0tmEmui35ys= ARC-Authentication-Results: i=1; imf26.hostedemail.com; dkim=pass header.d=suse.cz header.s=susede2_rsa header.b=IHQMNq8T; dkim=pass header.d=suse.cz header.s=susede2_ed25519 header.b=hFblZAA7; dmarc=none; spf=pass (imf26.hostedemail.com: domain of jack@suse.cz designates 195.135.220.29 as permitted sender) smtp.mailfrom=jack@suse.cz ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1691573231; a=rsa-sha256; cv=none; b=zrt+6AfQOhV5MKrsB3SbCfSSeohSdSnucyEfoNCsKGs70MybhMYhGgyT7rAkyiz49B0BoY thYFkhN7+O/P8oAZxcui8d5t0hn3rNyxqIIZkN8A3D+cxCAEs7u/AZX0gzjtykoyk0Bxjf euvFy0O3YikY8OAvGq+gx13GJy3KDrY= Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by smtp-out2.suse.de (Postfix) with ESMTPS id 9F71A1F38C; Wed, 9 Aug 2023 09:27:09 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_rsa; t=1691573229; 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=4/nJQNjaMMEHAsgznZRbLNZIMyktkhNvdUrfDdvlYvM=; b=IHQMNq8Tq+rYMJOt0e2M/BgViK71BiFS4IH5rQGNBNleLCmeOSVUCQCdBUdwAEt/yAyarS vFzOtuMQz81vRMpWFnG2pp/dVbA4G1Sgz1p6omECBqL4Q7d0k9ZiFo9/h60R6p8F/rTfoR 9zVHoE2tfyiikTBIzS55Qrsniy6l+XM= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_ed25519; t=1691573229; 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=4/nJQNjaMMEHAsgznZRbLNZIMyktkhNvdUrfDdvlYvM=; b=hFblZAA7SKTxBgwQ16EX+ziQHczbuEEobqNLv6+1YVapmvL81QQ9Pw0RLcpnvjJfX6PrO0 Uh5dbExvTRZpn5Aw== Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by imap2.suse-dmz.suse.de (Postfix) with ESMTPS id 82DAF133B5; Wed, 9 Aug 2023 09:27:09 +0000 (UTC) Received: from dovecot-director2.suse.de ([192.168.254.65]) by imap2.suse-dmz.suse.de with ESMTPSA id Pu3qH+1b02RLEQAAMHmgww (envelope-from ); Wed, 09 Aug 2023 09:27:09 +0000 Received: by quack3.suse.cz (Postfix, from userid 1000) id 8D4F6A0769; Wed, 9 Aug 2023 11:27:08 +0200 (CEST) Date: Wed, 9 Aug 2023 11:27:08 +0200 From: Jan Kara To: Hugh Dickins Cc: Christian Brauner , Andrew Morton , Oleksandr Tymoshenko , Carlos Maiolino , Jeff Layton , Chuck Lever , Jan Kara , Miklos Szeredi , Daniel Xu , Chris Down , Tejun Heo , Greg Kroah-Hartman , Matthew Wilcox , Christoph Hellwig , Pete Zaitcev , Helge Deller , Topi Miettinen , Yu Kuai , linux-fsdevel@vger.kernel.org, linux-mm@kvack.org Subject: Re: [PATCH vfs.tmpfs 5/5] mm: invalidation check mapping before folio_contains Message-ID: <20230809092708.e3tzvdjjvu7hwcjq@quack3> References: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: X-Rspamd-Queue-Id: 5C622140011 X-Rspam-User: X-Rspamd-Server: rspam04 X-Stat-Signature: jbb8bpnr3gnenwx4piae4hhnwbzrz1ao X-HE-Tag: 1691573231-669669 X-HE-Meta: U2FsdGVkX181vzbjv/RTiIDlUOGMNPWRfDzgMsde4pXbPvvITXya7TEAmA5zkoAZ0B8tjz4FuaXD7TdtraAcreH0ltsgQcFb5WpY6oqCScSJsJpJSjhIG3jlxUC6GhNeYT5/3iBFR/RV+hDAEmmG/tSbF8SnfvYQB1OL9C/RpvF4JwYiOJHBKcodkHBOBHSOlysY3OhzNuvkd6ubjJkaemg+tIaNYzxrsQGR7SBEeKMBdLwzTEhPStaoZv9Oky5/QLNLbc8ghY4O/GM1gKiCQRqfXII+3a+YP49oRHdvYSH6BA0w85KQY4xDRQZZ0UG4ewzLy5txWntOkCJgCof/mNmYa995AB0pxg8ZbXlh7msTsYEAzp0djG7S239npnId33cmw+Ttb9vbwPrO/+8ZzmDr07DL4rkff0pPvbWrGccR02KXdCjKgwoLeP6FswIogQ7Hr57N13qyrlvTiEa/AGg9dTC3mygMRdaWLTzlwfIpU88Ab8snvuTlLV58K+FXSvCQRyFxxllb3C8BUpXwxpIDHU8A6eJju8FHHuteLz+QtYx2JLOoLEMCUshOFKZkh1+KOe6J3hFg2yQkTyKpt345dgf1XaQ7CziW6OHuJpaSathRzA2tI2dz24x1k47hhNavx2ieamrHOGnHmCoiyYU+ggOqxHj8RYVQethFUO/zfl6h/JWl18DDrTtnzdCrCi5Rrten4VqaO2fc/SgmzUn9K9Z2UY7FofgdrHISZ3k0gtsiKIRvBeeMzps6uDioY9mEsUUiq9qTZdqoIaUCpRrh5X2eZY0mQsclZ34xhLjINW0KIIetJifWtI1ID+8vH6v+H3pw2IvCZbjghUs6cxXIq3QnAkSqY0yiVtsPCDCP4wFmQuuMgWFYoLuEs+EcmVLhinMTdjeSjP0jIz2CNFEPKWXGXTEyI+AcSVNEyvAFRa4Ldlnpl//mNmTc30ENNRL2emoFZ7AWTlnTEpL 8lVvqVmT rlz2qlVDBA1wWJD2gx7euQSpYWRHjLP9qM0gzss/S1E4Bh5rnJHufKb04HRU+wxgu5Ija0uLJ7rnagn7DHOoug7lf+mTY9EGVLh4wGdTQzckmG9uKWdknGjCxjynRwIpA5tk7iUwA7d3EP/QbO+1G0iQE6F8pR6JaVp3+fPbvlBnYW4Xhu/YVXn2BLVNVhZ4qi/R7RSoCgEphnATwvS5wljWbYocCRDRepJQ5GxuyMx4FpfVZkakjOgEMq+tXmAw+9t/dktqgwQ74WAXqCL+9asTvlEKbBDPBhgnn/8atuVq0uT1D8ANfWlNPSlVFeKVqmricfiwFh08EiZY/jOZoUZP5Tw4qugTq7wS/ 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 Tue 08-08-23 21:36:12, Hugh Dickins wrote: > Enabling tmpfs "direct IO" exposes it to invalidate_inode_pages2_range(), > which when swapping can hit the VM_BUG_ON_FOLIO(!folio_contains()): the > folio has been moved from page cache to swap cache (with folio->mapping > reset to NULL), but the folio_index() embedded in folio_contains() sees > swapcache, and so returns the swapcache_index() - whereas folio->index > would be the right one to check against the index from mapping's xarray. > > There are different ways to fix this, but my preference is just to order > the checks in invalidate_inode_pages2_range() the same way that they are > in __filemap_get_folio() and find_lock_entries() and filemap_fault(): > check folio->mapping before folio_contains(). > > Signed-off-by: Hugh Dickins Makes sense. Feel free to add: Reviewed-by: Jan Kara Honza > --- > mm/truncate.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/mm/truncate.c b/mm/truncate.c > index 95d1291d269b..c3320e66d6ea 100644 > --- a/mm/truncate.c > +++ b/mm/truncate.c > @@ -657,11 +657,11 @@ int invalidate_inode_pages2_range(struct address_space *mapping, > } > > folio_lock(folio); > - VM_BUG_ON_FOLIO(!folio_contains(folio, indices[i]), folio); > - if (folio->mapping != mapping) { > + if (unlikely(folio->mapping != mapping)) { > folio_unlock(folio); > continue; > } > + VM_BUG_ON_FOLIO(!folio_contains(folio, indices[i]), folio); > folio_wait_writeback(folio); > > if (folio_mapped(folio)) > -- > 2.35.3 > -- Jan Kara SUSE Labs, CR