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 831B3C7EE26 for ; Mon, 22 May 2023 12:02:30 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id F2E5E6B0074; Mon, 22 May 2023 08:02:29 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id EB8E2900003; Mon, 22 May 2023 08:02:29 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id D31D0900002; Mon, 22 May 2023 08:02:29 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id C39DD6B0074 for ; Mon, 22 May 2023 08:02:29 -0400 (EDT) Received: from smtpin07.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id 72EE51404CB for ; Mon, 22 May 2023 12:02:29 +0000 (UTC) X-FDA: 80817753618.07.C7ACB8F Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by imf18.hostedemail.com (Postfix) with ESMTP id 81EB91C0072 for ; Mon, 22 May 2023 12:01:38 +0000 (UTC) Authentication-Results: imf18.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=SU+PRkzw; dmarc=pass (policy=none) header.from=redhat.com; spf=pass (imf18.hostedemail.com: domain of david@redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=david@redhat.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1684756898; 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:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=ZDKkkJybZkdB248LiI2tddkIKMk+rLw6Jh9QgioQ6ws=; b=tHJdaCacgbYckPnWchvdHRJcRJ8nsL9l5JuNbYvVeBYcwMa3qc+akAAEZOvmmOb2/UhYVY 4VxXgDGkpxh4ud2gvqV0UpWp69FUxqxctF03yDAw3pBDb78b0LgdZbd/fN9q7a+SiCMtDb 4OMSWHJPvSskoLHtaWDgFBVqzUvUbc8= ARC-Authentication-Results: i=1; imf18.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=SU+PRkzw; dmarc=pass (policy=none) header.from=redhat.com; spf=pass (imf18.hostedemail.com: domain of david@redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=david@redhat.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1684756898; a=rsa-sha256; cv=none; b=Lx91yL9EJHIsgKbFe7i78zcRhV9X8N1kcHoqiXxR+zQ9fZywyD/8DVuiIsOOUOFeykkq2j QqlFfxW+UkfkXWuvdGBOlzzZ2NsTM8dlWGwr9fZQ7Wj+ZSV0LjvjZ5AvPFzORYdTscDSyM XGWpFe1UEEokK6XFkv9G1iTTPQia/6w= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1684756897; 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: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=ZDKkkJybZkdB248LiI2tddkIKMk+rLw6Jh9QgioQ6ws=; b=SU+PRkzwJO5DlExRwXstP6lj6DKbmNrmqxytVpDoTZhrSU4xD5N4Io2j+MNSEU1KtXu1Hc JOtdjOGyN/DgO1ttwOannR/xJFz/bC8iWMgohU5abUeV2t5Dhj8sK16BuiXxCd1DMjJeiv Ol1QwJRGCcB6mBFBP15cD6j/1ceWino= Received: from mail-wm1-f71.google.com (mail-wm1-f71.google.com [209.85.128.71]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-675-VZMy0kr6MDy2SoivcZl2Zw-1; Mon, 22 May 2023 08:01:36 -0400 X-MC-Unique: VZMy0kr6MDy2SoivcZl2Zw-1 Received: by mail-wm1-f71.google.com with SMTP id 5b1f17b1804b1-3f60536450eso4312985e9.1 for ; Mon, 22 May 2023 05:01:35 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1684756894; x=1687348894; h=content-transfer-encoding:in-reply-to:organization:from:references :cc:to:content-language:subject:user-agent:mime-version:date :message-id:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=ZDKkkJybZkdB248LiI2tddkIKMk+rLw6Jh9QgioQ6ws=; b=K4YOBs1ry+YSLyp3Jkdpe4+F5iahjAG2z9uAxXT6sMlDWnHPM8dq6cHAat+p+snhLC rXDYcLw85AFjhU8aH++AOUhqkM5QACMjbPraH85eIb54rkDlzPPoogRt3gGSAWJDHxSe 71D+6LBv/cTs7QzGi6YuOdBS1dMUMwsJzWKcF9brEfotch8aIM4Y1UonPhAWlvsrRCHn gVfZsS3NTteAYlKmw2+6fuKVfxYK5VI4o90EXaYCEkyBpUKxZimfFVs/saBHB18IShhF QM/vuKYPfY2ET6fKUQySNNPn7w1bKaKmGDNF2oT+xMmGoSvKnafneMr1ZrnIfs76Ff3Q cHcw== X-Gm-Message-State: AC+VfDxGMXR2u/TD0kiW3rE/yEmM1/SrSGqT6cBnCRaUSfExiN8m11ua eOi8BxbsqFDRHEdf+EvHB8ynYRD+3hAX/6SECc0VqDeT4ExaiE/CFpApyIBIrNPRS5ZfYGeq7L1 lKFtTpN180Xs= X-Received: by 2002:a5d:6547:0:b0:306:3ded:2bf1 with SMTP id z7-20020a5d6547000000b003063ded2bf1mr7769262wrv.60.1684756894305; Mon, 22 May 2023 05:01:34 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ5Rc7UVWcQtSjc1UnoxyFdbPKroyaqq11y7Janfx/1SJ/bHgF6Tf33aZG2l+aCwsklb/T1wOg== X-Received: by 2002:a5d:6547:0:b0:306:3ded:2bf1 with SMTP id z7-20020a5d6547000000b003063ded2bf1mr7769237wrv.60.1684756893920; Mon, 22 May 2023 05:01:33 -0700 (PDT) Received: from ?IPV6:2003:cb:c742:c800:d74f:aec6:f8ac:558? (p200300cbc742c800d74faec6f8ac0558.dip0.t-ipconnect.de. [2003:cb:c742:c800:d74f:aec6:f8ac:558]) by smtp.gmail.com with ESMTPSA id i12-20020adffc0c000000b003063db8f45bsm7487682wrr.23.2023.05.22.05.01.32 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 22 May 2023 05:01:33 -0700 (PDT) Message-ID: <653a4881-d17b-6d8e-8066-300c0497a702@redhat.com> Date: Mon, 22 May 2023 14:01:32 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.10.0 Subject: Re: [PATCH -V2 2/5] swap, __read_swap_cache_async(): enlarge get/put_swap_device protection range To: Huang Ying , Andrew Morton Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org, Hugh Dickins , Johannes Weiner , Matthew Wilcox , Michal Hocko , Minchan Kim , Tim Chen , Yang Shi , Yu Zhao References: <20230522070905.16773-1-ying.huang@intel.com> <20230522070905.16773-3-ying.huang@intel.com> From: David Hildenbrand Organization: Red Hat In-Reply-To: <20230522070905.16773-3-ying.huang@intel.com> X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Language: en-US Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Rspam-User: X-Rspamd-Server: rspam12 X-Rspamd-Queue-Id: 81EB91C0072 X-Stat-Signature: 7eb31yrfji6bokmcxm4nmppaqowoeuct X-HE-Tag: 1684756898-130708 X-HE-Meta: U2FsdGVkX18axwGJaw1SSITOlKUqrnYeQ7pt9SZMlMqmpU22n59d66UeZeFgP8OAUm/dx+0pIOY+H/mAVL6ALna/kZuGJ/kuVvtz5Kp73eDjSyYhQCsT0GGanJcufKmq8+GAeNQ48zCzAK273PadkVWTQqNeFiWndcuMzIJs28CaoRoaF/RM4NaY+RIwQ8ECaHHqwqb5ilD5ikddmhCrAHzD3lbbmC0UEXYIpMHnmjQp+/nk+Prw4PH25y2W0j9xKP7AbM0VZ0ZUefba2dkNw23eVafVYYcuDJpZV3jm1qt9Sf7523GmSueKnKdqrQ1ZywLlYVQQd5V1ZO07seVfmJ6/yNa7U4RP3IOmslO4kByctZR6EOT5OgFDb2pyCW9jWfzstuwW5U1ATzY8JpQKjtrAJrlpDPvczwNPub6tFp36OS0czY0FdYHZTEcO6lEejm4kCgZzTaBQtvcyhB3PgKL6HmhK6Q232Bu0UrtiSwWHt43Pdi2gMMvrg7ou5Iu5BTqaJsC0YXeDVs75pFYt+vr7uXx1x1n2aL7oK2s3jQY/0n2cWelSBIUEw2LLqSWqpu2iS6Np3hqyhVPbigGPE6mjB+zJ7KM1pgLNGKCWF2S+8pXJY3QDcAweOhIIgV3WgASrP2h/iaIg9OOJ0+EbnTrAZijwXJygXgK1xguXK7I1Tp5KIf7ASS7JTofTb4Qx9s2noizzeCBDAD0liEfhmZ7VLbtCEaCO/9+ybftUzeBayMSyr8RhoA4oZiXf1paHhrK+px5Ke5GBHWvhI7ie/FHuFdPho2cMyRVKgZBqz+d0JbUOCr8Wjh3KgpXAKdPgcd7E3ZysR6iH2yNDYX2XZMQbVBEjXqHZHaHrMstVyIKd38b1avIM0PNyUBPMErsgQspl/UlkDyfamKzyL7Woq1KiPiLxRdbPRWD2vf5ID/F885rz26/sKE9lRxifcOCzPt6N1LihlDG3phxdq2g jPz2xEoJ k4TDASamwdsMBJirPKRquZVQcPY0RUXhN7gDjdK39FnfuSJtDdrX+rGMVCOcuNq9dHM1S/osXmB9+5PSxBkAVw5mNxlJbX7dnEkTcUARTqNYRh7gxjolwNstor5EXysuPypjK7BpaOAqW1fxnECGaC4rLgAzDxylZdspJdpufcuexLn/llKALvRuykHFnJeLxLuLzulHfADEVBJlVLHgBCUDfrFIzW6YYTAQlCFFikQ5910LNatCEFTBvF6g49yhVJTF43cSwFLdbzjGco+1ISjr2EGFFN9zeey+PJAzbLNPRi7TFYxhI6s2wE12yZXSXQB61H/9FODdOVvaxj8Jb5FeJvdROLovmcEBxJX2YM8gCzv6w4p1BUWtxg5K5Ghfp1wpmVYXvoygrN2wjEqDzqrjXIPscH86Cx9Mvmem1JeFCFBRYyCo7k3yPNFMEktOJ+gYckU5NBxHLLE94TtddjiZqS1ngX+vToyY92OjYLGhD1o1/adGMTrm3vYfR2NbWeIKCZSds89BP47yJ+2gubYsXS7w0Hf8br7IvvfeBOum+CXtc2UPcOXbnL2Io7Ay4qVgerw18MdAej8XhwyQvVXb0UdQGTVjeDWo6ZUwmqzTIdtQa/vxybjj0A1hwj60IrbloU9iew0bKCgoGROJIZYV0tnQA8yT3gkfXcnsrrQSJPS0PwN3uZTGkh4/c6AzenOmPVytNl5dhYa2BqvSG32dW1GOZjGJaRuCr2Q3iLxE0Z4lLyxTWESLAXTdM5n0g2JkW 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: On 22.05.23 09:09, Huang Ying wrote: > This makes the function a little easier to be understood because we > don't need to consider swapoff. And this makes it possible to remove > get/put_swap_device() calling in some functions called by > __read_swap_cache_async(). > > Signed-off-by: "Huang, Ying" > Cc: David Hildenbrand > Cc: Hugh Dickins > Cc: Johannes Weiner > Cc: Matthew Wilcox > Cc: Michal Hocko > Cc: Minchan Kim > Cc: Tim Chen > Cc: Yang Shi > Cc: Yu Zhao > --- > mm/swap_state.c | 33 ++++++++++++++++++++++----------- > 1 file changed, 22 insertions(+), 11 deletions(-) > > diff --git a/mm/swap_state.c b/mm/swap_state.c > index b76a65ac28b3..a1028fe7214e 100644 > --- a/mm/swap_state.c > +++ b/mm/swap_state.c > @@ -417,9 +417,13 @@ struct page *__read_swap_cache_async(swp_entry_t entry, gfp_t gfp_mask, > { > struct swap_info_struct *si; > struct folio *folio; > + struct page *page; > void *shadow = NULL; > > *new_page_allocated = false; > + si = get_swap_device(entry); > + if (!si) > + return NULL; > > for (;;) { > int err; > @@ -428,14 +432,12 @@ struct page *__read_swap_cache_async(swp_entry_t entry, gfp_t gfp_mask, > * called after swap_cache_get_folio() failed, re-calling > * that would confuse statistics. > */ > - si = get_swap_device(entry); > - if (!si) > - return NULL; > folio = filemap_get_folio(swap_address_space(entry), > swp_offset(entry)); > - put_swap_device(si); > - if (!IS_ERR(folio)) > - return folio_file_page(folio, swp_offset(entry)); > + if (!IS_ERR(folio)) { > + page = folio_file_page(folio, swp_offset(entry)); > + goto got_page; > + } > > /* > * Just skip read ahead for unused swap slot. > @@ -445,8 +447,8 @@ struct page *__read_swap_cache_async(swp_entry_t entry, gfp_t gfp_mask, > * as SWAP_HAS_CACHE. That's done in later part of code or > * else swap_off will be aborted if we return NULL. > */ > - if (!__swp_swapcount(entry) && swap_slot_cache_enabled) > - return NULL; > + if (!swap_swapcount(si, entry) && swap_slot_cache_enabled) > + goto fail; > > /* > * Get a new page to read into from swap. Allocate it now, > @@ -455,7 +457,7 @@ struct page *__read_swap_cache_async(swp_entry_t entry, gfp_t gfp_mask, > */ > folio = vma_alloc_folio(gfp_mask, 0, vma, addr, false); > if (!folio) > - return NULL; > + goto fail; > > /* > * Swap entry may have been freed since our caller observed it. > @@ -466,7 +468,7 @@ struct page *__read_swap_cache_async(swp_entry_t entry, gfp_t gfp_mask, > > folio_put(folio); > if (err != -EEXIST) > - return NULL; > + goto fail; > > /* > * We might race against __delete_from_swap_cache(), and > @@ -500,12 +502,17 @@ struct page *__read_swap_cache_async(swp_entry_t entry, gfp_t gfp_mask, > /* Caller will initiate read into locked folio */ > folio_add_lru(folio); > *new_page_allocated = true; > - return &folio->page; > + page = &folio->page; > +got_page: > + put_swap_device(si); > + return page; > > fail_unlock: > put_swap_folio(folio, entry); > folio_unlock(folio); > folio_put(folio); > +fail: Maybe better "fail_put_swap". We now hold the swap device ref longer than we used to, prevent swapoff over the whole operation. I guess there is no way we can deadlock this way? In general, looks good to me. -- Thanks, David / dhildenb