From patchwork Mon Feb 24 18:02:08 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kairui Song X-Patchwork-Id: 13988664 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 4215BC021A4 for ; Mon, 24 Feb 2025 18:03:06 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id B6FAB280013; Mon, 24 Feb 2025 13:03:05 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id B1CE828000C; Mon, 24 Feb 2025 13:03:05 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 997FA280013; Mon, 24 Feb 2025 13:03:05 -0500 (EST) 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 7792528000C for ; Mon, 24 Feb 2025 13:03:05 -0500 (EST) Received: from smtpin29.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id 2D0F4161AC0 for ; Mon, 24 Feb 2025 18:03:05 +0000 (UTC) X-FDA: 83155609530.29.F045E0A Received: from mail-pl1-f174.google.com (mail-pl1-f174.google.com [209.85.214.174]) by imf13.hostedemail.com (Postfix) with ESMTP id 303C02001F for ; Mon, 24 Feb 2025 18:03:02 +0000 (UTC) Authentication-Results: imf13.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=gzqjBBU9; spf=pass (imf13.hostedemail.com: domain of ryncsn@gmail.com designates 209.85.214.174 as permitted sender) smtp.mailfrom=ryncsn@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1740420183; h=from:from:sender:reply-to: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=HFN+prd/q5R/gZ+dsQNPlGWJ7GO+s/LReOSW13ezbxY=; b=YOWBlg5VfkhBZzrUIe9uVIVDyhV3aNvM5KeVNWoABAeDqnTqXMf1zX1YpZofWxJz6N2RkR ce4WTIqXoS134xoTw2K/bIKJS5WGhsUlzlUfyzPdzRtG8lRuVeUsXal1bqox94kdkWjBj8 trv0Eyjd3M4qc5rN79SfwS3JZglxHLM= ARC-Authentication-Results: i=1; imf13.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=gzqjBBU9; spf=pass (imf13.hostedemail.com: domain of ryncsn@gmail.com designates 209.85.214.174 as permitted sender) smtp.mailfrom=ryncsn@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1740420183; a=rsa-sha256; cv=none; b=Kw8NsqCENHYvmz6ZHYL4TZq4q79Ic8Ii6Lo5YE1nr8J5JAPR+DpBVqZ3Vu53scKJZ3ARRe WZPMs5EGqk3tGKKlNrgXCuM+0kzuX2QF8qG48wd5w1Eu2sTGrFkhZuypfs6i2C5akp75ze v/VrjK9AKHTQWbHtaFXmRt3R6NH298A= Received: by mail-pl1-f174.google.com with SMTP id d9443c01a7336-220ca204d04so76490775ad.0 for ; Mon, 24 Feb 2025 10:03:02 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1740420182; x=1741024982; darn=kvack.org; h=content-transfer-encoding:mime-version:reply-to:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to; bh=HFN+prd/q5R/gZ+dsQNPlGWJ7GO+s/LReOSW13ezbxY=; b=gzqjBBU9PaRJ5cPOLfD5QPFTLwQu3RlUR6v+RFUjUXsxW7WJMfbWIKox1IhiCwbA+h 0YVe/9iOEjILMZVavoMVzR2SDcksPYjp2ywRw2NAtdeFSdpbtNGqieJKKs7JaWP6X4ch ewxMN5NNgT6kIS73I5f+9hgWaiL4c4OETOCOWId8MxYeIqbxGnyERG7ixSEhTBbDUoix jmRJmPgVu9wMgmpWdb00JUy1HNj5oP+vxlvj7aY8uMApMvC7vcb+5lCq2v5BAhDkpnAU MrS+9J7VeUDDeO2fDQrTpa4/wfFlxSl0Cg6WKkvuGALpmo9EzZPU/vMiIl1xVQ3DSLKB YA5A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740420182; x=1741024982; h=content-transfer-encoding:mime-version:reply-to:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=HFN+prd/q5R/gZ+dsQNPlGWJ7GO+s/LReOSW13ezbxY=; b=Pfhssch1HdlUiNZjhse70k16kXeqryVPuHRZr6ZYaSK/323xbK/JnQim6H8YTWdq4H 0bwOp3QNiyW2gYAoAtJfq32gXIXDFSeUklMoQI+lqZeZVaZC1xKDikqSg02bQFfjfyf+ psvowAL7VfaWC/8ibThcEHy7X64kRozIG09qSQkQy8y1dhUlXK2Zqel+UEBWZjfKXdnO 5DF9lGIl/fqYhPYl/L6qfPLjTkdINwfLuipomEAonhh/zNhy1cgzsv9vAg5/0c4qyuIM 1y/2W3I0KmU/reLq3JA5bJk/luVBQ/5/2NhiU3SEFgs5Y1Bw3WQx+/5CY8PrUdXAqfo+ M1ew== X-Gm-Message-State: AOJu0Yy7HItpU40MfNh8Rs7d/nZsbJWRbUPh37DsnnUCCG40scErTKRx SbiLIqtB+bGO9YGVaCOUpQYXwRE1IN/mJd89tiCAh3bwJ5NOzH662b356PjxArg= X-Gm-Gg: ASbGncvdjsNmzO2d3xTdbf6h5geCYjM6Dgs8+TByrDCOAdGljpvXBdWKLqxmvogBcSl ul+SkOghOcCORzVZ7SjvEjMb0pyD0C7JWs/4XiCK/fWHhYgTowUu02f+ZjbonQq/wBsWY+UDjvu xuc+gUWfNx5/gq30774MWaxeciXJf0mUpeZgkHTxpBvt9wWFtekgftL5wEIduk/tH8mj1jsnIw2 xg39z+duGSE8JthicwqBzCAV4kLd5NXAO8AhBa5NMNO3X8JlT5/8JpjEem1lcvaH+VSHklVsenN sVu8u9hcnwTmbIjzbjsWSrLBHHsjJw1tV8gtqELfpM9b X-Google-Smtp-Source: AGHT+IE7STMjzV87+hEURfhIdB6UH8LCMfNhfiVrnK0UHPVcExU8+vGKEEn+3A78YlQKgQnFURWA4g== X-Received: by 2002:a17:902:c950:b0:21f:507b:9ad7 with SMTP id d9443c01a7336-2219ff5e619mr252864045ad.25.1740420181541; Mon, 24 Feb 2025 10:03:01 -0800 (PST) Received: from KASONG-MC4.tencent.com ([1.203.117.88]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-220d556e15esm184834695ad.190.2025.02.24.10.02.58 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Mon, 24 Feb 2025 10:03:01 -0800 (PST) From: Kairui Song To: linux-mm@kvack.org Cc: Andrew Morton , Chris Li , Barry Song , Hugh Dickins , Yosry Ahmed , "Huang, Ying" , Baoquan He , Nhat Pham , Johannes Weiner , Baolin Wang , Kalesh Singh , Matthew Wilcox , linux-kernel@vger.kernel.org, Kairui Song Subject: [PATCH v2 3/7] mm, swap: avoid redundant swap device pinning Date: Tue, 25 Feb 2025 02:02:08 +0800 Message-ID: <20250224180212.22802-4-ryncsn@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250224180212.22802-1-ryncsn@gmail.com> References: <20250224180212.22802-1-ryncsn@gmail.com> Reply-To: Kairui Song MIME-Version: 1.0 X-Rspam-User: X-Rspamd-Server: rspam11 X-Rspamd-Queue-Id: 303C02001F X-Stat-Signature: nura764zkkei6fa98uwzi5wnh6d66ij6 X-HE-Tag: 1740420182-426539 X-HE-Meta: U2FsdGVkX18X+6qyzcBNQhpU39x5j4FA+NeKzHV2W6uZ41okBa3PkfkO0aizuOQMsQweIG+V6lgEtRmOF0eqrmkQKL9yPxXXuPO307z3ZEqxoQ5e4ts9FmLDwkhZ9dpbAn+hghngNEafl3+OkLUqNC7kLO3KOkIXLIdEoaQ7MZi2XiFfKUDiRa+apPD3ceGd4uKZ3wif12DujiKhuMT2t2NIhv9r6Mkq8Pz/FCUXNll7Pj3gAFi4VER3W60cvO0Lb8bbjXBssUXtQ5MXSL4P8hR3KGursl7EokOH70SAvL5Nfs6Ce3sk7ur1/QCDdT1qs3Vp91UFnTQMn8lUHVtI2tbHqIjzOyAK28uIRtfzxx0UM/dHCtcV2BD2DGHIlrH668/jLbw7jvW0fPtza65H1HsMgOmSlUAb3IweWeMNCcUxHVq6WwWg7NjNcbFlbsMzbddz6hiJtpxtKfmVVL5Zte6mKph7N6H3DZdUlir+mjAPycI4NjBgKVWZeQ028s5W2hFqgANCCC/EG/MwueWBRU49ecHsUv6Hv8c7Gjryk9tuCDS7D7q8Vd0iv1bLnuaZWdUT7YLEXdEWelhTUnas+HoMmA0LyDpaQfI4Z+m+RotrRJr+NNU05/p5mhE2rwkAsMPqzuAsdMP6voFpYQJ5wzKZopEt9Ba1LG8Nbk1tIi46mFbwNbV3WL9hPkEJmpfuDbi1T+47KVRf0mkeHHYKBXATOX8Zt/kITPW1WDpDNZnT/rKu4usXIM1Pbbjy/y0EhqpT6zP9ivgLM/XyWcQU0GdmuV5YqvhrKDnAG/EWKqzD2licKTlOIdxJHooLDMQUgdefr74b4ce7KodRicIocDSG+jR2LPKmJ+XkBBeWSyC/j1yhGRN5rEearjGEO6rbmOwtUGP9RMrS9YnRh1JWKCzFSOF/kVjJy3MIKFWNKBHFd1Ep4zJdqCd1wRuj0LwFDichWK0AEhHtYshdemB nd/huQWn Gbf4dSUjnlsEXcPvDObsENOC0SVHlYgsdkZkizRVzfBx+3vplzasGGpj7sKc+04z9L5T9O85ic5f9mEGfjpcQHaBjtLDH5zOJ8b/Aj5juRLpThyieuqu9bQnGy3b2LK1HCEt8N1hzOeziSGJoRVXJqPXDZ9m99CWWwENhAZR1i7PUUzN1E411VEpj4MAdZSM/x+J6n2OMS7c375o6DrWf7Tl7wssP0bnB5BW1ddzqMyhJ5lTLprvt9LCtF4ph2HMyXLTonx6P/ukAqKDh8EjFMraS7DhdHKsSTiDg1eN+8rFaPpyfuo7AkMutHegX1ACcRVH/BZD50HjlG3ufNONBeQI33t7TelP+p1tw/cnwMchSDu5yja2aiZlIb08Wsv9nfXDowwyI7bfRCZ86zwIoIlmJMd6FvQaBUADjk5wpJ/KbeTB0G50ZFcu+uZ8x/v/zFbas2fUlk6TJvoE8EBZ5Wk0kLc42THpBAvvAR0Yxg+T4cM7pefqMDnajkc3lleANRbyMdgAvG2+sOh84pjajvKkjuSoKT4aNy8/6knVG+dTPnCgryzaBxDQJgr7kNwcKr37c1oeQdmnDViQK6teo1DW0PQ== 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: From: Kairui Song Currently __read_swap_cache_async() has get/put_swap_device() calls to increase/decrease a swap device reference to prevent swapoff. While some of its callers have already held the swap device reference, e.g in do_swap_page() and shmem_swapin_folio() where __read_swap_cache_async() will finally called. Now there are only two callers not holding a swap device reference, so make them hold a reference instead. And drop the get/put_swap_device calls in __read_swap_cache_async. This should reduce the overhead for swap in during page fault slightly. Signed-off-by: Kairui Song Reviewed-by: Baoquan He --- mm/swap_state.c | 14 ++++++++------ mm/zswap.c | 6 ++++++ 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/mm/swap_state.c b/mm/swap_state.c index a54b035d6a6c..50840a2887a5 100644 --- a/mm/swap_state.c +++ b/mm/swap_state.c @@ -426,17 +426,13 @@ struct folio *__read_swap_cache_async(swp_entry_t entry, gfp_t gfp_mask, struct mempolicy *mpol, pgoff_t ilx, bool *new_page_allocated, bool skip_if_exists) { - struct swap_info_struct *si; + struct swap_info_struct *si = swp_swap_info(entry); struct folio *folio; struct folio *new_folio = NULL; struct folio *result = NULL; void *shadow = NULL; *new_page_allocated = false; - si = get_swap_device(entry); - if (!si) - return NULL; - for (;;) { int err; /* @@ -532,7 +528,6 @@ struct folio *__read_swap_cache_async(swp_entry_t entry, gfp_t gfp_mask, put_swap_folio(new_folio, entry); folio_unlock(new_folio); put_and_return: - put_swap_device(si); if (!(*new_page_allocated) && new_folio) folio_put(new_folio); return result; @@ -552,11 +547,16 @@ struct folio *read_swap_cache_async(swp_entry_t entry, gfp_t gfp_mask, struct vm_area_struct *vma, unsigned long addr, struct swap_iocb **plug) { + struct swap_info_struct *si; bool page_allocated; struct mempolicy *mpol; pgoff_t ilx; struct folio *folio; + si = get_swap_device(entry); + if (!si) + return NULL; + mpol = get_vma_policy(vma, addr, 0, &ilx); folio = __read_swap_cache_async(entry, gfp_mask, mpol, ilx, &page_allocated, false); @@ -564,6 +564,8 @@ struct folio *read_swap_cache_async(swp_entry_t entry, gfp_t gfp_mask, if (page_allocated) swap_read_folio(folio, plug); + + put_swap_device(si); return folio; } diff --git a/mm/zswap.c b/mm/zswap.c index ac9d299e7d0c..83dfa1f9e689 100644 --- a/mm/zswap.c +++ b/mm/zswap.c @@ -1051,14 +1051,20 @@ static int zswap_writeback_entry(struct zswap_entry *entry, struct folio *folio; struct mempolicy *mpol; bool folio_was_allocated; + struct swap_info_struct *si; struct writeback_control wbc = { .sync_mode = WB_SYNC_NONE, }; /* try to allocate swap cache folio */ + si = get_swap_device(swpentry); + if (!si) + return -EEXIST; + mpol = get_task_policy(current); folio = __read_swap_cache_async(swpentry, GFP_KERNEL, mpol, NO_INTERLEAVE_INDEX, &folio_was_allocated, true); + put_swap_device(si); if (!folio) return -ENOMEM;