mm-commits.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Andrew Morton <akpm@linux-foundation.org>
To: aarcange@redhat.com, akpm@linux-foundation.org,
	alexander.duyck@gmail.com, david@redhat.com, hughd@google.com,
	kirill.shutemov@linux.intel.com, linux-mm@kvack.org,
	mm-commits@vger.kernel.org, mst@redhat.com,
	torvalds@linux-foundation.org, willy@infradead.org,
	yang.shi@linux.alibaba.com
Subject: [patch 074/166] mm: huge tmpfs: try to split_huge_page() when punching hole
Date: Mon, 06 Apr 2020 20:07:57 -0700	[thread overview]
Message-ID: <20200407030757.9GtKiVpqL%akpm@linux-foundation.org> (raw)
In-Reply-To: <20200406200254.a69ebd9e08c4074e41ddebaf@linux-foundation.org>

From: Hugh Dickins <hughd@google.com>
Subject: mm: huge tmpfs: try to split_huge_page() when punching hole

Yang Shi writes:

Currently, when truncating a shmem file, if the range is partly in a THP
(start or end is in the middle of THP), the pages actually will just get
cleared rather than being freed, unless the range covers the whole THP. 
Even though all the subpages are truncated (randomly or sequentially), the
THP may still be kept in page cache.

This might be fine for some usecases which prefer preserving THP, but
balloon inflation is handled in base page size.  So when using shmem THP
as memory backend, QEMU inflation actually doesn't work as expected since
it doesn't free memory.  But the inflation usecase really needs to get the
memory freed.  (Anonymous THP will also not get freed right away, but will
be freed eventually when all subpages are unmapped: whereas shmem THP
still stays in page cache.)

Split THP right away when doing partial hole punch, and if split fails
just clear the page so that read of the punched area will return zeroes.

Hugh Dickins adds:

Our earlier "team of pages" huge tmpfs implementation worked in the way
that Yang Shi proposes; and we have been using this patch to continue to
split the huge page when hole-punched or truncated, since converting over
to the compound page implementation.  Although huge tmpfs gives out huge
pages when available, if the user specifically asks to truncate or punch a
hole (perhaps to free memory, perhaps to reduce the memcg charge), then
the filesystem should do so as best it can, splitting the huge page.

That is not always possible: any additional reference to the huge page
prevents split_huge_page() from succeeding, so the result can be flaky. 
But in practice it works successfully enough that we've not seen any
problem from that.

Add shmem_punch_compound() to encapsulate the decision of when a split is
needed, and doing the split if so.  Using this simplifies the flow in
shmem_undo_range(); and the first (trylock) pass does not need to do any
page clearing on failure, because the second pass will either succeed or
do that clearing.  Following the example of zero_user_segment() when
clearing a partial page, add flush_dcache_page() and set_page_dirty() when
clearing a hole - though I'm not certain that either is needed.

But: split_huge_page() would be sure to fail if shmem_undo_range()'s
pagevec holds further references to the huge page.  The easiest way to fix
that is for find_get_entries() to return early, as soon as it has put one
compound head or tail into the pagevec.  At first this felt like a hack;
but on examination, this convention better suits all its callers - or will
do, if the slight one-page-per-pagevec slowdown in shmem_unlock_mapping()
and shmem_seek_hole_data() is transformed into a 512-page-per-pagevec
speedup by checking for compound pages there.

Link: http://lkml.kernel.org/r/alpine.LSU.2.11.2002261959020.10801@eggly.anvils
Signed-off-by: Hugh Dickins <hughd@google.com>
Cc: Yang Shi <yang.shi@linux.alibaba.com>
Cc: Alexander Duyck <alexander.duyck@gmail.com>
Cc: "Michael S. Tsirkin" <mst@redhat.com>
Cc: David Hildenbrand <david@redhat.com>
Cc: "Kirill A. Shutemov" <kirill.shutemov@linux.intel.com>
Cc: Matthew Wilcox <willy@infradead.org>
Cc: Andrea Arcangeli <aarcange@redhat.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
---

 mm/filemap.c |   14 ++++++-
 mm/shmem.c   |   98 +++++++++++++++++++++----------------------------
 mm/swap.c    |    4 ++
 3 files changed, 60 insertions(+), 56 deletions(-)

--- a/mm/filemap.c~huge-tmpfs-try-to-split_huge_page-when-punching-hole
+++ a/mm/filemap.c
@@ -1693,6 +1693,11 @@ EXPORT_SYMBOL(pagecache_get_page);
  * Any shadow entries of evicted pages, or swap entries from
  * shmem/tmpfs, are included in the returned array.
  *
