[S390] Implement ext2_find_next_bit.
Fixes this compile error: fs/ext4/mballoc.c: In function 'ext4_mb_generate_buddy': fs/ext4/mballoc.c:954: error: implicit declaration of function 'generic_find_next_le_bit' Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
This commit is contained in:
Родитель
0abbf05cdd
Коммит
67fe9251bb
|
@ -790,8 +790,6 @@ static inline int sched_find_first_bit(unsigned long *b)
|
|||
test_and_clear_bit((nr)^(__BITOPS_WORDSIZE - 8), (unsigned long *)addr)
|
||||
#define ext2_test_bit(nr, addr) \
|
||||
test_bit((nr)^(__BITOPS_WORDSIZE - 8), (unsigned long *)addr)
|
||||
#define ext2_find_next_bit(addr, size, off) \
|
||||
generic_find_next_le_bit((unsigned long *)(addr), (size), (off))
|
||||
|
||||
static inline int ext2_find_first_zero_bit(void *vaddr, unsigned int size)
|
||||
{
|
||||
|
@ -833,6 +831,47 @@ static inline int ext2_find_next_zero_bit(void *vaddr, unsigned long size,
|
|||
return offset + ext2_find_first_zero_bit(p, size);
|
||||
}
|
||||
|
||||
static inline unsigned long ext2_find_first_bit(void *vaddr,
|
||||
unsigned long size)
|
||||
{
|
||||
unsigned long bytes, bits;
|
||||
|
||||
if (!size)
|
||||
return 0;
|
||||
bytes = __ffs_word_loop(vaddr, size);
|
||||
bits = __ffs_word(bytes*8, __load_ulong_le(vaddr, bytes));
|
||||
return (bits < size) ? bits : size;
|
||||
}
|
||||
|
||||
static inline int ext2_find_next_bit(void *vaddr, unsigned long size,
|
||||
unsigned long offset)
|
||||
{
|
||||
unsigned long *addr = vaddr, *p;
|
||||
unsigned long bit, set;
|
||||
|
||||
if (offset >= size)
|
||||
return size;
|
||||
bit = offset & (__BITOPS_WORDSIZE - 1);
|
||||
offset -= bit;
|
||||
size -= offset;
|
||||
p = addr + offset / __BITOPS_WORDSIZE;
|
||||
if (bit) {
|
||||
/*
|
||||
* s390 version of ffz returns __BITOPS_WORDSIZE
|
||||
* if no zero bit is present in the word.
|
||||
*/
|
||||
set = ffs(__load_ulong_le(p, 0) >> bit) + bit;
|
||||
if (set >= size)
|
||||
return size + offset;
|
||||
if (set < __BITOPS_WORDSIZE)
|
||||
return set + offset;
|
||||
offset += __BITOPS_WORDSIZE;
|
||||
size -= __BITOPS_WORDSIZE;
|
||||
p++;
|
||||
}
|
||||
return offset + ext2_find_first_bit(p, size);
|
||||
}
|
||||
|
||||
#include <asm-generic/bitops/minix.h>
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
|
Загрузка…
Ссылка в новой задаче