Received: by 2002:a05:6a10:9afc:0:0:0:0 with SMTP id t28csp3565698pxm; Tue, 1 Mar 2022 00:29:32 -0800 (PST) X-Google-Smtp-Source: ABdhPJzOUm6QRbdYnRAOUj3ZG5WQsjyePxVvIYfFt28M9OVSxrpPyR32H8zrUjboU6FWuSSP6diV X-Received: by 2002:a17:906:2ed1:b0:6b6:bb09:178c with SMTP id s17-20020a1709062ed100b006b6bb09178cmr18521464eji.382.1646123371790; Tue, 01 Mar 2022 00:29:31 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1646123371; cv=none; d=google.com; s=arc-20160816; b=fPjneGSUvjiQKeQtwWNG65q4EeAG/TVnvk8O2tAFjybYMvLUT9R1VNyBNwuzFGEXpt KFCUIZ0PztfpaNG/SLJQGptRMDLFMBMVg1UEg1DqvOqruXzPYTjZCbQY7ye3ELwY7a0X rKF+mc6UU+tBRZINMkk6IIcv+NMK4735hfpuqXUejF5ERsqLNVR2FECRsxk2SqSbL1vl Pxvk6DX1SiLY/2ChP98sU7zxvoM5cdqfILeOLVcKZz8ns6AuzfZAd6JUw3PQE7S3Idvj obVfVFWNnmJBxY4859dTfroefTDpoI/UKZyoV4k3uze7VBXC8yN4OegJacAtvOiO8l9k mnuQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:in-reply-to:subject :organization:from:references:cc:to:content-language:user-agent :mime-version:date:message-id:dkim-signature; bh=qLkX7j7/Zb/EioGFBRjJTWhVN81CKkKlGzO4G8wrZag=; b=hWrODJT+kTdpgBmj9rcN8MWMO3BSMcJVzAexeJ9kPD/cNnazTmo/tfcB88In25p80u KxveYUeLSh5uBZXMWwvvYUI47gtaznR8+oA64UaaqF+zn7ZtQPzH5MjMht+Pft6PDkwL DsfloVf4dXiv2/zVgH4Pppw24OaOPHvUoy3wpOkctsdCNiyRiSmsHcGRFVbIYfocn4MQ 5DrM8h4w1GTbLshqo3kt3EWjvGmfrszxe093PtX/Jfes+SlvXmx5/ruHxRUY72hZxiQJ zSrCzAlCAM7KjRtcKo1jDmbUkuixgWkAhXUARQt6WiMdwFNP+dz8E3CoC+RpoTIDOzln ZpTA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=LKpX2qmr; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id bw21-20020a170906c1d500b006d5b7eb425dsi7400902ejb.430.2022.03.01.00.29.08; Tue, 01 Mar 2022 00:29:31 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=LKpX2qmr; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233252AbiCAIMj (ORCPT + 99 others); Tue, 1 Mar 2022 03:12:39 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:56816 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233210AbiCAIMh (ORCPT ); Tue, 1 Mar 2022 03:12:37 -0500 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 35CC483003 for ; Tue, 1 Mar 2022 00:11:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1646122316; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=qLkX7j7/Zb/EioGFBRjJTWhVN81CKkKlGzO4G8wrZag=; b=LKpX2qmrRXf958gP5+DYYsOb/jADH9x6LHptzyr7IJx7g+bLe8TZOUZtVG0EFciqXEKfzW cZFLbjDZfLiLCDXrzHC0BWYSN1BRLEp61BZkZeKskGetu6Gds/qWk4/KXiNOdelVa/eEzi +FQ0aIGZH2U98AkQtPG4xznINoHoWZE= Received: from mail-wr1-f69.google.com (mail-wr1-f69.google.com [209.85.221.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-45-btEfAs1qNZahTvgg7_BMFA-1; Tue, 01 Mar 2022 03:11:55 -0500 X-MC-Unique: btEfAs1qNZahTvgg7_BMFA-1 Received: by mail-wr1-f69.google.com with SMTP id ay18-20020a5d6f12000000b001efe36eb038so1489010wrb.17 for ; Tue, 01 Mar 2022 00:11:54 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:message-id:date:mime-version:user-agent :content-language:to:cc:references:from:organization:subject :in-reply-to:content-transfer-encoding; bh=qLkX7j7/Zb/EioGFBRjJTWhVN81CKkKlGzO4G8wrZag=; b=GHuMpNb+Yf9rWQPjFmjJKF2Hq1/v7WKDadMpIwVRnCpvGDEDND5eLpezt1w+STgayW UJ4iOaAA2CEgQycDivaYVRBLCCrso9obDyaAeXIcYfT1DMcp22Hbpuztk7vGUnHSKwgW X9eOl9HVuJj/pos0qKTTN1e9apLnp+X7blaohNNMDeKBwWhFCDCgee0fwDgIbKRNKD/D KBunNNwL1RW8mpCDkT0Gt1uHy0dGPPtjQcQoQML3+GUfkQRQkNM6vvqZn5GITpVdGHrJ /64Oo+z4jmN3OCacZodyCbRvss45Rd8X30ATuku5SSRVM0JD/oxleEWKTA5TGZSi7kxm Ep4g== X-Gm-Message-State: AOAM5309iD/kojW0+QuGc2ljoXi+G44eTb5fxWoYtNVcDbAEL9FDkbDl zcJNngrIZZOQ/8GwSyqwKyX2TBGHdSMeaPxxFvwH9f9FWDeovPMySlJSFvVmuRo+M6k+HxYmbZ7 4Pvi5HIQPCS+eNnmekBmEWjL+ X-Received: by 2002:adf:80d0:0:b0:1dc:90a8:4a1d with SMTP id 74-20020adf80d0000000b001dc90a84a1dmr18203776wrl.180.1646122313905; Tue, 01 Mar 2022 00:11:53 -0800 (PST) X-Received: by 2002:adf:80d0:0:b0:1dc:90a8:4a1d with SMTP id 74-20020adf80d0000000b001dc90a84a1dmr18203754wrl.180.1646122313681; Tue, 01 Mar 2022 00:11:53 -0800 (PST) Received: from ?IPV6:2003:cb:c70e:5e00:88ce:ad41:cb1b:323? (p200300cbc70e5e0088cead41cb1b0323.dip0.t-ipconnect.de. [2003:cb:c70e:5e00:88ce:ad41:cb1b:323]) by smtp.gmail.com with ESMTPSA id j7-20020a05600c1c0700b0037c2c6d2a91sm1962455wms.2.2022.03.01.00.11.52 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 01 Mar 2022 00:11:53 -0800 (PST) Message-ID: Date: Tue, 1 Mar 2022 09:11:51 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.5.0 Content-Language: en-US To: John Hubbard , Jens Axboe , Jan Kara , Christoph Hellwig , Dave Chinner , "Darrick J . Wong" , Theodore Ts'o , Alexander Viro , Miklos Szeredi , Andrew Morton , Chaitanya Kulkarni Cc: linux-block@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-xfs@vger.kernel.org, linux-mm@kvack.org, LKML References: <20220225085025.3052894-1-jhubbard@nvidia.com> <20220225085025.3052894-2-jhubbard@nvidia.com> <6ba088ae-4f84-6cd9-cbcc-bbc6b9547f04@redhat.com> <36300717-48b2-79ec-a97b-386e36bbd2a6@nvidia.com> From: David Hildenbrand Organization: Red Hat Subject: Re: [RFC PATCH 1/7] mm/gup: introduce pin_user_page() In-Reply-To: <36300717-48b2-79ec-a97b-386e36bbd2a6@nvidia.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-3.2 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,NICE_REPLY_A, RCVD_IN_DNSWL_LOW,RCVD_IN_MSPIKE_H5,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE, SPF_NONE,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 28.02.22 22:14, John Hubbard wrote: > On 2/28/22 05:27, David Hildenbrand wrote: > ... >>> diff --git a/mm/gup.c b/mm/gup.c >>> index 5c3f6ede17eb..44446241c3a9 100644 >>> --- a/mm/gup.c >>> +++ b/mm/gup.c >>> @@ -3034,6 +3034,40 @@ long pin_user_pages(unsigned long start, unsigned long nr_pages, >>> } >>> EXPORT_SYMBOL(pin_user_pages); >>> >>> +/** >>> + * pin_user_page() - apply a FOLL_PIN reference to a page () >>> + * >>> + * @page: the page to be pinned. >>> + * >>> + * Similar to get_user_pages(), in that the page's refcount is elevated using >>> + * FOLL_PIN rules. >>> + * >>> + * IMPORTANT: That means that the caller must release the page via >>> + * unpin_user_page(). >>> + * >>> + */ >>> +void pin_user_page(struct page *page) >>> +{ >>> + struct folio *folio = page_folio(page); >>> + >>> + WARN_ON_ONCE(folio_ref_count(folio) <= 0); >>> + >>> + /* >>> + * Similar to try_grab_page(): be sure to *also* >>> + * increment the normal page refcount field at least once, >>> + * so that the page really is pinned. >>> + */ >>> + if (folio_test_large(folio)) { >>> + folio_ref_add(folio, 1); >>> + atomic_add(1, folio_pincount_ptr(folio)); >>> + } else { >>> + folio_ref_add(folio, GUP_PIN_COUNTING_BIAS); >>> + } >>> + >>> + node_stat_mod_folio(folio, NR_FOLL_PIN_ACQUIRED, 1); >>> +} >>> +EXPORT_SYMBOL(pin_user_page); >>> + >>> /* >>> * pin_user_pages_unlocked() is the FOLL_PIN variant of >>> * get_user_pages_unlocked(). Behavior is the same, except that this one sets >> >> I assume that function will only get called on a page that has been >> obtained by a previous pin_user_pages_fast(), correct? >> > > Well, no. This is meant to be used in place of get_page(), for code that > knows that the pages will be released via unpin_user_page(). So there is > no special prerequisite there. That might be problematic and possibly the wrong approach, depending on *what* we're actually pinning and what we're intending to do with that. My assumption would have been that this interface is to duplicate a pin on a page, which would be perfectly fine, because the page actually saw a FOLL_PIN previously. We're taking a pin on a page that we haven't obtained via FOLL_PIN if I understand correctly. Which raises the questions, how do we end up with the pages here, and what are we doing to do with them (use them like we obtained them via FOLL_PIN?)? If it's converting FOLL_GET -> FOLL_PIN manually, then we're bypassing FOLL_PIN special handling in GUP code: page = get_user_pages(FOLL_GET) pin_user_page(page) put_page(page) For anonymous pages, we'll bail out for example once we have https://lkml.kernel.org/r/20220224122614.94921-14-david@redhat.com Because the conditions for pinned anonymous pages might no longer hold. If we won't call pin_user_page() on anonymous pages, it would be fine. But then, I still wonder how we come up the "struct page" here. -- Thanks, David / dhildenb