From: Paul Clements Date: Tue, 3 Oct 2006 08:16:01 +0000 (-0700) Subject: [PATCH] md: use ffz instead of find_first_set to convert multiplier to shift X-Git-Tag: v2.6.19-rc1~235 X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a638b2dc951c4cafea31b34a1db1c3d94809649e;p=linux-2.6 [PATCH] md: use ffz instead of find_first_set to convert multiplier to shift find_first_set doesn't find the least-significant bit on bigendian machines, so it is really wrong to use it. ffs is closer, but takes an 'int' and we have a 'unsigned long'. So use ffz(~X) to convert a chunksize into a chunkshift. Signed-off-by: Neil Brown Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds --- diff --git a/drivers/md/bitmap.c b/drivers/md/bitmap.c index 0a44298fb3..8e67634e79 100644 --- a/drivers/md/bitmap.c +++ b/drivers/md/bitmap.c @@ -1444,8 +1444,7 @@ int bitmap_create(mddev_t *mddev) if (err) goto error; - bitmap->chunkshift = find_first_bit(&bitmap->chunksize, - sizeof(bitmap->chunksize)); + bitmap->chunkshift = ffz(~bitmap->chunksize); /* now that chunksize and chunkshift are set, we can use these macros */ chunks = (blocks + CHUNK_BLOCK_RATIO(bitmap) - 1) /