Received: by 2002:ac0:bc90:0:0:0:0:0 with SMTP id a16csp1419043img; Tue, 19 Mar 2019 07:17:57 -0700 (PDT) X-Google-Smtp-Source: APXvYqzwQHkaXYc74xTijh4yHlRWPBHnzsN85LZca3uMdv7zXp0UkHik9ANkMVRLjD3ejjkz+Fib X-Received: by 2002:a65:534d:: with SMTP id w13mr22878153pgr.186.1553005077700; Tue, 19 Mar 2019 07:17:57 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1553005077; cv=none; d=google.com; s=arc-20160816; b=o8TlQNRSGmXbykaoAk0sHGrYvR0pPlt1HZlYExd/ziC0F6xkXjpZFHMvRi58dZ3WPV tr8rZ6tD767U+af+QKT/u35eOvM8co7Du0eso5i3EEHPg1nY6ZzVDo77J4bvk1HCa8bs t/zp/JhIQ5DLu81Heiv/e0bb5UxdmT1zUTCR+RjYtwfUBNnvi5Y3sl+Syyyuuc2d7MeP kbC9CqdMvwIf/+d+RVesLztyor7Q7w8VG2W8askQm/n4ulw5zoYApKXAFln+9lcuYTv/ HzwwGEPhdFt1TaLrl2yk3Ia2wP9AzAhE3TuNuX9n++2DTRe+e4AtJljl5c+5LbIqZK3O cSeg== 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-transfer-encoding:content-disposition:mime-version :references:message-id:subject:cc:to:from:date; bh=wzdN7tRU7DE0EBzzQ2RWw2BpkLeoMJcbGycnoWwYw28=; b=V1uHi/bG3xY7nRYu2pPbciwhxrdMs1ZDl663D2iP0JyV/UB5XDNtS7FpweqyLHpcpW OAHpm3QAbUWVGjzmIfOXnA30E7fzC+IlbBQls+XCi6EsfNYp6y9QptlQHod/rq6It/W7 3tAO6lRtrJeeHxwPzTHeuzdvJ5m76r6297lnkP+NUNzaBHA2lUq7t47ygoLjvniyLHPq QyOkd7vWEgQsOl2hgl75mJz5ZMZ9Ur8Fc242xMnSbSycG68L8RWtCcNFF/opZp/eGIvj sFBuV4LyzwnEI0esFt8gwNB8v5OZzVknwrm4LZq+rFNveA9JwmwmtwiBDW3eH52y9Qt9 Jp+w== 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id z25si11073616pgv.523.2019.03.19.07.17.41; Tue, 19 Mar 2019 07:17:57 -0700 (PDT) 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727371AbfCSOPi (ORCPT + 99 others); Tue, 19 Mar 2019 10:15:38 -0400 Received: from mx1.redhat.com ([209.132.183.28]:49934 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726579AbfCSOPi (ORCPT ); Tue, 19 Mar 2019 10:15:38 -0400 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 866CC40F44; Tue, 19 Mar 2019 14:15:37 +0000 (UTC) Received: from redhat.com (unknown [10.20.6.236]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 3A17218BBA; Tue, 19 Mar 2019 14:15:35 +0000 (UTC) Date: Tue, 19 Mar 2019 10:15:33 -0400 From: Jerome Glisse To: "Kirill A. Shutemov" Cc: john.hubbard@gmail.com, Andrew Morton , linux-mm@kvack.org, Al Viro , Christian Benvenuti , Christoph Hellwig , Christopher Lameter , Dan Williams , Dave Chinner , Dennis Dalessandro , Doug Ledford , Ira Weiny , Jan Kara , Jason Gunthorpe , Matthew Wilcox , Michal Hocko , Mike Rapoport , Mike Marciniszyn , Ralph Campbell , Tom Talpey , LKML , linux-fsdevel@vger.kernel.org, John Hubbard Subject: Re: [PATCH v4 1/1] mm: introduce put_user_page*(), placeholder versions Message-ID: <20190319141533.GB3879@redhat.com> References: <20190308213633.28978-1-jhubbard@nvidia.com> <20190308213633.28978-2-jhubbard@nvidia.com> <20190319120417.yzormwjhaeuu7jpp@kshutemo-mobl1> <20190319134724.GB3437@redhat.com> <20190319140623.tblqyb4dcjabjn3o@kshutemo-mobl1> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20190319140623.tblqyb4dcjabjn3o@kshutemo-mobl1> User-Agent: Mutt/1.10.0 (2018-05-17) X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.30]); Tue, 19 Mar 2019 14:15:38 +0000 (UTC) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, Mar 19, 2019 at 05:06:23PM +0300, Kirill A. Shutemov wrote: > On Tue, Mar 19, 2019 at 09:47:24AM -0400, Jerome Glisse wrote: > > On Tue, Mar 19, 2019 at 03:04:17PM +0300, Kirill A. Shutemov wrote: > > > On Fri, Mar 08, 2019 at 01:36:33PM -0800, john.hubbard@gmail.com wrote: > > > > From: John Hubbard > > > > [...] > > > > > > diff --git a/mm/gup.c b/mm/gup.c > > > > index f84e22685aaa..37085b8163b1 100644 > > > > --- a/mm/gup.c > > > > +++ b/mm/gup.c > > > > @@ -28,6 +28,88 @@ struct follow_page_context { > > > > unsigned int page_mask; > > > > }; > > > > > > > > +typedef int (*set_dirty_func_t)(struct page *page); > > > > + > > > > +static void __put_user_pages_dirty(struct page **pages, > > > > + unsigned long npages, > > > > + set_dirty_func_t sdf) > > > > +{ > > > > + unsigned long index; > > > > + > > > > + for (index = 0; index < npages; index++) { > > > > + struct page *page = compound_head(pages[index]); > > > > + > > > > + if (!PageDirty(page)) > > > > + sdf(page); > > > > > > How is this safe? What prevents the page to be cleared under you? > > > > > > If it's safe to race clear_page_dirty*() it has to be stated explicitly > > > with a reason why. It's not very clear to me as it is. > > > > The PageDirty() optimization above is fine to race with clear the > > page flag as it means it is racing after a page_mkclean() and the > > GUP user is done with the page so page is about to be write back > > ie if (!PageDirty(page)) see the page as dirty and skip the sdf() > > call while a split second after TestClearPageDirty() happens then > > it means the racing clear is about to write back the page so all > > is fine (the page was dirty and it is being clear for write back). > > > > If it does call the sdf() while racing with write back then we > > just redirtied the page just like clear_page_dirty_for_io() would > > do if page_mkclean() failed so nothing harmful will come of that > > neither. Page stays dirty despite write back it just means that > > the page might be write back twice in a row. > > Fair enough. Should we get it into a comment here? Yes definitly also i just sent an email with an alternative that is slightly better from my POV as it simplify my life for other things :) Cheers, J?r?me