Received: by 2002:a05:6358:3188:b0:123:57c1:9b43 with SMTP id q8csp2294049rwd; Fri, 26 May 2023 04:49:25 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ5TWaQAYBhtraQwUYO6FQuLZNJstoAqmkLWmeiXWxPZkgCTevb5qhBSUxmCs2F13Dx7jfHZ X-Received: by 2002:a17:902:db02:b0:1ae:6135:a050 with SMTP id m2-20020a170902db0200b001ae6135a050mr2861100plx.19.1685101765291; Fri, 26 May 2023 04:49:25 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1685101765; cv=none; d=google.com; s=arc-20160816; b=PMLaRLae/JxKjz9sjO/GGeij7IMdQAvayXzPRQmD/iPNWpsbIF7lbaVCpMpR1b7fZM d5ZEhOzQ53mxGlIxAVu6/c+8InNLnEBTFFAVeneQ1rdXIc+jMEQou1UxtjN8hUgJgsI+ 7W6msFaO+ChSOC00203Ak07QyIgeZRzUvHRXl+wCY1PBLAoty3OvtIe9XZ6/IKqWFoqg g+qqv1RHFw33rNLe9TGKc12mVeUVgCE4yBNbp7yhf4OgWshBZSNPKSZdMyk/i2XceMKD fJPaN4lWfuZpmQ9o7z5cLJFamJmzXorPe59uJldmDEJx9jc7BhO23HpJUvP/lq5aHPoi 3mPw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature; bh=h4Wb8uN/beFIyeWc47iGMcgU19K20EwZTfMIE97bOJg=; b=NNq6B7f6DUeEHqyOq/dN2AfQwjDkRNpt5H2Vcshx8WUg/V19Bz4O5GJRX8qr0KSAeH SMG2g9dyDVro8ai3AEEOu8eWqEpkgxCl2Yd1tJF+i2cRwf7fZjJ9bEALViWUpSeDuQLS DJNEIIQWq36umWdJqvUEEnx3HHZ31/j08RsjgY5romNfPyYVqlmNGzm1KZ/v/ukP5mG8 cO+eNQZaal8Z2iBWNNC5S+wTzAkVhzvOHCjbqCew94fWd100hn/P/j4jIrtm1Ht4MSS0 VJUR00iInAi0eZRxywru8aJAV9tGuIyrnGuFh0oO3pzkm4YiF5tIcI4j6y6cKqXDJnTN qj2A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=WfRhTeB8; 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 s3-20020a170902a50300b001a92875cda9si3547688plq.288.2023.05.26.04.49.11; Fri, 26 May 2023 04:49:25 -0700 (PDT) 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=WfRhTeB8; 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 S236879AbjEZLaE (ORCPT + 99 others); Fri, 26 May 2023 07:30:04 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59006 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229502AbjEZLaD (ORCPT ); Fri, 26 May 2023 07:30:03 -0400 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4F9F6F7 for ; Fri, 26 May 2023 04:29:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1685100555; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding; bh=h4Wb8uN/beFIyeWc47iGMcgU19K20EwZTfMIE97bOJg=; b=WfRhTeB8pkX8x4TV5yWOXc92GVs0jssNjtg1iQSewEdZo1STgIQcMx6o1mkDQVfslIdQ7I kbDEgsUy+FLO46aEXlPFsqE7RZnycTPtMTUryi3Lhc7kuXLg7wCptbkJpMqmFMxChCXkMx W+oWnSbtnyXEOci98R18YwN0Pkohpkw= Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-287-46zss16mM2KLYOTz-LhglQ-1; Fri, 26 May 2023 07:29:12 -0400 X-MC-Unique: 46zss16mM2KLYOTz-LhglQ-1 Received: from smtp.corp.redhat.com (int-mx10.intmail.prod.int.rdu2.redhat.com [10.11.54.10]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 4FCD985A5AA; Fri, 26 May 2023 11:29:11 +0000 (UTC) Received: from warthog.procyon.org.uk (unknown [10.39.192.68]) by smtp.corp.redhat.com (Postfix) with ESMTP id 6611A492B0A; Fri, 26 May 2023 11:29:08 +0000 (UTC) From: David Howells To: Christoph Hellwig , David Hildenbrand , Lorenzo Stoakes Cc: David Howells , Jens Axboe , Al Viro , Matthew Wilcox , Jan Kara , Jeff Layton , Jason Gunthorpe , Logan Gunthorpe , Hillf Danton , Christian Brauner , Linus Torvalds , linux-fsdevel@vger.kernel.org, linux-block@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH v3 0/3] block: Make old dio use iov_iter_extract_pages() and page pinning Date: Fri, 26 May 2023 12:28:56 +0100 Message-Id: <20230526112859.654506-1-dhowells@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Scanned-By: MIMEDefang 3.1 on 10.11.54.10 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, 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 Hi Christoph, David, Lorenzo, Here are three patches that go on top of the similar patches for bio structs now in the block tree that make the old block direct-IO code use iov_iter_extract_pages() and page pinning. There are three patches: (1) Make page pinning neither add nor remove a pin to/from a ZERO_PAGE, thereby allowing the dio code to insert zero pages in the middle of dealing with pinned pages. This also mitigates a potential problem whereby userspace could force the overrun the pin counter of a zero page. A pair of functions are provided to wrap the testing of a page or folio to see if it is a zero page. (2) Provide a function to allow an additional pin to be taken on a page we already have pinned (and do nothing for a zero page). (3) Switch direct-io.c over to using page pinning and to use iov_iter_extract_pages() so that pages from non-user-backed iterators aren't pinned. I've pushed the patches here also: https://git.kernel.org/pub/scm/linux/kernel/git/dhowells/linux-fs.git/log/?h=iov-old-dio David Changes ======= ver #3) - Move is_zero_page() and is_zero_folio() to mm.h for dependency reasons. - Add more comments and adjust the docs about pinning zero pages. - Rename page_get_additional_pin() to folio_add_pin(). - Use is_zero_folio() in folio_add_pin(). - Rename need_unpin to is_pinned in struct dio. ver #2) - Fix use of ZERO_PAGE(). - Add wrappers for testing if a page is a zero page. - Return the zero page obtained, not ZERO_PAGE(0) unconditionally. - Need to set BIO_PAGE_PINNED conditionally, and not BIO_PAGE_REFFED. Link: https://lore.kernel.org/r/ZGxfrOLZ4aN9/MvE@infradead.org/ [1] Link: https://lore.kernel.org/r/20230525155102.87353-1-dhowells@redhat.com/ # v1 Link: https://lore.kernel.org/r/20230525223953.225496-1-dhowells@redhat.com/ # v2 David Howells (3): mm: Don't pin ZERO_PAGE in pin_user_pages() mm: Provide a function to get an additional pin on a page block: Use iov_iter_extract_pages() and page pinning in direct-io.c Documentation/core-api/pin_user_pages.rst | 6 ++ fs/direct-io.c | 72 ++++++++++++++--------- include/linux/mm.h | 27 ++++++++- mm/gup.c | 58 +++++++++++++++++- 4 files changed, 131 insertions(+), 32 deletions(-)