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 32DB5C74A5B for ; Wed, 22 Mar 2023 14:19:06 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id A835A6B0071; Wed, 22 Mar 2023 10:19:05 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id A323F6B0072; Wed, 22 Mar 2023 10:19:05 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 921326B0075; Wed, 22 Mar 2023 10:19:05 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id 839CC6B0071 for ; Wed, 22 Mar 2023 10:19:05 -0400 (EDT) Received: from smtpin17.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id 322A4AADDD for ; Wed, 22 Mar 2023 14:19:05 +0000 (UTC) X-FDA: 80596741050.17.A1AB299 Received: from mail-wm1-f50.google.com (mail-wm1-f50.google.com [209.85.128.50]) by imf28.hostedemail.com (Postfix) with ESMTP id 2DD21C0024 for ; Wed, 22 Mar 2023 14:19:02 +0000 (UTC) Authentication-Results: imf28.hostedemail.com; dkim=pass header.d=gmail.com header.s=20210112 header.b=i3nVVRWT; spf=pass (imf28.hostedemail.com: domain of lstoakes@gmail.com designates 209.85.128.50 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=1679494743; 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=wm1gEgpO8Vn1aWhx1/jlEqhlPh3aI7HtjbvGUfjefuk=; b=ydIAR0JNQRoBJuP7yr+tc3rgjLV4smOfZNAbGsEkNl0YYeIdxTvPKie6qahw0TSGr4pMbK DIWQb2xG7+Sqjbnuux4kIkDlGKma+AhkGYY5wql3atm7HcA0Z52u/5wVFoyXDheFsK4Zvx Nw5TuIBBjgQjcUydtt5PVlBNZWZVvvk= ARC-Authentication-Results: i=1; imf28.hostedemail.com; dkim=pass header.d=gmail.com header.s=20210112 header.b=i3nVVRWT; spf=pass (imf28.hostedemail.com: domain of lstoakes@gmail.com designates 209.85.128.50 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=1679494743; a=rsa-sha256; cv=none; b=yWTtqeByeF3VAqhmSPukDQ/kkfsPgAt07aKSrAyIa5YdkGNzwBSp1HGXYVtZyMiKK07Xu/ AmOh1oSa6qBcgpwedVhn7d46VCajEHYoAFvfS5zEQ61D6L6l0IQU5G/zkhhePeKyG5mpC3 sAtUNG8/XBmnzywzKDPHmHAbNXZqhKY= Received: by mail-wm1-f50.google.com with SMTP id v4-20020a05600c470400b003ee4f06428fso2070797wmo.4 for ; Wed, 22 Mar 2023 07:19:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; t=1679494741; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=wm1gEgpO8Vn1aWhx1/jlEqhlPh3aI7HtjbvGUfjefuk=; b=i3nVVRWTQgwdnWITBu23k290kSnKMj2TNEvKayCNgzRqcYLCOV+kv5QmGILNg6F9wt 8MGrp6lEsoDvw0/jIE69h6gIoSIF+YW8euwTyCv2SNHTwhupcF+NpTYyf7PgBzeob+yG wEORqQux6xOH3P0XhS8enz9P3G9JGlxR33Mird5TOtdfBgHNKdlg0G2Gerj69B0zlZyl qOvTNaDdN/iXF8Xem6nLBbpL9jdnRebSUiHNohdQFyJWQHYXyxWdGJYW8RC0tkJfWaAM 0WzpURlIslSn9NMtjaO4+qskq0m7E8qmUxcaqBRwRtq1UG2knl2cqNc1qmMg64jp2WmW gQuw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1679494741; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=wm1gEgpO8Vn1aWhx1/jlEqhlPh3aI7HtjbvGUfjefuk=; b=IYY46u2miXe9cKUNpUR8El1q1Nm9pV6nU/jPB6H2bMy28e5Yevid7ECQPwtsPnjldj xtUdYDyDgs6n+TY+gEIUwEvgKDXMkkOAsCI8iljaRHe2MMh/Wom6KRLulnN1DflaJk6q ykoe8IGfyCnCOSrUJGiiSB11wtQ/g/4xhatx9IiYGXCrGwvCxU7mok+rVZ0/CQKd8X9A 1coC2Uh/v1GYYz9tjyVQK9rY6LUP786OVTgL42hZl0SN7k4sdHsriofXJ6eoQU5KXXhD CQjTVe2HmGJWmBxdoiEXHO6zJlqSJKA5pqC4piSDZHUqZYi7251fR8qjQr/wj8ZA2mk8 YKVg== X-Gm-Message-State: AO0yUKX0TKkh3y4gzdKgPDDgRqcwk9Sto2pSdK9Vp0kZVGuPEIdCXBtJ tDyxbNV/jGENlpaIH7MtrDbwk1E8VME= X-Google-Smtp-Source: AK7set9BcKX3Nn/5N8OPLr+LJi+LLJpc9u92dW88s8ljGSaW+vyt1D3Yte6/zwyAfZ/OlLoz1moRJA== X-Received: by 2002:a05:600c:218f:b0:3e9:f15b:935b with SMTP id e15-20020a05600c218f00b003e9f15b935bmr5187896wme.32.1679494741327; Wed, 22 Mar 2023 07:19:01 -0700 (PDT) Received: from lucifer.home ([2a00:23c5:dc8c:8701:1663:9a35:5a7b:1d76]) by smtp.googlemail.com with ESMTPSA id f20-20020a7bcd14000000b003e203681b26sm16872855wmj.29.2023.03.22.07.19.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 22 Mar 2023 07:19:00 -0700 (PDT) From: Lorenzo Stoakes To: linux-mm@kvack.org, linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, Andrew Morton Cc: Baoquan He , Uladzislau Rezki , Matthew Wilcox , David Hildenbrand , Liu Shixin , Jiri Olsa , Jens Axboe , Alexander Viro , Lorenzo Stoakes Subject: [PATCH v5 0/4] convert read_kcore(), vread() to use iterators Date: Wed, 22 Mar 2023 14:18:47 +0000 Message-Id: X-Mailer: git-send-email 2.39.2 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Rspamd-Server: rspam07 X-Rspamd-Queue-Id: 2DD21C0024 X-Rspam-User: X-Stat-Signature: ngqcucxn7zxrmifcrz8ezjko6pqaydoa X-HE-Tag: 1679494742-390666 X-HE-Meta: U2FsdGVkX1+QJuseCxmx9Dumql5G5FZo07W177cfVXAf2yhr4c6u1UQGs8JwRAr3pZU0mfI8FFtRs6rCoCHbKQavmLGJB7yqo5aJy6hP6FvTPy2CEmMpSMfjXX92Y8LYPlcbZO+AB08InmkAnYzBL4FUOjHtoe6ZKwAcqmnLBbRAPSEA0BBqKtHpm6CtgR7sRvA+8WsYwunSnU+EiDpWPcktTW2eJRgKVvPxNIBjRci7eru1mpiYBkc0V7EhRvVYo4l4W2p52KF/Ei9WpQAYQHs6yrTAKsgg84xhvIy/9uIGur0Qna0eM79CNuwL2/WGo8jVuJIxKNkfBoWY18pewOKkzApIDBi1YoBnjSFZsT2wMCBkvqAjLqYPqpZub4PU/oy3vVMIuoKubtaR7xgYwOHiN/BH82We50Y2ewMo1eEaFymx2bAc8VLMK3L/k23027cXVTjZORixIBLJFOH5ulHfar+QRAgwumoX/HehUMUafgxdfrlOpvizzrGU5L2xBva3EJ3TsB3+IHnDrRIHjF7a1xqznyGYca/0QS2FKUka6lBitVxabj0s2i7FGvwLBtWfsFcaxzaQ+4cT605DlgnI2CNTnYHGCST6jhrNX/9+D914Zp2FFACRLJsdlsazW0/uJ7sS5DLg8QKp3n/r+aO95et57jWQgv3t2/ZWuaoYJVKl7xWR+hI0/5VKqZ40pbCCoDx68oirn1FNHGDlTQp2vLAwwI8CxMVwtqaEX2TTrAuDYqdjJ+I0xmlVYVPq/QPlFZmh82atbOZwCKMdsr8hcdWQP3r8zhMhti729vuVfdaWKTDl5O/BiR6C4hyXrDx4u4TiBuubAWkpghXDJPnfssP6fX5ccBjkxPX3IBnizOwlxFp0IqkMBYP/fDDOGdl9MwzVEpjCNeQ+CFptar03oS3QN+WMEK8rKbpEUV1fMpCl/LBjJ5obBYS2al0X/TMmYP28ReUiVXc7+ZI /2n49aS8 9xtcoBwjWWgWO5QIjmBPeUwQcZVDNchmpNA1HWN2uAxu4PGKx19jJs/WosIDYyItnLnn+aMI+ZAQBXHEDJwHGNJ3otDbtjFDLYhyEDZ4XZvYbtb6rS5IJC2E1JbEVt+wK6/f4vutMp3zWX4HqDmQ+YfRCEecIeamp5SlPV8NVz78uYaAhXfs7kA7kLBn5KHOzD/1lFzQUIJKnXKsQJrmi+4eGvlEJMc6Q8mZUIJ0qqe8/Vcrfh6RXKq8GjtlyjOsYEbAhRg4Ht78Qj0gGrxvwV/uZ4X8eZjJ+b18PEzokn/b8f6G2+tZn9WXVQC8H+hLkk0S6jvJ6P/gFsOBUYmZF9c3CZ6+Q5y2Bs2UCrvHXKhi8/cM+O4F+jjR0+Wbctx8w20CtPOjeIXYcVjEOPXSPLYi3XBonOJyIV43T6pUB7qhVNyeVy9zL/R2ooYas8BTzAIJFAsZGf5mqwASrKmevGBC+CNbSwzH0MbWFDaesFlvYU0lpacyTwN8JfvUstpslasEAxx76EjC4X07q+Zc58hwNPhNfA1/jvVfSSzS8P4X6gBNDH6La8Vpr58aET0pqe5LtrAgngd2LT8yx1IlPgKUs7W5nwydsdYCh 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: While reviewing Baoquan's recent changes to permit vread() access to vm_map_ram regions of vmalloc allocations, Willy pointed out [1] that it would be nice to refactor vread() as a whole, since its only user is read_kcore() and the existing form of vread() necessitates the use of a bounce buffer. This patch series does exactly that, as well as adjusting how we read the kernel text section to avoid the use of a bounce buffer in this case as well. This has been tested against the test case which motivated Baoquan's changes in the first place [2] which continues to function correctly, as do the vmalloc self tests. [1] https://lore.kernel.org/all/Y8WfDSRkc%2FOHP3oD@casper.infradead.org/ [2] https://lore.kernel.org/all/87ilk6gos2.fsf@oracle.com/T/#u v5: - Do not rename fpos to ppos in read_kcore_iter() to avoid churn. - Fix incorrect commit messages after prior revisions altered the approach. - Replace copy_page_to_iter_atomic() with copy_page_to_iter_nofault() and adjust it to be able to handle compound pages. This uses copy_to_user_nofault() which ensures page faults are disabled during copy which kmap_local_page() was not doing. - Only try to fault in pages if we are unable to copy in the first place and try only once to avoid any risk of spinning. - Do not zero memory in aligned_vread_iter() if we couldn't copy it. - Fix mistake in zeroing missing or unpopulated blocks in vmap_ram_vread_iter(). v4: - Fixup mistake in email client which orphaned patch emails from the cover letter. https://lore.kernel.org/all/cover.1679431886.git.lstoakes@gmail.com v3: - Revert introduction of mutex/rwsem in vmalloc - Introduce copy_page_to_iter_atomic() iovec function - Update vread_iter() and descendent functions to use only this - Fault in user pages before calling vread_iter() - Use const char* in vread_iter() and descendent functions - Updated commit messages based on feedback - Extend vread functions to always check how many bytes we could copy. If at any stage we are unable to copy/zero, abort and return the number of bytes we did copy. https://lore.kernel.org/all/cover.1679354384.git.lstoakes@gmail.com/ v2: - Fix ordering of vread_iter() parameters - Fix nommu vread() -> vread_iter() https://lore.kernel.org/all/cover.1679209395.git.lstoakes@gmail.com/ v1: https://lore.kernel.org/all/cover.1679183626.git.lstoakes@gmail.com/ Lorenzo Stoakes (4): fs/proc/kcore: avoid bounce buffer for ktext data fs/proc/kcore: convert read_kcore() to read_kcore_iter() iov_iter: add copy_page_to_iter_nofault() mm: vmalloc: convert vread() to vread_iter() fs/proc/kcore.c | 78 ++++++-------- include/linux/uio.h | 2 + include/linux/vmalloc.h | 3 +- lib/iov_iter.c | 36 +++++++ mm/nommu.c | 10 +- mm/vmalloc.c | 234 +++++++++++++++++++++++++--------------- 6 files changed, 224 insertions(+), 139 deletions(-) -- 2.39.2