From efff6dc53c63448254f4797379288fb1cad9d656 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Fri, 26 Jan 2024 16:39:05 -0800 Subject: [PATCH] 4.19-stable patches added patches: block-remove-special-casing-of-compound-pages.patch --- ...ove-special-casing-of-compound-pages.patch | 70 +++++++++++++++++++ queue-4.19/series | 1 + 2 files changed, 71 insertions(+) create mode 100644 queue-4.19/block-remove-special-casing-of-compound-pages.patch diff --git a/queue-4.19/block-remove-special-casing-of-compound-pages.patch b/queue-4.19/block-remove-special-casing-of-compound-pages.patch new file mode 100644 index 00000000000..4623a3233e4 --- /dev/null +++ b/queue-4.19/block-remove-special-casing-of-compound-pages.patch @@ -0,0 +1,70 @@ +From 0f2dca516541032fe47a1236c852f58edc662795 Mon Sep 17 00:00:00 2001 +From: "Matthew Wilcox (Oracle)" +Date: Mon, 14 Aug 2023 15:41:00 +0100 +Subject: block: Remove special-casing of compound pages + +From: Matthew Wilcox (Oracle) + +commit 1b151e2435fc3a9b10c8946c6aebe9f3e1938c55 upstream. + +The special casing was originally added in pre-git history; reproducing +the commit log here: + +> commit a318a92567d77 +> Author: Andrew Morton +> Date: Sun Sep 21 01:42:22 2003 -0700 +> +> [PATCH] Speed up direct-io hugetlbpage handling +> +> This patch short-circuits all the direct-io page dirtying logic for +> higher-order pages. Without this, we pointlessly bounce BIOs up to +> keventd all the time. + +In the last twenty years, compound pages have become used for more than +just hugetlb. Rewrite these functions to operate on folios instead +of pages and remove the special case for hugetlbfs; I don't think +it's needed any more (and if it is, we can put it back in as a call +to folio_test_hugetlb()). + +This was found by inspection; as far as I can tell, this bug can lead +to pages used as the destination of a direct I/O read not being marked +as dirty. If those pages are then reclaimed by the MM without being +dirtied for some other reason, they won't be written out. Then when +they're faulted back in, they will not contain the data they should. +It'll take a pretty unusual setup to produce this problem with several +races all going the wrong way. + +This problem predates the folio work; it could for example have been +triggered by mmaping a THP in tmpfs and using that as the target of an +O_DIRECT read. + +Fixes: 800d8c63b2e98 ("shmem: add huge pages support") +Cc: +Signed-off-by: Matthew Wilcox (Oracle) +Signed-off-by: Jens Axboe +Signed-off-by: Greg Kroah-Hartman +--- + block/bio.c | 5 ++--- + 1 file changed, 2 insertions(+), 3 deletions(-) + +--- a/block/bio.c ++++ b/block/bio.c +@@ -1592,8 +1592,7 @@ void bio_set_pages_dirty(struct bio *bio + int i; + + bio_for_each_segment_all(bvec, bio, i) { +- if (!PageCompound(bvec->bv_page)) +- set_page_dirty_lock(bvec->bv_page); ++ set_page_dirty_lock(bvec->bv_page); + } + } + EXPORT_SYMBOL_GPL(bio_set_pages_dirty); +@@ -1652,7 +1651,7 @@ void bio_check_pages_dirty(struct bio *b + int i; + + bio_for_each_segment_all(bvec, bio, i) { +- if (!PageDirty(bvec->bv_page) && !PageCompound(bvec->bv_page)) ++ if (!PageDirty(bvec->bv_page)) + goto defer; + } + diff --git a/queue-4.19/series b/queue-4.19/series index c40dc143f38..12074fb3a12 100644 --- a/queue-4.19/series +++ b/queue-4.19/series @@ -14,3 +14,4 @@ hwrng-core-fix-page-fault-dead-lock-on-mmap-ed-hwrng.patch rpmsg-virtio-free-driver_override-when-rpmsg_remove.patch parisc-firmware-fix-f-extend-for-pdc-addresses.patch nouveau-vmm-don-t-set-addr-on-the-fail-path-to-avoid-warning.patch +block-remove-special-casing-of-compound-pages.patch -- 2.47.3