Received: by 2002:a05:6a10:413:0:0:0:0 with SMTP id 19csp806437pxp; Fri, 11 Mar 2022 15:39:33 -0800 (PST) X-Google-Smtp-Source: ABdhPJyHRxfsT1faAlJaMmyHPeXqH11Kq/B3Ugn7xEheLdGFaKXVAtvK4nXqzprq2Coo+2adrruV X-Received: by 2002:a05:6a00:1a04:b0:4e1:294:e1e5 with SMTP id g4-20020a056a001a0400b004e10294e1e5mr12363835pfv.51.1647041972994; Fri, 11 Mar 2022 15:39:32 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1647041972; cv=none; d=google.com; s=arc-20160816; b=1KjS3yKNtoIHcq0pjaMwg0k+akNTw7TFWmfm+9YVdTePQmYqBEP0F2VYSAn7xmZsdW gzXaLglobNFiJkAgidCY6AVUKpEnKDWLw2N8EV5EWldzReyYddxMdH0vrCiIOWIpq3BE dsWjjDOnAdOei8cFOGUO32iJXLGmFim7wq3NB/Fz5PkBRdOrR4D4ah0jZQiRwvHAUeF+ 9T7D9pAryJdMFQxVaISWvf3BRCgajGzppF5hUmzfoJE4oOwZh60lMej71q6z5Sswqb4r d2WHBDtyEn1jk7ajOmj2YDbanh5ylAruH7iE9at3VHwNRMVUOWGjvFnyWnnRU9AQYFyE NdcA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:in-reply-to:content-disposition:mime-version :references:message-id:subject:cc:to:from:date:dkim-signature; bh=wWQbXRbezK3NRtMtSi3ATf+Wd1xnlwmrtyeo6SDza4g=; b=forcb3o39bEwjYKOOQkAU3FbAVODTyIVaQXeCAv4ua6ojFGkQTB4lYvPqzSd17mYjf PI6GLNnZ/W0+GaoEuOCEaMgxuaiSWmuU20xQRpCloBdSzj3GBpqRJ0mzzdf9Eg+Yb+5E 3iWmNitrNko70MginZxbW6cVZfXUXJgPWOx05p2niqwg0UTJ2HhR7NjCiGmKa7mqQWXV CSeOpe/XJVMnssKU+gDa225d0rPm/YRuM0TvPr9V1MvJcbukj17hGV9aQu2moZ8YSZ4T q4BBicwiZtaAN1CS5HzMehruASvM/Qvvk0ZSiuIEXs7Yq55JgTSJ4gdKf/S0B7MeMB7S KzUA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@infradead.org header.s=casper.20170209 header.b=cscqcGcM; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from lindbergh.monkeyblade.net (lindbergh.monkeyblade.net. [2620:137:e000::1:18]) by mx.google.com with ESMTPS id s11-20020a17090a880b00b001bd14e01f63si8844120pjn.81.2022.03.11.15.39.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 11 Mar 2022 15:39:32 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) client-ip=2620:137:e000::1:18; Authentication-Results: mx.google.com; dkim=pass header.i=@infradead.org header.s=casper.20170209 header.b=cscqcGcM; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 06AB9E38B9; Fri, 11 Mar 2022 14:54:44 -0800 (PST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229991AbiCKWzC (ORCPT + 99 others); Fri, 11 Mar 2022 17:55:02 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34728 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229940AbiCKWyk (ORCPT ); Fri, 11 Mar 2022 17:54:40 -0500 Received: from casper.infradead.org (casper.infradead.org [IPv6:2001:8b0:10b:1236::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 553E5EACA6 for ; Fri, 11 Mar 2022 14:28:25 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=In-Reply-To:Content-Type:MIME-Version: References:Message-ID:Subject:Cc:To:From:Date:Sender:Reply-To: Content-Transfer-Encoding:Content-ID:Content-Description; bh=wWQbXRbezK3NRtMtSi3ATf+Wd1xnlwmrtyeo6SDza4g=; b=cscqcGcM1lLDTv+e62zL2JJ8/l cjyGSld5RQSrMMzrK/JdnjJVU6L6l3yRd7ZL235Cc91w7HF9VEiyo4+RBu+yHRkTGKLuf/UeNmFtw h1kA3VfBe0IKLd04WWWViDYGEDY0I/TyWjwZJMsdrLandRQ7XdxXsaCxuDDSS7AKWnD/omYWWKJOi swpIjr2rGRmLSPzOy1kjVyeUJDS45VVrW3b4iD2D/PWN59WP7YeZh1EOi0EeuMXi9vBMMsUCpsoq4 EAtBAJK/RHJagf/UtFneS5/33r4uOUE2vzUElJUvYzx+1JhK1siaKTTmGhzSH/ThdHQmeVoZv4s3O MnDl4fmw==; Received: from willy by casper.infradead.org with local (Exim 4.94.2 #2 (Red Hat Linux)) id 1nSmXf-001usC-TV; Fri, 11 Mar 2022 21:11:19 +0000 Date: Fri, 11 Mar 2022 21:11:19 +0000 From: Matthew Wilcox To: David Hildenbrand Cc: Linus Torvalds , Linux Kernel Mailing List , Andrew Morton , Hugh Dickins , David Rientjes , Shakeel Butt , John Hubbard , Jason Gunthorpe , Mike Kravetz , Mike Rapoport , Yang Shi , "Kirill A . Shutemov" , Vlastimil Babka , Jann Horn , Michal Hocko , Nadav Amit , Rik van Riel , Roman Gushchin , Andrea Arcangeli , Peter Xu , Donald Dutile , Christoph Hellwig , Oleg Nesterov , Jan Kara , Liang Zhang , Pedro Gomes , Oded Gabbay , Linux-MM Subject: Re: [PATCH v1 10/15] mm/page-flags: reuse PG_slab as PG_anon_exclusive for PageAnon() pages Message-ID: References: <20220308141437.144919-1-david@redhat.com> <20220308141437.144919-11-david@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: X-Spam-Status: No, score=-2.0 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,RDNS_NONE,SPF_HELO_NONE,T_SCC_BODY_TEXT_LINE autolearn=no autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, Mar 11, 2022 at 08:36:37PM +0100, David Hildenbrand wrote: > I used PG_error before, but felt like using a bit that is never ever > valid to be set/cleared/checked on a subpage would be even a better fit: > > Note the: > > PAGEFLAG(Waiters, waiters, PF_ONLY_HEAD) __CLEARPAGEFLAG(Waiters, waiters, PF_ONLY_HEAD) > > whereby PF_ONLY_HEAD translates to: > > "for compound page, callers only ever operate on the head page." > > > I can just switch to PG_error, but for the second subpage, PG_waiters > should be just fine (unless I am missing something important). I think you're missing something important that almost everybody misses when looking at this code (including me). PF_ANY flags can be set on individual pages. PF_HEAD means "we automatically redirect all operations to the head page". PF_ONLY_HEAD means "If you try to call this on a tail page, we BUG". PF_NO_TAIL means "If you try to read this flag on a tail page, we'll look at the head page instead, but if you try to set/clear this flag on a tail page, we BUG" PF_NO_COMPOUND means "We BUG() if you call this on a compound page" So really, you can reuse any flag as PF_SECOND that isn't PF_ANY. No, that's not what the documentation currently says. It should be. I had a patch to reword it at some point, but I guess it got lost. The current documentation reads like "We replicate the flag currently set on the head page to all tail pages", but that just isn't what the code does.