applied this and the 4.13 one On 3/28/18 3:14 PM, Fabian Grünbichler wrote: > Signed-off-by: Fabian Grünbichler <f.gruenbich...@proxmox.com> > --- > ...-not-wait-for-lock_page-in-shmem_unused_h.patch | 103 > +++++++++++++++++++++ > 1 file changed, 103 insertions(+) > create mode 100644 > patches/kernel/0007-mm-shmem-do-not-wait-for-lock_page-in-shmem_unused_h.patch > > diff --git > a/patches/kernel/0007-mm-shmem-do-not-wait-for-lock_page-in-shmem_unused_h.patch > > b/patches/kernel/0007-mm-shmem-do-not-wait-for-lock_page-in-shmem_unused_h.patch > new file mode 100644 > index 0000000..9d640ed > --- /dev/null > +++ > b/patches/kernel/0007-mm-shmem-do-not-wait-for-lock_page-in-shmem_unused_h.patch > @@ -0,0 +1,103 @@ > +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 > +From: "Kirill A. Shutemov" <kirill.shute...@linux.intel.com> > +Date: Fri, 23 Mar 2018 09:19:21 +0100 > +Subject: [PATCH] mm/shmem: do not wait for lock_page() in > + shmem_unused_huge_shrink() > +MIME-Version: 1.0 > +Content-Type: text/plain; charset=UTF-8 > +Content-Transfer-Encoding: 8bit > + > +shmem_unused_huge_shrink() gets called from reclaim path. Waiting for > +page lock may lead to deadlock there. > + > +There was a bug report that may be attributed to this: > + > +http://lkml.kernel.org/r/alpine.lrh.2.11.1801242349220.30...@mail.ewheeler.net > + > +Replace lock_page() with trylock_page() and skip the page if we failed to > +lock it. We will get to the page on the next scan. > + > +We can test for the PageTransHuge() outside the page lock as we only need > +protection against splitting the page under us. Holding pin oni the page > +is enough for this. > + > +Link: > http://lkml.kernel.org/r/20180316210830.43738-1-kirill.shute...@linux.intel.com > +Fixes: 779750d20b93 ("shmem: split huge pages beyond i_size under memory > pressure") > +Signed-off-by: Kirill A. Shutemov <kirill.shute...@linux.intel.com> > +Reported-by: Eric Wheeler <linux...@lists.ewheeler.net> > +Acked-by: Michal Hocko <mho...@suse.com> > +Reviewed-by: Andrew Morton <a...@linux-foundation.org> > +Cc: Tetsuo Handa <penguin-ker...@i-love.sakura.ne.jp> > +Cc: Hugh Dickins <hu...@google.com> > +Cc: <sta...@vger.kernel.org> [4.8+] > +Signed-off-by: Andrew Morton <> > +(cherry-picked from > https://git.kernel.org/pub/scm/linux/kernel/git/mhocko/mm.git/commit/?h=since-4.15&id=73eccc61c701ee7b4223aea2079542a712feeea7) > +Signed-off-by: Fabian Grünbichler <f.gruenbich...@proxmox.com> > +--- > + mm/shmem.c | 31 ++++++++++++++++++++----------- > + 1 file changed, 20 insertions(+), 11 deletions(-) > + > +diff --git a/mm/shmem.c b/mm/shmem.c > +index f6695c111086..800482fe6ed6 100644 > +--- a/mm/shmem.c > ++++ b/mm/shmem.c > +@@ -497,36 +497,45 @@ static unsigned long shmem_unused_huge_shrink(struct > shmem_sb_info *sbinfo, > + info = list_entry(pos, struct shmem_inode_info, shrinklist); > + inode = &info->vfs_inode; > + > +- if (nr_to_split && split >= nr_to_split) { > +- iput(inode); > +- continue; > +- } > ++ if (nr_to_split && split >= nr_to_split) > ++ goto leave; > + > +- page = find_lock_page(inode->i_mapping, > ++ page = find_get_page(inode->i_mapping, > + (inode->i_size & HPAGE_PMD_MASK) >> PAGE_SHIFT); > + if (!page) > + goto drop; > + > ++ /* No huge page at the end of the file: nothing to split */ > + if (!PageTransHuge(page)) { > +- unlock_page(page); > + put_page(page); > + goto drop; > + } > + > ++ /* > ++ * Leave the inode on the list if we failed to lock > ++ * the page at this time. > ++ * > ++ * Waiting for the lock may lead to deadlock in the > ++ * reclaim path. > ++ */ > ++ if (!trylock_page(page)) { > ++ put_page(page); > ++ goto leave; > ++ } > ++ > + ret = split_huge_page(page); > + unlock_page(page); > + put_page(page); > + > +- if (ret) { > +- /* split failed: leave it on the list */ > +- iput(inode); > +- continue; > +- } > ++ /* If split failed leave the inode on the list */ > ++ if (ret) > ++ goto leave; > + > + split++; > + drop: > + list_del_init(&info->shrinklist); > + removed++; > ++leave: > + iput(inode); > + } > + > +-- > +2.14.2 > + >
_______________________________________________ pve-devel mailing list pve-devel@pve.proxmox.com https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel