All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Kirill A. Shutemov" <kirill@shutemov.name>
To: Hugh Dickins <hughd@google.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>,
	Matthew Wilcox <willy@infradead.org>,
	"Kirill A. Shutemov" <kirill.shutemov@linux.intel.com>,
	Will Deacon <will@kernel.org>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	Linux-MM <linux-mm@kvack.org>,
	Linux ARM <linux-arm-kernel@lists.infradead.org>,
	Catalin Marinas <catalin.marinas@arm.com>,
	Jan Kara <jack@suse.cz>, Minchan Kim <minchan@kernel.org>,
	Andrew Morton <akpm@linux-foundation.org>,
	Vinayak Menon <vinmenon@codeaurora.org>,
	Android Kernel Team <kernel-team@android.com>
Subject: Re: [PATCH 1/2] mm: Allow architectures to request 'old' entries when prefaulting
Date: Mon, 28 Dec 2020 15:53:52 +0300	[thread overview]
Message-ID: <20201228125352.phnj2x2ci3kwfld5@box> (raw)
In-Reply-To: <alpine.LSU.2.11.2012272233170.24487@eggly.anvils>

On Sun, Dec 27, 2020 at 10:43:44PM -0800, Hugh Dickins wrote:
> On Sun, 27 Dec 2020, Linus Torvalds wrote:
> > On Sun, Dec 27, 2020 at 3:48 PM Kirill A. Shutemov <kirill@shutemov.name> wrote:
> > >
> > > I did what Hugh proposed and it got clear to my eyes. It gets somewhat
> > > large, but take a look.
> > 
> > Ok, it's not that much bigger, and the end result is certainly much
> > clearer wrt locking.
> > 
> > So that last version of yours with the fix for the uninitialized 'ret'
> > variable looks good to me.
> > 
> > Of course, I've said that before, and have been wrong. So ...
> 
> And guess what... it's broken.
> 
> I folded it into testing rc1: segfault on cc1, systemd
> "Journal file corrupted, rotating", seen on more than one machine.
> 
> I've backed it out, rc1 itself seems fine, I'll leave rc1 under
> load overnight, then come back to the faultaround patch tomorrow;
> won't glance at it tonight, but maybe Kirill will guess what's wrong.

So far I only found one more pin leak and always-true check. I don't see
how can it lead to crash or corruption. Keep looking.

diff --git a/mm/filemap.c b/mm/filemap.c
index c5da09f3f363..87671284de62 100644
--- a/mm/filemap.c
+++ b/mm/filemap.c
@@ -2966,8 +2966,7 @@ vm_fault_t filemap_map_pages(struct vm_fault *vmf, unsigned long address,
 			mmap_miss--;
 
 		vmf->address += (xas.xa_index - last_pgoff) << PAGE_SHIFT;
-		if (vmf->pte)
-			vmf->pte += xas.xa_index - last_pgoff;
+		vmf->pte += xas.xa_index - last_pgoff;
 		last_pgoff = xas.xa_index;
 
 		if (!pte_none(*vmf->pte))
diff --git a/mm/memory.c b/mm/memory.c
index e51638b92e7c..829f5056dd1c 100644
--- a/mm/memory.c
+++ b/mm/memory.c
@@ -3785,13 +3785,16 @@ vm_fault_t finish_fault(struct vm_fault *vmf)
 
 	vmf->pte = pte_offset_map_lock(vma->vm_mm, vmf->pmd,
 				      vmf->address, &vmf->ptl);
+	ret = 0;
 	/* Re-check under ptl */
 	if (likely(pte_none(*vmf->pte)))
 		do_set_pte(vmf, page);
+	else
+		ret = VM_FAULT_NOPAGE;
 
 	update_mmu_tlb(vma, vmf->address, vmf->pte);
 	pte_unmap_unlock(vmf->pte, vmf->ptl);
-	return 0;
+	return ret;
 }
 
 static unsigned long fault_around_bytes __read_mostly =
-- 
 Kirill A. Shutemov