+ * If it finds a Transparent Huge Page, head or tail, find_get_entries()
+ * stops at that page: the caller is likely to have a better way to handle
+ * the compound page as a whole, and then skip its extent, than repeatedly
+ * calling find_get_entries() to return all its tails.
+ *
  * Return: the number of pages and shadow entries which were found.
  */
 unsigned find_get_entries(struct address_space *mapping,
@@ -1724,8 +1729,15 @@ unsigned find_get_entries(struct address
 		/* Has the page moved or been split? */
 		if (unlikely(page != xas_reload(&xas)))
 			goto put_page;
-		page = find_subpage(page, xas.xa_index);
 
+		/*
+		 * Terminate early on finding a THP, to allow the caller to
+		 * handle it all at once; but continue if this is hugetlbfs.
+		 */
+		if (PageTransHuge(page) && !PageHuge(page)) {
+			page = find_subpage(page, xas.xa_index);
+			nr_entries = ret + 1;
+		}
 export:
 		indices[ret] = xas.xa_index;
 		entries[ret] = page;
--- a/mm/shmem.c~huge-tmpfs-try-to-split_huge_page-when-punching-hole
+++ a/mm/shmem.c
@@ -789,6 +789,32 @@ void shmem_unlock_mapping(struct address
 }
 
 /*
+ * Check whether a hole-punch or truncation needs to split a huge page,
+ * returning true if no split was required, or the split has been successful.
+ *
+ * Eviction (or truncation to 0 size) should never need to split a huge page;
+ * but in rare cases might do so, if shmem_undo_range() failed to trylock on
+ * head, and then succeeded to trylock on tail.
+ *
+ * A split can only succeed when there are no additional references on the
+ * huge page: so the split below relies upon find_get_entries() having stopped
+ * when it found a subpage of the huge page, without getting further references.
+ */
+static bool shmem_punch_compound(struct page *page, pgoff_t start, pgoff_t end)
+{
+	if (!PageTransCompound(page))
+		return true;
+
+	/* Just proceed to delete a huge page wholly within the range punched */
+	if (PageHead(page) &&
+	    page->index >= start && page->index + HPAGE_PMD_NR <= end)
+		return true;
+
+	/* Try to split huge page, so we can truly punch the hole or truncate */
+	return split_huge_page(page) >= 0;
+}
+
+/*
  * Remove range of pages and swap entries from page cache, and free them.
  * If !unfalloc, truncate or punch hole; if unfalloc, undo failed fallocate.
  */
@@ -838,31 +864,11 @@ static void shmem_undo_range(struct inod
 			if (!trylock_page(page))
 				continue;
 
-			if (PageTransTail(page)) {
-				/* Middle of THP: zero out the page */
-				clear_highpage(page);
-				unlock_page(page);
-				continue;
-			} else if (PageTransHuge(page)) {
-				if (index == round_down(end, HPAGE_PMD_NR)) {
-					/*
-					 * Range ends in the middle of THP:
-					 * zero out the page
-					 */
-					clear_highpage(page);
-					unlock_page(page);
-					continue;
-				}
-				index += HPAGE_PMD_NR - 1;
-				i += HPAGE_PMD_NR - 1;
-			}
-
-			if (!unfalloc || !PageUptodate(page)) {
-				VM_BUG_ON_PAGE(PageTail(page), page);
-				if (page_mapping(page) == mapping) {
-					VM_BUG_ON_PAGE(PageWriteback(page), page);
+			if ((!unfalloc || !PageUptodate(page)) &&
+			    page_mapping(page) == mapping) {
+				VM_BUG_ON_PAGE(PageWriteback(page), page);
+				if (shmem_punch_compound(page, start, end))
 					truncate_inode_page(mapping, page);
-				}
 			}
 			unlock_page(page);
 		}
@@ -936,43 +942,25 @@ static void shmem_undo_range(struct inod
 
 			lock_page(page);
 
-			if (PageTransTail(page)) {
-				/* Middle of THP: zero out the page */
-				clear_highpage(page);
-				unlock_page(page);
-				/*
-				 * Partial thp truncate due 'start' in middle
-				 * of THP: don't need to look on these pages
-				 * again on !pvec.nr restart.
-				 */
-				if (index != round_down(end, HPAGE_PMD_NR))
-					start++;
-				continue;
-			} else if (PageTransHuge(page)) {
-				if (index == round_down(end, HPAGE_PMD_NR)) {
-					/*
-					 * Range ends in the middle of THP:
-					 * zero out the page
-					 */
-					clear_highpage(page);
-					unlock_page(page);
-					continue;
-				}
-				index += HPAGE_PMD_NR - 1;
-				i += HPAGE_PMD_NR - 1;
-			}
-
 			if (!unfalloc || !PageUptodate(page)) {
-				VM_BUG_ON_PAGE(PageTail(page), page);
-				if (page_mapping(page) == mapping) {
-					VM_BUG_ON_PAGE(PageWriteback(page), page);
-					truncate_inode_page(mapping, page);
-				} else {
+				if (page_mapping(page) != mapping) {
 					/* Page was replaced by swap: retry */
 					unlock_page(page);
 					index--;
 					break;
 				}
+				VM_BUG_ON_PAGE(PageWriteback(page), page);
+				if (shmem_punch_compound(page, start, end))
+					truncate_inode_page(mapping, page);
+				else {
+					/* Wipe the page and don't get stuck */
+					clear_highpage(page);
+					flush_dcache_page(page);
+					set_page_dirty(page);
+					if (index <
+					    round_up(start, HPAGE_PMD_NR))
+						start = index + 1;
+				}
 			}
 			unlock_page(page);
 		}
--- a/mm/swap.c~huge-tmpfs-try-to-split_huge_page-when-punching-hole
+++ a/mm/swap.c
@@ -1004,6 +1004,10 @@ void __pagevec_lru_add(struct pagevec *p
  * ascending indexes.  There may be holes in the indices due to
  * not-present entries.
  *
+ * Only one subpage of a Transparent Huge Page is returned in one call:
+ * allowing truncate_inode_pages_range() to evict the whole THP without
+ * cycling through a pagevec of extra references.
+ *
  * pagevec_lookup_entries() returns the number of entries which were
  * found.
  */
_

  parent reply	other threads:[~2020-04-07  3:07 UTC|newest]

Thread overview: 194+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-04-07  3:02 incoming Andrew Morton
2020-04-07  3:03 ` [patch 001/166] mm, memcg: bypass high reclaim iteration for cgroup hierarchy root Andrew Morton
2020-04-07  3:03 ` [patch 002/166] mm: don't prepare anon_vma if vma has VM_WIPEONFORK Andrew Morton
2020-04-07  3:03 ` [patch 003/166] Revert "mm/rmap.c: reuse mergeable anon_vma as parent when fork" Andrew Morton
2020-04-07  3:03 ` [patch 004/166] mm: set vm_next and vm_prev to NULL in vm_area_dup() Andrew Morton
2020-04-07  3:03 ` [patch 005/166] mm/vma: add missing VMA flag readable name for VM_SYNC Andrew Morton
2020-04-07  3:03 ` [patch 006/166] mm/vma: make vma_is_accessible() available for general use Andrew Morton
2020-04-07  3:03 ` [patch 007/166] mm/vma: replace all remaining open encodings with is_vm_hugetlb_page() Andrew Morton
2020-04-07  3:03 ` [patch 008/166] mm/vma: replace all remaining open encodings with vma_is_anonymous() Andrew Morton
2020-04-07  3:03 ` [patch 009/166] mm/vma: append unlikely() while testing VMA access permissions Andrew Morton
2020-04-07  3:04 ` [patch 010/166] mm/vmalloc: fix a typo in comment Andrew Morton
2020-04-07  3:04 ` [patch 011/166] mm: make it clear that gfp reclaim modifiers are valid only for sleepable allocations Andrew Morton
2020-04-07  3:04 ` [patch 012/166] mm/migrate.c: no need to check for i > start in do_pages_move() Andrew Morton
2020-04-07  3:04 ` [patch 013/166] mm/migrate.c: wrap do_move_pages_to_node() and store_status() Andrew Morton
2020-04-07  3:04 ` [patch 014/166] mm/migrate.c: check pagelist in move_pages_and_store_status() Andrew Morton
2020-04-07  3:04 ` [patch 015/166] mm/migrate.c: unify "not queued for migration" handling in do_pages_move() Andrew Morton
2020-04-07  3:04 ` [patch 016/166] mm/migrate.c: migrate PG_readahead flag Andrew Morton
2020-04-07  3:04 ` [patch 017/166] mm, shmem: add vmstat for hugepage fallback Andrew Morton
2020-04-07  3:04 ` [patch 018/166] mm, thp: track fallbacks due to failed memcg charges separately Andrew Morton
2020-04-07  3:04 ` [patch 019/166] include/linux/pagemap.h: optimise find_subpage for !THP Andrew Morton
2020-04-07  3:04 ` [patch 020/166] mm: remove CONFIG_TRANSPARENT_HUGE_PAGECACHE Andrew Morton
2020-04-07  3:04 ` [patch 021/166] mm/ksm.c: update get_user_pages() argument in comment Andrew Morton
2020-04-07  3:04 ` [patch 022/166] mm: code cleanup for MADV_FREE Andrew Morton
2020-04-07  3:04 ` [patch 023/166] mm: adjust shuffle code to allow for future coalescing Andrew Morton
2020-04-07  3:04 ` [patch 024/166] mm: use zone and order instead of free area in free_list manipulators Andrew Morton
2020-04-07  3:04 ` [patch 025/166] mm: add function __putback_isolated_page Andrew Morton
2020-04-07  3:04 ` [patch 026/166] mm: introduce Reported pages Andrew Morton
2020-04-07  3:05 ` [patch 027/166] virtio-balloon: pull page poisoning config out of free page hinting Andrew Morton
2020-04-07  3:05 ` [patch 028/166] virtio-balloon: add support for providing free page reports to host Andrew Morton
2020-04-07  3:05 ` [patch 029/166] mm/page_reporting: rotate reported pages to the tail of the list Andrew Morton
2020-04-07  3:05 ` [patch 030/166] mm/page_reporting: add budget limit on how many pages can be reported per pass Andrew Morton
2020-04-07  3:05 ` [patch 031/166] mm/page_reporting: add free page reporting documentation Andrew Morton
2020-04-07  3:05 ` [patch 032/166] virtio-balloon: switch back to OOM handler for VIRTIO_BALLOON_F_DEFLATE_ON_OOM Andrew Morton
2020-04-07  3:05 ` [patch 033/166] userfaultfd: wp: add helper for writeprotect check Andrew Morton
2020-04-07  3:05 ` [patch 034/166] userfaultfd: wp: hook userfault handler to write protection fault Andrew Morton
2020-04-07  3:05 ` [patch 035/166] userfaultfd: wp: add WP pagetable tracking to x86 Andrew Morton
2020-04-07  3:05 ` [patch 036/166] userfaultfd: wp: userfaultfd_pte/huge_pmd_wp() helpers Andrew Morton
2020-04-07  3:05 ` [patch 037/166] userfaultfd: wp: add UFFDIO_COPY_MODE_WP Andrew Morton
2020-04-07  3:05 ` [patch 038/166] mm: merge parameters for change_protection() Andrew Morton
2020-04-07  3:05 ` [patch 039/166] userfaultfd: wp: apply _PAGE_UFFD_WP bit Andrew Morton
2020-04-07  3:05 ` [patch 040/166] userfaultfd: wp: drop _PAGE_UFFD_WP properly when fork Andrew Morton
2020-04-07  3:05 ` [patch 041/166] userfaultfd: wp: add pmd_swp_*uffd_wp() helpers Andrew Morton
2020-04-07  3:06 ` [patch 042/166] userfaultfd: wp: support swap and page migration Andrew Morton
2020-04-07  3:06 ` [patch 043/166] khugepaged: skip collapse if uffd-wp detected Andrew Morton
2020-04-07  3:06 ` [patch 044/166] userfaultfd: wp: support write protection for userfault vma range Andrew Morton
2020-04-07  3:06 ` [patch 045/166] userfaultfd: wp: add the writeprotect API to userfaultfd ioctl Andrew Morton
2020-04-07  3:06 ` [patch 046/166] userfaultfd: wp: enabled write protection in userfaultfd API Andrew Morton
2020-04-07  3:06 ` [patch 047/166] userfaultfd: wp: don't wake up when doing write protect Andrew Morton
2020-04-07  3:06 ` [patch 048/166] userfaultfd: wp: UFFDIO_REGISTER_MODE_WP documentation update Andrew Morton
2020-04-07  3:06 ` [patch 049/166] userfaultfd: wp: declare _UFFDIO_WRITEPROTECT conditionally Andrew Morton
2020-04-07  3:06 ` [patch 050/166] userfaultfd: selftests: refactor statistics Andrew Morton
2020-04-07  3:06 ` [patch 051/166] userfaultfd: selftests: add write-protect test Andrew Morton
2020-04-07  3:06 ` [patch 052/166] drivers/base/memory.c: drop section_count Andrew Morton
2020-04-07  3:06 ` [patch 053/166] drivers/base/memory.c: drop pages_correctly_probed() Andrew Morton
2020-04-07  3:06 ` [patch 054/166] mm/page_ext.c: drop pfn_present() check when onlining Andrew Morton
2020-04-07  3:06 ` [patch 055/166] mm/memory_hotplug.c: only respect mem= parameter during boot stage Andrew Morton
2020-04-07  3:06 ` [patch 056/166] mm/memory_hotplug.c: simplify calculation of number of pages in __remove_pages() Andrew Morton
2020-04-07  3:06 ` [patch 057/166] mm/memory_hotplug.c: cleanup __add_pages() Andrew Morton
2020-04-07  3:07 ` [patch 058/166] mm/sparse.c: introduce new function fill_subsection_map() Andrew Morton
2020-04-07  3:07 ` [patch 059/166] mm/sparse.c: introduce a new function clear_subsection_map() Andrew Morton
2020-04-07  3:07 ` [patch 060/166] mm/sparse.c: only use subsection map in VMEMMAP case Andrew Morton
2020-04-07  3:07 ` [patch 061/166] mm/sparse.c: add note about only VMEMMAP supporting sub-section hotplug Andrew Morton
2020-04-07  3:07 ` [patch 062/166] mm/sparse.c: move subsection_map related functions together Andrew Morton
2020-04-07  3:07 ` [patch 063/166] drivers/base/memory: rename MMOP_ONLINE_KEEP to MMOP_ONLINE Andrew Morton
2020-04-07  3:07 ` [patch 064/166] drivers/base/memory: map MMOP_OFFLINE to 0 Andrew Morton
2020-04-07  3:07 ` [patch 065/166] drivers/base/memory: store mapping between MMOP_* and string in an array Andrew Morton
2020-04-07  3:07 ` [patch 066/166] powernv/memtrace: always online added memory blocks Andrew Morton
2020-04-07  3:07 ` [patch 067/166] hv_balloon: don't check for memhp_auto_online manually Andrew Morton
2020-04-07  3:07 ` [patch 068/166] mm/memory_hotplug: unexport memhp_auto_online Andrew Morton
2020-04-07  3:07 ` [patch 069/166] mm/memory_hotplug: convert memhp_auto_online to store an online_type Andrew Morton
2020-04-07  3:07 ` [patch 070/166] mm/memory_hotplug: allow to specify a default online_type Andrew Morton
2020-04-07  3:07 ` [patch 071/166] mm/memory_hotplug.c: use __pfn_to_section() instead of open-coding Andrew Morton
2020-04-07  3:07 ` [patch 072/166] mm/shmem.c: distribute switch variables for initialization Andrew Morton
2020-04-07  3:07 ` [patch 073/166] mm/shmem.c: clean code by removing unnecessary assignment Andrew Morton
2020-04-07  3:07 ` Andrew Morton [this message]
2020-04-07  3:08 ` [patch 075/166] mm: prevent a warning when casting void* -> enum Andrew Morton
2020-04-07  3:08 ` [patch 076/166] mm/zswap: allow setting default status, compressor and allocator in Kconfig Andrew Morton
2020-04-07  3:08 ` [patch 077/166] mm/compaction: add missing annotation for compact_lock_irqsave Andrew Morton
2020-04-07  3:08 ` [patch 078/166] mm/hugetlb: add missing annotation for gather_surplus_pages() Andrew Morton
2020-04-07  3:08 ` [patch 079/166] mm/mempolicy: add missing annotation for queue_pages_pmd() Andrew Morton
2020-04-07  3:08 ` [patch 080/166] mm/slub: add missing annotation for get_map() Andrew Morton
2020-04-07  3:08 ` [patch 081/166] mm/slub: add missing annotation for put_map() Andrew Morton
2020-04-07  3:08 ` [patch 082/166] mm/zsmalloc: add missing annotation for migrate_read_lock() Andrew Morton
2020-04-07  3:08 ` [patch 083/166] mm/zsmalloc: add missing annotation for migrate_read_unlock() Andrew Morton
2020-04-07  3:08 ` [patch 084/166] mm/zsmalloc: add missing annotation for pin_tag() Andrew Morton
2020-04-07  3:08 ` [patch 085/166] mm/zsmalloc: add missing annotation for unpin_tag() Andrew Morton
2020-04-07  3:08 ` [patch 086/166] mm: fix ambiguous comments for better code readability Andrew Morton
2020-04-07  3:08 ` [patch 087/166] mm/mm_init.c: clean code. Use BUILD_BUG_ON when comparing compile time constant Andrew Morton
2020-04-07  3:08 ` [patch 088/166] mm: use fallthrough; Andrew Morton
2020-04-07  3:08 ` [patch 089/166] include/linux/swapops.h: correct guards for non_swap_entry() Andrew Morton
2020-04-07  3:08 ` [patch 090/166] include/linux/memremap.h: remove stale comments Andrew Morton
2020-04-07  3:08 ` [patch 091/166] mm/dmapool.c: micro-optimisation remove unnecessary branch Andrew Morton
2020-04-07  3:08 ` [patch 092/166] mm: remove dummy struct bootmem_data/bootmem_data_t Andrew Morton
2020-04-07  3:08 ` [patch 093/166] fs/proc/inode.c: annotate close_pdeo() for sparse Andrew Morton
2020-04-07  3:09 ` [patch 094/166] proc: faster open/read/close with "permanent" files Andrew Morton
2020-04-07  3:09 ` [patch 095/166] proc: speed up /proc/*/statm Andrew Morton
2020-04-07  3:09 ` [patch 096/166] proc: inline vma_stop into m_stop Andrew Morton
2020-04-07  3:09 ` [patch 097/166] proc: remove m_cache_vma Andrew Morton
2020-04-07  3:09 ` [patch 098/166] proc: use ppos instead of m->version Andrew Morton
2020-04-07  3:09 ` [patch 099/166] seq_file: remove m->version Andrew Morton
2020-04-07  3:09 ` [patch 100/166] proc: inline m_next_vma into m_next Andrew Morton
2020-04-07  3:09 ` [patch 101/166] asm-generic: fix unistd_32.h generation format Andrew Morton
2020-04-07  3:09 ` [patch 102/166] kernel/extable.c: use address-of operator on section symbols Andrew Morton
2020-04-07  3:09 ` [patch 103/166] sparc,x86: vdso: remove meaningless undefining CONFIG_OPTIMIZE_INLINING Andrew Morton
2020-04-07  3:09 ` [patch 104/166] compiler: remove CONFIG_OPTIMIZE_INLINING entirely Andrew Morton
2020-04-07  3:09 ` [patch 105/166] compiler.h: fix error in BUILD_BUG_ON() reporting Andrew Morton
2020-04-07  3:09 ` [patch 106/166] MAINTAINERS: list the section entries in the preferred order Andrew Morton
2020-04-07  3:09 ` [patch 107/166] bitops: always inline sign extension helpers Andrew Morton
2020-04-07  3:09 ` [patch 108/166] lib/test_lockup: test module to generate lockups Andrew Morton
2020-04-07  3:09 ` [patch 109/166] lib/test_lockup.c: fix spelling mistake "iteraions" -> "iterations" Andrew Morton
2020-04-07  3:09 ` [patch 110/166] lib/test_lockup.c: add parameters for locking generic vfs locks Andrew Morton
2020-04-07  3:09 ` [patch 111/166] lib/bch.c: replace zero-length array with flexible-array member Andrew Morton
2020-04-07  3:10 ` [patch 112/166] lib/ts_bm.c: " Andrew Morton
2020-04-07  3:10 ` [patch 113/166] lib/ts_fsm.c: " Andrew Morton
2020-04-07  3:10 ` [patch 114/166] lib/ts_kmp.c: " Andrew Morton
2020-04-07  3:10 ` [patch 115/166] lib/scatterlist: fix sg_copy_buffer() kerneldoc Andrew Morton
2020-04-07  3:10 ` [patch 116/166] lib: test_stackinit.c: XFAIL switch variable init tests Andrew Morton
2020-04-07  3:10 ` [patch 117/166] lib/stackdepot.c: check depot_index before accessing the stack slab Andrew Morton
2020-04-07  3:10 ` [patch 118/166] lib/stackdepot.c: build with -fno-builtin Andrew Morton
2020-04-07  3:10 ` [patch 119/166] kasan: stackdepot: move filter_irq_stacks() to stackdepot.c Andrew Morton
2020-04-07  3:10 ` [patch 120/166] percpu_counter: fix a data race at vm_committed_as Andrew Morton
2020-04-07  3:10 ` [patch 121/166] lib/test_bitmap.c: make use of EXP2_IN_BITS Andrew Morton
2020-04-07  3:10 ` [patch 122/166] lib/rbtree: fix coding style of assignments Andrew Morton
2020-04-07  3:10 ` [patch 123/166] lib/test_kmod.c: remove a NULL test Andrew Morton
2020-04-07  3:10 ` [patch 124/166] linux/bits.h: add compile time sanity check of GENMASK inputs Andrew Morton
2020-04-07  3:10 ` [patch 125/166] lib/list: prevent compiler reloads inside 'safe' list iteration Andrew Morton
2020-04-07  3:10 ` [patch 126/166] lib/dynamic_debug.c: use address-of operator on section symbols Andrew Morton
2020-04-07  3:10 ` [patch 127/166] checkpatch: remove email address comment from email address comparisons Andrew Morton
2020-04-07  3:10 ` [patch 128/166] checkpatch: check SPDX tags in YAML files Andrew Morton
2020-04-07  3:10 ` [patch 129/166] checkpatch: support "base-commit:" format Andrew Morton
2020-04-07  3:10 ` [patch 130/166] checkpatch: prefer fallthrough; over fallthrough comments Andrew Morton
2020-04-07  3:11 ` [patch 131/166] checkpatch: fix minor typo and mixed space+tab in indentation Andrew Morton
2020-04-07  3:11 ` [patch 132/166] checkpatch: fix multiple const * types Andrew Morton
2020-04-07  3:11 ` [patch 133/166] checkpatch: add command-line option for TAB size Andrew Morton
2020-04-07  3:11 ` [patch 134/166] checkpatch: improve Gerrit Change-Id: test Andrew Morton
2020-04-07  3:11 ` [patch 135/166] checkpatch: check proper licensing of Devicetree bindings Andrew Morton
2020-04-07  3:11 ` [patch 136/166] checkpatch: avoid warning about uninitialized_var() Andrew Morton
2020-04-07  3:11 ` [patch 137/166] kselftest: introduce new epoll test case Andrew Morton
2020-04-07  3:11 ` [patch 138/166] fs/epoll: make nesting accounting safe for -rt kernel Andrew Morton
2020-04-07  3:11 ` [patch 139/166] fs/binfmt_elf.c: delete "loc" variable Andrew Morton
2020-04-07  3:11 ` [patch 140/166] fs/binfmt_elf.c: allocate less for static executable Andrew Morton
2020-04-07  3:11 ` [patch 141/166] fs/binfmt_elf.c: don't free interpreter's ELF pheaders on common path Andrew Morton
2020-04-07  3:11 ` [patch 142/166] samples/hw_breakpoint: drop HW_BREAKPOINT_R when reporting writes Andrew Morton
2020-04-07  3:11 ` [patch 143/166] samples/hw_breakpoint: drop use of kallsyms_lookup_name() Andrew Morton
2020-04-07  3:11 ` [patch 144/166] kallsyms: unexport kallsyms_lookup_name() and kallsyms_on_each_symbol() Andrew Morton
2020-04-07  3:11 ` [patch 145/166] reiserfs: clean up several indentation issues Andrew Morton
2020-04-07  3:11 ` [patch 146/166] kernel/kmod.c: fix a typo "assuems" -> "assumes" Andrew Morton
2020-04-07  3:11 ` [patch 147/166] gcov: gcc_4_7: replace zero-length array with flexible-array member Andrew Morton
2020-04-07  3:11 ` [patch 148/166] gcov: gcc_3_4: " Andrew Morton
2020-04-07  3:11 ` [patch 149/166] kernel/gcov/fs.c: " Andrew Morton
2020-04-07  3:12 ` [patch 150/166] init/Kconfig: clean up ANON_INODES and old IO schedulers options Andrew Morton
2020-04-07  3:12 ` [patch 151/166] kcov: cleanup debug messages Andrew Morton
2020-04-07  3:12 ` [patch 152/166] kcov: fix potential use-after-free in kcov_remote_start Andrew Morton
2020-04-07  3:12 ` [patch 153/166] kcov: move t->kcov assignments into kcov_start/stop Andrew Morton
2020-04-07  3:12 ` [patch 154/166] kcov: move t->kcov_sequence assignment Andrew Morton
2020-04-07  3:12 ` [patch 155/166] kcov: use t->kcov_mode as enabled indicator Andrew Morton
2020-04-07  3:12 ` [patch 156/166] kcov: collect coverage from interrupts Andrew Morton
2020-04-07  3:12 ` [patch 157/166] usb: core: kcov: collect coverage from usb complete callback Andrew Morton
2020-04-07  3:12 ` [patch 158/166] ubsan: add trap instrumentation option Andrew Morton
2020-04-07  3:12 ` [patch 159/166] ubsan: split "bounds" checker from other options Andrew Morton
2020-04-07  3:12 ` [patch 160/166] drivers/misc/lkdtm/bugs.c: add arithmetic overflow and array bounds checks Andrew Morton
2020-04-07  3:12 ` [patch 161/166] ubsan: check panic_on_warn Andrew Morton
2020-04-07  3:12 ` [patch 162/166] kasan: unset panic_on_warn before calling panic() Andrew Morton
2020-04-07  3:12 ` [patch 163/166] ubsan: include bug type in report header Andrew Morton
2020-04-07  3:12 ` [patch 164/166] lib/Kconfig.debug: fix a typo "capabilitiy" -> "capability" Andrew Morton
2020-04-07  3:12 ` [patch 165/166] ipc/mqueue.c: fix a brace coding style issue Andrew Morton
2020-04-07  3:12 ` [patch 166/166] ipc/shm.c: make compat_ksys_shmctl() static Andrew Morton
2020-04-07 22:12 ` + mm-gup-mark-lock-taken-only-after-a-successful-retake.patch added to -mm tree Andrew Morton
2020-04-09  0:32 ` + proc-use-a-dedicated-lock-in-struct-pid.patch " Andrew Morton
2020-04-09  0:34 ` + docs-mm-slabh-fix-a-broken-cross-reference.patch " Andrew Morton
2020-04-09  0:39 ` + mm-page_alloc-fix-kernel-doc-warning.patch " Andrew Morton
2020-04-09  0:57 ` [folded-merged] mm-hugetlb-optionally-allocate-gigantic-hugepages-using-cma-v5.patch removed from " Andrew Morton
2020-04-09  0:57 ` [folded-merged] mm-hugetlb-optionally-allocate-gigantic-hugepages-using-cma-fix.patch " Andrew Morton
2020-04-09  0:58 ` [to-be-updated] mm-hugetlb-optionally-allocate-gigantic-hugepages-using-cma.patch " Andrew Morton
2020-04-09  0:58 ` [to-be-updated] mm-hugetlb-optionally-allocate-gigantic-hugepages-using-cma-fix-2.patch " Andrew Morton
2020-04-09  0:58 ` [to-be-updated] mm-hugetlbc-fix-printk-format-warning-for-32-bit-phys_addr_t.patch " Andrew Morton
2020-04-09  0:58 ` [to-be-updated] mm-hugetlbc-fix-printk-format-warning-for-32-bit-phys_addr_t-fix.patch " Andrew Morton
2020-04-09  1:00 ` + mm-cma-numa-node-interface.patch added to " Andrew Morton
2020-04-09  1:00 ` + mm-hugetlb-optionally-allocate-gigantic-hugepages-using-cma.patch " Andrew Morton
2020-04-09  1:03 ` [nacked] list-prevent-compiler-reloads-inside-safe-list-iteration.patch removed from " Andrew Morton
2020-04-09  1:07 ` + fat-dont-allow-to-mount-if-the-fat-length-==-0.patch added to " Andrew Morton
2020-04-09  1:10 ` + mm-gup-fix-null-pointer-dereference-detected-by-coverity.patch " Andrew Morton
2020-04-09  1:11 ` + ocfs2-no-need-try-to-truncate-file-beyond-i_size.patch " Andrew Morton
2020-04-09  1:24 ` [obsolete] mm-clarify-__gfp_memalloc-usage-checkpatch-fixes.patch removed from " Andrew Morton
2020-04-09  1:25 ` + mm-clarify-__gfp_memalloc-usage-update.patch added to " Andrew Morton
2020-04-09  1:26 ` + mm-clarify-__gfp_memalloc-usage-update-checkpatch-fixes.patch " Andrew Morton
2020-04-09  1:30 ` + mm-page_alloc-make-pcpu_drain_mutex-and-pcpu_drain-static.patch " Andrew Morton
2020-04-09  4:39 ` + mm-cma-numa-node-interface-fix.patch " Andrew Morton
2020-04-10  4:53 ` + lib-math-avoid-trailing-n-hidden-in-pr_fmt.patch " Andrew Morton
2020-04-10  4:55 ` + mm-mmap-initialize-align_offset-explicitly-for-vm_unmapped_area.patch " Andrew Morton
2020-04-10 18:38 ` + mm-memory_hotplug-fix-a-typo-in-comment-recoreded-recorded.patch " Andrew Morton
2020-04-10 18:38 ` + mm-ksm-fix-a-typo-in-comment-alreaady-already.patch " Andrew Morton
2020-04-10 18:38 ` + mm-mmap-fix-a-typo-in-comment-compatbility-compatibility.patch " Andrew Morton
2020-04-10 18:38 ` + mm-hugetlb-fix-a-typo-in-comment-manitained-maintained.patch " Andrew Morton

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=20200407030757.9GtKiVpqL%akpm@linux-foundation.org \
    --to=akpm@linux-foundation.org \
    --cc=aarcange@redhat.com \
    --cc=alexander.duyck@gmail.com \
    --cc=david@redhat.com \
    --cc=hughd@google.com \
    --cc=kirill.shutemov@linux.intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=mm-commits@vger.kernel.org \
    --cc=mst@redhat.com \
    --cc=torvalds@linux-foundation.org \
    --cc=willy@infradead.org \
    --cc=yang.shi@linux.alibaba.com \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).