invoking the error path to avoid underflow of lc->io_blocks.
Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
-Reviewed-by: Josef Bacik <jbacik@fb,com>
+Reviewed-by: Josef Bacik <jbacik@fb.com>
Signed-off-by: Mike Snitzer <snitzer@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
--- /dev/null
+From 8540571e01f973d321b0821f4f32ed6e9ae8263c Mon Sep 17 00:00:00 2001
+From: Christophe Leroy <christophe.leroy@c-s.fr>
+Date: Fri, 26 Aug 2016 16:45:13 +0200
+Subject: powerpc/32: Fix again csum_partial_copy_generic()
+
+From: Christophe Leroy <christophe.leroy@c-s.fr>
+
+commit 8540571e01f973d321b0821f4f32ed6e9ae8263c upstream.
+
+Commit 7aef4136566b0 ("powerpc32: rewrite csum_partial_copy_generic()
+based on copy_tofrom_user()") introduced a bug when destination address
+is odd and len is lower than cacheline size.
+
+In that case the resulting csum value doesn't have to be rotated one
+byte because the cache-aligned copy part is skipped so no alignment
+is performed.
+
+Fixes: 7aef4136566b0 ("powerpc32: rewrite csum_partial_copy_generic() based on copy_tofrom_user()")
+Cc: stable@vger.kernel.org # v4.6+
+Reported-by: Alessio Igor Bogani <alessio.bogani@elettra.eu>
+Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr>
+Tested-by: Alessio Igor Bogani <alessio.bogani@elettra.eu>
+Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/powerpc/lib/checksum_32.S | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+--- a/arch/powerpc/lib/checksum_32.S
++++ b/arch/powerpc/lib/checksum_32.S
+@@ -127,18 +127,19 @@ _GLOBAL(csum_partial_copy_generic)
+ stw r7,12(r1)
+ stw r8,8(r1)
+
+- rlwinm r0,r4,3,0x8
+- rlwnm r6,r6,r0,0,31 /* odd destination address: rotate one byte */
+- cmplwi cr7,r0,0 /* is destination address even ? */
+ addic r12,r6,0
+ addi r6,r4,-4
+ neg r0,r4
+ addi r4,r3,-4
+ andi. r0,r0,CACHELINE_MASK /* # bytes to start of cache line */
++ crset 4*cr7+eq
+ beq 58f
+
+ cmplw 0,r5,r0 /* is this more than total to do? */
+ blt 63f /* if not much to do */
++ rlwinm r7,r6,3,0x8
++ rlwnm r12,r12,r7,0,31 /* odd destination address: rotate one byte */
++ cmplwi cr7,r7,0 /* is destination address even ? */
+ andi. r8,r0,3 /* get it word-aligned first */
+ mtctr r8
+ beq+ 61f
--- /dev/null
+From 1bc8b816cb8058c31f61fe78442f10a43209e582 Mon Sep 17 00:00:00 2001
+From: Christophe Leroy <christophe.leroy@c-s.fr>
+Date: Tue, 2 Aug 2016 10:07:05 +0200
+Subject: powerpc/32: Fix csum_partial_copy_generic()
+
+From: Christophe Leroy <christophe.leroy@c-s.fr>
+
+commit 1bc8b816cb8058c31f61fe78442f10a43209e582 upstream.
+
+Commit 7aef4136566b0 ("powerpc32: rewrite csum_partial_copy_generic()
+based on copy_tofrom_user()") introduced a bug when destination
+address is odd and initial csum is not null
+
+In that (rare) case the initial csum value has to be rotated one byte
+as well as the resulting value is
+
+This patch also fixes related comments
+
+Fixes: 7aef4136566b0 ("powerpc32: rewrite csum_partial_copy_generic() based on copy_tofrom_user()")
+Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr>
+Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/powerpc/lib/checksum_32.S | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+--- a/arch/powerpc/lib/checksum_32.S
++++ b/arch/powerpc/lib/checksum_32.S
+@@ -127,8 +127,9 @@ _GLOBAL(csum_partial_copy_generic)
+ stw r7,12(r1)
+ stw r8,8(r1)
+
+- andi. r0,r4,1 /* is destination address even ? */
+- cmplwi cr7,r0,0
++ rlwinm r0,r4,3,0x8
++ rlwnm r6,r6,r0,0,31 /* odd destination address: rotate one byte */
++ cmplwi cr7,r0,0 /* is destination address even ? */
+ addic r12,r6,0
+ addi r6,r4,-4
+ neg r0,r4
+@@ -237,7 +238,7 @@ _GLOBAL(csum_partial_copy_generic)
+ 66: addze r3,r12
+ addi r1,r1,16
+ beqlr+ cr7
+- rlwinm r3,r3,8,0,31 /* swap bytes for odd destination */
++ rlwinm r3,r3,8,0,31 /* odd destination address: rotate one byte */
+ blr
+
+ /* read fault */
efi-libstub-introduce-exitbootservices-helper.patch
efi-libstub-use-efi_exit_boot_services-in-fdt.patch
x86-efi-use-efi_exit_boot_services.patch
+powerpc-32-fix-csum_partial_copy_generic.patch
+powerpc-32-fix-again-csum_partial_copy_generic.patch