On Thu, Oct 18, 2018 at 04:23:17PM -0400, Josef Bacik wrote: > Before we didn't set the retry flag on our vm_fault. We want to allow > file systems to drop the mmap_sem if they so choose, so set this flag > and deal with VM_FAULT_RETRY appropriately. > > Signed-off-by: Josef Bacik <josef@xxxxxxxxxxxxxx> > --- > mm/memory.c | 10 +++++++--- > 1 file changed, 7 insertions(+), 3 deletions(-) > > diff --git a/mm/memory.c b/mm/memory.c > index 433075f722ea..c5e81edd94f9 100644 > --- a/mm/memory.c > +++ b/mm/memory.c > @@ -2384,11 +2384,13 @@ static vm_fault_t do_page_mkwrite(struct vm_fault *vmf) > unsigned int old_flags = vmf->flags; > > vmf->flags = FAULT_FLAG_WRITE|FAULT_FLAG_MKWRITE; > + vmf->flags |= old_flags & FAULT_FLAG_ALLOW_RETRY; > > ret = vmf->vma->vm_ops->page_mkwrite(vmf); > /* Restore original flags so that caller is not surprised */ > vmf->flags = old_flags; > - if (unlikely(ret & (VM_FAULT_ERROR | VM_FAULT_NOPAGE))) > + if (unlikely(ret & (VM_FAULT_ERROR | VM_FAULT_NOPAGE | > + VM_FAULT_RETRY))) Mess. #define __FAIL_FLAGS (VM_FAULT_ERROR | VM_FAULT_NOPAGE | VM_FAULT_RETRY) if (ret & __FAIL_FLAGS) Should kill the unlikely() at the same time. -Dave. -- Dave Chinner david@xxxxxxxxxxxxx