Messages in this thread | | | Date | Fri, 21 Sep 2007 12:13:13 +0530 | From | Balbir Singh <> | Subject | Re: [PATCH] Introduce ext4_find_next_bit |
| |
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-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |