From patchwork Mon Jan 23 17:30:00 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Howells X-Patchwork-Id: 13112620 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6E1ECC38142 for ; Mon, 23 Jan 2023 17:30:28 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id E289A6B0073; Mon, 23 Jan 2023 12:30:27 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id D89EA6B0074; Mon, 23 Jan 2023 12:30:27 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id C2AB06B0075; Mon, 23 Jan 2023 12:30:27 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id B253A6B0073 for ; Mon, 23 Jan 2023 12:30:27 -0500 (EST) Received: from smtpin18.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id 552821A2804 for ; Mon, 23 Jan 2023 17:30:27 +0000 (UTC) X-FDA: 80386752894.18.051EB66 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by imf19.hostedemail.com (Postfix) with ESMTP id 5267E1A001A for ; Mon, 23 Jan 2023 17:30:25 +0000 (UTC) Authentication-Results: imf19.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=fT32o68G; spf=pass (imf19.hostedemail.com: domain of dhowells@redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=dhowells@redhat.com; dmarc=pass (policy=none) header.from=redhat.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1674495025; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=0jN2ELsFFzyNgM8YEdU+VNSLzU8C5xV57PSPrlYR/T4=; b=vHEZ3wptvW4bcnM4mot3/xGeUkVYb1m34x5JcW+ZV+qBH7Mo1FJ7hq9s6azg1UTnuB/nZd 0drLP9GH4mpLyb7/axo8EN1BYa5WkPPyWoXe4tyF/15lPIdpjZDMtUMszLQRZe6dMIw/BW qUk5WmiVjOPOk/X6ZZPA4UkD3VgsRos= ARC-Authentication-Results: i=1; imf19.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=fT32o68G; spf=pass (imf19.hostedemail.com: domain of dhowells@redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=dhowells@redhat.com; dmarc=pass (policy=none) header.from=redhat.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1674495025; a=rsa-sha256; cv=none; b=OlF8mxbLCwtaCZYttGVzikLz1rPKr9CYfTTIr3hZxJnoh8QAk7gvgqSMAN1Zu1kEjYixso 8rxZ+4T37SaG1e1zjeFFDpIle3Cd10IiCaGvPB2YaD20/I+EZKf7XPuIBHDJcFoG5Y7oke oqD1C/WpcQlpamC3Dd42/RtU29De/H8= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1674495024; 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: in-reply-to:in-reply-to:references:references; bh=0jN2ELsFFzyNgM8YEdU+VNSLzU8C5xV57PSPrlYR/T4=; b=fT32o68GvArTJBpFvY7yqEoOUaSByTuv8leJ8FDM2unOgnVXelDBgE0LdpoMJ2+fEd4d5o 9AngLlk1ijI3KT4+3SxPYspa39302f8QJ5xDXUlvs4yVHESKe3gbDFbUre8szhNqSNzc9l LVxdbubqaLqqjd8zRhxoyM5S1G0ChvA= Received: from mimecast-mx02.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-656-PNKYRVDkPJio9uZRskHSUg-1; Mon, 23 Jan 2023 12:30:20 -0500 X-MC-Unique: PNKYRVDkPJio9uZRskHSUg-1 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.rdu2.redhat.com [10.11.54.6]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id C4A183C14859; Mon, 23 Jan 2023 17:30:19 +0000 (UTC) Received: from warthog.procyon.org.uk.com (unknown [10.33.36.97]) by smtp.corp.redhat.com (Postfix) with ESMTP id 49E8D2166B32; Mon, 23 Jan 2023 17:30:18 +0000 (UTC) From: David Howells To: Al Viro , Christoph Hellwig Cc: David Howells , Matthew Wilcox , Jens Axboe , Jan Kara , Jeff Layton , Logan Gunthorpe , linux-fsdevel@vger.kernel.org, linux-block@vger.kernel.org, linux-kernel@vger.kernel.org, Christoph Hellwig , linux-mm@kvack.org Subject: [PATCH v8 03/10] mm: Provide a helper to drop a pin/ref on a page Date: Mon, 23 Jan 2023 17:30:00 +0000 Message-Id: <20230123173007.325544-4-dhowells@redhat.com> In-Reply-To: <20230123173007.325544-1-dhowells@redhat.com> References: <20230123173007.325544-1-dhowells@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.1 on 10.11.54.6 X-Rspamd-Server: rspam05 X-Rspamd-Queue-Id: 5267E1A001A X-Stat-Signature: cppuf8h3x6a868z5ytafoeu6yig4ew1w X-Rspam-User: X-HE-Tag: 1674495025-467690 X-HE-Meta: U2FsdGVkX18ofdFlmObaBdf1kUrtF9MYaLfoTl7hzN+BpBPtWuRUd8cjYbKbF1IqfpQnPeQ6dbay5pg1/oozupC3F+xFb0rIxjrFQrkfqY+AeLBmEFoOveXppjSACX0MNrnzwHdgl1G7cabDyhu4Rz8XpYBHZpAZWnbf0dFNBQFcY4g+ups6Xmyb9IyJKLsG5DfGoSEzUGrfcHwVS1Q0nQx2WYoHgqS6zw4DgRbiIw5WYxLpfPW/k9x2Fi1dM4WtGquipTNv8ti3ywPFR23QwvWN9z2dzyI9LHYmqFF6ZlSNl7T3cvQmRiYJ1wtNeoxrOVTLR/cEloGHwbNb2N6DeM2bXUS0a5nqMT63JYqM7fW5mJ1HLbdjR8NYUw58zenNcHqgBhDpHwjyFSIkRGSUwOqZSKkR6pSLIGUy6pLGcmNp9MbHupJYAFmj1dow6kaY7uMJ5ivGCm2+1VzViYizEjG+1LbHFs8JnQ5mWnqHadYmWlaSutjDDtP4Xwd9UomsPHeLV9nmgMG/LVbRZtsnI8xgbcNLSTlnEOS3YikWIPiV13/N2bEAcAohrw/HwU8tWH8iqKgGV7+RrkDsfeEAJre/ouvK9nsay7b9YU+ryg33losQzWJ3YXQ5NEAuFvxZ2ChK4c1uyJi1+aFQUp+uyaKs5nOoklp25lkz6aTGizkuEazsRF+J2WguxDog7HrjO3MMZNfdK1gGV0r+VieL4xPrB9eUV/gtt3RMSLJETIq1Xf0kRGjHiLBdgbNhXfML40Y/jlrRzckc8B4UNABSik0yRQKlkrGDzQ/SxS9zD8H9y9aHrZy5YlbrBSuxIEMxWPDyvC2q8X0MthfqAbgTRRp4or1rl0E2oGzlw9vpHfdg56pk9YkuFaN8r98i/0s3H7pgo2AIhvqwiPW6Kv+Cr9SWjpOVrDtIP/Cy44gY00YjqSjJnP2KkqlOHd7mvNiZxMkhftL0cbtRXYjvT+I HQ/JzxBf AIzif7quhVUHSKCa1j05PYR4DMsmrS0xIpx4Uk/wkXJ3ZFImGVq8VSj0oBRh4IESP2BqTDPfbdPo01zVmgks2beHxPOAYRYr4StjpyrkQuB7qav7agC+kcWseI0YO8zW6yr3PRJ7b5HZWqvHqJsJfQQr9RU77fPAmsGlRSoTbnYbAJQfc/Hv50PzzYPnjrTCJt1vKT3xFncHBFmSbI5SxtC+wWymOfjYBXLKRjvYERVDmyWUkJ7tF5FU+eekHB8UP4r0hJYOtFnkN5ybaQXsu34x3RsJ/iPEvgNEzfJ3wa2XaHTda4wxlSfrynqxi+x0MJOva+97509VZ7GpgjuOypv/MWBOFOPpW2zQsWnG4pU6uTEESnMr6jzjS26NzfMopxSLNgsGaLApWWtNOqlv2kTr4FZvVXcwwxWWS95HJrrMqmOP/0qe1DIjPloOaCtShRpRdWQKHx9kaSpwTMzHnTOkwrKokUEvd6adnSxA+HgOOIrCedgtQr/aMSg== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: Provide a helper in the get_user_pages code to drop a pin or a ref on a page based on being given FOLL_GET or FOLL_PIN in its flags argument or do nothing if neither is set. Signed-off-by: David Howells cc: Al Viro cc: Christoph Hellwig cc: Matthew Wilcox cc: linux-fsdevel@vger.kernel.org cc: linux-block@vger.kernel.org cc: linux-mm@kvack.org Reviewed-by: Christoph Hellwig --- include/linux/mm.h | 3 +++ mm/gup.c | 22 ++++++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/include/linux/mm.h b/include/linux/mm.h index 8f857163ac89..3de9d88f8524 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -1367,6 +1367,9 @@ static inline bool is_cow_mapping(vm_flags_t flags) #define SECTION_IN_PAGE_FLAGS #endif +void folio_put_unpin(struct folio *folio, unsigned int flags); +void page_put_unpin(struct page *page, unsigned int flags); + /* * The identification function is mainly used by the buddy allocator for * determining if two pages could be buddies. We are not really identifying diff --git a/mm/gup.c b/mm/gup.c index f45a3a5be53a..3ee4b4c7e0cb 100644 --- a/mm/gup.c +++ b/mm/gup.c @@ -191,6 +191,28 @@ static void gup_put_folio(struct folio *folio, int refs, unsigned int flags) folio_put_refs(folio, refs); } +/** + * folio_put_unpin - Unpin/put a folio as appropriate + * @folio: The folio to release + * @flags: gup flags indicating the mode of release (FOLL_*) + * + * Release a folio according to the flags. If FOLL_GET is set, the folio has a + * ref dropped; if FOLL_PIN is set, it is unpinned; otherwise it is left + * unaltered. + */ +void folio_put_unpin(struct folio *folio, unsigned int flags) +{ + if (flags & (FOLL_GET | FOLL_PIN)) + gup_put_folio(folio, 1, flags); +} +EXPORT_SYMBOL_GPL(folio_put_unpin); + +void page_put_unpin(struct page *page, unsigned int flags) +{ + folio_put_unpin(page_folio(page), flags); +} +EXPORT_SYMBOL_GPL(page_put_unpin); + /** * try_grab_page() - elevate a page's refcount by a flag-dependent amount * @page: pointer to page to be grabbed