Received: by 2002:a05:6a10:a841:0:0:0:0 with SMTP id d1csp2585737pxy; Sat, 24 Apr 2021 21:35:37 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyK/BrEz8L1TmGWm3kGJ6hZ7/wgLsUCHB2O3uIqIHa4L/pBKZWgxvCFpMJ4+Un9meq/mcrF X-Received: by 2002:a05:6402:416:: with SMTP id q22mr13479040edv.204.1619325337455; Sat, 24 Apr 2021 21:35:37 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1619325337; cv=none; d=google.com; s=arc-20160816; b=dTFAdilUO1Ymb1T13CYR8L3F+WgDE7GjDQmMYmipHmF6knBO95vEQRoAWx06oau2l6 1exJ7T+CT+WZgzyrawut1yNDK/tJWDHntapalbtSyiEDn5F5/Lj3JR9GB6+biOJ9gphQ cf5WcXHmq8/p76k7ADL82wYiqrshWAK0ewhrWME6jOXaliGwv/8XkVf57LxE7hNuvJGG To2xnNE/8JDgL6e6aozThtM/7Hbsk/QbsY0xqAe0iOcanqMx5hyn/+BXvnwhAM1b0KIa N2YmB2hFeOuiKC+4798T8xJWBgKiIbty7nV6RnChvf7l7ZJWaPL4Th3uknTCF8f18pt3 bo8Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:user-agent:message-id:in-reply-to :date:references:subject:cc:to:from:ironport-sdr:ironport-sdr; bh=LrSW1gAuH5ID4n0HsfCuCjgPlX465OzTksLSzC5akeQ=; b=RGxKgTBFOhDGzXvix9MPw8JQHS2RCjJqd9Z2eHdFkGxifIixrU4KXtB3HlPU0c5jqj AGY2SeTcOnsvyxL8vm7/Mv6uJrPSO23PmCnEbX3U4tYR5zmgd4bfcOnIMCf+FYx8cHMj k/ttkGvRQXMKtVqPCF+CfFHKowlmcOvXod8fVgzbckLgpWHugnd4iptK8jKob+Vrscx4 ZLgqLnJHr6Ko9rVEZjv47coPIUS22MyBchIyQwGRz2UMlayKI3VsEHL8AtnskJ4kqPl1 3EuWxdBHVVhi0ADx8GFJMNcNo4sGbDchgT5rDUXyCGn+ppBI7jC26gXXg5McCtcOJYZD pYTw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id jl3si9711496ejc.488.2021.04.24.21.34.43; Sat, 24 Apr 2021 21:35:37 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229466AbhDYEVA (ORCPT + 99 others); Sun, 25 Apr 2021 00:21:00 -0400 Received: from mga11.intel.com ([192.55.52.93]:15603 "EHLO mga11.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229445AbhDYEU7 (ORCPT ); Sun, 25 Apr 2021 00:20:59 -0400 IronPort-SDR: zVzHmtPfpiB852+CK+GSDrjJDdoob6fYlsAGGh7+tUBnGLP4kdqhCyRTrrlY0r6yVomTNIIw2b bxs/4FNtOt3w== X-IronPort-AV: E=McAfee;i="6200,9189,9964"; a="193024389" X-IronPort-AV: E=Sophos;i="5.82,249,1613462400"; d="scan'208";a="193024389" Received: from orsmga008.jf.intel.com ([10.7.209.65]) by fmsmga102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Apr 2021 21:20:20 -0700 IronPort-SDR: ym8i6ju2tJwF/ZR3B2VcI2uSfKn88r2osxdbyTNHkYF7bbyB0Tssbnf2Mfov/F4fTM5Pywopsp 2mkKVVhlvOaw== X-IronPort-AV: E=Sophos;i="5.82,249,1613462400"; d="scan'208";a="428932092" Received: from yhuang6-desk1.sh.intel.com (HELO yhuang6-desk1.ccr.corp.intel.com) ([10.239.13.1]) by orsmga008-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Apr 2021 21:20:15 -0700 From: "Huang, Ying" To: Miaohe Lin Cc: , , , , , , , , , , , , , , Subject: Re: [PATCH v4 4/4] mm/shmem: fix shmem_swapin() race with swapoff References: <20210425023806.3537283-1-linmiaohe@huawei.com> <20210425023806.3537283-5-linmiaohe@huawei.com> <87bla3xdt0.fsf@yhuang6-desk1.ccr.corp.intel.com> <0213893e-2b05-8d2e-9a79-e8a71db23644@huawei.com> Date: Sun, 25 Apr 2021 12:20:13 +0800 In-Reply-To: <0213893e-2b05-8d2e-9a79-e8a71db23644@huawei.com> (Miaohe Lin's message of "Sun, 25 Apr 2021 11:33:42 +0800") Message-ID: <87y2d7vvuq.fsf@yhuang6-desk1.ccr.corp.intel.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.1 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=ascii Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Miaohe Lin writes: > On 2021/4/25 11:07, Huang, Ying wrote: >> I think it's better to put_swap_device() just before returning from the >> function. It's not a big issue to slow down swapoff() a little. And >> this will make the logic easier to be understood. >> > > shmem_swapin_page() already has a methed, i.e. locked page, to prevent races. I was intended > to not mix with that. But your suggestion is good as this will make the logic easier to be > understood. > > Just to make sure, is this what you mean? Many thanks! Yes. Just a minor comment. > > diff --git a/mm/shmem.c b/mm/shmem.c > index 26c76b13ad23..737e5b3200c3 100644 > --- a/mm/shmem.c > +++ b/mm/shmem.c > @@ -1696,6 +1696,7 @@ static int shmem_swapin_page(struct inode *inode, pgoff_t index, > struct address_space *mapping = inode->i_mapping; > struct shmem_inode_info *info = SHMEM_I(inode); > struct mm_struct *charge_mm = vma ? vma->vm_mm : current->mm; > + struct swap_info_struct *si; > struct page *page; > swp_entry_t swap; > int error; > @@ -1704,6 +1705,12 @@ static int shmem_swapin_page(struct inode *inode, pgoff_t index, > swap = radix_to_swp_entry(*pagep); > *pagep = NULL; > > + /* Prevent swapoff from happening to us. */ > + si = get_swap_device(swap); > + if (unlikely(!si)) { I don't think it's necessary to use unlikely() here. Best Regards, Huang, Ying > + error = EINVAL; > + goto failed; > + } > /* Look it up and read it in.. */ > page = lookup_swap_cache(swap, NULL, 0); > if (!page) { > @@ -1765,6 +1772,8 @@ static int shmem_swapin_page(struct inode *inode, pgoff_t index, > swap_free(swap); > > *pagep = page; > + if (si) > + put_swap_device(si); > return 0; > failed: > if (!shmem_confirm_swap(mapping, index, swap)) > @@ -1775,6 +1784,9 @@ static int shmem_swapin_page(struct inode *inode, pgoff_t index, > put_page(page); > } > > + if (si) > + put_swap_device(si); > + > return error; > } > >> Best Regards, >> Huang, Ying >>