Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp1048683imu; Wed, 16 Jan 2019 11:51:14 -0800 (PST) X-Google-Smtp-Source: ALg8bN7+/cDQ+mNAg0Iak+2sFZspvb9M5Zq3ssuEfnzPpNOXpW6Tt829UxsJ0JAbc+wRO+irj8me X-Received: by 2002:a17:902:830a:: with SMTP id bd10mr11526506plb.321.1547668274517; Wed, 16 Jan 2019 11:51:14 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1547668274; cv=none; d=google.com; s=arc-20160816; b=tBuRZphixKfiYIdfjBsJOb5RhFHkPSkUpR0Phqmx81GSka15YFxa2vTSW7xf92IIA1 vraK2ABCowM0kGOYC0RAvVhQObS4JRzH/8ojlIcW3TLZqWI3PLbMNU/oHbe5b2QH3M81 VG02R6VnH5Xcv8ql1YI1lbAwJkPRmpWhtwwbdqqUSSQTNu3bAdLo17BnD7D+opgU2Si/ XWTLgEyDPVmO4n+DP4NqvSgr7+0FkdXhRx0SxOK+nkfy/WgRMYyhMf19qMbIgvwaTA6v p5QJVhz5B71NphXGsezilU2iRkkyPpCzFQ7cKsIhXtUw6IyAGqkCSF4dr6u5k7Ho/yrV ahAQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:in-reply-to :content-disposition:mime-version:references:message-id:subject:cc :to:from:date; bh=vP1kvLo/+kWlYnWFMV7abusOY5hMjXzRc+x0mXhF/QM=; b=Bk66MKZcyv0cu9RT+gJwc2XGZLb5HHXd3WaqXdCZxCoIJUapQj5hKpZVHwtbPFpU7m pPUrHrjssjMqCowUUTmzX70RXmDpWcWBEf2QOAFqlddB+qD7VE3l4TtY6S3/FsyhKmwe CjBTLaUqcnbxOrvo/8LweDehHAnMj4Xxsh4KxNsWzrLokytsdVXxWim400wkwj+ODIUt qgtGoYMBTvpXFdNo6zTGqfPCOIe6of8xwSr87L3wGX6MIPL3qKpQsz6tbdyR6mOOD/xl 32aJw4Cr8KtDL+SOrdpfkPhV55yCUiZMsDA1XeCiUlBFChwIRkNLVdGBddOhXYxUvKiR EgOQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id f12si6828405pgd.68.2019.01.16.11.50.56; Wed, 16 Jan 2019 11:51:14 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2389627AbfAPLiW (ORCPT + 99 others); Wed, 16 Jan 2019 06:38:22 -0500 Received: from mx2.suse.de ([195.135.220.15]:55420 "EHLO mx1.suse.de" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1731984AbfAPLiW (ORCPT ); Wed, 16 Jan 2019 06:38:22 -0500 X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay1.suse.de (unknown [195.135.220.254]) by mx1.suse.de (Postfix) with ESMTP id 675DEAE76; Wed, 16 Jan 2019 11:38:20 +0000 (UTC) Received: by quack2.suse.cz (Postfix, from userid 1000) id 32EED1E1580; Wed, 16 Jan 2019 12:38:19 +0100 (CET) Date: Wed, 16 Jan 2019 12:38:19 +0100 From: Jan Kara To: Jerome Glisse Cc: Jan Kara , John Hubbard , Matthew Wilcox , Dave Chinner , Dan Williams , John Hubbard , Andrew Morton , Linux MM , tom@talpey.com, Al Viro , benve@cisco.com, Christoph Hellwig , Christopher Lameter , "Dalessandro, Dennis" , Doug Ledford , Jason Gunthorpe , Michal Hocko , mike.marciniszyn@intel.com, rcampbell@nvidia.com, Linux Kernel Mailing List , linux-fsdevel Subject: Re: [PATCH 1/2] mm: introduce put_user_page*(), placeholder versions Message-ID: <20190116113819.GD26069@quack2.suse.cz> References: <20190111165141.GB3190@redhat.com> <1b37061c-5598-1b02-2983-80003f1c71f2@nvidia.com> <20190112020228.GA5059@redhat.com> <294bdcfa-5bf9-9c09-9d43-875e8375e264@nvidia.com> <20190112024625.GB5059@redhat.com> <20190114145447.GJ13316@quack2.suse.cz> <20190114172124.GA3702@redhat.com> <20190115080759.GC29524@quack2.suse.cz> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20190115080759.GC29524@quack2.suse.cz> User-Agent: Mutt/1.10.1 (2018-07-13) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue 15-01-19 09:07:59, Jan Kara wrote: > Agreed. So with page lock it would actually look like: > > get_page_pin() > lock_page(page); > wait_for_stable_page(); > atomic_add(&page->_refcount, PAGE_PIN_BIAS); > unlock_page(page); > > And if we perform page_pinned() check under page lock, then if > page_pinned() returned false, we are sure page is not and will not be > pinned until we drop the page lock (and also until page writeback is > completed if needed). After some more though, why do we even need wait_for_stable_page() and lock_page() in get_page_pin()? During writepage page_mkclean() will write protect all page tables. So there can be no new writeable GUP pins until we unlock the page as all such GUPs will have to first go through fault and ->page_mkwrite() handler. And that will wait on page lock and do wait_for_stable_page() for us anyway. Am I just confused? That actually touches on another question I wanted to get opinions on. GUP can be for read and GUP can be for write (that is one of GUP flags). Filesystems with page cache generally have issues only with GUP for write as it can currently corrupt data, unexpectedly dirty page etc.. DAX & memory hotplug have issues with both (DAX cannot truncate page pinned in any way, memory hotplug will just loop in kernel until the page gets unpinned). So we probably want to track both types of GUP pins and page-cache based filesystems will take the hit even if they don't have to for read-pins? Honza -- Jan Kara SUSE Labs, CR