Patch "mm: avoid returning VM_FAULT_RETRY from ->page_mkwrite handlers" has been added to the 4.9-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
mm: avoid returning VM_FAULT_RETRY from ->page_mkwrite handlers
to the 4.9-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
mm-avoid-returning-vm_fault_retry-from-page_mkwrite-handlers.patch
and it can be found in the queue-4.9 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From foo@baz Wed Dec 6 17:39:55 CET 2017
From: Jan Kara <[email protected]>
Date: Wed, 8 Feb 2017 14:30:53 -0800
Subject: mm: avoid returning VM_FAULT_RETRY from ->page_mkwrite handlers
From: Jan Kara <[email protected]>
[ Upstream commit 0911d0041c22922228ca52a977d7b0b0159fee4b ]
Some ->page_mkwrite handlers may return VM_FAULT_RETRY as its return code (GFS2 or Lustre can definitely do this). However VM_FAULT_RETRY from ->page_mkwrite is completely unhandled by the mm code and results in locking and writeably mapping the page which definitely is not what the caller wanted.
Fix Lustre and block_page_mkwrite_ret() used by other filesystems (notably GFS2) to return VM_FAULT_NOPAGE instead which results in bailing out from the fault code, the CPU then retries the access, and we fault again effectively doing what the handler wanted.
--- drivers/staging/lustre/lustre/llite/llite_mmap.c | 4 +--- include/linux/buffer_head.h | 4 +--- 2 files changed, 2 insertions(+), 6 deletions(-)
drivers/staging/lustre/lustre/llite/llite_mmap.c +1 -3
@@ -401,15 +401,13 @@ static int ll_page_mkwrite(struct vm_are result =VM_FAULT_LOCKED ;break ;case -ENODATA : +case -EAGAIN :case -EFAULT : result =VM_FAULT_NOPAGE ;break ;case -ENOMEM : result =VM_FAULT_OOM ;break ; -case -EAGAIN : - result =VM_FAULT_RETRY ; -break ;default : result =VM_FAULT_SIGBUS ;break ;
include/linux/buffer_head.h +1 -3
@@ -239,12 +239,10 @@ static inline int block_page_mkwrite_ret {if (err ==0 )return VM_FAULT_LOCKED ; -if (err == -EFAULT ) +if (err == -EFAULT || err == -EAGAIN )return VM_FAULT_NOPAGE ;if (err == -ENOMEM )return VM_FAULT_OOM ; -if (err == -EAGAIN ) -return VM_FAULT_RETRY ;/* -ENOSPC, -EDQUOT, -EIO ... */ return VM_FAULT_SIGBUS ; }
Patches currently in stable-queue which might be from [email protected] are
queue-4.9/mm-avoid-returning-vm_fault_retry-from-page_mkwrite-handlers.patch queue-4.9/dax-avoid-page-invalidation-races-and-unnecessary-radix-tree-traversals.patch