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 00681C54E67 for ; Sun, 17 Mar 2024 16:50:26 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 33EDC6B007B; Sun, 17 Mar 2024 12:50:26 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 2EF996B0082; Sun, 17 Mar 2024 12:50:26 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 1B64F6B0083; Sun, 17 Mar 2024 12:50:26 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id 08E666B007B for ; Sun, 17 Mar 2024 12:50:26 -0400 (EDT) Received: from smtpin02.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id D568D16064E for ; Sun, 17 Mar 2024 16:50:25 +0000 (UTC) X-FDA: 81907119210.02.CB57372 Received: from sin.source.kernel.org (sin.source.kernel.org [145.40.73.55]) by imf27.hostedemail.com (Postfix) with ESMTP id 97E7B40009 for ; Sun, 17 Mar 2024 16:50:22 +0000 (UTC) Authentication-Results: imf27.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=UJP3pt7r; spf=pass (imf27.hostedemail.com: domain of djwong@kernel.org designates 145.40.73.55 as permitted sender) smtp.mailfrom=djwong@kernel.org; dmarc=pass (policy=none) header.from=kernel.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1710694223; 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=oiFMHSRJdIu+J3jYd5JTd/Omh1IHhVqYP9RmHS3P73o=; b=CG4tYI0JNXPYPjLJkxj6jC7LuLS57hyjYfek4tnkL7nFK4A2F5M8P2clZUJnJem2sRJ+F/ oyIyausWVq58JTmPEhcPSWgUVF97lNsnuB49CF0ihO53XnSH2smQTtvcCPa+XVt8JtzsRZ b9qYq9Ja6TRsFQxaXSTLoJWgsvkoBbM= ARC-Authentication-Results: i=1; imf27.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=UJP3pt7r; spf=pass (imf27.hostedemail.com: domain of djwong@kernel.org designates 145.40.73.55 as permitted sender) smtp.mailfrom=djwong@kernel.org; dmarc=pass (policy=none) header.from=kernel.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1710694223; a=rsa-sha256; cv=none; b=2a/Hv3AGsub4VpFnjvVfrS8knobG06M5weUCmP5llxz7D8KgZk2yjrAbcSip6zTXII0D7q RsGSlr2+oSvNiw4t+oshBLgn5CAi7Ezw9RjIkPoyO685MJ1yLWAh9lpmHWy9xp1iOsrxFY jbmTJWKOhVImrUr7eziXIEXnfSD7byU= Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by sin.source.kernel.org (Postfix) with ESMTP id 38088CE0020; Sun, 17 Mar 2024 16:50:19 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 6F93AC433F1; Sun, 17 Mar 2024 16:50:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1710694218; bh=xEAJw0ZQhX123wo5YbhIlzw/udZVwfWZul3CMtOyu8w=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=UJP3pt7rVpsiqWxGN/fmUghTX5b4F8SyvWLoyXOCSezU6bnN1UH2FyH1sWa5O1whU BJEAnj/rid/0i1A3z+FiUv6m2ulP7ItDh6MOZFt3IklULcPjfGHwPSax6209N9ipCx D4Vw9GReURPz4Z9h7ajPqh/8bs4R4toBFOpRNWNTvTSf46KI5qzeYXRX2zzQk53Uk3 3XlyAyezDgY4N6cO+Zn0AtmBKuuOtRXaGJ84Zt+YHf9+tKmJEMHGoANzj6nsVaJpS9 pYdJnIzXmFyHOUhsyJvG/hzrEXhQkXvDvhjqzDODoZuTo6ZB97ycBpcQQ6sKfuZL1q ZhPNU4Pas7g8w== Date: Sun, 17 Mar 2024 09:50:17 -0700 From: "Darrick J. Wong" To: David Hildenbrand Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, Andrew Morton , John Hubbard , Jason Gunthorpe , Hugh Dickins Subject: Re: [PATCH v1 0/2] mm/madvise: make MADV_POPULATE_(READ|WRITE) handle VM_FAULT_RETRY properly Message-ID: <20240317165017.GD1927156@frogsfrogsfrogs> References: <20240314161300.382526-1-david@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20240314161300.382526-1-david@redhat.com> X-Rspamd-Queue-Id: 97E7B40009 X-Rspam-User: X-Stat-Signature: k5pgod95ay3ai7a7d7x9sxxxdcunzbo5 X-Rspamd-Server: rspam01 X-HE-Tag: 1710694222-457470 X-HE-Meta: U2FsdGVkX1+DRWFuXy6+YNrZycSbjEbv+ZOYUUyFQ1E5rrjkqXFYdX4dqpz6lT7GpDPSy7nZ9eGvLTX9AO1edZSxzmQza+5TfxBRoB+RiiM7JYycklYZQ9DPQgqgXTVHtOmRR+Yi3xDEKGglO1mRtF2pVxJJrdpp1YkqDRL1sfWfOIm5JTgV3XdL1SJ2XUTP1aPHRoZYiQNQEU/sYq/HpVCaP0FQxvLS0FruGPhhsgMZgoeijxCh+HZXQFZT8Tvvcg7OdREbb0WnBSS5W4D+aD39CDTtxqStaYqQkMtiM1ntbGqohB40Aw34HsuYs2RpONlytqA5fX8/3b+tszlwUDYfe+/1mGB1zvG0RsQGyqOcVcWr/CFyZy6ZAHHPztn0tVslbW0mMIplYYZTzAeO28rZZLYY2AR2Kzq7CVQkVjGn8r2hnPTMzedXPxNT6m9CPpIwx/AFscdlPlh5ZkC1H32FUiCqFuFFsQfqpxBqCmi6WbyyNiewhttiiR4lYTJPkwLYnpSMw4a1fr+X2PVjRgeZAAHUf+fYncVHsyIJIdoGPXfu3T/I/h/nbNsS8pp+vUeUdyz35ftpG4e/oy/mQwwCYz2wDFtD1Ud1MbZPbyqL3+aEopjVSKIlRjOru6JFA0aQ1DE5hRcsLH+Aozh9mnBdoylL7/IAoXTvn6VYgxrnHjvNztAWubq87begyBahjS1U+BKUiYEAAPwZ5x1kJVzrvNA57PYrjTyLozN+cxwiys6QxqzNwLSGgcFTP7nhb8R7pC3GxuHCnx3l2+wqSwKbl/DkTv3haboXFT52EC9MixvyieRClEm0crzUMVu91C46+yXHtJpRUKhvI36J5zLlVDWYXgOppehw5t6yyEZRReib1zmwRE5guEccKW6rYmJmzrPgfP1+RT926oIHTvucUxK1Jhk4RCGo8nNq7FHyyhbbzV2n8BG/Dti92b5+WTmSqxhSTTdybj72seU 4e8v3UQj i9pO9qJYtI2+bNBVfrSWQO5dRb+EX7CUbblDZzhR0etsAnGHyPl4x1S7yHNbR2fIx/C4ZvcDNJracdSrwDaN+N8VTTJcyDLVvHgO7moHdDCJPmLq7Dg3KIX5H8eE0yQHQSm2y8S0lun0NYyXPKiNNus8fxbjzJkPFbKoEj/FiJZdxwYvIm/9nTwX7TQwqPLA0A7ZiCh0i79xgDvNQL5HTVk6oJegGAPIF1QoeN/YFa+6Aa93OT0CXN/pCN4v8bcrThcSVD03MAWkbscqaW44w11BVnHezdqBQUbu8qcZy3tqHnN86FoPg/Z8bgDfMpo3bLD5RoRa8nJ824euwU4ShaQyD/BZPUSbKJdsgqrzzB2wB2y4UIJql115BsXemaSYI0/lfEMhqcb4XxQU= 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: List-Subscribe: List-Unsubscribe: On Thu, Mar 14, 2024 at 05:12:58PM +0100, David Hildenbrand wrote: > Derrick reports that in some cases where pread() would fail with -EIO and > mmap()+access would generate a SIGBUS signal, MADV_POPULATE_READ / > MADV_POPULATE_WRITE will keep retrying forever and not fail with -EFAULT. > > It all boils down to missing VM_FAULT_RETRY handling. Let's try to handle > that in a better way, similar to how ordinary GUP handles it. > > Details in patch #1. In short, move special MADV_POPULATE_(READ|WRITE) > VMA handling into __get_user_pages(), and make faultin_page_range() > call __get_user_pages_locked(), which handles VM_FAULT_RETRY. Further, > avoid the now-useless madvise VMA walk, because __get_user_pages() will > perform the VMA lookup either way. > > I briefly played with handling the FOLL_MADV_POPULATE checks in > __get_user_pages() a bit differently, integrating them with existing > handling, but it ended up looking worse. So I decided to keep it simple. > > Likely, we need better selftests, but the reproducer from Darrick might > be a bit hard to convert into a simple selftest. > > Note that using mlock() in Darricks reproducer results in a similar > endless retry. Likely, that is not what we want, and we should handle > VM_FAULT_RETRY in populate_vma_page_range() / __mm_populate() as well. > However, similarly using __get_user_pages_locked() might be more > complicated, because of the advanced VMA handling in > populate_vma_page_range(). > > Further, most populate_vma_page_range() callers simply ignore the return > values, so it's unclear in which cases we expect to just silently fail, or > where we'd want to retry+fail or endlessly retry instead. > > Cc: Andrew Morton > Cc: Darrick J. Wong > Cc: John Hubbard > Cc: Jason Gunthorpe > Cc: Hugh Dickins After a few days I haven't seen any problems, so Tested-by: Darrick J. Wong --D > > David Hildenbrand (2): > mm/madvise: make MADV_POPULATE_(READ|WRITE) handle VM_FAULT_RETRY > properly > mm/madvise: don't perform madvise VMA walk for > MADV_POPULATE_(READ|WRITE) > > mm/gup.c | 54 ++++++++++++++++++++++++++++++--------------------- > mm/internal.h | 10 ++++++---- > mm/madvise.c | 43 +++++++++++++--------------------------- > 3 files changed, 52 insertions(+), 55 deletions(-) > > > base-commit: f48159f866f422371bb1aad10eb4d05b29ca4d8c > -- > 2.43.2 >