s390/bitops: fix find_next_bit_left
The find_next_bit_left function is broken if used with an offset which is not a multiple of 64. The shift to mask the bits of a 64-bit word not to search is in the wrong direction, the result can be either a bit found smaller than the offset or failure to find a set bit. Cc: <stable@vger.kernel.org> # v3.8+ Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
This commit is contained in:
Родитель
594712276e
Коммит
3b0040a47a
|
@ -693,7 +693,7 @@ static inline int find_next_bit_left(const unsigned long *addr,
|
|||
size -= offset;
|
||||
p = addr + offset / BITS_PER_LONG;
|
||||
if (bit) {
|
||||
set = __flo_word(0, *p & (~0UL << bit));
|
||||
set = __flo_word(0, *p & (~0UL >> bit));
|
||||
if (set >= size)
|
||||
return size + offset;
|
||||
if (set < BITS_PER_LONG)
|
||||
|
|
Загрузка…
Ссылка в новой задаче