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 X-Spam-Level: X-Spam-Status: No, score=-3.6 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE, SPF_PASS autolearn=no autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 83F51C433DB for ; Thu, 18 Mar 2021 21:18:51 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id D4E0264E02 for ; Thu, 18 Mar 2021 21:18:50 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org D4E0264E02 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=infradead.org Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id 159D96B0070; Thu, 18 Mar 2021 17:18:50 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 109056B0071; Thu, 18 Mar 2021 17:18:50 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id EEB4B6B0072; Thu, 18 Mar 2021 17:18:49 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0103.hostedemail.com [216.40.44.103]) by kanga.kvack.org (Postfix) with ESMTP id D236D6B0070 for ; Thu, 18 Mar 2021 17:18:49 -0400 (EDT) Received: from smtpin12.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay05.hostedemail.com (Postfix) with ESMTP id 6CCDD1801DBC8 for ; Thu, 18 Mar 2021 21:18:49 +0000 (UTC) X-FDA: 77934259578.12.C488ACE Received: from casper.infradead.org (casper.infradead.org [90.155.50.34]) by imf13.hostedemail.com (Postfix) with ESMTP id 63C41E00029E for ; Thu, 18 Mar 2021 21:18:36 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=Content-Type:MIME-Version:Message-ID: Subject:To:From:Date:Sender:Reply-To:Cc:Content-Transfer-Encoding:Content-ID: Content-Description:In-Reply-To:References; bh=3Qfr6mw9V0SN5F5SpfSA6iN6xUz0jbjGFn+CI2KZ2JU=; b=nGEr0Mbz0pG4UK2gKRDoi+tVjK 2QLdV0i+6I7rN8q1dpMH62jgK59+dUSzd00RdP2FpIBVQ/npiwzw32gyks9hpEk1ViEveJDTEFtN3 TVSht8hAt2xeP5mtrgylx+RnTkG2x2L7jo1G1PtRYvjZscX9zca2hnOLAgdTfM/Efws2PlA18BKjg E6S+aqEO+gJE69MTRPux+QDjL+alMGzHgQ5LqLyGGN8aQqbg3SN72neYWq6avTPy7+wkMcC4Qvhfo qEds4NBLjr6UAfhbJhi3fRINW32l6ZeylfQ+ErBAYsa8qOdxfTtrVjOxE7pxmVb+9AO+ifR9ujoJR yZVodfPg==; Received: from willy by casper.infradead.org with local (Exim 4.94 #2 (Red Hat Linux)) id 1lMzm7-003Uvb-RL; Thu, 18 Mar 2021 21:02:00 +0000 Date: Thu, 18 Mar 2021 21:01:47 +0000 From: Matthew Wilcox To: Huang Ying , linux-mm@kvack.org Subject: page_mapping vs page_file_mapping for swap cache pages Message-ID: <20210318210147.GV3420@casper.infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline X-Stat-Signature: 4yh7ctpg9ujdqata6n8wuohpa83j81mt X-Rspamd-Server: rspam01 X-Rspamd-Queue-Id: 63C41E00029E Received-SPF: none (infradead.org>: No applicable sender policy available) receiver=imf13; identity=mailfrom; envelope-from=""; helo=casper.infradead.org; client-ip=90.155.50.34 X-HE-DKIM-Result: pass/pass X-HE-Tag: 1616102316-93199 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: If we call page_mapping(page) and PageSwapCache is true, we do this: if (unlikely(PageSwapCache(page))) { swp_entry_t entry; entry.val = page_private(page); return swap_address_space(entry); } #define swap_address_space(entry) \ (&swapper_spaces[swp_type(entry)][swp_offset(entry) \ >> SWAP_ADDRESS_SPACE_SHIFT]) (i think we could make that more readable by adding #define swp_as(entry) (swp_offset(entry) >> SWAP_ADDRESS_SPACE_SHIFT) but i digress) If, instead, we call page_file_mapping(page) and PageSwapCache is true, we do this: return page_swap_info(page)->swap_file->f_mapping; struct swap_info_struct *page_swap_info(struct page *page) { swp_entry_t entry = { .val = page_private(page) }; return swp_swap_info(entry); } struct swap_info_struct *swp_swap_info(swp_entry_t entry) { return swap_type_to_swap_info(swp_type(entry)); } static struct swap_info_struct *swap_type_to_swap_info(int type) { if (type >= READ_ONCE(nr_swapfiles)) return NULL; smp_rmb(); /* Pairs with smp_wmb in alloc_swap_info. */ return READ_ONCE(swap_info[type]); } So ... are these different address spaces from each other? If not, why do we have such a complicated way of finding the address space for page_file_mapping()?