Aneesh Kumar K.V wrote: > Also add generic_find_next_le_bit > > This gets used by the ext4 multi block allocator patches. > Looks like it's a straight forward on Little Endian Architectures. I see something for powerpc, what about other architectures? > > +unsigned long generic_find_next_le_bit(const unsigned long *addr, unsigned > + long size, unsigned long offset) > +{ Docbook style comments on the function and arguments would be nice. > + const unsigned long *p = addr + BITOP_WORD(offset); > + unsigned long result = offset & ~(BITS_PER_LONG - 1); > + unsigned long tmp; > + > + if (offset >= size) > + return size; > + size -= result; > + offset &= (BITS_PER_LONG - 1UL); > + if (offset) { > + tmp = ext2_swabp(p++); > + tmp &= (~0UL << offset); > + if (size < BITS_PER_LONG) > + goto found_first; > + if (tmp) > + goto found_middle; > + size -= BITS_PER_LONG; > + result += BITS_PER_LONG; > + } > + > + while (size & ~(BITS_PER_LONG - 1)) { > + tmp = *(p++); > + if (tmp) > + goto found_middle_swap; > + result += BITS_PER_LONG; > + size -= BITS_PER_LONG; > + } > + if (!size) > + return result; > + tmp = ext2_swabp(p); > +found_first: > + tmp &= (~0UL >> (BITS_PER_LONG - size)); > + if (tmp == 0UL) /* Are any bits set? */ > + return result + size; /* Nope. */ > +found_middle: > + return result + __ffs(tmp); > + > +found_middle_swap: > + return result + __ffs(ext2_swab(tmp)); > +} > +EXPORT_SYMBOL(generic_find_next_le_bit); > + > #endif /* __BIG_ENDIAN */ -- Warm Regards, Balbir Singh Linux Technology Center IBM, ISTL - To unsubscribe from this list: send the line "unsubscribe linux-ext4" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html