From mboxrd@z Thu Jan 1 00:00:00 1970 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 2C86DC6FD18 for ; Tue, 18 Apr 2023 16:25:15 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id A367B8E0002; Tue, 18 Apr 2023 12:25:14 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 9BF258E0001; Tue, 18 Apr 2023 12:25:14 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 887948E0002; Tue, 18 Apr 2023 12:25:14 -0400 (EDT) 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 75FED8E0001 for ; Tue, 18 Apr 2023 12:25:14 -0400 (EDT) Received: from smtpin28.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id 4B1201C63D7 for ; Tue, 18 Apr 2023 16:25:14 +0000 (UTC) X-FDA: 80695036548.28.8F6E687 Received: from mail-wr1-f44.google.com (mail-wr1-f44.google.com [209.85.221.44]) by imf28.hostedemail.com (Postfix) with ESMTP id 6FEA2C001A for ; Tue, 18 Apr 2023 16:25:11 +0000 (UTC) Authentication-Results: imf28.hostedemail.com; dkim=pass header.d=gmail.com header.s=20221208 header.b=SiZWAmYo; spf=pass (imf28.hostedemail.com: domain of lstoakes@gmail.com designates 209.85.221.44 as permitted sender) smtp.mailfrom=lstoakes@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1681835111; 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-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=tkrQvmuaMHpjbiE++zr5BVroiXJ7ScDCYIMg0fujBHo=; b=N3en8dCSCH7JohOdq5WGxlEwev3kZJqXCm6c+aW+osLeAgl1Klvyb2drehkj4rpYJg+dop C1GBSCwCw8eckSa4ahGy6n0AyJqHaG6Syq7dUJjA369akMytwes12bf8hKUyDwio8PUFra DuuaM77bUcpHW0dzqOALKFFZ6BblFzs= ARC-Authentication-Results: i=1; imf28.hostedemail.com; dkim=pass header.d=gmail.com header.s=20221208 header.b=SiZWAmYo; spf=pass (imf28.hostedemail.com: domain of lstoakes@gmail.com designates 209.85.221.44 as permitted sender) smtp.mailfrom=lstoakes@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1681835111; a=rsa-sha256; cv=none; b=pARZEyUlaXIflHFnRmQRxE375fGfXreP50xBbp15nkt9yGXCWC0Y8VFYLoelPbKNKGWtSE OAHikqTuDlXqOyYEPdf0IVbe3N8robd5/35EyI/huvpJGYXDtWUgi07pKUay+OpPiAwdPa wHQ9xv8323QWzx12Ewyzda5IAP/f6CE= Received: by mail-wr1-f44.google.com with SMTP id ffacd0b85a97d-2f86ee42669so2505857f8f.2 for ; Tue, 18 Apr 2023 09:25:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1681835110; x=1684427110; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=tkrQvmuaMHpjbiE++zr5BVroiXJ7ScDCYIMg0fujBHo=; b=SiZWAmYo56/FBTixK5uRz3YVCkB21wCREmr1czchs+GmA+dvmsS1O2PL0ur8egLMXe G3NbOGUT6dObEj1Zi33dWKNM0xdCHyo3v2mIdHaBhuHttqrYmu/Ca3V4S/WO11vJA3Zk jwoJgTDOjMZtjNy1gPTK5S5ZaSYDbRznJFNiPE3Ryzw6s9A+s0pc6VWN7mhQ7NNMKeEq QPqevBvbQ+huF9KOhwCkBZmZtZK/CHtbDa0ynZmKXhlRJpfVwG0XsVT8yA7Ejbn8ND1N 7iPi2FHFCVv9sRLnSh5+3VodoGnw2BZXUWntQUCCaqErsqVlEkdgqrENwtsk291wvN+q bYtQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1681835110; x=1684427110; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=tkrQvmuaMHpjbiE++zr5BVroiXJ7ScDCYIMg0fujBHo=; b=eA5ESq3GeKgv5iexw+XyjtPnkKDrrjLCjnByOCN697Kr6qQrbe6fuLRmbXTWrfhsAs +rUsM/9ijHjG8tdcaTO/hY9G0VsEQbhStheOhFhODuvI9TTb8CNlr7kZS+nD+kSI4MUq vtChS/3UC2xQ5ECYPLnPydgI+T1MuoUHKvA99pfz+FgB3U4FLipXzuwWVxcWi51qfLKv uChzkIEzfZ1Il3PRTl3ZfXGuNszEk2UHxXZGLiu8hhEyqXQBGavEqG+07jCYVCaUiHQZ Wh21ZgHKVnChnj/46VNdJ5foJatnjkRZ1DKdsX9DdbYNpBLLmySItlK6cUtsMWTAd9mU 5YoQ== X-Gm-Message-State: AAQBX9e/9edbP06IBDWGaLDOippQCRAQXZePbF1SgNiqlNPwE9qCICIO ubSUqJJO3SiNABKI3yeQI0c= X-Google-Smtp-Source: AKy350Ye3wY8Ve3DZ7sGgIjHgWrlClaJ5M4kd1rL+JaDBP63tIs8tkec5hOaQONG71C1PTxydnnEig== X-Received: by 2002:a05:6000:3:b0:2ce:9cc8:34db with SMTP id h3-20020a056000000300b002ce9cc834dbmr2264248wrx.71.1681835109924; Tue, 18 Apr 2023 09:25:09 -0700 (PDT) Received: from localhost (host86-156-84-164.range86-156.btcentralplus.com. [86.156.84.164]) by smtp.gmail.com with ESMTPSA id o9-20020a5d62c9000000b002fa67f77c16sm5694266wrv.57.2023.04.18.09.25.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Apr 2023 09:25:08 -0700 (PDT) Date: Tue, 18 Apr 2023 17:25:08 +0100 From: Lorenzo Stoakes To: David Hildenbrand Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org, Andrew Morton , Matthew Wilcox , Jens Axboe , Pavel Begunkov , io-uring@vger.kernel.org Subject: Re: [PATCH v4 4/6] io_uring: rsrc: avoid use of vmas parameter in pin_user_pages() Message-ID: <7950398c-1993-4006-9af9-8e924ddb2dda@lucifer.local> References: <956f4fc2204f23e4c00e9602ded80cb4e7b5df9b.1681831798.git.lstoakes@gmail.com> <7fabe6ee-ba8f-6c48-c9f7-90982e2e258c@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <7fabe6ee-ba8f-6c48-c9f7-90982e2e258c@redhat.com> X-Rspam-User: X-Rspamd-Server: rspam04 X-Rspamd-Queue-Id: 6FEA2C001A X-Stat-Signature: chiydem3kzpcewb3atyje6fq6bxqna4c X-HE-Tag: 1681835111-297478 X-HE-Meta: U2FsdGVkX1/kz4oFUomxbRKqZVKDxarLC4Hv+IJDijkp9uMxjiNM/3+Eiatn67UXnfraiWYshs7izlIktt5VC9kBPPwzTukxrdkE5G5DJ22nb0oXUl3oTwxVb+pd9dyS+Uo4EEAjO2o6Lbi98+fg5c9igV7l+oG3bqNFGnge68VQmVsl2H9rMZn5SPoQpW9PV22QF42gKOfXE+XlNcNcU8PtvL1aS1S1yWR9GOARQmQczdY1PllJU92ziIT14lz7c6sm1/b2kTjd2XE5uVDumqUzS0OvLk17new63aKHaJgtpAz7ykTHIU94Ma9i0Hr32dx53GIP0SeaMWXifIrfvRvq43EFJ4zXNvIdkJTbDlQ1QzexU+0rm8m9ToUVSmDSFyimqB9CqeQuQrMFRTaKkWenB21Coga/uAsf9pMfI8bqmsWd+LO2UtYVgBsSniYnYxvTbXNAl+MclAdNSq7EKMnq//5FGKP+G6Dj5Tc6OnVWwucTGCl94GHqLygZCPRaN0GxMH1i0M7qttPFRx2aHWFLOJ1aj3D+ORrqdNkl1IEOfwYi90ibxzvhuVm8mn5TOxsXz/byHa8R2+5q8VT0EKr7U4Mw6EnsCkiOm+ho6ZWJLhc8QAfsACZIwCih0L/63XAphTcekYrtvzkaZ3265a3jpkEAz6NuUiNPCcWxm0ZQ49Vz2SdS2eXfc7uAJ4xRw0HTu5C3GKpC1hEgjKG1tL8c1LOFFog0kZhwEAv1WPUNAsSL7icu0Fhg6KGFoWkfNXt+Dc6OKjnC7K6zV3kqwsw8fcsJZ2r4bgIdorT/49VPbLw1Ts1hgPU2P9oGXNPi2VaEecBxb5tfpiRa7liOi7Lran6yUo8dkwnhSH7al94+ZWMPErBMh2kQmVEMF25IuahuflWYzj7nUE2LzWD8DZmtG2QsHuH3IJd8kh4tVa17nQC1l4cS8yh63gLIwuU0KQBSXNGAFaegSgXgrGd ralSoTUI nxIatYdKQC0iYN/aB5MmXfqZWsyFPy+hTg7dOAlov9mdggKVw7wEgprLZFwjVY1wmPrlMO3imHpSILym7x3hoBlkUKft/7J2TViKQR1gmzoXx7Tlkg8Q2J+p0naZaQ20OIjaIBGqFfkgUfprXyCW4fgDI2/Je7erj1H24lxKf3W+9mDl0TmO/O9ymmdJaVvf+To9cABmWknIeCkcZjbXej2nDsjK0Scd97N0EZuatqKCdkJTuDcJwyah3Z8VRa0EKjgY1yFnCjinjxKznORwqqSoMm7npGtxXynJT+82A/8Bp85sl8wHyi0kMW9VDHrecJInVHHqzvDaSLG/qfqLjR9HSRKCvUuuVedq4i2Nv8XvY9hXojZupATlh9dY5NNvy8Oef/voB2qk/mT5nfZ9O8dbB1TUienJ6Gd66SBx6iU4dcqAHpihTWyQQ0sWrjBm3jNU7Uj+4otl+LT/SttJu8EKw/EzW926sM8zjZnE0sBxahm3exnTqw9DediDM7rt12XMWmLnjK9i3dxZAdMuJJIBLpNhke0glLriQbNw7TlDYE4XvZPNADNl/VOlEzm+vqdTW+w+uTjfhqpbb84zbkIGG66SD8gsuOH1+ 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: On Tue, Apr 18, 2023 at 05:55:48PM +0200, David Hildenbrand wrote: > On 18.04.23 17:49, Lorenzo Stoakes wrote: > > We are shortly to remove pin_user_pages(), and instead perform the required > > VMA checks ourselves. In most cases there will be a single VMA so this > > should caues no undue impact on an already slow path. > > > > Doing this eliminates the one instance of vmas being used by > > pin_user_pages(). > > > > Suggested-by: Matthew Wilcox (Oracle) > > Signed-off-by: Lorenzo Stoakes > > --- > > io_uring/rsrc.c | 55 ++++++++++++++++++++++++++++--------------------- > > 1 file changed, 31 insertions(+), 24 deletions(-) > > > > diff --git a/io_uring/rsrc.c b/io_uring/rsrc.c > > index 7a43aed8e395..3a927df9d913 100644 > > --- a/io_uring/rsrc.c > > +++ b/io_uring/rsrc.c > > @@ -1138,12 +1138,37 @@ static int io_buffer_account_pin(struct io_ring_ctx *ctx, struct page **pages, > > return ret; > > } > > +static int check_vmas_locked(unsigned long addr, unsigned long len) > > TBH, the whole "_locked" suffix is a bit confusing. > > I was wondering why you'd want to check whether the VMAs are locked ... > Yeah it's annoying partly because GUP itself is super inconsistent about it. Idea is to try to indicate that you need to hold mmap_lock obviously... let's drop _locked then since we're inconsistent with it anyway. > > +{ > > + struct file *file; > > + VMA_ITERATOR(vmi, current->mm, addr); > > + struct vm_area_struct *vma = vma_next(&vmi); > > + unsigned long end = addr + len; > > + > > + if (WARN_ON_ONCE(!vma)) > > + return -EINVAL; > > + > > + file = vma->vm_file; > > + if (file && !is_file_hugepages(file)) > > + return -EOPNOTSUPP; > > You'd now be rejecting vma_is_shmem() here, no? > Good spot, I guess I was confused that io_uring would actually want to do that... not sure who'd want to actually mapping some shmem for this purpose! I'll update to make it match the existing code. > > -- > Thanks, > > David / dhildenb > To avoid spam, here's a -fix patch for both:- ----8<---- >From 62838d66ee01e631c7c8aa3848b6892d1478c5b6 Mon Sep 17 00:00:00 2001 From: Lorenzo Stoakes Date: Tue, 18 Apr 2023 17:11:01 +0100 Subject: [PATCH] io_uring: rsrc: avoid use of vmas parameter in pin_user_pages() Rename function to avoid confusion and correct shmem check as suggested by David. --- io_uring/rsrc.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/io_uring/rsrc.c b/io_uring/rsrc.c index 3a927df9d913..483b975e31b3 100644 --- a/io_uring/rsrc.c +++ b/io_uring/rsrc.c @@ -1138,7 +1138,7 @@ static int io_buffer_account_pin(struct io_ring_ctx *ctx, struct page **pages, return ret; } -static int check_vmas_locked(unsigned long addr, unsigned long len) +static int check_vmas_compatible(unsigned long addr, unsigned long len) { struct file *file; VMA_ITERATOR(vmi, current->mm, addr); @@ -1149,15 +1149,16 @@ static int check_vmas_locked(unsigned long addr, unsigned long len) return -EINVAL; file = vma->vm_file; - if (file && !is_file_hugepages(file)) - return -EOPNOTSUPP; /* don't support file backed memory */ for_each_vma_range(vmi, vma, end) { if (vma->vm_file != file) return -EINVAL; - if (file && !vma_is_shmem(vma)) + if (!file) + continue; + + if (!vma_is_shmem(vma) && !is_file_hugepages(file)) return -EOPNOTSUPP; } @@ -1185,7 +1186,7 @@ struct page **io_pin_pages(unsigned long ubuf, unsigned long len, int *npages) pages, NULL); if (pret == nr_pages) { - ret = check_vmas_locked(ubuf, len); + ret = check_vmas_compatible(ubuf, len); *npages = nr_pages; } else { ret = pret < 0 ? pret : -EFAULT; -- 2.40.0