From: Greg Kroah-Hartman Date: Mon, 7 Aug 2017 21:51:05 +0000 (-0700) Subject: 4.4-stable patches X-Git-Tag: v4.12.6~44 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=1e9893f4f49537c2c7157fc22e686f4b0fb3d148;p=thirdparty%2Fkernel%2Fstable-queue.git 4.4-stable patches added patches: arm-dts-armada-38x-fix-irq-type-for-pca955.patch ext4-fix-overflow-caused-by-missing-cast-in-ext4_resize_fs.patch ext4-fix-seek_hole-seek_data-for-blocksize-pagesize.patch --- diff --git a/queue-4.4/arm-dts-armada-38x-fix-irq-type-for-pca955.patch b/queue-4.4/arm-dts-armada-38x-fix-irq-type-for-pca955.patch new file mode 100644 index 00000000000..09e07baf7fd --- /dev/null +++ b/queue-4.4/arm-dts-armada-38x-fix-irq-type-for-pca955.patch @@ -0,0 +1,48 @@ +From 8d4514173211586c6238629b1ef1e071927735f5 Mon Sep 17 00:00:00 2001 +From: Gregory CLEMENT +Date: Wed, 12 Jul 2017 13:23:11 +0200 +Subject: ARM: dts: armada-38x: Fix irq type for pca955 + +From: Gregory CLEMENT + +commit 8d4514173211586c6238629b1ef1e071927735f5 upstream. + +As written in the datasheet the PCA955 can only handle low level irq and +not edge irq. + +Without this fix the interrupt is not usable for pca955: the gpio-pca953x +driver already set the irq type as low level which is incompatible with +edge type, then the kernel prevents using the interrupt: + +"irq: type mismatch, failed to map hwirq-18 for +/soc/internal-regs/gpio@18100!" + +Fixes: 928413bd859c ("ARM: mvebu: Add Armada 388 General Purpose +Development Board support") +Signed-off-by: Gregory CLEMENT +Signed-off-by: Greg Kroah-Hartman + +--- + arch/arm/boot/dts/armada-388-gp.dts | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +--- a/arch/arm/boot/dts/armada-388-gp.dts ++++ b/arch/arm/boot/dts/armada-388-gp.dts +@@ -89,7 +89,7 @@ + pinctrl-names = "default"; + pinctrl-0 = <&pca0_pins>; + interrupt-parent = <&gpio0>; +- interrupts = <18 IRQ_TYPE_EDGE_FALLING>; ++ interrupts = <18 IRQ_TYPE_LEVEL_LOW>; + gpio-controller; + #gpio-cells = <2>; + interrupt-controller; +@@ -101,7 +101,7 @@ + compatible = "nxp,pca9555"; + pinctrl-names = "default"; + interrupt-parent = <&gpio0>; +- interrupts = <18 IRQ_TYPE_EDGE_FALLING>; ++ interrupts = <18 IRQ_TYPE_LEVEL_LOW>; + gpio-controller; + #gpio-cells = <2>; + interrupt-controller; diff --git a/queue-4.4/ext4-fix-overflow-caused-by-missing-cast-in-ext4_resize_fs.patch b/queue-4.4/ext4-fix-overflow-caused-by-missing-cast-in-ext4_resize_fs.patch new file mode 100644 index 00000000000..7ce11df58a3 --- /dev/null +++ b/queue-4.4/ext4-fix-overflow-caused-by-missing-cast-in-ext4_resize_fs.patch @@ -0,0 +1,34 @@ +From aec51758ce10a9c847a62a48a168f8c804c6e053 Mon Sep 17 00:00:00 2001 +From: Jerry Lee +Date: Sun, 6 Aug 2017 01:18:31 -0400 +Subject: ext4: fix overflow caused by missing cast in ext4_resize_fs() + +From: Jerry Lee + +commit aec51758ce10a9c847a62a48a168f8c804c6e053 upstream. + +On a 32-bit platform, the value of n_blcoks_count may be wrong during +the file system is resized to size larger than 2^32 blocks. This may +caused the superblock being corrupted with zero blocks count. + +Fixes: 1c6bd7173d66 +Signed-off-by: Jerry Lee +Signed-off-by: Theodore Ts'o +Signed-off-by: Greg Kroah-Hartman + +--- + fs/ext4/resize.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +--- a/fs/ext4/resize.c ++++ b/fs/ext4/resize.c +@@ -1926,7 +1926,8 @@ retry: + n_desc_blocks = o_desc_blocks + + le16_to_cpu(es->s_reserved_gdt_blocks); + n_group = n_desc_blocks * EXT4_DESC_PER_BLOCK(sb); +- n_blocks_count = n_group * EXT4_BLOCKS_PER_GROUP(sb); ++ n_blocks_count = (ext4_fsblk_t)n_group * ++ EXT4_BLOCKS_PER_GROUP(sb); + n_group--; /* set to last group number */ + } + diff --git a/queue-4.4/ext4-fix-seek_hole-seek_data-for-blocksize-pagesize.patch b/queue-4.4/ext4-fix-seek_hole-seek_data-for-blocksize-pagesize.patch new file mode 100644 index 00000000000..ac081f6e53a --- /dev/null +++ b/queue-4.4/ext4-fix-seek_hole-seek_data-for-blocksize-pagesize.patch @@ -0,0 +1,51 @@ +From fcf5ea10992fbac3c7473a1db33d56a139333cd1 Mon Sep 17 00:00:00 2001 +From: Jan Kara +Date: Sat, 5 Aug 2017 17:43:24 -0400 +Subject: ext4: fix SEEK_HOLE/SEEK_DATA for blocksize < pagesize + +From: Jan Kara + +commit fcf5ea10992fbac3c7473a1db33d56a139333cd1 upstream. + +ext4_find_unwritten_pgoff() does not properly handle a situation when +starting index is in the middle of a page and blocksize < pagesize. The +following command shows the bug on filesystem with 1k blocksize: + + xfs_io -f -c "falloc 0 4k" \ + -c "pwrite 1k 1k" \ + -c "pwrite 3k 1k" \ + -c "seek -a -r 0" foo + +In this example, neither lseek(fd, 1024, SEEK_HOLE) nor lseek(fd, 2048, +SEEK_DATA) will return the correct result. + +Fix the problem by neglecting buffers in a page before starting offset. + +Reported-by: Andreas Gruenbacher +Signed-off-by: Theodore Ts'o +Signed-off-by: Jan Kara +Signed-off-by: Greg Kroah-Hartman + +--- + fs/ext4/file.c | 3 +++ + 1 file changed, 3 insertions(+) + +--- a/fs/ext4/file.c ++++ b/fs/ext4/file.c +@@ -500,6 +500,8 @@ static int ext4_find_unwritten_pgoff(str + lastoff = page_offset(page); + bh = head = page_buffers(page); + do { ++ if (lastoff + bh->b_size <= startoff) ++ goto next; + if (buffer_uptodate(bh) || + buffer_unwritten(bh)) { + if (whence == SEEK_DATA) +@@ -514,6 +516,7 @@ static int ext4_find_unwritten_pgoff(str + unlock_page(page); + goto out; + } ++next: + lastoff += bh->b_size; + bh = bh->b_this_page; + } while (bh != head); diff --git a/queue-4.4/series b/queue-4.4/series index cbeb8206c72..4466ab121a8 100644 --- a/queue-4.4/series +++ b/queue-4.4/series @@ -5,3 +5,6 @@ alsa-hda-fix-speaker-output-from-vaio-vpcl14m1r.patch asoc-do-not-close-shared-backend-dailink.patch kvm-async_pf-make-rcu-irq-exit-if-not-triggered-from-idle-task.patch mm-page_alloc-remove-kernel-address-exposure-in-free_reserved_area.patch +ext4-fix-seek_hole-seek_data-for-blocksize-pagesize.patch +ext4-fix-overflow-caused-by-missing-cast-in-ext4_resize_fs.patch +arm-dts-armada-38x-fix-irq-type-for-pca955.patch