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 DEABAC433EF for ; Tue, 11 Jan 2022 06:48:19 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 754646B0073; Tue, 11 Jan 2022 01:48:19 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 703E66B0074; Tue, 11 Jan 2022 01:48:19 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 5F39D6B0075; Tue, 11 Jan 2022 01:48:19 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0076.hostedemail.com [216.40.44.76]) by kanga.kvack.org (Postfix) with ESMTP id 5196F6B0073 for ; Tue, 11 Jan 2022 01:48:19 -0500 (EST) Received: from smtpin09.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay04.hostedemail.com (Postfix) with ESMTP id 0891195AF5 for ; Tue, 11 Jan 2022 06:48:19 +0000 (UTC) X-FDA: 79017077076.09.7924A6B Received: from mail-il1-f169.google.com (mail-il1-f169.google.com [209.85.166.169]) by imf30.hostedemail.com (Postfix) with ESMTP id ADA2A8000A for ; Tue, 11 Jan 2022 06:48:18 +0000 (UTC) Received: by mail-il1-f169.google.com with SMTP id c4so13588399iln.7 for ; Mon, 10 Jan 2022 22:48:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to; bh=4ITfgoI/hkOmitkObr0MHrURTFUggwhsmZdLLG4Gu2M=; b=GABoh6pTU+pkl9fJ9X9wQyh8l3BAM0EjSTJ8UZIw0e63NG2i+GA0fm1hYaysk5wJN/ H6rs77qHpwEimHUe1jN16hBsJvebs6S6fU8PUu1jDtpC9JDJcieelEGDirjE0k1vGY/6 evh2E5j4Td1nsfFrfbq6WvpWZo/Ivt2UBOK5ModiZ8TiC6NvdCFgUAXQEhe/94cZ8avk 7WH8xDyE0nNWwbHlSFq8P0vDA0Fs56hR7Y0O7DjoXqVO5TfLrnMVeGRrZwhJKPL5e7R7 vYs3TXmDX0vytbI8UQyI4rdkpOTLj0bu+BSlUn7jhUsKuQolqvkehX/TepcNEfU6lMt8 58nw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to; bh=4ITfgoI/hkOmitkObr0MHrURTFUggwhsmZdLLG4Gu2M=; b=7OxYC7Q1IVAVFb6+UCSRHwodhB0CEy7LaEbefkCol44yiOpRg+NjFHQKWESy5rBwTL toHZsFqY3ggNrVUp7mc1DkCJgw4Wdp+lFiduJBVF/7mKfjkO8vtCwYbNIHDPG2U9mAz+ CwLEOfUTrWDMpZSkba3gXV4bs3W1Zf2FEzeUvknansICREEGyjcBZXeh5uvWzQSLrmYC Oz2XJtdTLFpUrxauz5DTWW6NIPhPJwVfQSyAIPw7jR09qDG1kXa7EBlCpqx7bRKym4yq RYYR6PQHy6qLhm6ySzKow98EF5TLHU/dvD5acEYQ9A6yDbWrv9TnqvbTs2bafB0GdSYZ iDFw== X-Gm-Message-State: AOAM532XbzchfKLVa3hf08a0S/iiVvPcxYVG42fVKSZjpAUoGxyWILP6 Viwnb4Qosms/GxqZdu2TUxHb5w== X-Google-Smtp-Source: ABdhPJxkBBT+vJl/fMTZBYKd1S3+ewDILh1A0DcwFOkufVI7CJv0nZmtTj3GQxdMLl6jqhJ6R/uVQw== X-Received: by 2002:a05:6e02:12ee:: with SMTP id l14mr1645211iln.313.1641883697841; Mon, 10 Jan 2022 22:48:17 -0800 (PST) Received: from google.com ([2620:15c:183:200:bdd9:6181:19a:9d62]) by smtp.gmail.com with ESMTPSA id n6sm4481201ili.60.2022.01.10.22.48.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Jan 2022 22:48:17 -0800 (PST) Date: Mon, 10 Jan 2022 23:48:13 -0700 From: Yu Zhao To: Mauricio Faria de Oliveira Cc: Andrew Morton , Minchan Kim , linux-mm@kvack.org, linux-block@vger.kernel.org, Huang Ying , Miaohe Lin , Yang Shi Subject: Re: [PATCH v2] mm: fix race between MADV_FREE reclaim and blkdev direct IO read Message-ID: References: <20220105233440.63361-1-mfo@canonical.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20220105233440.63361-1-mfo@canonical.com> X-Rspamd-Server: rspam05 X-Rspamd-Queue-Id: ADA2A8000A X-Stat-Signature: rcyq34hxd5ziq5yxj3f5swcr8xnsxsaj Authentication-Results: imf30.hostedemail.com; dkim=pass header.d=google.com header.s=20210112 header.b=GABoh6pT; spf=pass (imf30.hostedemail.com: domain of yuzhao@google.com designates 209.85.166.169 as permitted sender) smtp.mailfrom=yuzhao@google.com; dmarc=pass (policy=reject) header.from=google.com X-HE-Tag: 1641883698-19802 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 Wed, Jan 05, 2022 at 08:34:40PM -0300, Mauricio Faria de Oliveira wrote: > diff --git a/mm/rmap.c b/mm/rmap.c > index 163ac4e6bcee..8671de473c25 100644 > --- a/mm/rmap.c > +++ b/mm/rmap.c > @@ -1570,7 +1570,20 @@ static bool try_to_unmap_one(struct page *page, struct vm_area_struct *vma, > > /* MADV_FREE page check */ > if (!PageSwapBacked(page)) { > - if (!PageDirty(page)) { > + int ref_count = page_ref_count(page); > + int map_count = page_mapcount(page); > + > + /* > + * The only page refs must be from the isolation > + * (checked by the caller shrink_page_list() too) > + * and one or more rmap's (dropped by discard:). > + * > + * Check the reference count before dirty flag > + * with memory barrier; see __remove_mapping(). > + */ > + smp_rmb(); > + if ((ref_count - 1 == map_count) && > + !PageDirty(page)) { > /* Invalidate as we cleared the pte */ > mmu_notifier_invalidate_range(mm, > address, address + PAGE_SIZE); Out of curiosity, how does it work with COW in terms of reordering? Specifically, it seems to me get_page() and page_dup_rmap() in copy_present_pte() can happen in any order, and if page_dup_rmap() is seen first, and direct io is holding a refcnt, this check can still pass?