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 15870C3DA45 for ; Thu, 11 Jul 2024 17:18:13 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 815246B009E; Thu, 11 Jul 2024 13:18:13 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 7C5C76B00A2; Thu, 11 Jul 2024 13:18:13 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 68E216B00A6; Thu, 11 Jul 2024 13:18: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 471736B009E for ; Thu, 11 Jul 2024 13:18:13 -0400 (EDT) Received: from smtpin11.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id B255F1A0792 for ; Thu, 11 Jul 2024 17:18:12 +0000 (UTC) X-FDA: 82328130024.11.5139730 Received: from sin.source.kernel.org (sin.source.kernel.org [145.40.73.55]) by imf20.hostedemail.com (Postfix) with ESMTP id 27B841C0004 for ; Thu, 11 Jul 2024 17:18:09 +0000 (UTC) Authentication-Results: imf20.hostedemail.com; dkim=pass header.d=zx2c4.com header.s=20210105 header.b=PUxXa+Bz; spf=pass (imf20.hostedemail.com: domain of "SRS0=Le2v=OL=zx2c4.com=Jason@kernel.org" designates 145.40.73.55 as permitted sender) smtp.mailfrom="SRS0=Le2v=OL=zx2c4.com=Jason@kernel.org"; dmarc=pass (policy=quarantine) header.from=zx2c4.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1720718274; a=rsa-sha256; cv=none; b=FkxFLix1z2CRi+om5JppAbxpV/ChdV6Mm8cLKVz4nImU4MOoMHpFVUkA4gk+zZfifeB0W9 0HaNQNvUwlyhpdcrHiXMjIsTzfgKw7BtnrEP+y4+jtR0d8E2+i0TNCA9g6CvJizMK6WoKa ijGQci32BK9pbyLnu3/J9nkS/HdxB9s= ARC-Authentication-Results: i=1; imf20.hostedemail.com; dkim=pass header.d=zx2c4.com header.s=20210105 header.b=PUxXa+Bz; spf=pass (imf20.hostedemail.com: domain of "SRS0=Le2v=OL=zx2c4.com=Jason@kernel.org" designates 145.40.73.55 as permitted sender) smtp.mailfrom="SRS0=Le2v=OL=zx2c4.com=Jason@kernel.org"; dmarc=pass (policy=quarantine) header.from=zx2c4.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1720718274; 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=+7H7av5e6HFgdmTlU6/3eCrEUP3JrRh9v2SnfP+d8vw=; b=znK+cjnBNgeWkrpSURkK95XkPwrZftIXDADvYVv/sJtD9cy+3IW/i8rZZFktKn0gJgOiis GO6gzRLjqkJdq/nwA5ZY/GR2XL00wl7eQaxroCnp4QNnbNvpbBH88umPYigpRJ8EbxOzpw 3bK4IOZtAaOG3aBfUpXtmMtLJRWNfc4= Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by sin.source.kernel.org (Postfix) with ESMTP id 929CCCE194E; Thu, 11 Jul 2024 17:18:06 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 4685BC116B1; Thu, 11 Jul 2024 17:18:04 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=zx2c4.com; s=20210105; t=1720718282; h=from:from:reply-to:subject:subject: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=+7H7av5e6HFgdmTlU6/3eCrEUP3JrRh9v2SnfP+d8vw=; b=PUxXa+Bzc7MW8ip1keVkzSXe7jtM60InB9Za5eFt1LyO9x9UnYGqVPriBpZNdVW7KElscA Ux8NkEsV94bbIJw4fWeDc48tGWW5wGutAkHfajK6cCx6ZixffFWrKo6jm2eKgVOZ6Hg8V8 iEXn9a+OmamnYLo+V0ManMwBDhXYfNY= Received: by mail.zx2c4.com (ZX2C4 Mail Server) with ESMTPSA id 5be0f329 (TLSv1.3:TLS_AES_256_GCM_SHA384:256:NO); Thu, 11 Jul 2024 17:18:02 +0000 (UTC) Date: Thu, 11 Jul 2024 19:17:59 +0200 From: "Jason A. Donenfeld" To: Linus Torvalds Cc: David Hildenbrand , linux-kernel@vger.kernel.org, patches@lists.linux.dev, tglx@linutronix.de, linux-crypto@vger.kernel.org, linux-api@vger.kernel.org, x86@kernel.org, Greg Kroah-Hartman , Adhemerval Zanella Netto , Carlos O'Donell , Florian Weimer , Arnd Bergmann , Jann Horn , Christian Brauner , David Hildenbrand , linux-mm@kvack.org Subject: Re: [PATCH v22 1/4] mm: add MAP_DROPPABLE for designating always lazily freeable mappings Message-ID: References: <20240709130513.98102-1-Jason@zx2c4.com> <20240709130513.98102-2-Jason@zx2c4.com> <378f23cb-362e-413a-b221-09a5352e79f2@redhat.com> <9b400450-46bc-41c7-9e89-825993851101@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: X-Stat-Signature: 7dijkkpt49n6aykc53wqeka87wkoudp1 X-Rspamd-Queue-Id: 27B841C0004 X-Rspam-User: X-Rspamd-Server: rspam10 X-HE-Tag: 1720718289-217731 X-HE-Meta: U2FsdGVkX18oFpA5Pg/oRkBdzcTDnHfK5IVRi+8eVrf9Y1JdNmzF8t8Svxja3lu5WT9y7eyboXeQxwgRvKoHmQYJ3mTPF6zJZXhMSR2wWyoAEUt6LCA83iCZg71gbrZCj3U4G+vYghQ37b9vlp3up2dg4Sv/kORG1qWPTWjl9YDaugxJKfDWZWPhdVkpFnwR2Pj3FAbN1txu4J+ZYbJFGw8DIL8lS8h1VfSoWmDpby/JQLmK5Nco9hgZF7WirUVFWD0hG42B4MsDJxTd8pf5w2ce8hmMR/9IO/HTf+tXSqRhlbIjMQ5O0F2TBIlBW0DKQXPawZcVMcEYNJ4BUwVxAqeQO/2SzGvoy0qc5ezXDQ7egY5YUx7QIblmgiXsPBhU1zu0GcPlIj8KVWj5GYeWA8c0Vj5sFkmVwP4hpD2+znAG0nFnrNBYpwulGSaPxAQv4zPW1xyNRl0IVWvyICfLtRES8iwbmY+QQhwk7UQ1AN0Mq26VGvSjh24VOi6R2Ot2OTj+QLTLvVz+TwJV4uR3KOvHf5bhggmicowr3iOAiM6csvEZlLPyeuykNEkVqYS+UShD/P+cedtbW07X3fPAHCnR3YCORvmlVPDTaJsCRNJSHCIoWgNyxuwJVAzyTPjNURrhfr51Ei4RFRrUv7E/sNlq8mZMmbSXb604wT2raQXeeXcEOD9PASqpyos/NcRn3yK+IPX893zJRP1BNZO8nxWOkbM9/Uad2Lu94iy1g8Nr1A2QKLGPlikHZrn9CFW5l4RKWDSu+QtERz5ebenINl7V10biEaP2mWqF1V8AYefkj7P40X29s4HxfFxtsDYyFTtQUfmJ6K14tLY5btn4QlMuAFTBAsT9swl+Oz+I+VfAqP1mlPRazJp4ip83Z2u++HdWgvto0fCLdWhbAg3Pgqa0ZXujfe+2qVBA32IfB1GX0i3pyxXXkYRYTEn6ayWVDBJofZWfEWwj5/qnvw2 DKJFqUXO NI6VFyrQuKyD6Tt2mhEIGbSRfsq9fFKAW9oIuoYi9Z3Oa102dBzzq+MItP8OV9of7e6Ty6z3UdsQdlMFcJDXqSOyrdoOFaGAfy2HdwIGbgQ4eit4mGgq1SGSWCjLlMHMNBwsZlbPyC3cKHDy3Hl3v8x5F37huGvAWH57Cr5Vp6VFEdffeBAfsVTvVNCrfAJ2GO9YDnhJyJviJzfy0Pu8CTd5XIgurLhankTpa+u7R1EH3parqURTLZUd0ygNzfEW12umJwdR8VGI+uYfxDhiyHE+MO/B7GFPaJm3MUhVdtVeYhrVFAZ+5bOPMETNMMAbZcsj0PssMKrdDlKZjFxFLjCKEkXEITu/NyUG2XfC05j1IhNXkf0VLBzv0CpzGJUks5dzPAZ41ntRzrCsdoXNx1Qo1aNpDt+AabpJWSH0xYuhTGfBiLIwC1M8ZkACN8jZYRkfwCigts91+k2U= 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: On Thu, Jul 11, 2024 at 07:09:36PM +0200, Jason A. Donenfeld wrote: > So, hmm... The swapbacked thing really seemed so simple... I wonder if > there's a way of recovering that. Not wanting to introduce a new bitflag, I went looking and noticed this: /* * Private page markings that may be used by the filesystem that owns the page * for its own purposes. * - PG_private and PG_private_2 cause release_folio() and co to be invoked */ PAGEFLAG(Private, private, PF_ANY) PAGEFLAG(Private2, private_2, PF_ANY) TESTSCFLAG(Private2, private_2, PF_ANY) PAGEFLAG(OwnerPriv1, owner_priv_1, PF_ANY) TESTCLEARFLAG(OwnerPriv1, owner_priv_1, PF_ANY) The below +4/-1 diff is pretty hacky and might be illegal in the state of California, but I think it does work. The idea is that if that bit is normally only used for filesystems, then in the anonymous case, it's free to be used for this. Any opinions about this, or a suggestion on how to do that in a less ugly way? Jason diff --git a/mm/rmap.c b/mm/rmap.c index 1f9b5a9cb121..090554277e4a 100644 --- a/mm/rmap.c +++ b/mm/rmap.c @@ -1403,6 +1403,8 @@ void folio_add_new_anon_rmap(struct folio *folio, struct vm_area_struct *vma, */ if (!(vma->vm_flags & VM_DROPPABLE)) __folio_set_swapbacked(folio); + else + folio_set_owner_priv_1(folio); __folio_set_anon(folio, vma, address, true); if (likely(!folio_test_large(folio))) { diff --git a/mm/vmscan.c b/mm/vmscan.c index 2e34de9cd0d4..398b46027e8f 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c @@ -4266,7 +4266,8 @@ static bool sort_folio(struct lruvec *lruvec, struct folio *folio, struct scan_c } /* dirty lazyfree */ - if (type == LRU_GEN_FILE && folio_test_anon(folio) && folio_test_dirty(folio)) { + if (type == LRU_GEN_FILE && folio_test_anon(folio) && + folio_test_dirty(folio) && !folio_test_owner_priv_1(folio)) { success = lru_gen_del_folio(lruvec, folio, true); VM_WARN_ON_ONCE_FOLIO(!success, folio); folio_set_swapbacked(folio);