From patchwork Thu Mar 14 16:12:58 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Hildenbrand X-Patchwork-Id: 13592599 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 C24B1C54E67 for ; Thu, 14 Mar 2024 16:13:15 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 54E6A800BD; Thu, 14 Mar 2024 12:13:15 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 4FEA0800B4; Thu, 14 Mar 2024 12:13:15 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 2DCEE800BD; Thu, 14 Mar 2024 12:13:15 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id 07C37800B4 for ; Thu, 14 Mar 2024 12:13:15 -0400 (EDT) Received: from smtpin25.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id D1111161514 for ; Thu, 14 Mar 2024 16:13:14 +0000 (UTC) X-FDA: 81896139108.25.C835AB4 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by imf28.hostedemail.com (Postfix) with ESMTP id 67FEBC0014 for ; Thu, 14 Mar 2024 16:13:12 +0000 (UTC) Authentication-Results: imf28.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=YlwChnN8; dmarc=pass (policy=none) header.from=redhat.com; spf=pass (imf28.hostedemail.com: domain of david@redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=david@redhat.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1710432792; 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:references:dkim-signature; bh=rQzaqtFO0M74UqxIFZdSZlCBtuv6/tpgFRgRP1U7oaM=; b=cMjGN540Qmg/CmzPw3YbFAEdANix2LU4x1pkT1J+mvIT6/nNwjX3uXmmAd9bYmm0grYh9s r/0spC/Uf7qPt/B6Mwohxt7xfncDQwSuD8SpCK+sXkxabenJo2kqO6e55hnAKZ9oeyrbDx 4UQ8fHliQ23IytzLJTbuWxrNz/zxg7M= ARC-Authentication-Results: i=1; imf28.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=YlwChnN8; dmarc=pass (policy=none) header.from=redhat.com; spf=pass (imf28.hostedemail.com: domain of david@redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=david@redhat.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1710432792; a=rsa-sha256; cv=none; b=MCGyHxFv/bstvdK1aKhWQ2qjCK1UxVUl+iG/d26ywrCX61LE/mj2/8zFlG4DjS4o7GhRDy KOKDqMiKw/iBwwTZXk6W7ZoqB5ucjBDqvUOAWrfHV0oqNkHx3myGenAIp3/FnODY8WJY5L Nu4NvtH1r0K72jRFcSDBkIwa/3KuU7k= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1710432791; 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=rQzaqtFO0M74UqxIFZdSZlCBtuv6/tpgFRgRP1U7oaM=; b=YlwChnN8B5hAu78ByrxcScvtCQL8BW9mUE9Yi6bMbhotJeqboXziiyskTRAUyPZ2pJLD8l xd53JhO/WpcQJhggu+s5Im3Uxz6KaTuWNX++HkmGpU1ybCKCfuifQfqE8XVbfVHC72kQEI Mr94111ZTnfflCqmrzAt9B70dtJfB3Q= Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-638-m3ax5l6zMq6oyJh6GFMyXQ-1; Thu, 14 Mar 2024 12:13:03 -0400 X-MC-Unique: m3ax5l6zMq6oyJh6GFMyXQ-1 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.rdu2.redhat.com [10.11.54.2]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 2E8448047DA; Thu, 14 Mar 2024 16:13:03 +0000 (UTC) Received: from t14s.redhat.com (unknown [10.39.193.74]) by smtp.corp.redhat.com (Postfix) with ESMTP id 5781E40C6DB3; Thu, 14 Mar 2024 16:13:00 +0000 (UTC) From: David Hildenbrand To: linux-kernel@vger.kernel.org Cc: linux-mm@kvack.org, David Hildenbrand , Andrew Morton , "Darrick J . Wong" , John Hubbard , Jason Gunthorpe , Hugh Dickins Subject: [PATCH v1 0/2] mm/madvise: make MADV_POPULATE_(READ|WRITE) handle VM_FAULT_RETRY properly Date: Thu, 14 Mar 2024 17:12:58 +0100 Message-ID: <20240314161300.382526-1-david@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.11.54.2 X-Rspam-User: X-Rspamd-Server: rspam12 X-Rspamd-Queue-Id: 67FEBC0014 X-Stat-Signature: zm8m85gmk57yqj7r4rorpnjc1dgxkpjk X-HE-Tag: 1710432792-86786 X-HE-Meta: U2FsdGVkX18yVTtZu6rMs08gx1N+qnNQ2+cYs1DMg1hzlKT3OyaOkkXVQGkqGEAVRtNl6xtQyE3DJEQfETXB/RuH+4bAInqbuPVRB5wAGtoSiZMdf7wa2G6l+Nv3bHtlGjHdLWmfpIoIILc5pMCkXm1PbrQN74bqwvYGGdNEP1cea89lrr3fwFrvQ588EZv7rXzxWXzF1H3LzNfuRAQ0w37ocNI57TwSgm0Up+NC69P0+j0ZKyK2QXrOMSM90RjYzoESR5q8Rf+Fr99E5Sid4tnatKy+iNyLnIKBq8+FjJe+YCNE9kUyUu7ALYZtRtr+f29n+LxyJtc2W+Cg93SBL4aNTVUky24Ik90xtaHTnEvwwDOnBXJYz4Ibv5wW9WEKZNXI+buYqllkIgi3ru1ftDmMojCyl+TcMor6hz3eR+gvOHGoilhJt4fgKJeQ3ZGb1e56VTZVEeYMPHQcVVcGhM058xMfkJYs7RZXpf99VqrmbuiQV1jDWr3eXwaNIceezZ3XEXXnoGTxu/arFtGOmAfJT6+7qshsbG2kQQCwNE+LZXoQTavcQIsB6JAGAdqdP1c1oEY0Dmhja1xwPjeDWn1pqT1M7MSSrXrweNeSUDzXlr56pe0Tznu1rQsP4Y0lzOT4Irjcczw5NcO9E+O0LxarJ/59hWw64QuWXmatF3NQeVLqO97+vXrZtHrOEyMIT/LzhoRbnrNc7xviNtt/Zxq3i2BHlKs5BmTEBBd9UdFqzIuA0ormBMdGy4zJRdZTi2nmpxHnJPY18Hy4ClgpOtCeYRQZ0T96byVWrUjfscuLd+g367TZ5H4nAM+4W9LwDRXR6/ZdtRFzIstMTr+LoE0X/3Q0hiVtCdii1aHIMPntpdLthXE/HjwRPlx2RvU8lGs1hqOC78aIuuks8jNGquDx9WIQPoq8c4FqsBH/sRoCSDBnQiQTrWiP00lSOQbr 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: 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 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 Tested-by: Darrick J. Wong