WARNING: multiple messages have this Message-ID (diff)
From: "Kirill A. Shutemov" <kirill@shutemov.name>
To: Hugh Dickins <hughd@google.com>
Cc: Android Kernel Team <kernel-team@android.com>,
	Jan Kara <jack@suse.cz>, Minchan Kim <minchan@kernel.org>,
	Linus Torvalds <torvalds@linux-foundation.org>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	Matthew Wilcox <willy@infradead.org>,
	Linux-MM <linux-mm@kvack.org>,
	Vinayak Menon <vinmenon@codeaurora.org>,
	Linux ARM <linux-arm-kernel@lists.infradead.org>,
	Catalin Marinas <catalin.marinas@arm.com>,
	Andrew Morton <akpm@linux-foundation.org>,
	Will Deacon <will@kernel.org>,
	"Kirill A. Shutemov" <kirill.shutemov@linux.intel.com>
Subject: Re: [PATCH 1/2] mm: Allow architectures to request 'old' entries when prefaulting
Date: Mon, 28 Dec 2020 15:53:52 +0300	[thread overview]
Message-ID: <20201228125352.phnj2x2ci3kwfld5@box> (raw)
In-Reply-To: <alpine.LSU.2.11.2012272233170.24487@eggly.anvils>

On Sun, Dec 27, 2020 at 10:43:44PM -0800, Hugh Dickins wrote:
> On Sun, 27 Dec 2020, Linus Torvalds wrote:
> > On Sun, Dec 27, 2020 at 3:48 PM Kirill A. Shutemov <kirill@shutemov.name> wrote:
> > >
> > > I did what Hugh proposed and it got clear to my eyes. It gets somewhat
> > > large, but take a look.
> > 
> > Ok, it's not that much bigger, and the end result is certainly much
> > clearer wrt locking.
> > 
> > So that last version of yours with the fix for the uninitialized 'ret'
> > variable looks good to me.
> > 
> > Of course, I've said that before, and have been wrong. So ...
> 
> And guess what... it's broken.
> 
> I folded it into testing rc1: segfault on cc1, systemd
> "Journal file corrupted, rotating", seen on more than one machine.
> 
> I've backed it out, rc1 itself seems fine, I'll leave rc1 under
> load overnight, then come back to the faultaround patch tomorrow;
> won't glance at it tonight, but maybe Kirill will guess what's wrong.

So far I only found one more pin leak and always-true check. I don't see
how can it lead to crash or corruption. Keep looking.

diff --git a/mm/filemap.c b/mm/filemap.c
index c5da09f3f363..87671284de62 100644
--- a/mm/filemap.c
+++ b/mm/filemap.c
@@ -2966,8 +2966,7 @@ vm_fault_t filemap_map_pages(struct vm_fault *vmf, unsigned long address,
 			mmap_miss--;
 
 		vmf->address += (xas.xa_index - last_pgoff) << PAGE_SHIFT;
-		if (vmf->pte)
-			vmf->pte += xas.xa_index - last_pgoff;
+		vmf->pte += xas.xa_index - last_pgoff;
 		last_pgoff = xas.xa_index;
 
 		if (!pte_none(*vmf->pte))
diff --git a/mm/memory.c b/mm/memory.c
index e51638b92e7c..829f5056dd1c 100644
--- a/mm/memory.c
+++ b/mm/memory.c
@@ -3785,13 +3785,16 @@ vm_fault_t finish_fault(struct vm_fault *vmf)
 
 	vmf->pte = pte_offset_map_lock(vma->vm_mm, vmf->pmd,
 				      vmf->address, &vmf->ptl);
+	ret = 0;
 	/* Re-check under ptl */
 	if (likely(pte_none(*vmf->pte)))
 		do_set_pte(vmf, page);
+	else
+		ret = VM_FAULT_NOPAGE;
 
 	update_mmu_tlb(vma, vmf->address, vmf->pte);
 	pte_unmap_unlock(vmf->pte, vmf->ptl);
-	return 0;
+	return ret;
 }
 
 static unsigned long fault_around_bytes __read_mostly =
-- 
 Kirill A. Shutemov

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

  reply	other threads:[~2020-12-28 12:54 UTC|newest]

