linux/include
Omar Sandoval 21035965f6 bitmap: fix memset optimization on big-endian systems
Commit 2a98dc028f ("include/linux/bitmap.h: turn bitmap_set and
bitmap_clear into memset when possible") introduced an optimization to
bitmap_{set,clear}() which uses memset() when the start and length are
constants aligned to a byte.

This is wrong on big-endian systems; our bitmaps are arrays of unsigned
long, so bit n is not at byte n / 8 in memory.  This was caught by the
Btrfs selftests, but the bitmap selftests also fail when run on a
big-endian machine.

We can still use memset if the start and length are aligned to an
unsigned long, so do that on big-endian.  The same problem applies to
the memcmp in bitmap_equal(), so fix it there, too.

Fixes: 2a98dc028f ("include/linux/bitmap.h: turn bitmap_set and bitmap_clear into memset when possible")
Fixes: 2c6deb0152 ("bitmap: use memcmp optimisation in more situations")
Cc: stable@kernel.org
Reported-by: "Erhard F." <erhard_f@mailbox.org>
Cc: Matthew Wilcox <mawilcox@microsoft.com>
Cc: Rasmus Villemoes <linux@rasmusvillemoes.dk>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Omar Sandoval <osandov@fb.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2018-04-02 20:52:27 -07:00
..
acpi ACPICA: Update version to 20180105 2018-02-06 10:32:13 +01:00
asm-generic arch: remove obsolete architecture ports 2018-04-02 20:20:12 -07:00
clocksource clocksource: Remove metag generic timer driver 2018-02-23 14:30:20 +00:00
crypto Merge branch 'linus' of git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6 2018-01-31 14:22:45 -08:00
drm Linux 4.16-rc7 2018-03-28 14:30:41 +10:00
dt-bindings MIPS changes for 4.16 2018-02-07 11:22:44 -08:00
keys
kvm KVM: arm/arm64: Reset mapped IRQs on VM reset 2018-03-14 18:29:14 +00:00
linux bitmap: fix memset optimization on big-endian systems 2018-04-02 20:52:27 -07:00
math-emu
media media: platform: remove blackfin capture driver 2018-03-26 15:56:47 +02:00
memory
misc powerpc updates for 4.16 2018-02-02 10:01:04 -08:00
net llc: properly handle dev_queue_xmit() return value 2018-03-27 11:56:00 -04:00
pcmcia
ras
rdma RDMA/ucma: Introduce safer rdma_addr_size() variants 2018-03-28 16:13:36 -06:00
scsi SCSI fixes on 20180327 2018-03-27 14:11:46 -10:00
soc ARC fixes for 4.16-rc4 2018-03-01 14:32:23 -08:00
sound Linux 4.16-rc7 2018-03-28 14:30:41 +10:00
target target core: add device action configfs files 2018-01-16 18:05:04 -08:00
trace arch: remove obsolete architecture ports 2018-04-02 20:20:12 -07:00
uapi arch: remove obsolete architecture ports 2018-04-02 20:20:12 -07:00
video fbdev changes for v4.16: 2018-02-07 13:10:43 -08:00
xen