Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755628AbXIUGp2 (ORCPT ); Fri, 21 Sep 2007 02:45:28 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1753392AbXIUGpS (ORCPT ); Fri, 21 Sep 2007 02:45:18 -0400 Received: from E23SMTP04.au.ibm.com ([202.81.18.173]:38301 "EHLO e23smtp04.au.ibm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753479AbXIUGpQ (ORCPT ); Fri, 21 Sep 2007 02:45:16 -0400 Message-ID: <46F36801.3070908@linux.vnet.ibm.com> Date: Fri, 21 Sep 2007 12:13:13 +0530 From: Balbir Singh Reply-To: balbir@linux.vnet.ibm.com Organization: IBM User-Agent: Thunderbird 1.5.0.13 (X11/20070824) MIME-Version: 1.0 To: "Aneesh Kumar K.V" CC: akpm@linux-foundation.org, linux-ext4@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH] Introduce ext4_find_next_bit References: <11903523063349-git-send-email-aneesh.kumar@linux.vnet.ibm.com> In-Reply-To: <11903523063349-git-send-email-aneesh.kumar@linux.vnet.ibm.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1817 Lines: 70 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/