[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>

authored by Heiko Carstens and committed by Martin Schwidefsky 67fe9251 0abbf05c

+41 -2
+41 -2
include/asm-s390/bitops.h
··· 790 test_and_clear_bit((nr)^(__BITOPS_WORDSIZE - 8), (unsigned long *)addr) 791 #define ext2_test_bit(nr, addr) \ 792 test_bit((nr)^(__BITOPS_WORDSIZE - 8), (unsigned long *)addr) 793 - #define ext2_find_next_bit(addr, size, off) \ 794 - generic_find_next_le_bit((unsigned long *)(addr), (size), (off)) 795 796 static inline int ext2_find_first_zero_bit(void *vaddr, unsigned int size) 797 { ··· 829 p++; 830 } 831 return offset + ext2_find_first_zero_bit(p, size); 832 } 833 834 #include <asm-generic/bitops/minix.h>
··· 790 test_and_clear_bit((nr)^(__BITOPS_WORDSIZE - 8), (unsigned long *)addr) 791 #define ext2_test_bit(nr, addr) \ 792 test_bit((nr)^(__BITOPS_WORDSIZE - 8), (unsigned long *)addr) 793 794 static inline int ext2_find_first_zero_bit(void *vaddr, unsigned int size) 795 { ··· 831 p++; 832 } 833 return offset + ext2_find_first_zero_bit(p, size); 834 + } 835 + 836 + static inline unsigned long ext2_find_first_bit(void *vaddr, 837 + unsigned long size) 838 + { 839 + unsigned long bytes, bits; 840 + 841 + if (!size) 842 + return 0; 843 + bytes = __ffs_word_loop(vaddr, size); 844 + bits = __ffs_word(bytes*8, __load_ulong_le(vaddr, bytes)); 845 + return (bits < size) ? bits : size; 846 + } 847 + 848 + static inline int ext2_find_next_bit(void *vaddr, unsigned long size, 849 + unsigned long offset) 850 + { 851 + unsigned long *addr = vaddr, *p; 852 + unsigned long bit, set; 853 + 854 + if (offset >= size) 855 + return size; 856 + bit = offset & (__BITOPS_WORDSIZE - 1); 857 + offset -= bit; 858 + size -= offset; 859 + p = addr + offset / __BITOPS_WORDSIZE; 860 + if (bit) { 861 + /* 862 + * s390 version of ffz returns __BITOPS_WORDSIZE 863 + * if no zero bit is present in the word. 864 + */ 865 + set = ffs(__load_ulong_le(p, 0) >> bit) + bit; 866 + if (set >= size) 867 + return size + offset; 868 + if (set < __BITOPS_WORDSIZE) 869 + return set + offset; 870 + offset += __BITOPS_WORDSIZE; 871 + size -= __BITOPS_WORDSIZE; 872 + p++; 873 + } 874 + return offset + ext2_find_first_bit(p, size); 875 } 876 877 #include <asm-generic/bitops/minix.h>