Message ID | 20230526214142.958751-1-dhowells@redhat.com |
---|---|
Headers |
Return-Path: <linux-kernel-owner@vger.kernel.org> Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:994d:0:b0:3d9:f83d:47d9 with SMTP id k13csp786099vqr; Fri, 26 May 2023 15:20:30 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ6PRu3AfGmFFcOfHnQd4+jhnRETjeHEAY+SyZL9/b8x0FQs039jonxIdFA6kgcCXZjxsr4V X-Received: by 2002:a17:902:e806:b0:19d:297:f30b with SMTP id u6-20020a170902e80600b0019d0297f30bmr5577208plg.19.1685139629825; Fri, 26 May 2023 15:20:29 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1685139629; cv=none; d=google.com; s=arc-20160816; b=CPxR3RuzLcbxdqVzbRBNJUdxjcxMImGl3rvwW4ptNnn4i/DB2cK1/mSwQIlZ6A1WqY b00rNJiIwMko/Yo9hW8EoDRKMSSBBFSQeN2y8GC5J07ig2I+COd+jqNsuGUOXT6vey/b Nk+zbSBSYohNmQCJfL8lhcoCCEaqFu8Pn+ctorclbdieeZWMA2d2aHFDToV/+cIQP5bq VpX9uN2xRvmRvmgMVp2A+SaClul7lbrtW5IaGuDAwfAhsxSjADOuBDiYPfGQh+nI8htR 9f5TfbdGNjeoFItqieuACOEpAU3xjZYHtujYbKrqMC14u488Rka0YSwmgy0wNQ9pILuS 5QOQ== 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=I2DiPgqm3c5QPJhRJAJCbIB9OqdP8JSz4YiRYoqTjK8=; b=uhvXxMKPY0CPbWRrhwC1rpdRngYeTbKIYTH5pw4wfbyXATV6JSxJPO57vS3FtPcPLM xjauR6TwnjsrcWNqUbFO6Fk6sNgjtR1Bv4Op5NvNoinLfYr1npfVIkopA/laBBErOgU2 vRz63Qz09pcP39epVQXCKRIhqOvVgTTYR5iAR4sHRdsNW+sjL/FUJZf8ebp18HDhG0iL 4989Wpq+TSqSmn8yrVTF70iaJjznSMkxwtyDVan0dD3GIlfMQBrKKghB58omQwlzRn2I BFC4vDBOk1I34DCVERI9FwQVrFBAvBzNqXW9/0i+OZldxdYDMnV/6u7kGb8+EvyHaYE7 OIrw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=DIFN6vJP; 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: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id i6-20020a1709026ac600b001ac6189cac3si4619825plt.187.2023.05.26.15.20.14; Fri, 26 May 2023 15:20:29 -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=DIFN6vJP; 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 S236735AbjEZVmj (ORCPT <rfc822;zhanglyra.2023@gmail.com> + 99 others); Fri, 26 May 2023 17:42:39 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43106 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229882AbjEZVmh (ORCPT <rfc822;linux-kernel@vger.kernel.org>); Fri, 26 May 2023 17:42:37 -0400 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 534AEBC for <linux-kernel@vger.kernel.org>; Fri, 26 May 2023 14:41:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1685137310; 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=I2DiPgqm3c5QPJhRJAJCbIB9OqdP8JSz4YiRYoqTjK8=; b=DIFN6vJPQdkrZ/aN2VvvUWJRN560iH5bsGmpBKOOkcC9bRtu17eZI80NVWJcUfm+k9BikT 1BqV+pOxOWufFDTs90uMCxUZfSz0XcThAG2H3MoUuapX2mbzjQ4QD4Yc2iDIhxgj9xXOks DaVqGmlq6IRmbIprJORJd9cQ5jViKO4= 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-630-GRqTbWv-PT2iy4i50bmzWQ-1; Fri, 26 May 2023 17:41:47 -0400 X-MC-Unique: GRqTbWv-PT2iy4i50bmzWQ-1 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.rdu2.redhat.com [10.11.54.7]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id A45FB811E7C; Fri, 26 May 2023 21:41:46 +0000 (UTC) Received: from warthog.procyon.org.uk (unknown [10.39.192.68]) by smtp.corp.redhat.com (Postfix) with ESMTP id F0C92140E961; Fri, 26 May 2023 21:41:43 +0000 (UTC) From: David Howells <dhowells@redhat.com> To: Christoph Hellwig <hch@infradead.org>, David Hildenbrand <david@redhat.com>, Lorenzo Stoakes <lstoakes@gmail.com> Cc: David Howells <dhowells@redhat.com>, Jens Axboe <axboe@kernel.dk>, Al Viro <viro@zeniv.linux.org.uk>, Matthew Wilcox <willy@infradead.org>, Jan Kara <jack@suse.cz>, Jeff Layton <jlayton@kernel.org>, Jason Gunthorpe <jgg@nvidia.com>, Logan Gunthorpe <logang@deltatee.com>, Hillf Danton <hdanton@sina.com>, Christian Brauner <brauner@kernel.org>, Linus Torvalds <torvalds@linux-foundation.org>, linux-fsdevel@vger.kernel.org, linux-block@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH v4 0/3] block: Make old dio use iov_iter_extract_pages() and page pinning Date: Fri, 26 May 2023 22:41:39 +0100 Message-Id: <20230526214142.958751-1-dhowells@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Scanned-By: MIMEDefang 3.1 on 10.11.54.7 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=unavailable 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: <linux-kernel.vger.kernel.org> X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1766957290949164375?= X-GMAIL-MSGID: =?utf-8?q?1766996972609770030?= |
Series |
block: Make old dio use iov_iter_extract_pages() and page pinning
|
|
Message
David Howells
May 26, 2023, 9:41 p.m. UTC
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 #4) - Use _inc rather than _add ops when we're just adding 1. 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 Link: https://lore.kernel.org/r/20230526112859.654506-1-dhowells@redhat.com/ # v3 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(-)
Comments
On Fri, 26 May 2023 22:41:39 +0100, David Howells wrote: > 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. > > [...] Applied, thanks! [1/3] mm: Don't pin ZERO_PAGE in pin_user_pages() commit: c8070b78751955e59b42457b974bea4a4fe00187 [2/3] mm: Provide a function to get an additional pin on a page commit: 1101fb8f89e5fc548c4d0ad66750e98980291815 [3/3] block: Use iov_iter_extract_pages() and page pinning in direct-io.c commit: 1ccf164ec866cb8575ab9b2e219fca875089c60e Best regards,