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 2BC58C001B0 for ; Wed, 9 Aug 2023 04:36:20 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id B72886B0074; Wed, 9 Aug 2023 00:36:19 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id B22FD6B0075; Wed, 9 Aug 2023 00:36:19 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id A13288D0002; Wed, 9 Aug 2023 00:36:19 -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 919FF6B0074 for ; Wed, 9 Aug 2023 00:36:19 -0400 (EDT) Received: from smtpin11.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 310D3120DEA for ; Wed, 9 Aug 2023 04:36:19 +0000 (UTC) X-FDA: 81103304478.11.2412070 Received: from mail-yw1-f173.google.com (mail-yw1-f173.google.com [209.85.128.173]) by imf09.hostedemail.com (Postfix) with ESMTP id 6B07314000D for ; Wed, 9 Aug 2023 04:36:17 +0000 (UTC) Authentication-Results: imf09.hostedemail.com; dkim=pass header.d=google.com header.s=20221208 header.b="jfYt/KAw"; spf=pass (imf09.hostedemail.com: domain of hughd@google.com designates 209.85.128.173 as permitted sender) smtp.mailfrom=hughd@google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1691555777; a=rsa-sha256; cv=none; b=4Z/oIBPLPpSLr8xHIn9bbNZsPx7i4LWJsS0iIH/4D5kW1Yn/6U5pg7pEIoxoUC+fXjLIYw v4llpQTRnKxWdRwfOP830uGu18n5L33k6F8gpZhpfjsFHIklALuZxgmy2PRV7MH1+wN/5F K2e63NjYI79AJAZ4VPeDfxc+OLuAZmE= ARC-Authentication-Results: i=1; imf09.hostedemail.com; dkim=pass header.d=google.com header.s=20221208 header.b="jfYt/KAw"; spf=pass (imf09.hostedemail.com: domain of hughd@google.com designates 209.85.128.173 as permitted sender) smtp.mailfrom=hughd@google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1691555777; 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=dHla0CWZ0WHqYi4zECfU9k4rSR5m4RPnWM7U84PXzs4=; b=hTV2HbscN4b5aHL8X8PIyn+0xht4Ifjq5n3qV/vC61ZaEWjYeZaTLl1ziHwFnRk2pqXK6s 9XKjF+TjZiQC0Vazvu1czCYjvWhNatII5xHFMlgrL5SnXJmgxjxQFhd7vIhdSbB4xX2gSP AFwIjx7E+PIDOjfmZK2UHtxQk0pN1XY= Received: by mail-yw1-f173.google.com with SMTP id 00721157ae682-58411e24eefso69127707b3.1 for ; Tue, 08 Aug 2023 21:36:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1691555776; x=1692160576; h=mime-version:references:message-id:in-reply-to:subject:cc:to:from :date:from:to:cc:subject:date:message-id:reply-to; bh=dHla0CWZ0WHqYi4zECfU9k4rSR5m4RPnWM7U84PXzs4=; b=jfYt/KAwov5gjcGl3FcNqvOk5TKV42theXc90cj7+enViQ6fF9qu+PQj5ASY8WE7W3 v+iyUH0Txp5OMV/jluSYyP1REsaSFfUc3faZnlHJsEaHZ1LpsFH4+b/KfbKvn+MrdBoq kQMtsan3i4QOMU14zUeISfohUjToi6NDWoUpq3tXnu5co9QbSNtkHBPD3ON2J3UHbcBS bfpt+qB9NthEFbsYKt5nPgUflp+NCiswQhhQSLWM0EjAHFkf0HEZphqYfnT4rpIcffWK LDOe8CrxbjPWtBmEx1RJW6yZPSAVfVu+TU5K0iBt3PkGu3mAS21fnhljpCNCtAifpm+j umcg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1691555776; x=1692160576; h=mime-version:references:message-id:in-reply-to:subject:cc:to:from :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=dHla0CWZ0WHqYi4zECfU9k4rSR5m4RPnWM7U84PXzs4=; b=VQP4zYMzpimFJVfOZs7eW781Sx4aXgzsCcSHsD91vA9NalKqSfMZ94iMdJQHueq5J1 UJJteFwEZsXy0w2Ja5wpf4x5x++i7aFRD1A48vcRc2wigAxtJJVlpfbzWh3DIf/AVbvm rXs1RA+V5ikQFsDDjYxNOXkVfo+kZFMCyRx2zbVh+EStHT5oe/eeiWTE3cGqqviD/f2G lGEIzWC5QQoqATNN4jVRARQ7prg49bxuz9WrteKbdTLYMfYJknZJeE9RJzV9fVHskpAK x+W+GzON1XnQeL493M8GCxg6nmLqgWDmtBcYtn81K5UdEmreI1dLnG2aPlKFSGQekBhC aifQ== X-Gm-Message-State: AOJu0YyvsGBxcIbt/3cBuoc/WXlUNh6N5yzL6yKLCPPH2OIKcMpvwbjf o/JSiD/g3MImm8PlhSf62mSqsQ== X-Google-Smtp-Source: AGHT+IETKivu9DrTnaNoT4T/s8DpkVlW+OXa1kLEZyP5WGJw/nJ4J6ztHKF9wuaAq6Z7ieKEERVmcg== X-Received: by 2002:a81:81c5:0:b0:583:42d3:8a18 with SMTP id r188-20020a8181c5000000b0058342d38a18mr1283732ywf.52.1691555776457; Tue, 08 Aug 2023 21:36:16 -0700 (PDT) Received: from ripple.attlocal.net (172-10-233-147.lightspeed.sntcca.sbcglobal.net. [172.10.233.147]) by smtp.gmail.com with ESMTPSA id z186-20020a8189c3000000b0058390181d16sm3788417ywf.30.2023.08.08.21.36.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 08 Aug 2023 21:36:16 -0700 (PDT) Date: Tue, 8 Aug 2023 21:36:12 -0700 (PDT) From: Hugh Dickins X-X-Sender: hugh@ripple.attlocal.net To: Christian Brauner cc: 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: [PATCH vfs.tmpfs 5/5] mm: invalidation check mapping before folio_contains In-Reply-To: Message-ID: References: MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII X-Rspamd-Server: rspam08 X-Rspamd-Queue-Id: 6B07314000D X-Stat-Signature: 7swr5yfqq5tspfxny8nxrcdftrz37nw4 X-Rspam-User: X-HE-Tag: 1691555777-169694 X-HE-Meta: U2FsdGVkX19Avfv/TAwnX9UKmzOgnxRw5DWJFCWl9b0fyJBg5/ZmJv7O2GA8+HKEzB9S7NEKB7iHdZ3aQOQLwLsSDXqKGRCA5Tsp/+GfKcuo5FexMjsFnz2JpiA0K/TgjiKwNu/8Y48SodZweiv21DsIG9TzMDUNQ+lDr+riZpgIMcvyweF+m+IMuNk10W1ynp9qnQknbRP6URB907ufRqrMUVmIy6RDwMmV+zzGF+BAVZF0A9vWG45ATUd0T6ARElpZZTaYwu5YpOdb2AAaQ2zAKuI6+P4kbCCVg8O/FvCv9b0m7zZESRcFSLUhjxoULpnBtIXsRGATBPSP/8rp42sQ9fRwAj1aeky2ZjUAMcnluVmOWbuJKPUuyBkNC9RuL1PFKOh+o0tUrUWtRscIMLdZwLmi4PRMbB6bQ/jjwhnghjrEfsZoZo2FvTYczsWIqIl/yW2jLjq2mhhMcYUMMxfz4wjkB0+pvckaRvUiToiL0UjS7f85/w2Tkloip7edvdI0rIut3Q/FwPrcynx0rKuA6190+4FVdyxcY5NpbQ03aMm6wD4w+aCphmnuA4dP6kceiNVn1m9QTBF91J5rlFzfcvHp0a9LY/V2V9IwinTMtCDa2tV0fip0EH+sCTkbwivvNqF8Tpl6gCtRTXx7DWvw3KVyW+r4ClGDCkpOmgWR1hRvZzGn8lo82cXoTFtdNlGU8SVCitPiBear8E2cMtbaP31RhK+WGZ0jRcwpDxHVS/Pl1YQijVI6cGx1gJQDZsGMEdhXswNecwCil8aLwUTqoGls6TMcylDC2rL+9FN6og1TQPWvegAE+jw2x54PWqW0PyoG0WnTLfKrFLf+FFvCjlUN+EJ0vl3lpK0vOnT43oZ0eBoewM2mbXEMh5oQb2GwMmEJ+8gmMRPJOlPfu457r/CyZXakzRzHv7+7wANg3Jy9gqSswD2qkU01C5ojEYOc/Y1qBd8et2qWqCC gvqYOGQh dFPS0S2sogmegywJRL2yH7nYX86Jo1kjEm38jxLqRlW5TgclXyowtH4eH5lHwfM5R35O4k1Kh2YSTAEiAN7GuOiMmarWxXKfHTutSVKq/1rk4fTSfxDvTTcyu5rCjcIKxA0fTxWfJ7jomsKOH0WNzvdcGakU/+V+TGSzptsWS1diVwL41NEb93iAeGPA5PGjklrBJNym1n0VDwd/WHdIxm025IOwqBNG1V5NKRby09GGAYKYIq+iZ5s5D8nKWp6uF6Ss9uu0Mc449LHX6QrA2nLmNEaZyGFKIVZHKBVxqu91nrqmWYdxLCcNT84TULVE4cxAPZmAw/GeiNFT9+DgiLTjiOoujM+V48zt04on1VLW6nH1Xp9GWdV8A+sQ53WImkc/KlKZj9fpvZe8Pc1Vtpc7plYmQPcZKXEYc+f1jqITRFcyoFQ06ay9YmftGsMxAUNhm2+CLyx+0844RtNYOalsEzA== 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: 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 --- 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