aboutsummaryrefslogtreecommitdiffstats
path: root/fs/proc/array.c
diff options
context:
space:
mode:
authorOmar Sandoval <[email protected]>2018-04-02 22:58:31 +0000
committerLinus Torvalds <[email protected]>2018-04-03 03:52:27 +0000
commit21035965f60b0502fc6537b232839389bb4ce664 (patch)
treeb4c969cd182d8e30dd9b0123c945f200ab50f14a /fs/proc/array.c
parentMerge tag 'arch-removal' of git://git.kernel.org/pub/scm/linux/kernel/git/arn... (diff)
downloadkernel-21035965f60b0502fc6537b232839389bb4ce664.tar.gz
kernel-21035965f60b0502fc6537b232839389bb4ce664.zip
bitmap: fix memset optimization on big-endian systems
Commit 2a98dc028f91 ("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: 2a98dc028f91 ("include/linux/bitmap.h: turn bitmap_set and bitmap_clear into memset when possible") Fixes: 2c6deb01525a ("bitmap: use memcmp optimisation in more situations") Cc: [email protected] Reported-by: "Erhard F." <[email protected]> Cc: Matthew Wilcox <[email protected]> Cc: Rasmus Villemoes <[email protected]> Cc: Andrew Morton <[email protected]> Cc: Arnd Bergmann <[email protected]> Signed-off-by: Omar Sandoval <[email protected]> Signed-off-by: Linus Torvalds <[email protected]>
Diffstat (limited to 'fs/proc/array.c')
0 files changed, 0 insertions, 0 deletions