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.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED 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 3C2FEC433DB for ; Tue, 30 Mar 2021 01:58:39 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 0F0B96157F for ; Tue, 30 Mar 2021 01:58:39 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230361AbhC3B6D (ORCPT ); Mon, 29 Mar 2021 21:58:03 -0400 Received: from mga03.intel.com ([134.134.136.65]:48469 "EHLO mga03.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229842AbhC3B6B (ORCPT ); Mon, 29 Mar 2021 21:58:01 -0400 IronPort-SDR: Djkd01zS5ZCH+2c2EGsRs2AnrWiCBlFLiFLUPlohgmZ0lD0sAVC8wRhpLm3EQXgJktMtmTOHTt BHCKafYtiDBw== X-IronPort-AV: E=McAfee;i="6000,8403,9938"; a="191696215" X-IronPort-AV: E=Sophos;i="5.81,289,1610438400"; d="scan'208";a="191696215" Received: from orsmga008.jf.intel.com ([10.7.209.65]) by orsmga103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 29 Mar 2021 18:58:00 -0700 IronPort-SDR: oZrfYiEFLYHlv33w1/1ygwjh5hfSEQi2PdpgjdsJ55B6ynmAGxF5Xsq+49kCowZkCbOsI1+dWM sAPTeRzemSmg== X-IronPort-AV: E=Sophos;i="5.81,289,1610438400"; d="scan'208";a="417938943" 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; 29 Mar 2021 18:57:58 -0700 From: "Huang, Ying" To: Miaohe Lin Cc: Linux-MM , linux-kernel , Andrew Morton , Matthew Wilcox , Yu Zhao , Shakeel Butt , Alex Shi , Minchan Kim Subject: Re: [Question] Is there a race window between swapoff vs synchronous swap_readpage References: <364d7ce9-ccb7-fa04-7067-44a96be87060@huawei.com> Date: Tue, 30 Mar 2021 09:57:55 +0800 In-Reply-To: <364d7ce9-ccb7-fa04-7067-44a96be87060@huawei.com> (Miaohe Lin's message of "Mon, 29 Mar 2021 21:18:20 +0800") Message-ID: <8735wdbdy4.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 Hi, Miaohe, Miaohe Lin writes: > Hi all, > I am investigating the swap code, and I found the below possible race window: > > CPU 1 CPU 2 > ----- ----- > do_swap_page > skip swapcache case (synchronous swap_readpage) > alloc_page_vma > swapoff > release swap_file, bdev, or ... > swap_readpage > check sis->flags is ok > access swap_file, bdev or ...[oops!] > si->flags = 0 > > The swapcache case is ok because swapoff will wait on the page_lock of swapcache page. > Is this will really happen or Am I miss something ? > Any reply would be really grateful. Thanks! :) This appears possible. Even for swapcache case, we can't guarantee the swap entry gotten from the page table is always valid too. The underlying swap device can be swapped off at the same time. So we use get/put_swap_device() for that. Maybe we need similar stuff here. Best Regards, Huang, Ying