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 B04D6C5479D for ; Wed, 11 Jan 2023 14:29:38 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 9F67F8E0001; Wed, 11 Jan 2023 09:29:13 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 66E8390000C; Wed, 11 Jan 2023 09:29:13 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id BC1AC8E000F; Wed, 11 Jan 2023 09:29:12 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id 74A688E000F for ; Wed, 11 Jan 2023 09:29:11 -0500 (EST) Received: from smtpin14.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id 51CB61A0B20 for ; Wed, 11 Jan 2023 14:29:11 +0000 (UTC) X-FDA: 80342750502.14.7891EAA Received: from casper.infradead.org (casper.infradead.org [90.155.50.34]) by imf01.hostedemail.com (Postfix) with ESMTP id A2DD74001E for ; Wed, 11 Jan 2023 14:29:09 +0000 (UTC) Authentication-Results: imf01.hostedemail.com; dkim=pass header.d=infradead.org header.s=casper.20170209 header.b=uiiSCM8U; dmarc=none; spf=none (imf01.hostedemail.com: domain of willy@infradead.org has no SPF policy when checking 90.155.50.34) smtp.mailfrom=willy@infradead.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1673447349; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=BMbYaVMlHD0AsYDSTxv30HdoHwDdnYnBxZnWDD3/zMk=; b=GRHEoIC4WSI8276s/dBDx3W6BQ5gu973enDeDSkFsLpF+OVE723Xg0O3wo4z2mqyVjMsYy Wb3QJ5ybYZ/th+gLfZnuM1XnXH4AGfvK8waAC0BvIYKenlxBjlg5PnctQTpKIenokAmqHN Lqgjt0QUMuv6cQd3FJaLy1hm1xSQEiw= ARC-Authentication-Results: i=1; imf01.hostedemail.com; dkim=pass header.d=infradead.org header.s=casper.20170209 header.b=uiiSCM8U; dmarc=none; spf=none (imf01.hostedemail.com: domain of willy@infradead.org has no SPF policy when checking 90.155.50.34) smtp.mailfrom=willy@infradead.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1673447349; a=rsa-sha256; cv=none; b=cZfSeVUb82ik1NJwCYWyYMRoz4AM9PZU11D4BeMW8S0HQcF18RtZ6uNgFgVMBprYF3gnA2 a4TZSmajROBCh2aRk1/+RHfkJCUVygsWaHISaGLYVSU7IjcgPIh9iv6S5Qupy80Fta5lJV e4bsWBMqMhwby3b9cegI7R2TuuW77Eo= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Sender:Reply-To: Content-Type:Content-ID:Content-Description; bh=BMbYaVMlHD0AsYDSTxv30HdoHwDdnYnBxZnWDD3/zMk=; b=uiiSCM8U/hyGbtUl2HnxpQ5uOa jDNWPMglAGc5EMjvKMt/hA09To3NQfiI7nhFZsZID4OezZjgjRU+YUcVkqS5ZWziXdUw+sFwUTwwq nzhZaZobsWLUvQKTH63/W0G7vjDVkfqfoo/ov5Zuv45EjO1mYirkwm+KbT1dwCk8bOOaY9QpitSv0 yaOpdagvOQlghHCV8xVFdYEaAxaKRlmUT/eauVlLVMBuykCwAANf4yFPiPg5Nrw6ssc5rcPUC9t1K GqcB73WsN6iqaRnIzekAfHWGvVXbiuNcLliHTV7tJDdbrsW0BQRjzqkJo5Wt70IbiAotLc+RAbcZl IOjbWGng==; Received: from willy by casper.infradead.org with local (Exim 4.94.2 #2 (Red Hat Linux)) id 1pFc6Q-004CZL-OK; Wed, 11 Jan 2023 14:29:18 +0000 From: "Matthew Wilcox (Oracle)" To: Andrew Morton Cc: "Matthew Wilcox (Oracle)" , linux-mm@kvack.org, Hugh Dickins Subject: [PATCH 16/28] mm: Reimplement compound_order() Date: Wed, 11 Jan 2023 14:29:02 +0000 Message-Id: <20230111142915.1001531-17-willy@infradead.org> X-Mailer: git-send-email 2.37.1 In-Reply-To: <20230111142915.1001531-1-willy@infradead.org> References: <20230111142915.1001531-1-willy@infradead.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Rspam-User: X-Rspamd-Server: rspam02 X-Rspamd-Queue-Id: A2DD74001E X-Stat-Signature: 1irortqeogtubz5c3pwtc854xc8z38sk X-HE-Tag: 1673447349-908371 X-HE-Meta: U2FsdGVkX1+2jsPLDe13lSFHSGbrJmOGHqCvKODxkL4n6jKO8hCmv7GtTh0M27s5eXxT8EJEiki7NfDYaDJNekHZs2Egpq9cbKajpwbcu8WWubJ0ud0r8szi89y7z+2Dy/8NEenJCZJ1oE96HBhpMJImo/EiNp9ylVOdzmXvIeWy9UCZqHwO+jzP8FdOixdb4PAOD4OXeaOdkxRTyz1ONocsEtsmG/aLZp8/aMsnyYBQPdFKy4pDOP0czgyTOofbsl8aHjBSU+BzMoAv/c+LlxTtO0ceQuSnOcFJJfDMsT+piAE+mCu0zm69oj0gCUu2Awmgx9uuBYEOQ9gtFVZrGClUE8UEM1cbS49mtTN/j6EldUgjkyaaLSxZ3jrVmHRZRWY49LgO0gu+pJ68vdiRLIvFYlLq0AimyIa1CqYZ13fbmSqDIcJl9Y2PyGGs4ukzUZ6wC1LF+ih6K5cnGKUiHs02TsZnLqFDHMe3VU5cLT1t9C4nhMclIR/2FSdjp3LdN7S1oVkpL1PTvyEZKI0+n6en4eQmlLP7CBIifST7I3VX2dlaIgRTJII55l87xDOBYm8MNHyJjJ5nO8CbbdE7BPeUOLJKQjOFwmIp39Tn0ZZRnOavbyn6oS135qU7RnKxtX41+iPhbijs64LtItIZJ9gXcbHVTGH8RXGA0lwcLMHlFUBAiSvzqAS4RKMxYmshRXWHVFtFE+2AnrUMXEMYvtUZvlfgbxYhDeuHFAoFUmH25JDKku+z0F5lNttvMlPBdeHQXP6Nr7Os1Ram0olrPxcX+WnQ348W6B3OpkLmpwMFg83tfXWb8maHJuXodMLgmAWhkPE0GBnw2430HTdYVEa5n9nHEBD9DPmews9/S+do1nwa304UFCVJAEPQ6JNCGdQe99O24MRTN0/g86pl9SQdm7j3pySHDfmeRRGFecwBwr7f0h+GdA== 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: Make compound_order() use struct folio. It can't be turned into a wrapper around folio_order() as a page can be turned into a tail page between a check in compound_order() and the assertion in folio_test_large(). Signed-off-by: Matthew Wilcox (Oracle) --- include/linux/mm.h | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/include/linux/mm.h b/include/linux/mm.h index 5002dd4db544..ddf09522c0d3 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -719,11 +719,20 @@ int vma_is_stack_for_current(struct vm_area_struct *vma); struct mmu_gather; struct inode; +/* + * compound_order() can be called without holding a reference, which means + * that niceties like page_folio() don't work. These callers should be + * prepared to handle wild return values. For example, PG_head may be + * set before _folio_order is initialised, or this may be a tail page. + * See compaction.c for some good examples. + */ static inline unsigned int compound_order(struct page *page) { - if (!PageHead(page)) + struct folio *folio = (struct folio *)page; + + if (!test_bit(PG_head, &folio->flags)) return 0; - return page[1].compound_order; + return folio->_folio_order; } /** -- 2.35.1