From: Andrew Morton <akpm@linux-foundation.org>
To: mm-commits@vger.kernel.org,ljs@kernel.org,akpm@linux-foundation.org
Subject: + mm-vma-eliminate-mmap_action-error_hook-introduce-error_override.patch added to mm-unstable branch
Date: Tue, 02 Jun 2026 13:11:10 -0700 [thread overview]
Message-ID: <20260602201111.592521F00893@smtp.kernel.org> (raw)
The patch titled
Subject: mm/vma: eliminate mmap_action->error_hook, introduce error_override
has been added to the -mm mm-unstable branch. Its filename is
mm-vma-eliminate-mmap_action-error_hook-introduce-error_override.patch
This patch will shortly appear at
https://git.kernel.org/pub/scm/linux/kernel/git/akpm/25-new.git/tree/patches/mm-vma-eliminate-mmap_action-error_hook-introduce-error_override.patch
This patch will later appear in the mm-unstable branch at
git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm
Before you just go and hit "reply", please:
a) Consider who else should be cc'ed
b) Prefer to cc a suitable mailing list as well
c) Ideally: find the original patch on the mailing list and do a
reply-to-all to that, adding suitable additional cc's
*** Remember to use Documentation/process/submit-checklist.rst when testing your code ***
The -mm tree is included into linux-next via various
branches at git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm
and is updated there most days
------------------------------------------------------
From: Lorenzo Stoakes <ljs@kernel.org>
Subject: mm/vma: eliminate mmap_action->error_hook, introduce error_override
Date: Tue, 2 Jun 2026 12:06:27 +0100
Rather than providing a hook, simplify things by providing the ability to
override mmap action errors. This allows us to more carefully validate
the value provided and thus ensure only a valid error code is specified,
and simplifies the interface.
This way, we eliminate all hooks but mmap_prepare and allow only mmap
actions to be specified (which core mm controls).
This significantly improves robustness and eliminates any unnecessary code
duplication in driver mmap hooks.
We also update the /dev/mem logic (the only user) to use
mmap_action->error_override instead.
Link: https://lore.kernel.org/55d13f7d016b827c459946d46a56105635be111c.1780397980.git.ljs@kernel.org
Signed-off-by: Lorenzo Stoakes <ljs@kernel.org>
Acked-by: David Hildenbrand (Arm) <david@kernel.org>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Jann Horn <jannh@google.com>
Cc: Liam R. Howlett <liam@infradead.org>
Cc: Michal Hocko <mhocko@suse.com>
Cc: Mike Rapoport <rppt@kernel.org>
Cc: Pedro Falcato <pfalcato@suse.de>
Cc: Suren Baghdasaryan <surenb@google.com>
Cc: Vlastimil Babka <vbabka@kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
---
drivers/char/mem.c | 8 +-------
include/linux/mm_types.h | 9 +++------
mm/util.c | 29 +++++++++++++++++++++--------
tools/testing/vma/include/dup.h | 9 +++------
4 files changed, 28 insertions(+), 27 deletions(-)
--- a/drivers/char/mem.c~mm-vma-eliminate-mmap_action-error_hook-introduce-error_override
+++ a/drivers/char/mem.c
@@ -322,11 +322,6 @@ static const struct vm_operations_struct
#endif
};
-static int mmap_filter_error(int err)
-{
- return -EAGAIN;
-}
-
static int mmap_mem_prepare(struct vm_area_desc *desc)
{
struct file *file = desc->file;
@@ -362,8 +357,7 @@ static int mmap_mem_prepare(struct vm_ar
/* Remap-pfn-range will mark the range with the I/O flag. */
mmap_action_remap_full(desc, desc->pgoff);
- /* We filter remap errors to -EAGAIN. */
- desc->action.error_hook = mmap_filter_error;
+ desc->action.error_override = -EAGAIN;
return 0;
}
--- a/include/linux/mm_types.h~mm-vma-eliminate-mmap_action-error_hook-introduce-error_override
+++ a/include/linux/mm_types.h
@@ -844,13 +844,10 @@ struct mmap_action {
enum mmap_action_type type;
/*
- * If specified, this hook is invoked when an error occurred when
- * attempting the selected action.
- *
- * The hook can return an error code in order to filter the error, but
- * it is not valid to clear the error here.
+ * If non-zero, replace errors that arise from mmap actions with this
+ * value instead. Only valid error codes may be specified.
*/
- int (*error_hook)(int err);
+ int error_override;
/*
* This should be set in rare instances where the operation required
--- a/mm/util.c~mm-vma-eliminate-mmap_action-error_hook-introduce-error_override
+++ a/mm/util.c
@@ -1414,16 +1414,22 @@ static int mmap_action_finish(struct vm_
*/
len = vma_pages(vma) << PAGE_SHIFT;
do_munmap(current->mm, vma->vm_start, len, NULL);
- if (action->error_hook) {
- /* We may want to filter the error. */
- err = action->error_hook(err);
- /* The caller should not clear the error. */
- VM_WARN_ON_ONCE(!err);
- }
- return err;
+
+ return action->error_override ?: err;
}
#ifdef CONFIG_MMU
+
+static int check_mmap_action(struct mmap_action *action)
+{
+ const unsigned long override = action->error_override;
+
+ if (WARN_ON_ONCE(override && !IS_ERR_VALUE(override)))
+ return -EINVAL;
+
+ return 0;
+}
+
/**
* mmap_action_prepare - Perform preparatory setup for an VMA descriptor
* action which need to be performed.
@@ -1433,7 +1439,14 @@ static int mmap_action_finish(struct vm_
*/
int mmap_action_prepare(struct vm_area_desc *desc)
{
- switch (desc->action.type) {
+ struct mmap_action *action = &desc->action;
+ int err;
+
+ err = check_mmap_action(action);
+ if (err)
+ return err;
+
+ switch (action->type) {
case MMAP_NOTHING:
return 0;
case MMAP_REMAP_PFN:
--- a/tools/testing/vma/include/dup.h~mm-vma-eliminate-mmap_action-error_hook-introduce-error_override
+++ a/tools/testing/vma/include/dup.h
@@ -483,13 +483,10 @@ struct mmap_action {
enum mmap_action_type type;
/*
- * If specified, this hook is invoked when an error occurred when
- * attempting the selection action.
- *
- * The hook can return an error code in order to filter the error, but
- * it is not valid to clear the error here.
+ * If non-zero, replace errors that arise from mmap actions with this
+ * value instead. Only valid error codes may be specified.
*/
- int (*error_hook)(int err);
+ int error_override;
/*
* This should be set in rare instances where the operation required
_
Patches currently in -mm which might be from ljs@kernel.org are
mm-huge_memory-use-correct-flags-for-device-private-pmd-entry.patch
drivers-char-mem-eliminate-unnecessary-use-of-success_hook.patch
mm-vma-remove-mmap_action-success_hook.patch
mm-vma-eliminate-mmap_action-error_hook-introduce-error_override.patch
reply other threads:[~2026-06-02 20:11 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260602201111.592521F00893@smtp.kernel.org \
--to=akpm@linux-foundation.org \
--cc=ljs@kernel.org \
--cc=mm-commits@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.