Thread overview: 138+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-12-09 16:39 [PATCH 0/2] Create 'old' ptes for faultaround mappings on arm64 with hardware access flag Will Deacon
2020-12-09 16:39 ` Will Deacon
2020-12-09 16:39 ` [PATCH 1/2] mm: Allow architectures to request 'old' entries when prefaulting Will Deacon
2020-12-09 16:39   ` Will Deacon
2020-12-09 17:58   ` Linus Torvalds
2020-12-09 17:58     ` Linus Torvalds
2020-12-09 17:58     ` Linus Torvalds
2020-12-09 18:40     ` Will Deacon
2020-12-09 18:40       ` Will Deacon
2020-12-09 19:04       ` Linus Torvalds
2020-12-09 19:04         ` Linus Torvalds
2020-12-09 19:04         ` Linus Torvalds
2020-12-09 20:32         ` Matthew Wilcox
2020-12-09 20:32           ` Matthew Wilcox
2020-12-09 21:04           ` Linus Torvalds
2020-12-09 21:04             ` Linus Torvalds
2020-12-09 21:04             ` Linus Torvalds
2020-12-10 15:08         ` Kirill A. Shutemov
2020-12-10 15:08           ` Kirill A. Shutemov
2020-12-10 17:23           ` Linus Torvalds
2020-12-10 17:23             ` Linus Torvalds
2020-12-10 17:23             ` Linus Torvalds
2020-12-14 16:07             ` Kirill A. Shutemov
2020-12-14 16:07               ` Kirill A. Shutemov
2020-12-14 17:54               ` Linus Torvalds
2020-12-14 17:54                 ` Linus Torvalds
2020-12-14 17:54                 ` Linus Torvalds
2020-12-14 18:56                 ` Matthew Wilcox
2020-12-14 18:56                   ` Matthew Wilcox
2020-12-16 17:07                 ` Kirill A. Shutemov
2020-12-16 17:07                   ` Kirill A. Shutemov
2020-12-16 18:41                   ` Linus Torvalds
2020-12-16 18:41                     ` Linus Torvalds
2020-12-16 18:41                     ` Linus Torvalds
2020-12-17 10:54                     ` Kirill A. Shutemov
2020-12-17 10:54                       ` Kirill A. Shutemov
2020-12-17 18:22                       ` Linus Torvalds
2020-12-17 18:22                         ` Linus Torvalds
2020-12-17 18:22                         ` Linus Torvalds
2020-12-18 11:04                         ` Kirill A. Shutemov
2020-12-18 11:04                           ` Kirill A. Shutemov
2020-12-18 18:56                           ` Linus Torvalds
2020-12-18 18:56                             ` Linus Torvalds
2020-12-18 18:56                             ` Linus Torvalds
2020-12-19 12:41                             ` Kirill A. Shutemov
2020-12-19 12:41                               ` Kirill A. Shutemov
2020-12-19 20:08                               ` Linus Torvalds
2020-12-19 20:08                                 ` Linus Torvalds
2020-12-19 20:08                                 ` Linus Torvalds
2020-12-19 20:34                               ` Linus Torvalds
2020-12-19 20:34                                 ` Linus Torvalds
2020-12-19 20:34                                 ` Linus Torvalds
2020-12-22 10:00                                 ` Kirill A. Shutemov
2020-12-22 10:00                                   ` Kirill A. Shutemov
2020-12-24  4:04                                   ` Hugh Dickins
2020-12-24  4:04                                     ` Hugh Dickins
2020-12-24  4:04                                     ` Hugh Dickins
2020-12-25 11:31                                     ` Kirill A. Shutemov
2020-12-25 11:31                                       ` Kirill A. Shutemov
2020-12-26 17:57                                       ` Linus Torvalds
2020-12-26 17:57                                         ` Linus Torvalds
2020-12-26 17:57                                         ` Linus Torvalds
2020-12-26 20:43                                         ` Kirill A. Shutemov
2020-12-26 20:43                                           ` Kirill A. Shutemov
2020-12-26 21:03                                           ` Hugh Dickins
2020-12-26 21:03                                             ` Hugh Dickins
2020-12-26 21:03                                             ` Hugh Dickins
2020-12-26 21:16                                             ` Linus Torvalds
2020-12-26 21:16                                               ` Linus Torvalds
2020-12-26 21:16                                               ` Linus Torvalds
2020-12-26 22:40                                               ` Kirill A. Shutemov
2020-12-26 22:40                                                 ` Kirill A. Shutemov
2020-12-27  0:45                                                 ` Hugh Dickins
2020-12-27  0:45                                                   ` Hugh Dickins
2020-12-27  0:45                                                   ` Hugh Dickins
2020-12-27  2:38                                                   ` Hugh Dickins
2020-12-27  2:38                                                     ` Hugh Dickins
2020-12-27  2:38                                                     ` Hugh Dickins
2020-12-27 19:38                                                     ` Linus Torvalds
2020-12-27 19:38                                                       ` Linus Torvalds
2020-12-27 19:38                                                       ` Linus Torvalds
2020-12-27 20:32                                                       ` Damian Tometzki
2020-12-27 20:32                                                         ` Damian Tometzki
2020-12-27 22:35                                                         ` Hugh Dickins
2020-12-27 22:35                                                           ` Hugh Dickins
2020-12-27 22:35                                                           ` Hugh Dickins
2020-12-27 23:12                                                           ` Linus Torvalds
2020-12-27 23:12                                                             ` Linus Torvalds
2020-12-27 23:12                                                             ` Linus Torvalds
2020-12-27 23:40                                                             ` Linus Torvalds
2020-12-27 23:40                                                               ` Linus Torvalds
2020-12-27 23:40                                                               ` Linus Torvalds
2020-12-27 23:55                                                               ` Kirill A. Shutemov
2020-12-27 23:55                                                                 ` Kirill A. Shutemov
2020-12-27 23:48                                                       ` Kirill A. Shutemov
2020-12-27 23:48                                                         ` Kirill A. Shutemov
2020-12-28  1:54                                                         ` Linus Torvalds
2020-12-28  1:54                                                           ` Linus Torvalds
2020-12-28  1:54                                                           ` Linus Torvalds
2020-12-28  6:43                                                           ` Hugh Dickins
2020-12-28  6:43                                                             ` Hugh Dickins
2020-12-28  6:43                                                             ` Hugh Dickins
2020-12-28 12:53                                                             ` Kirill A. Shutemov [this message]
2020-12-28 12:53                                                               ` Kirill A. Shutemov
2020-12-28 18:47                                                               ` Linus Torvalds
2020-12-28 18:47                                                                 ` Linus Torvalds
2020-12-28 18:47                                                                 ` Linus Torvalds
2020-12-28 21:58                                                                 ` Linus Torvalds
2020-12-28 21:58                                                                   ` Linus Torvalds
2020-12-28 21:58                                                                   ` Linus Torvalds
2020-12-29 13:28                                                                   ` Kirill A. Shutemov
2020-12-29 13:28                                                                     ` Kirill A. Shutemov
2020-12-29 15:19                                                                     ` Matthew Wilcox
2020-12-29 15:19                                                                       ` Matthew Wilcox
2020-12-29 20:52                                                                     ` Linus Torvalds
2020-12-29 20:52                                                                       ` Linus Torvalds
2020-12-29 20:52                                                                       ` Linus Torvalds
2020-12-28 22:05                                                                 ` Kirill A. Shutemov
2020-12-28 22:05                                                                   ` Kirill A. Shutemov
2020-12-28 22:12                                                                   ` Kirill A. Shutemov
2020-12-28 22:12                                                                     ` Kirill A. Shutemov
2020-12-29  4:35                                                                     ` Hugh Dickins
2020-12-29  4:35                                                                       ` Hugh Dickins
2020-12-29  4:35                                                                       ` Hugh Dickins
2020-12-28 23:28                                                                   ` Linus Torvalds
2020-12-28 23:28                                                                     ` Linus Torvalds
2020-12-28 23:28                                                                     ` Linus Torvalds
2020-12-26 21:07                                           ` Linus Torvalds
2020-12-26 21:07                                             ` Linus Torvalds
2020-12-26 21:07                                             ` Linus Torvalds
2020-12-26 21:41                                           ` Matthew Wilcox
2020-12-26 21:41                                             ` Matthew Wilcox
2020-12-09 16:39 ` [PATCH 2/2] arm64: mm: Implement arch_wants_old_faultaround_pte() Will Deacon
2020-12-09 16:39   ` Will Deacon
2020-12-09 18:35   ` Catalin Marinas
2020-12-09 18:35     ` Catalin Marinas
2020-12-09 18:46     ` Will Deacon
2020-12-09 18:46       ` Will Deacon

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=20201228125352.phnj2x2ci3kwfld5@box \
    --to=kirill@shutemov.name \
    --cc=akpm@linux-foundation.org \
    --cc=catalin.marinas@arm.com \
    --cc=hughd@google.com \
    --cc=jack@suse.cz \
    --cc=kernel-team@android.com \
    --cc=kirill.shutemov@linux.intel.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=minchan@kernel.org \
    --cc=torvalds@linux-foundation.org \
    --cc=vinmenon@codeaurora.org \
    --cc=will@kernel.org \
    --cc=willy@infradead.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.