]> err.no Git - linux-2.6/blobdiff - fs/xfs/xfs_bit.h
Merge branch 'for-linus' of git://neil.brown.name/md
[linux-2.6] / fs / xfs / xfs_bit.h
index 0f9fc9a3c4153f38a552b3d781cebe8b9ba60ab6..8e0e463dae2d7c0f55268c46683110a01a42405b 100644 (file)
@@ -68,8 +68,17 @@ static inline int xfs_lowbit32(__uint32_t v)
 /* Get low bit set out of 64-bit argument, -1 if none set */
 static inline int xfs_lowbit64(__uint64_t v)
 {
-       unsigned long   t = v;
-       return (v) ? find_first_bit(&t, 64) : -1;
+       __uint32_t      w = (__uint32_t)v;
+       int             n = 0;
+
+       if (w) {        /* lower bits */
+               n = ffs(w);
+       } else {        /* upper bits */
+               w = (__uint32_t)(v >> 32);
+               if (w && (n = ffs(w)))
+               n += 32;
+       }
+       return n - 1;
 }
 
 /* Return whether bitmap is empty (1 == empty) */